diff --git a/BIObjCHelpers/Batch/BIBatchRequest.h b/BIObjCHelpers/Batch/BIBatchRequest.h index dd10564..5b9ea40 100644 --- a/BIObjCHelpers/Batch/BIBatchRequest.h +++ b/BIObjCHelpers/Batch/BIBatchRequest.h @@ -140,6 +140,11 @@ typedef NS_OPTIONS(NSUInteger, BIBatchRequestOptions) { */ @property (nonatomic, assign, readonly) BOOL isNoContentRequest; +/*! + * @brief True if options contain BIBatchRequestOptionReload flag. + */ +@property (nonatomic, assign, readonly) BOOL isReloadRequest; + /*! * @brief Overriden method for returning the exact class type for a copied object. */ diff --git a/BIObjCHelpers/Batch/BIBatchRequest.m b/BIObjCHelpers/Batch/BIBatchRequest.m index 2bc299d..168f507 100644 --- a/BIObjCHelpers/Batch/BIBatchRequest.m +++ b/BIObjCHelpers/Batch/BIBatchRequest.m @@ -107,6 +107,10 @@ - (BOOL)isNoContentRequest { return (self.options & BIBatchRequestOptionNoContent) > 0; } +- (BOOL)isReloadRequest { + return (self.options & BIBatchRequestOptionReload) > 0; +} + @end @implementation BIMutableBatchRequest diff --git a/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.h b/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.h index e89ac75..c8213e6 100644 --- a/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.h +++ b/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.h @@ -77,6 +77,12 @@ typedef NS_ENUM(NSUInteger, BIDatasourceCollectionViewFetchingState) { */ - (nonnull BIMutableBatchRequest *)createErrorNoContentTapToRetryBatchRequest; +/*! + * Create a mutable batch request for reloading the content. + * @return New batch. + */ +- (nonnull BIMutableBatchRequest *)createReloadRequest; + /*! * Fetches a given batch. * @param batch Given batch. @@ -147,4 +153,9 @@ typedef NS_ENUM(NSUInteger, BIDatasourceCollectionViewFetchingState) { */ - (void)triggerErrorNoContentTapToRetryRequest; +/*! + * Manually trigger a reload request. + */ +- (void)triggerReloadRequest; + @end diff --git a/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.m b/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.m index c745cc9..2441082 100644 --- a/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.m +++ b/BIObjCHelpers/Datasource/CollectionView/BIDatasourceFeedCollectionView.m @@ -113,6 +113,13 @@ - (nonnull BIMutableBatchRequest *)createErrorNoContentTapToRetryBatchRequest { return mutableBatch; } +- (nonnull BIMutableBatchRequest *)createReloadRequest { + BIMutableBatchRequest *mutableBatch = [self createBatchRequest]; + mutableBatch.options |= BIBatchRequestOptionReload; + mutableBatch.insertPosition = BIBatchInsertPositionBottom; + return mutableBatch; +} + - (void)fetchBatchRequest:(nonnull BIBatchRequest *)batchRequest { NSAssert(!self.currentBatchRequest, @"Another batch request is in progress!"); self.currentBatchRequest = batchRequest; @@ -280,6 +287,14 @@ - (void)triggerErrorNoContentTapToRetryRequest { [self fetchBatchRequest:batchRequest]; } +- (void)triggerReloadRequest { + if (self.fetchingState != BIDatasourceCollectionViewFetchingStateNone) { + return; + } + BIMutableBatchRequest *batchRequest = [self createReloadRequest]; + [self fetchBatchRequest:batchRequest]; +} + #pragma mark - Property methods - (void)setFetchingState:(BIDatasourceCollectionViewFetchingState)fetchingState { diff --git a/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.h b/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.h index 7115c30..f621814 100644 --- a/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.h +++ b/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.h @@ -96,6 +96,12 @@ typedef NS_ENUM(NSUInteger, BIDatasourceTableViewFetchingState) { */ - (nonnull BIMutableBatchRequest *)createNoContentTapToRetryBatchRequest; +/*! + * Create a mutable batch request for reloading the content. + * @return New batch. + */ +- (nonnull BIMutableBatchRequest *)createReloadRequest; + /*! * Fetches a given batch. * @param batch Given batch. @@ -171,4 +177,9 @@ typedef NS_ENUM(NSUInteger, BIDatasourceTableViewFetchingState) { */ - (void)triggerNoContentTapToRetryRequest; +/*! + * Manually trigger a reload request. + */ +- (void)triggerReloadRequest; + @end diff --git a/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.m b/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.m index 77d9eca..a072087 100644 --- a/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.m +++ b/BIObjCHelpers/Datasource/TableView/BIDatasourceFeedTableView.m @@ -118,6 +118,13 @@ - (nonnull BIMutableBatchRequest *)createNoContentTapToRetryBatchRequest { return mutableBatch; } +- (nonnull BIMutableBatchRequest *)createReloadRequest { + BIMutableBatchRequest *mutableBatch = [self createBatchRequest]; + mutableBatch.options |= BIBatchRequestOptionReload; + mutableBatch.insertPosition = BIBatchInsertPositionBottom; + return mutableBatch; +} + - (void)fetchBatchRequest:(nonnull BIBatchRequest *)batchRequest { NSAssert(!self.currentBatchRequest, @"Another batch request is in progress!"); self.currentBatchRequest = batchRequest; @@ -272,6 +279,14 @@ - (void)triggerNoContentTapToRetryRequest { [self fetchBatchRequest:batchRequest]; } +- (void)triggerReloadRequest { + if (self.fetchingState != BIDatasourceTableViewFetchingStateNone) { + return; + } + BIMutableBatchRequest *batchRequest = [self createReloadRequest]; + [self fetchBatchRequest:batchRequest]; +} + #pragma mark - Property methods - (void)setFetchingState:(BIDatasourceTableViewFetchingState)fetchingState { @@ -284,7 +299,8 @@ - (void)setFetchingState:(BIDatasourceTableViewFetchingState)fetchingState { - (BOOL)BI_areNoItemsDisplayedForBatchRequest:(nonnull BIBatchRequest *)batchRequest { BOOL noItemsDisplayed = batchRequest.isInitialRequest || batchRequest.isNoContentRequest || - batchRequest.isErrorNoContentTapToRetryRequest; + batchRequest.isErrorNoContentTapToRetryRequest || + batchRequest.isReloadRequest; return noItemsDisplayed; }