355 lines
14 KiB
Objective-C
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
|