补齐搜索及进房记录

This commit is contained in:
chenguilong
2022-09-06 11:41:12 +08:00
parent 9f909ffac1
commit f8887a3a2a
13 changed files with 628 additions and 2 deletions

View File

@@ -204,6 +204,8 @@
9B86D88328192DC000494FCD /* XPRoomRankEntranceView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B86D88228192DC000494FCD /* XPRoomRankEntranceView.m */; };
9B86D886281942D200494FCD /* SocialMicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B86D885281942D200494FCD /* SocialMicroView.m */; };
9B88E20C28C5EB8300D26FBA /* MessageContentRedPacketView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B88E20B28C5EB8300D26FBA /* MessageContentRedPacketView.m */; };
9B88E20F28C6305400D26FBA /* XPRoomSearchRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B88E20E28C6305400D26FBA /* XPRoomSearchRecordViewController.m */; };
9B88E21228C6365B00D26FBA /* XPHomeSearchRecordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B88E21128C6365B00D26FBA /* XPHomeSearchRecordCell.m */; };
9B8DE0E1289CF02900FB6EC2 /* XPGiftCompoundModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B8DE0E0289CF02900FB6EC2 /* XPGiftCompoundModel.m */; };
9B8DE0E4289CF7AA00FB6EC2 /* XPRoomGiftCompoundView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B8DE0E3289CF7AA00FB6EC2 /* XPRoomGiftCompoundView.m */; };
9B8DE0E8289CFE8100FB6EC2 /* compound_gift_banner.svga in Resources */ = {isa = PBXBuildFile; fileRef = 9B8DE0E7289CFE8100FB6EC2 /* compound_gift_banner.svga */; };
@@ -240,6 +242,7 @@
9BA8A48327C726E8000365A3 /* ThemeColor+SkillCard.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA8A48227C726E8000365A3 /* ThemeColor+SkillCard.m */; };
9BAA5FED277A1BBE007453F3 /* XPPrivacyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA5FEC277A1BBE007453F3 /* XPPrivacyViewController.m */; };
9BAA5FF0277A23F4007453F3 /* XPPermissionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAA5FEF277A23F4007453F3 /* XPPermissionsViewController.m */; };
9BAD41AC28C6EB13005E47B3 /* XPInRoomRecordPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BAD41AB28C6EB13005E47B3 /* XPInRoomRecordPresenter.m */; };
9BB549592782E6A30090CD26 /* XPNobleCenterPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB549582782E6A30090CD26 /* XPNobleCenterPresenter.m */; };
9BB5495C2782E79E0090CD26 /* NobleCenterModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB5495B2782E79E0090CD26 /* NobleCenterModel.m */; };
9BB5495F2782E9DB0090CD26 /* NobleAuthInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB5495E2782E9DB0090CD26 /* NobleAuthInfo.m */; };
@@ -1565,6 +1568,10 @@
9B86D885281942D200494FCD /* SocialMicroView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SocialMicroView.m; sourceTree = "<group>"; };
9B88E20A28C5EB8300D26FBA /* MessageContentRedPacketView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MessageContentRedPacketView.h; sourceTree = "<group>"; };
9B88E20B28C5EB8300D26FBA /* MessageContentRedPacketView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageContentRedPacketView.m; sourceTree = "<group>"; };
9B88E20D28C6305400D26FBA /* XPRoomSearchRecordViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomSearchRecordViewController.h; sourceTree = "<group>"; };
9B88E20E28C6305400D26FBA /* XPRoomSearchRecordViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomSearchRecordViewController.m; sourceTree = "<group>"; };
9B88E21028C6365B00D26FBA /* XPHomeSearchRecordCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPHomeSearchRecordCell.h; sourceTree = "<group>"; };
9B88E21128C6365B00D26FBA /* XPHomeSearchRecordCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPHomeSearchRecordCell.m; sourceTree = "<group>"; };
9B8DE0DF289CF02900FB6EC2 /* XPGiftCompoundModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPGiftCompoundModel.h; sourceTree = "<group>"; };
9B8DE0E0289CF02900FB6EC2 /* XPGiftCompoundModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPGiftCompoundModel.m; sourceTree = "<group>"; };
9B8DE0E2289CF7AA00FB6EC2 /* XPRoomGiftCompoundView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomGiftCompoundView.h; sourceTree = "<group>"; };
@@ -1637,6 +1644,9 @@
9BAA5FEC277A1BBE007453F3 /* XPPrivacyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPPrivacyViewController.m; sourceTree = "<group>"; };
9BAA5FEE277A23F4007453F3 /* XPPermissionsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPPermissionsViewController.h; sourceTree = "<group>"; };
9BAA5FEF277A23F4007453F3 /* XPPermissionsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPPermissionsViewController.m; sourceTree = "<group>"; };
9BAD41AA28C6EB13005E47B3 /* XPInRoomRecordPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPInRoomRecordPresenter.h; sourceTree = "<group>"; };
9BAD41AB28C6EB13005E47B3 /* XPInRoomRecordPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPInRoomRecordPresenter.m; sourceTree = "<group>"; };
9BAD41AD28C6ECBA005E47B3 /* XPInRoomRecordProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPInRoomRecordProtocol.h; sourceTree = "<group>"; };
9BB549572782E6A30090CD26 /* XPNobleCenterPresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPNobleCenterPresenter.h; sourceTree = "<group>"; };
9BB549582782E6A30090CD26 /* XPNobleCenterPresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPNobleCenterPresenter.m; sourceTree = "<group>"; };
9BB5495A2782E79E0090CD26 /* NobleCenterModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NobleCenterModel.h; sourceTree = "<group>"; };
@@ -7703,6 +7713,8 @@
E8F9168627EC927C00F10D8F /* XPHomeLittleGamePesenter.m */,
9B3353BC288156DB00AC2F24 /* XPHomeLivePresenter.h */,
9B3353BD288156DB00AC2F24 /* XPHomeLivePresenter.m */,
9BAD41AA28C6EB13005E47B3 /* XPInRoomRecordPresenter.h */,
9BAD41AB28C6EB13005E47B3 /* XPInRoomRecordPresenter.m */,
);
path = Presenter;
sourceTree = "<group>";
@@ -7717,6 +7729,7 @@
E8A6C29C27CF53E100AC7442 /* XPHomeLikeProtocol.h */,
E8F9168827EC928F00F10D8F /* XPHomeLittleGameProtocol.h */,
9B3353BF2881570400AC2F24 /* XPHomeLiveProtocol.h */,
9BAD41AD28C6ECBA005E47B3 /* XPInRoomRecordProtocol.h */,
);
path = Protocol;
sourceTree = "<group>";
@@ -7781,6 +7794,8 @@
E8C6FFDF2754EEF9004DC9F0 /* XPHomeSearchViewController.m */,
E87A27012758BC81002DDC7A /* XPRoomSearchContainerViewController.h */,
E87A27022758BC81002DDC7A /* XPRoomSearchContainerViewController.m */,
9B88E20D28C6305400D26FBA /* XPRoomSearchRecordViewController.h */,
9B88E20E28C6305400D26FBA /* XPRoomSearchRecordViewController.m */,
);
path = View;
sourceTree = "<group>";
@@ -7829,6 +7844,8 @@
E8F9168A27EC940E00F10D8F /* XPHomeLittleGameTableViewCell.m */,
9B39C88728854AB300564D17 /* XPHomeLiveRecordCell.h */,
9B39C88828854AB300564D17 /* XPHomeLiveRecordCell.m */,
9B88E21028C6365B00D26FBA /* XPHomeSearchRecordCell.h */,
9B88E21128C6365B00D26FBA /* XPHomeSearchRecordCell.m */,
);
path = Cell;
sourceTree = "<group>";
@@ -9040,6 +9057,7 @@
189DD53426DE255300AB55B1 /* TabbarViewController.m in Sources */,
E81EF6E4279AB92E00FF3EDE /* LittleGameInfoModel.m in Sources */,
E87A26F927587C62002DDC7A /* XPHomeContainerPresenter.m in Sources */,
9B88E21228C6365B00D26FBA /* XPHomeSearchRecordCell.m in Sources */,
18EE401A2754BA9F00A452BF /* NIMMessageMaker.m in Sources */,
E8EEB91D26FC9D58007C6EBA /* XPMineUserInfoDateView.m in Sources */,
E82325E9274CE56A003A3332 /* XPShareItem.m in Sources */,
@@ -9295,6 +9313,7 @@
9B734F79288A9C4B00CBDAA9 /* XPMineGameTableViewCell.m in Sources */,
E8664EDC27E43632000171BA /* XPRoomPKEmptyTableViewCell.m in Sources */,
E880B3A9278BD82300A83B0D /* AcrossRoomPKInfoModel.m in Sources */,
9B88E20F28C6305400D26FBA /* XPRoomSearchRecordViewController.m in Sources */,
E82D5C7A276B25D100858D6D /* SpriteSheetImageManager.m in Sources */,
E874B88B27215EAF003954B9 /* MicroQueueModel.m in Sources */,
9B92A3662798132600AD168F /* XPSkillCardTypeView.m in Sources */,
@@ -9621,6 +9640,7 @@
E8232600274E48EA003A3332 /* XPUserCardItemCollectionViewCell.m in Sources */,
E88B5CC526FB42B000DA9178 /* XPMineUserInfoHeaderView.m in Sources */,
E8EEB8FB26FC2874007C6EBA /* XPMineUserInfoTableViewCell.m in Sources */,
9BAD41AC28C6EB13005E47B3 /* XPInRoomRecordPresenter.m in Sources */,
E8AC721626F46B06007D6E91 /* XPMineSettingTableViewCell.m in Sources */,
18EE3FDF2750C1F700A452BF /* SessionListCell.m in Sources */,
9BB549622782EA1D0090CD26 /* NobleInfo.m in Sources */,

View File

@@ -0,0 +1,22 @@
//
// XPInRoomRecordPresenter.h
// xplan-ios
//
// Created by GreenLand on 2022/9/6.
//
#import "BaseMvpPresenter.h"
NS_ASSUME_NONNULL_BEGIN
@interface XPInRoomRecordPresenter : BaseMvpPresenter
///获取进房记录
- (void)getInRoomRecordList;
/// 清除进房记录
- (void)cleanInRoomRecord;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,34 @@
//
// XPInRoomRecordPresenter.m
// xplan-ios
//
// Created by GreenLand on 2022/9/6.
//
#import "XPInRoomRecordPresenter.h"
#import "Api+Mine.h"
#import "AccountInfoStorage.h"
#import "XPMineFootPrintModel.h"
#import "XPInRoomRecordProtocol.h"
@implementation XPInRoomRecordPresenter
///
- (void)getInRoomRecordList {
NSString *uid = [AccountInfoStorage instance].getUid;
[Api requestFootPrint:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
NSArray *array = [XPMineFootPrintModel modelsWithArray:data.data];
[[self getView] getInRoomRecordSuccess:array];
} fail:^(NSInteger code, NSString * _Nullable msg) {
}] uid:uid page:@"1" pageSize:@"100"];
}
///
- (void)cleanInRoomRecord {
NSString *uid = [AccountInfoStorage instance].getUid;
[Api requestCleanFootPrint:[self createHttpCompletion:^(BaseModel * _Nonnull data) {
[[self getView] cleanInRoomRecordSuccess];
}] uid:uid];
}
@end

View File

@@ -0,0 +1,30 @@
//
// XPInRoomRecordProtocol.h
// xplan-ios
//
// Created by GreenLand on 2022/9/6.
//
#import <Foundation/Foundation.h>
@class XPMineFootPrintModel;
@protocol XPInRoomRecordProtocol <NSObject>
///获取个播浏览记录成功
//- (void)getOnceLookRoomListSuccess:(HomeLiveLookRecordModel *)data;
//
/////获取所有的tag成功
//- (void)getHomeLiveTagListSuccess:(NSArray<HomeLiveTagModel *> *)array;
/////获取所有的tag失败
//- (void)getHomeLiveTagListFail:(NSArray<HomeLiveTagModel *> *)array;
//
/////获取个播房成功
//- (void)getAnchorRoomListSuccess:(NSArray<HomeRecommendRoomModel *> *)array;
///获取进房记录成功
- (void)getInRoomRecordSuccess:(NSArray<XPMineFootPrintModel *> *)array;
///清除进房记录成功
- (void)cleanInRoomRecordSuccess;
@end

View File

@@ -8,9 +8,12 @@
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@class HomeLiveRoomModel;
@class HomeLiveRoomModel, XPMineFootPrintModel;
@interface XPHomeAttentionCollectionViewCell : UICollectionViewCell
@property (nonatomic,strong) HomeLiveRoomModel *liveRoom;
@property (nonatomic, strong) XPMineFootPrintModel *recordRoom;
@end
NS_ASSUME_NONNULL_END

View File

@@ -14,6 +14,7 @@
#import "UIImage+Utils.h"
///Model
#import "HomeLiveRoomModel.h"
#import "XPMineFootPrintModel.h"
@interface XPHomeAttentionCollectionViewCell ()
///
@@ -99,6 +100,15 @@
}
}
- (void)setRecordRoom:(XPMineFootPrintModel *)recordRoom {
_recordRoom = recordRoom;
if (recordRoom) {
self.avatarImageView.imageUrl = recordRoom.avatar;
self.nickLabel.text = recordRoom.title;
self.noteBgImageView.hidden = YES;
}
}
- (NetImageView *)avatarImageView {
if (!_avatarImageView) {
NetImageConfig * config = [[NetImageConfig alloc]init];

View File

@@ -0,0 +1,18 @@
//
// XPHomeSearchRecordCell.h
// xplan-ios
//
// Created by GreenLand on 2022/9/5.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface XPHomeSearchRecordCell : UICollectionViewCell
@property (nonatomic, copy) NSString *recordString;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,51 @@
//
// XPHomeSearchRecordCell.m
// xplan-ios
//
// Created by GreenLand on 2022/9/5.
//
#import "XPHomeSearchRecordCell.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
@interface XPHomeSearchRecordCell ()
///
@property (nonatomic,strong) UILabel *titleLabel;
@end
@implementation XPHomeSearchRecordCell
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor whiteColor];
self.layer.cornerRadius = 13;
self.layer.masksToBounds = YES;
[self addSubview:self.titleLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self);
}];
}
return self;
}
- (void)setRecordString:(NSString *)recordString {
self.titleLabel.text = recordString;
}
#pragma mark - Getter & Setter
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.textColor = [ThemeColor mainTextColor];
_titleLabel.font = [UIFont systemFontOfSize:12];
}
return _titleLabel;
}
@end

View File

@@ -14,6 +14,9 @@ NS_ASSUME_NONNULL_BEGIN
- (void)xPHomeSearchNavView:(XPHomeSearchNavView *)view didClickBack:(UIButton *)sender;
///点击了搜索
- (void)xPHomeSearchNavView:(XPHomeSearchNavView *)view didClickSearch:(UIButton *)sender;
///搜索框没有文字
- (void)xPHomeSearchNavViewClearTextField:(XPHomeSearchNavView *)view;
@end
@interface XPHomeSearchNavView : UIView

View File

@@ -30,12 +30,18 @@
@implementation XPHomeSearchNavView
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initSubViews];
[self initSubViewConstraints];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChange:) name:UITextFieldTextDidChangeNotification object:nil];
}
return self;
}
@@ -96,6 +102,16 @@
}
}
- (void)textFieldChange:(NSNotification *)notification {
UITextField *textField = (UITextField *)notification.object;
NSString *searchStr = textField.text;
if (searchStr.length == 0) {
if (self.delegate && [self.delegate respondsToSelector:@selector(xPHomeSearchNavViewClearTextField:)]) {
[self.delegate xPHomeSearchNavViewClearTextField:self];
}
}
}
#pragma mark - Getters And Setters
- (UIButton *)backButton {

View File

@@ -16,11 +16,12 @@
#import "XPHomeSearchNavView.h"
///View
#import "XPHomeSearchViewController.h"
#import "XPRoomSearchRecordViewController.h"
UIKIT_EXTERN NSString *kFromSearchToHomeViewKey;
UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
@interface XPRoomSearchContainerViewController ()<JXCategoryViewDelegate, JXCategoryListContainerViewDelegate, XPHomeSearchNavViewDelegate,UITextFieldDelegate>
@interface XPRoomSearchContainerViewController ()<JXCategoryViewDelegate, JXCategoryListContainerViewDelegate, XPHomeSearchNavViewDelegate,UITextFieldDelegate, XPRoomSearchRecordViewControllerDelegate>
///
@property (nonatomic, strong) NSArray<NSString *> *titles;
///
@@ -33,6 +34,9 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
@property (nonatomic,strong) XPHomeSearchViewController *roomVC;
///
@property (nonatomic,strong) XPHomeSearchViewController *userVC;
///
@property (nonatomic, strong) XPRoomSearchRecordViewController *recordVc;
@end
@implementation XPRoomSearchContainerViewController
@@ -53,6 +57,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
[self.view addSubview:self.searchView];
[self.view addSubview:self.titleView];
[self.view addSubview:self.contentView];
[self.view addSubview:self.recordVc.view];
[self addChildViewController:self.recordVc];
}
- (void)initSubViewConstraints {
@@ -71,6 +77,11 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
make.top.mas_equalTo(self.titleView.mas_bottom).offset(10);
make.left.right.bottom.mas_equalTo(self.view);
}];
[self.recordVc.view mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.top.mas_equalTo(self.searchView.mas_bottom);
make.bottom.mas_equalTo(self.view);
}];
}
- (void)searchVCLoadData:(NSString *)text {
@@ -95,6 +106,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
if (textField.text.length > 0) {
[textField resignFirstResponder];
[self searchVCLoadData:textField.text];
[self.recordVc storeSearchRecord:textField.text];
self.recordVc.view.hidden = YES;
} else {
[self showErrorToast:@"请输入需要搜索的内容"];
}
@@ -106,6 +119,8 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
if (view.searchTextField.text.length > 0) {
[view.searchTextField resignFirstResponder];
[self searchVCLoadData:view.searchTextField.text];
[self.recordVc storeSearchRecord:view.searchTextField.text];
self.recordVc.view.hidden = YES;
} else {
[self showErrorToast:@"请输入需要搜索的内容"];
}
@@ -122,6 +137,24 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
[self dismissViewControllerAnimated:YES completion:nil];
}
///
- (void)xPHomeSearchNavViewClearTextField:(XPHomeSearchNavView *)view {
self.recordVc.view.hidden = NO;
[self.recordVc updateSearchRecord];
}
#pragma mark - XPRoomSearchRecordViewControllerDelegate
- (void)xPRoomSearchRecordViewControllerSearchWithWord:(NSString *)word {
if (word.length > 0) {
self.searchView.searchTextField.text = word;
[self searchVCLoadData:word];
[self.recordVc storeSearchRecord:word];
self.recordVc.view.hidden = YES;
} else {
[self showErrorToast:@"请输入需要搜索的内容"];
}
}
#pragma mark - Getters And Setters
- (JXCategoryTitleView *)titleView {
if (!_titleView) {
@@ -184,4 +217,12 @@ UIKIT_EXTERN NSString *kTabShowAnchorCardKey;
return _userVC;
}
- (XPRoomSearchRecordViewController *)recordVc {
if (!_recordVc) {
_recordVc = [[XPRoomSearchRecordViewController alloc] init];
_recordVc.delegate = self;
}
return _recordVc;
}
@end

View File

@@ -0,0 +1,29 @@
//
// XPRoomSearchRecordViewController.h
// xplan-ios
//
// Created by GreenLand on 2022/9/5.
//
#import "MvpViewController.h"
NS_ASSUME_NONNULL_BEGIN
@protocol XPRoomSearchRecordViewControllerDelegate <NSObject>
- (void)xPRoomSearchRecordViewControllerSearchWithWord:(NSString *)word;
@end
@interface XPRoomSearchRecordViewController : MvpViewController
@property (nonatomic, weak) id<XPRoomSearchRecordViewControllerDelegate> delegate;
/// 保存搜索记录
- (void)storeSearchRecord:(NSString *)record;
///更新搜索记录
- (void)updateSearchRecord;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,349 @@
//
// XPRoomSearchRecordViewController.m
// xplan-ios
//
// Created by GreenLand on 2022/9/5.
//
#import "XPRoomSearchRecordViewController.h"
///Third
#import <Masonry/Masonry.h>
///Tool
#import "ThemeColor.h"
#import "AccountInfoStorage.h"
#import "TTPopup.h"
///View
#import "XPHomeAttentionCollectionViewCell.h"
#import "XPHomeSearchRecordCell.h"
#import "XPRoomViewController.h"
#import "XPMineUserInfoViewController.h"
///P
#import "XPInRoomRecordPresenter.h"
#import "XPInRoomRecordProtocol.h"
///Model
#import "XPMineFootPrintModel.h"
NSString * const XPConstSearchRecordStoreKey = @"XPConstSearchRecordStoreKey";
@interface XPRoomSearchRecordViewController ()<UICollectionViewDelegate, UICollectionViewDataSource, XPInRoomRecordProtocol>
@property (nonatomic, strong) UILabel *recordTitle;
@property (nonatomic, strong) UIButton *clearRecordBtn;
@property (nonatomic, strong) UILabel *roomTitle;
@property (nonatomic, strong) UIButton *clearRoomBtn;
///
@property (nonatomic, strong) UICollectionView *searchCollectionView;
@property (nonatomic, strong) UICollectionView *roomCollectionView;
///
@property (nonatomic, strong) NSMutableArray *searchList;
@property (nonatomic, strong) NSMutableArray *inRoomList;
@end
@implementation XPRoomSearchRecordViewController
- (XPInRoomRecordPresenter *)createPresenter {
return [[XPInRoomRecordPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self initSubViews];
[self initSubViewConstraints];
[self initSearchRecordData];
[self.presenter getInRoomRecordList];
}
- (void)initSearchRecordData {
[self.searchList removeAllObjects];
NSArray *array = [self searchRecordList];
[self.searchList addObjectsFromArray:array];
[self.searchCollectionView reloadData];
if (array.count) {
} else {
}
}
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
#pragma mark - Private Method
- (void)initSubViews {
[self.view addSubview:self.recordTitle];
[self.view addSubview:self.clearRecordBtn];
[self.view addSubview:self.searchCollectionView];
[self.view addSubview:self.roomTitle];
[self.view addSubview:self.clearRoomBtn];
[self.view addSubview:self.roomCollectionView];
}
- (void)initSubViewConstraints {
[self.recordTitle mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(16);
make.top.mas_equalTo(10);
make.height.mas_equalTo(20);
}];
[self.clearRecordBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(-16);
make.centerY.mas_equalTo(self.recordTitle);
make.width.height.mas_equalTo(30);
}];
[self.searchCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.height.mas_equalTo(26);
make.top.mas_equalTo(self.recordTitle.mas_bottom).mas_offset(8);
}];
[self.roomTitle mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(16);
make.top.mas_equalTo(self.searchCollectionView.mas_bottom).mas_offset(24);
make.height.mas_equalTo(20);
}];
[self.clearRoomBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.mas_equalTo(-16);
make.centerY.mas_equalTo(self.roomTitle);
make.width.height.mas_equalTo(30);
}];
[self.roomCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.right.mas_equalTo(self.view);
make.height.mas_equalTo(75);
make.top.mas_equalTo(self.roomTitle.mas_bottom).mas_offset(8);
}];
}
#pragma mark - UICollectionViewDelegate
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
if (collectionView == self.searchCollectionView) {
return self.searchList.count;
} else {
return self.inRoomList.count;
}
}
- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (collectionView == self.searchCollectionView) {
XPHomeSearchRecordCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPHomeSearchRecordCell class]) forIndexPath:indexPath];
cell.recordString = [self.searchList objectAtIndex:indexPath.row];
return cell;
} else {
XPHomeAttentionCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([XPHomeAttentionCollectionViewCell class]) forIndexPath:indexPath];
cell.recordRoom = self.inRoomList[indexPath.row];
return cell;
}
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if (collectionView == self.searchCollectionView) {
NSString *str = self.searchList[indexPath.row];
if (self.delegate && [self.delegate respondsToSelector:@selector(xPRoomSearchRecordViewControllerSearchWithWord:)]) {
[self.delegate xPRoomSearchRecordViewControllerSearchWithWord:str];
}
} else {
XPMineFootPrintModel *resultModel = self.inRoomList[indexPath.row];
[self dismissViewControllerAnimated:YES completion:nil];
if (resultModel.valid) {
[XPRoomViewController openRoom:resultModel.roomUid viewController:self.presentingViewController];
} else {
XPMineUserInfoViewController * infoVC = [[XPMineUserInfoViewController alloc] init];
infoVC.uid = resultModel.roomUid.integerValue;
[(UINavigationController *)self.presentingViewController pushViewController:infoVC animated:YES];
}
}
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if (collectionView == self.searchCollectionView) {
NSString *str = [self.searchList objectAtIndex:indexPath.row];
CGFloat width = [str boundingRectWithSize:CGSizeMake(200, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]} context:nil].size.width;
return CGSizeMake(width + 26, 26);
} else {
return CGSizeMake(56, 75);
}
}
#pragma mark -
///
- (NSArray *)searchRecordList {
NSString *key = [NSString stringWithFormat:@"%@_%@", XPConstSearchRecordStoreKey, [AccountInfoStorage instance].getUid];
NSArray *list = [[NSUserDefaults standardUserDefaults] objectForKey:key];
return list;
}
///
- (void)storeSearchRecord:(NSString *)record {
if (record == nil || record.length <= 0) {
return;
}
NSString *key = [NSString stringWithFormat:@"%@_%@", XPConstSearchRecordStoreKey, [AccountInfoStorage instance].getUid];
NSMutableArray *list = [[[NSUserDefaults standardUserDefaults] objectForKey:key] mutableCopy];
if (list == nil) {
list = [[NSMutableArray alloc] init];
}
[list removeObject:record];//
[list insertObject:record atIndex:0];//
if (list.count > 20) {//20
[list removeLastObject];
}
[[NSUserDefaults standardUserDefaults] setValue:list forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
///
- (void)cleanSearchRecord {
NSString *key = [NSString stringWithFormat:@"%@_%@", XPConstSearchRecordStoreKey, [AccountInfoStorage instance].getUid];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)updateSearchRecord {
[self initSearchRecordData];
}
///
- (void)getInRoomRecordSuccess:(NSArray<XPMineFootPrintModel *> *)array {
[self.inRoomList removeAllObjects];
[self.inRoomList addObjectsFromArray:array];
[self.roomCollectionView reloadData];
}
///
- (void)cleanInRoomRecordSuccess {
[self.inRoomList removeAllObjects];
[self.roomCollectionView reloadData];
}
#pragma mark - action
- (void)onClearSearchRecordClick:(UIButton *)sender {
TTAlertConfig * config = [[TTAlertConfig alloc] init];
config.confirmButtonConfig.title = @"清空";
config.cancelButtonConfig.title = @"手滑了";
config.message = @"确定清空搜索记录吗?";
[TTPopup alertWithConfig:config confirmHandler:^{
[self cleanSearchRecord];
[self.searchList removeAllObjects];
[self.searchCollectionView reloadData];
} cancelHandler:^{
}];
}
- (void)onClearRoomClick:(UIButton *)sender {
TTAlertConfig * config = [[TTAlertConfig alloc] init];
config.confirmButtonConfig.title = @"清空";
config.cancelButtonConfig.title = @"手滑了";
config.message = @"确定清空进房记录吗?";
[TTPopup alertWithConfig:config confirmHandler:^{
[self.presenter cleanInRoomRecord];
} cancelHandler:^{
}];
}
#pragma mark - getter
- (UILabel *)recordTitle {
if (!_recordTitle) {
UILabel *label = [[UILabel alloc] init];
label.text = @"搜索记录";
label.font = [UIFont systemFontOfSize:14 weight:UIFontWeightBold];
label.textColor = [ThemeColor mainTextColor];
_recordTitle = label;
}
return _recordTitle;
}
- (UILabel *)roomTitle {
if (!_roomTitle) {
UILabel *label = [[UILabel alloc] init];
label.text = @"进房记录";
label.font = [UIFont systemFontOfSize:14 weight:UIFontWeightBold];
label.textColor = [ThemeColor mainTextColor];
_roomTitle = label;
}
return _roomTitle;
}
- (UIButton *)clearRecordBtn {
if (!_clearRecordBtn) {
UIButton *btn = [[UIButton alloc] init];
[btn setImage:[UIImage imageNamed:@"sessionList_clear"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(onClearSearchRecordClick:) forControlEvents:UIControlEventTouchUpInside];
_clearRecordBtn = btn;
}
return _clearRecordBtn;
}
- (UIButton *)clearRoomBtn {
if (!_clearRoomBtn) {
UIButton *btn = [[UIButton alloc] init];
[btn setImage:[UIImage imageNamed:@"sessionList_clear"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(onClearRoomClick:) forControlEvents:UIControlEventTouchUpInside];
_clearRoomBtn = btn;
}
return _clearRoomBtn;
}
- (UICollectionView *)searchCollectionView{
if (!_searchCollectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumLineSpacing = 8;
layout.minimumInteritemSpacing = 8;
layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15);
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
_searchCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_searchCollectionView.showsHorizontalScrollIndicator = NO;
_searchCollectionView.dataSource = self;
_searchCollectionView.delegate = self;
_searchCollectionView.backgroundColor = [UIColor clearColor];
[_searchCollectionView registerClass:[XPHomeSearchRecordCell class] forCellWithReuseIdentifier:NSStringFromClass([XPHomeSearchRecordCell class])];
}
return _searchCollectionView;
}
- (UICollectionView *)roomCollectionView{
if (!_roomCollectionView) {
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.minimumLineSpacing = 8;
layout.minimumInteritemSpacing = 0;
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
layout.sectionInset = UIEdgeInsetsMake(0, 15, 0, 15);
_roomCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
_roomCollectionView.showsHorizontalScrollIndicator = NO;
_roomCollectionView.dataSource = self;
_roomCollectionView.delegate = self;
_roomCollectionView.backgroundColor = [UIColor clearColor];
[_roomCollectionView registerClass:[XPHomeAttentionCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([XPHomeAttentionCollectionViewCell class])];
}
return _roomCollectionView;
}
- (NSMutableArray *)searchList {
if (!_searchList) {
_searchList = [NSMutableArray array];
}
return _searchList;
}
- (NSMutableArray *)inRoomList {
if (!_inRoomList) {
_inRoomList = [NSMutableArray array];
}
return _inRoomList;
}
@end