HomeMemberAddViewController.m 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. //
  2. // HomeMemberAddViewController.m
  3. // kneet
  4. //
  5. // Created by Jason Lee on 6/15/15.
  6. // Copyright (c) 2015 ntels. All rights reserved.
  7. //
  8. #import "RequestHandler.h"
  9. #import "LoginModel.h"
  10. #import "CustomButton.h"
  11. #import "CustomLabel.h"
  12. #import "DatePickerButton.h"
  13. #import "HomeMemberAddViewController.h"
  14. #import "CustomTextField.h"
  15. #import "MemberAddPopupView.h"
  16. #import "ValidateUtil.h"
  17. #import "HomeMemberViewController.h"
  18. @implementation MemberInputTableViewCell
  19. - (void)awakeFromNib {
  20. self.backgroundColor = [UIColor clearColor];
  21. self.selectionStyle = UITableViewCellSelectionStyleNone;
  22. }
  23. @end
  24. @implementation MemberAddedTableViewCell
  25. - (void)awakeFromNib {
  26. self.backgroundColor = [UIColor clearColor];
  27. self.selectionStyle = UITableViewCellSelectionStyleNone;
  28. }
  29. @end
  30. @implementation MemberQuizTableViewCell
  31. - (void)awakeFromNib {
  32. self.backgroundColor = [UIColor clearColor];
  33. self.selectionStyle = UITableViewCellSelectionStyleNone;
  34. _lblQuizInfo.text = NSLocalizedString(@"우리만 아는 특별한 날을 물어보세요\n진짜 멤버라면 바로 맞출 수 있을거예요", @"우리만 아는 특별한 날을 물어보세요\n진짜 멤버라면 바로 맞출 수 있을거예요");
  35. _btnDate.date = [NSDate date];
  36. _btnDate.placeHolder = _btnDate.dateString;
  37. _txtQuestion.keyboardType = UIKeyboardTypeDefault;
  38. _txtQuestion.returnKeyType = UIReturnKeyDone;
  39. _txtQuestion.placeholder = NSLocalizedString(@"ex) 우리집 강아지 뽀삐의 생일은?", @"ex) 우리집 강아지 뽀삐의 생일은?");
  40. _txtQuestion.customTextFieldSuperview = CustomTextFieldSuperviewIsContentView;
  41. }
  42. @end
  43. @interface HomeMemberAddViewController () <UITableViewDataSource, UITableViewDelegate> {
  44. NSMutableArray<HomeMemberModel> *_inviteList;
  45. CustomTextField *_txtQuestion, *_txtTempEmail;
  46. DatePickerButton *_btnDate;
  47. }
  48. @end
  49. #pragma mark - Class Definition
  50. @implementation HomeMemberAddViewController
  51. - (void)viewDidLoad {
  52. [super viewDidLoad];
  53. _inviteList = (NSMutableArray<HomeMemberModel> *)[[NSMutableArray alloc] init];
  54. [self initUI];
  55. [self prepareViewDidLoad];
  56. }
  57. - (void)viewWillAppear:(BOOL)animated {
  58. [super viewWillAppear:animated];
  59. }
  60. - (void)initUI {
  61. //set tableview option
  62. _tableView.delegate = self;
  63. _tableView.dataSource = self;
  64. _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  65. _tableView.backgroundColor = [UIColor clearColor];
  66. _tableView.tableFooterView = [[UIView alloc] init]; //this call table events;
  67. //Localization
  68. [_btnSend setTitle:NSLocalizedString(@"초대", @"초대") forState:UIControlStateNormal];
  69. [_btnCancel setTitle:NSLocalizedString(@"취소", @"취소") forState:UIControlStateNormal];
  70. }
  71. - (void)prepareViewDidLoad {
  72. }
  73. #pragma mark - Main Logic
  74. - (void)requestInviteMembers {
  75. NSMutableArray *invitations = [[NSMutableArray alloc] init];
  76. for (HomeMemberModel *member in _inviteList) {
  77. [invitations addObject:[member toDictionary]];
  78. }
  79. //parameters
  80. NSDictionary *parameter = @{@"authorization_question": _txtQuestion.text,
  81. @"authorization_reply": _btnDate.dateString,
  82. @"invitation_list": invitations}; //TODO : dictionary;
  83. NSString *path = [NSString stringWithFormat:API_POST_HOMEGROUP_MEMBER_INVITE];
  84. [[RequestHandler handler] sendAsyncPostRequestAPIPath:path parameters:parameter modelClass:[JDJSONModel class] completion:^(id responseObject) {
  85. [[JDFacade facade] toast:NSLocalizedString(@"초대장을 보냈습니다", @"초대장을 보냈습니다")];
  86. HomeMemberViewController *vc = [[JDFacade facade] viewControllerOnNaviationController:[HomeMemberViewController class]];
  87. if (vc) {
  88. [vc refreshHomeMemberList];
  89. }
  90. [self.navigationController popViewControllerAnimated:YES];
  91. } failure:^(id errorObject) {
  92. JDErrorModel *error = (JDErrorModel *)errorObject;
  93. [[JDFacade facade] alert:error.errorMessage];
  94. }];
  95. }
  96. #pragma mark - UITableView DataSource & Delegate
  97. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
  98. return 3;
  99. }
  100. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  101. NSInteger count = 1;
  102. if (section == 0) {
  103. count = _inviteList.count;
  104. }
  105. return count;
  106. }
  107. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  108. CGFloat height = 50;
  109. if (indexPath.section == 2) {
  110. height = 200;
  111. }
  112. return height;
  113. }
  114. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  115. UITableViewCell *cell = nil;
  116. if (indexPath.section == 0) {//added
  117. MemberAddedTableViewCell *tcell = [tableView dequeueReusableCellWithIdentifier:@"AddedCellIdentifier"];
  118. HomeMemberModel *member = _inviteList[indexPath.row];
  119. tcell.txtEmail.text = member.targetEmail;
  120. tcell.btnRemove.value = member;
  121. if (![tcell.btnRemove actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]) {
  122. [tcell.btnRemove addTarget:self action:@selector(btnRemoveTouched:) forControlEvents:UIControlEventTouchUpInside];
  123. }
  124. cell = tcell;
  125. } else if (indexPath.section == 1) {//input
  126. MemberInputTableViewCell *tcell = [tableView dequeueReusableCellWithIdentifier:@"InputCellIdentifier"];
  127. _txtTempEmail = !_txtTempEmail ? tcell.txtEmail : _txtTempEmail;
  128. if (![tcell.btnAdd actionsForTarget:self forControlEvent:UIControlEventTouchUpInside]) {
  129. [tcell.btnAdd addTarget:self action:@selector(btnAddTouched:) forControlEvents:UIControlEventTouchUpInside];
  130. }
  131. cell = tcell;
  132. } else if (indexPath.section == 2) {//invite list
  133. MemberQuizTableViewCell *tcell = [tableView dequeueReusableCellWithIdentifier:@"QuizCellIdentifier"];
  134. //init controls link
  135. _txtQuestion = !_txtQuestion ? tcell.txtQuestion : _txtQuestion;
  136. _btnDate = !_btnDate ? tcell.btnDate : _btnDate;
  137. // if (_txtQuestion.customTextFieldSuperview != CustomTextFieldSuperviewIsScrollView) {
  138. // _txtQuestion.customTextFieldSuperview = CustomTextFieldSuperviewIsScrollView;
  139. // }
  140. cell = tcell;
  141. }
  142. return cell;
  143. }
  144. - (void)btnAddTouched:(id)sender {
  145. if (![ValidateUtil validateTextfiled:_txtTempEmail type:ValidateTypeEmail title:NSLocalizedString(@"이메일", @"이메일")]) {
  146. return;
  147. }
  148. HomeMemberModel *member = [[HomeMemberModel alloc] init];
  149. member.targetEmail = _txtTempEmail.text;
  150. member.gradeCode = KNEET_MEMBER_SIMPLE;
  151. //api - 12.5
  152. NSDictionary *parameter = @{@"target_email" : _txtTempEmail.text};
  153. JDErrorModel *result = [[RequestHandler handler] sendSyncPostRequestAPIPath:API_POST_HOMEGROUP_MEMBER_VALIDATE parameters:parameter modelClass:[JDErrorModel class] showLoadingView:@(YES)];
  154. if (!result) {
  155. [_inviteList addObject:member];
  156. _txtTempEmail.text = ksEmptyString;
  157. [_tableView reloadData];
  158. } else {
  159. [[JDFacade facade] alert:result.errorMessage];
  160. }
  161. }
  162. - (void)btnRemoveTouched:(id)sender {
  163. CustomButton *btnRemove = (CustomButton *)sender;
  164. HomeMemberModel *member = btnRemove.value;
  165. [_inviteList removeObject:member];
  166. [_tableView reloadData];
  167. }
  168. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  169. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  170. }
  171. - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
  172. // Remove seperator inset
  173. if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
  174. [cell setSeparatorInset:UIEdgeInsetsZero];
  175. }
  176. // Prevent the cell from inheriting the Table View's margin settings
  177. if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
  178. [cell setPreservesSuperviewLayoutMargins:NO];
  179. }
  180. // Explictly set your cell's layout margins
  181. if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
  182. [cell setLayoutMargins:UIEdgeInsetsZero];
  183. }
  184. }
  185. #pragma mark - UI Events
  186. - (void)btnDeleteTouched:(id)sender {
  187. CustomButton *btn = (CustomButton *)sender;
  188. HomeMemberModel *member = btn.value;
  189. [_inviteList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  190. [_inviteList removeObject:member];
  191. }];
  192. [_tableView reloadData];
  193. }
  194. - (void)btnInviteTouched:(id)sender {
  195. //pop
  196. if (_inviteList.count == 10) {
  197. [[JDFacade facade] alert:NSLocalizedString(@"한 번에 10명까지만\n초대할 수 있습니다", @"한 번에 10명까지만\n초대할 수 있습니다")];
  198. return;
  199. }
  200. MemberAddPopupView *popup = [[MemberAddPopupView alloc] initFromNib];
  201. popup.inviteList = _inviteList;
  202. [popup showWithCompletion:^(CustomAlertView *alertView, NSInteger buttonIndex) {
  203. if (buttonIndex == 0) {//OK
  204. [_inviteList addObject:[popup newMember]];
  205. [_tableView reloadData];
  206. }
  207. }];
  208. }
  209. - (IBAction)btnSendTouched:(id)sender {
  210. //1.validate
  211. if (_inviteList.count <= 0) {
  212. [[JDFacade facade] alert:NSLocalizedString(@"초대할 이메일을 입력하세요", @"초대할 이메일을 입력하세요")];
  213. return;
  214. }
  215. if (![ValidateUtil validateTextfiled:_txtQuestion type:ValidateTypeNull title:NSLocalizedString(@"퀴즈", @"퀴즈")]) {
  216. return;
  217. }
  218. [self requestInviteMembers];
  219. }
  220. - (IBAction)btnCancelTouched:(id)sender {
  221. [self dismissViewControllerAnimated:YES completion:nil];
  222. }
  223. #pragma mark - MemoryWarning
  224. - (void)didReceiveMemoryWarning
  225. {
  226. [super didReceiveMemoryWarning];
  227. // Dispose of any resources that can be recreated.
  228. }
  229. @end