ICRStoreListViewController.m 6.51 KB
//
//  ICRStoreListViewController.m
//  XFFruit
//
//  Created by Xummer on 4/6/15.
//  Copyright (c) 2015 Xummer. All rights reserved.
//

#import "ICRStoreListViewController.h"

#import "ICRStore.h"
#import "IBTUISearchBar.h"

static NSString *StoreListCellIdentifier = @"StoreListCell";

@interface ICRStoreListViewController ()
<
    UITableViewDataSource,
    UITableViewDelegate,
    UISearchBarDelegate,
    UISearchDisplayDelegate
>
@property (strong, nonatomic) IBTTableView *m_tableView;
@property (strong, nonatomic) NSArray *m_arrStores;
@property (strong, nonatomic) IBTUISearchBar *m_searchBar;
@property (strong, nonatomic) NSArray *m_searchResult;
@property (strong, nonatomic) UISearchDisplayController *m_searchDisplayCtr;

@end

@implementation ICRStoreListViewController

#pragma mark - Life Cycle
- (instancetype)initWithBHaveToChooseOne:(BOOL)bHaveTo {
    self = [super init];
    if (!self) {
        return nil;
    }
    
    self.bNotAutoAddCancelButton = bHaveTo;
    
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
        
    [self initTableView];
    [self fetchStoreList];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    [self doHTTPGetStoreList];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Private Method
- (void)initTableView {
    
    CGRect frame = self.view.bounds;
    frame.size.height = IBT_SEARCH_BAR_HEIGHT;
    self.m_searchBar = [[IBTUISearchBar alloc] initWithFrame:frame];
    _m_searchBar.placeholder = [IBTCommon localizableString:@"Search"];
    _m_searchBar.sbDelegate = self;
    
    self.m_tableView =
    [[IBTTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    [_m_tableView autoresizingWithStrechFullSize];
    
    [_m_tableView registerClass:[IBTTableViewCell class]
         forCellReuseIdentifier:StoreListCellIdentifier];
    _m_tableView.tableHeaderView = _m_searchBar;
    
    _m_tableView.dataSource = self;
    _m_tableView.delegate = self;
    
    [self.view addSubview:_m_tableView];
    
    self.m_searchDisplayCtr = [[UISearchDisplayController alloc] initWithSearchBar:_m_searchBar contentsController:self];
    _m_searchDisplayCtr.delegate = self;
    _m_searchDisplayCtr.searchResultsDataSource = self;
    _m_searchDisplayCtr.searchResultsDelegate = self;
    
}

- (void)configureTableView:(UITableView *)tableView {
    
    tableView.frame = self.view.frame;
    
    [tableView registerClass:[IBTTableViewCell class]
      forCellReuseIdentifier:StoreListCellIdentifier];
    
    UIView *tableFooterViewToGetRidOfBlankRows = [[UIView alloc] initWithFrame:CGRectZero];
    tableFooterViewToGetRidOfBlankRows.backgroundColor = [UIColor clearColor];
    tableView.tableFooterView = tableFooterViewToGetRidOfBlankRows;
}

- (void)doHTTPGetStoreList {
    
    __weak typeof(self)weakSelf = self;
    void(^succ)(id) = ^(id data) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        [strongSelf fetchStoreList];
    };
    
    void(^fail)(id) = ^(id data) {
        [IBTLoadingView showTips:data];
    };
    
    ICRHTTPController *httpCtrl = [ICRHTTPController sharedController];
    [httpCtrl doGetStoreListFromUpdateTime:0 position:0 size:20
                                   success:succ
                                   failure:fail];
}

- (void)fetchStoreList {
    ICRDatabaseFetchBlock fetchBlk = ^FMResultSet *(FMDatabase *db) {
        NSString * sql = [NSString stringWithFormat:@"SELECT * FROM %@ ORDER BY %@", [ICRStore TableName], @"uuid"];
        return [db executeQuery:sql];
    };
    
    __weak typeof(self)weakSelf = self;
    ICRDatabaseFetchResultsBlock fetchResultsBlk = ^(NSArray *fetchedObjects) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        strongSelf.m_arrStores = fetchedObjects;
        [strongSelf.m_tableView reloadData];
    };
    
    ICRDataBaseController *dbCtrl = [ICRDataBaseController sharedController];
    [dbCtrl runFetchForClass:[ICRStore class]
                  fetchBlock:fetchBlk
           fetchResultsBlock:fetchResultsBlk];
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.m_tableView) {
        return [_m_arrStores count];
    } else {
        return [_m_searchResult count];
    }
    
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell =
    [tableView dequeueReusableCellWithIdentifier:StoreListCellIdentifier
                                    forIndexPath:indexPath];
    
    [self configureCell:cell forRowAtIndexPath:indexPath inTableview:tableView];
    
    return cell;
}

- (void)configureCell:(UITableViewCell *)cell
    forRowAtIndexPath:(NSIndexPath *)indexPath
          inTableview:(UITableView *)tableView
{
    ICRStore *store = nil;
    if (tableView == _m_tableView) {
        store = _m_arrStores[ indexPath.row ];
    } else {
        store = _m_searchResult[ indexPath.row ];
    }
    
    cell.textLabel.textAlignment = NSTextAlignmentCenter;
    cell.textLabel.textColor = [UIColor grayColor];
    cell.textLabel.text = store.name;
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    
    if ([_m_delegate respondsToSelector:@selector(storeListViewCtrl:didSelectedStore:)]) {
        if (tableView == _m_tableView) {
            [_m_delegate storeListViewCtrl:self didSelectedStore:_m_arrStores[ indexPath.row ]];
        } else
        {
            [_m_delegate storeListViewCtrl:self didSelectedStore:_m_searchResult[ indexPath.row ]];
        }
        
    }
    else {
        [self disMissSelf];
    }
}

#pragma mark UISearchDisplayDelegate

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView {
    [self configureTableView:tableView];
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", searchString];
    self.m_searchResult = [self.m_arrStores filteredArrayUsingPredicate:predicate];
    
    return YES;
}

@end