Files
peko-ios/YuMi/Modules/YMMine/View/XPGameOrdersListViewController.m

355 lines
14 KiB
Objective-C

//
// XPGameOrdersListViewController.m
// YuMi
//
// Created by P on 2024/7/9.
//
#import "XPGameOrdersListViewController.h"
#import "XPGameOrdersListTableViewCell.h"
#import "XPMineUserDataPresenter.h"
#import <MJRefresh/MJRefresh.h>
#import "SessionViewController.h"
#import "XPMineGamePartnerInfoModel.h"
#import "XPMineGameMateOrderView.h"
#import "XPMineUserDataPresenter.h"
@interface XPGameOrdersListViewController () <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, assign) NSInteger page;
@property (nonatomic, assign) NSInteger type;
@property (nonatomic, strong) UIStackView *topStack;
@property (nonatomic, strong) UIButton *tab_1_button;
@property (nonatomic, strong) UIButton *tab_2_button;
@property (nonatomic, strong) UIView *underLine;
@property (nonatomic, strong) UITableView *myOrderTableView;
@property (nonatomic, strong) UITableView *acceptOrderTableView;
@property (nonatomic, strong) NSMutableArray *myOrders;
@property (nonatomic, strong) NSMutableArray *acceptOrders;
@end
@implementation XPGameOrdersListViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.type = 0;
self.title = YMLocalizedString(@"GameOrderContent_8");
self.myOrders = @[].mutableCopy;
self.acceptOrders = @[].mutableCopy;
self.tab_1_button.selected = YES;
[self setup];
[self initHeaderAndFooterRefresh:self.myOrderTableView];
[self headerRefresh];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear: animated];
}
- (__kindof id)createPresenter {
return [[XPMineUserDataPresenter alloc] init];
}
- (void)createHeaderFor:(UITableView *)tableView {
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
header.stateLabel.font = [UIFont systemFontOfSize:10.0];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0];
header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor];
tableView.mj_header = header;
}
- (void)createFooterFor:(UITableView *)tableView {
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
footer.stateLabel.font = [UIFont systemFontOfSize:10.0];
tableView.mj_footer = footer;
}
- (void)initHeaderAndFooterRefresh:(UITableView *)tableView {
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
header.stateLabel.font = [UIFont systemFontOfSize:10.0];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0];
header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor];
tableView.mj_header = header;
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
footer.stateLabel.font = [UIFont systemFontOfSize:10.0];
tableView.mj_footer = footer;
}
- (void)headerRefresh {
self.page = 1;
if (self.type == 0) {
self.myOrders = @[].mutableCopy;
} else {
self.acceptOrders = @[].mutableCopy;
}
@kWeakify(self);
[self.presenter loadGameOrderRecord:^(NSArray<XPMineGameOrderRecoredModel *> * _Nonnull orderRecords){
@kStrongify(self);
if (self.type == 0) {
[self.myOrders addObjectsFromArray:orderRecords];
[self.myOrderTableView reloadData];
[self.myOrderTableView.mj_header endRefreshing];
} else {
[self.acceptOrders addObjectsFromArray:orderRecords];
[self.acceptOrderTableView reloadData];
[self.acceptOrderTableView.mj_header endRefreshing];
}
} failure:^(NSString * _Nonnull msg) {
@kStrongify(self);
if (self.type == 0) {
[self.myOrderTableView.mj_header endRefreshing];
} else {
[self.acceptOrderTableView.mj_header endRefreshing];
}
} page:self.page type:self.type];
}
- (void)footerRefresh {
self.page++;
@kWeakify(self);
[self.presenter loadGameOrderRecord:^(NSArray<XPMineGameOrderRecoredModel *> * _Nonnull orderRecords){
@kStrongify(self)
if (self.type == 0) {
[self.myOrders addObjectsFromArray:orderRecords];
[self.myOrderTableView reloadData];
[self.myOrderTableView.mj_footer endRefreshing];
} else {
[self.acceptOrders addObjectsFromArray:orderRecords];
[self.acceptOrderTableView reloadData];
[self.acceptOrderTableView.mj_footer endRefreshing];
}
} failure:^(NSString * _Nonnull msg) {
@kStrongify(self);
if (self.type == 0) {
[self.myOrderTableView.mj_footer endRefreshing];
} else {
[self.acceptOrderTableView.mj_footer endRefreshing];
}
} page:self.page type:self.type];
}
- (void)setup {
self.view.backgroundColor = UIColorFromRGB(0xf9f9f9);
UIStackView *topStack = [[UIStackView alloc] init];
topStack.axis = UILayoutConstraintAxisHorizontal;
topStack.distribution = UIStackViewDistributionFill;
if (isMSRTL()) {
topStack.alignment = UIStackViewAlignmentTrailing;
} else {
topStack.alignment = UIStackViewAlignmentLeading;
}
topStack.spacing = 30;
[topStack addArrangedSubview:self.tab_1_button];
[topStack addArrangedSubview:self.tab_2_button];
[self.view addSubview:topStack];
self.topStack = topStack;
[topStack mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(36);
make.top.mas_equalTo(13);
make.leading.mas_equalTo(13);
}];
[topStack addSubview:self.underLine];
[self.underLine mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.tab_1_button.mas_bottom).offset(-4);
make.centerX.mas_equalTo(self.tab_1_button);
make.size.mas_equalTo(CGSizeMake(14, 3));
}];
[self.view addSubview:self.myOrderTableView];
[self.myOrderTableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.mas_equalTo(self.view);
make.top.mas_equalTo(topStack.mas_bottom);
}];
[self.view addSubview:self.acceptOrderTableView];
[self.acceptOrderTableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.trailing.bottom.mas_equalTo(self.view);
make.top.mas_equalTo(topStack.mas_bottom);
}];
}
- (IBAction)didTapButton1:(id)sender {
self.tab_1_button.selected = YES;
self.tab_2_button.selected = NO;
[self.underLine mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.tab_1_button.mas_bottom).offset(-4);
make.centerX.mas_equalTo(self.tab_1_button);
make.size.mas_equalTo(CGSizeMake(14, 3));
}];
self.myOrderTableView.hidden = NO;
self.acceptOrderTableView.hidden = YES;
self.myOrderTableView.userInteractionEnabled = YES;
self.acceptOrderTableView.userInteractionEnabled = NO;
self.type = 0;
if (self.myOrders.count == 0) {
[self headerRefresh];
}
}
- (IBAction)didTapButton2:(id)sender {
if (self.acceptOrderTableView.mj_header == nil) {
[self initHeaderAndFooterRefresh:self.acceptOrderTableView];
}
self.tab_1_button.selected = NO;
self.tab_2_button.selected = YES;
[self.underLine mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.tab_2_button.mas_bottom).offset(-4);
make.centerX.mas_equalTo(self.tab_2_button);
make.size.mas_equalTo(CGSizeMake(14, 3));
}];
self.myOrderTableView.hidden = YES;
self.acceptOrderTableView.hidden = NO;
self.myOrderTableView.userInteractionEnabled = NO;
self.acceptOrderTableView.userInteractionEnabled = YES;
self.type = 1;
if (self.acceptOrders.count == 0) {
[self headerRefresh];
}
}
#pragma mark - UITable DataSource & Delegate
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.myOrderTableView) {
return self.myOrders.count;
} else {
return self.acceptOrders.count;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 262 + 16 + 16;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
XPGameOrdersListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPGameOrdersListTableViewCell class])
forIndexPath:indexPath];
if (tableView == self.myOrderTableView) {
cell.model = [self.myOrders xpSafeObjectAtIndex:indexPath.row];
} else {
cell.model = [self.acceptOrders xpSafeObjectAtIndex:indexPath.row];
}
cell.type = self.type;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
@kWeakify(self);
cell.didTapChat = ^(XPMineGameOrderRecoredModel * _Nonnull model, NSInteger type) {
@kStrongify(self);
NSInteger uid = type == 0 ? model.toUid : model.fromUid;
NIMSession * session = [NIMSession session:@(uid).stringValue type:NIMSessionTypeP2P];
SessionViewController * sessionVC = [[SessionViewController alloc] initWithSession:session];
[self.navigationController pushViewController:sessionVC animated:YES];
};
cell.didTapPlayAgain = ^(XPMineGameOrderRecoredModel * _Nonnull record) {
@kStrongify(self);
XPMineGameMateOrderView *view = [[XPMineGameMateOrderView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, KScreenHeight - kNavigationHeight)];
[self.view addSubview:view];
view.infoModel = [XPMineGamePartnerInfoModel modelFromRecord:record];
// model 要轉換
@kWeakify(self);
@kWeakify(view);
view.payForGame = ^(NSInteger round) {
@kStrongify(self);
@kStrongify(view);
XPMineUserDataPresenter *udp = [[XPMineUserDataPresenter alloc] init];
[udp submitOrder:^{
[self showSuccessToast:YMLocalizedString(@"GameOrderContent_18")];
[view removeFromSuperview];
} failure:^(NSString * _Nonnull msg) {
[self showErrorToast:msg];
}
gameId:view.infoModel.gameId
gameUid:view.infoModel.uid
inning:round];
};
};
return cell;
}
#pragma mark -
- (UITableView *)myOrderTableView {
if (!_myOrderTableView) {
_myOrderTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_myOrderTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_myOrderTableView.backgroundColor = [UIColor clearColor];
_myOrderTableView.dataSource = self;
_myOrderTableView.delegate = self;
_myOrderTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[_myOrderTableView registerClass:[XPGameOrdersListTableViewCell class]
forCellReuseIdentifier:NSStringFromClass([XPGameOrdersListTableViewCell class])];
}
return _myOrderTableView;
}
- (UITableView *)acceptOrderTableView {
if (!_acceptOrderTableView) {
_acceptOrderTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_acceptOrderTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_acceptOrderTableView.backgroundColor = [UIColor clearColor];
_acceptOrderTableView.dataSource = self;
_acceptOrderTableView.delegate = self;
_acceptOrderTableView.userInteractionEnabled = NO;
_acceptOrderTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
[_acceptOrderTableView registerClass:[XPGameOrdersListTableViewCell class]
forCellReuseIdentifier:NSStringFromClass([XPGameOrdersListTableViewCell class])];
}
return _acceptOrderTableView;
}
- (UIButton *)tab_1_button {
if (!_tab_1_button) {
_tab_1_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_tab_1_button setTitle:YMLocalizedString(@"GameOrderContent_9") forState:UIControlStateNormal];
[_tab_1_button.titleLabel setFont:kFontBold(14)];
[_tab_1_button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
[_tab_1_button setTitleColor:[UIColor colorWithWhite:0 alpha:0.4] forState:UIControlStateNormal];
[_tab_1_button addTarget:self action:@selector(didTapButton1:) forControlEvents:UIControlEventTouchUpInside];
}
return _tab_1_button;
}
- (UIButton *)tab_2_button {
if (!_tab_2_button) {
_tab_2_button = [UIButton buttonWithType:UIButtonTypeCustom];
[_tab_2_button setTitle:YMLocalizedString(@"GameOrderContent_10") forState:UIControlStateNormal];
[_tab_2_button.titleLabel setFont:kFontBold(14)];
[_tab_2_button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
[_tab_2_button setTitleColor:[UIColor colorWithWhite:0 alpha:0.4] forState:UIControlStateNormal];
[_tab_2_button addTarget:self action:@selector(didTapButton2:) forControlEvents:UIControlEventTouchUpInside];
}
return _tab_2_button;
}
- (UIView *)underLine {
if (!_underLine) {
_underLine = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 14, 3)];
[_underLine setBackgroundColor:UIColorFromRGB(0x0fca81)];
_underLine.layer.cornerRadius = 1.5;
_underLine.layer.masksToBounds = YES;
}
return _underLine;
}
@end