From 2e74ba79424e786f62f1bbba7e346d3a6085552e Mon Sep 17 00:00:00 2001 From: Viacheslav Pavlov Date: Thu, 2 May 2019 17:25:41 +0300 Subject: [PATCH] Fix "Bug: Filtering Subsets in the Dashboard" --- src/subsets/actions/dashboard.ts | 4 ++-- src/subsets/ui/dashboard/DashboardPage.tsx | 25 +++++++++++++--------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/subsets/actions/dashboard.ts b/src/subsets/actions/dashboard.ts index f269b484..717311ca 100644 --- a/src/subsets/actions/dashboard.ts +++ b/src/subsets/actions/dashboard.ts @@ -48,8 +48,8 @@ export const loadSubset = (uuid: string) => (dispatch) => { return dispatch(apiLoadSubset(uuid)); }; -export const loadMoreSubsets = (paged?: Page) => (dispatch) => { - return dispatch(apiListSubsets('', Page.nextPage(paged))); +export const loadMoreSubsets = (paged: FilteredPage) => (dispatch) => { + return dispatch(apiListSubsets(paged ? paged.filterCode : '', Page.nextPage(paged))); }; export const loadMoreAccessions = (uuid: string, paged?: Page) => (dispatch, getState) => { diff --git a/src/subsets/ui/dashboard/DashboardPage.tsx b/src/subsets/ui/dashboard/DashboardPage.tsx index b1b84e47..2703e7ef 100644 --- a/src/subsets/ui/dashboard/DashboardPage.tsx +++ b/src/subsets/ui/dashboard/DashboardPage.tsx @@ -12,6 +12,7 @@ import FilteredPage from 'model/FilteredPage'; import Subset from 'model/subset/Subset'; import SubsetFilter from 'model/subset/SubsetFilter'; import {SortDirection, IPageRequest} from 'model/Page'; +import ApiCall from 'model/ApiCall'; // UI import SubsetFilters from './c/SubsetFilters'; @@ -26,7 +27,7 @@ import PaginationComponent from 'ui/common/pagination'; import PrettyFilters from 'ui/common/filter/PrettyFilters'; interface IDashboardPageProps extends React.ClassAttributes { - paged: FilteredPage; + apiCall: ApiCall>; loadMoreSubsets: (page?: FilteredPage) => void; createNewVersion: (uuid: string) => void; login: any; @@ -56,7 +57,8 @@ class DashboardPage extends React.Component { } public componentWillMount() { - const {paged, applyFilters, filterCode} = this.props; + const {apiCall, applyFilters, filterCode} = this.props; + const {data: paged} = apiCall || {data: undefined}; if (filterCode) { if (!paged || paged.filterCode !== filterCode) { applyFilters(filterCode); @@ -67,18 +69,19 @@ class DashboardPage extends React.Component { } public componentWillReceiveProps(nextProps) { - const { filterCode: prevCode, paged: prevPaged } = this.props; - const { filterCode, applyFilters, paged } = nextProps; + const { filterCode: prevFilterCode } = this.props; + const { filterCode, applyFilters, apiCall } = nextProps; - if (prevPaged && paged && _.isEqual(paged.filter, prevPaged.filter)) { - if (prevCode !== filterCode) { + if (filterCode !== prevFilterCode) { + if (apiCall && apiCall.data && !apiCall.loading && apiCall.data.filterCode !== filterCode) { applyFilters(filterCode || ''); } } } protected myApplyFilters = (filters: SubsetFilter) => { - const { paged, applyFilters } = this.props; + const { apiCall, applyFilters } = this.props; + const {data: paged} = apiCall || {data: undefined}; if (paged) { applyFilters(filters, { page: 0, direction: paged.sort[0].direction, properties: [ paged.sort[0].property ] }); } else { @@ -87,7 +90,8 @@ class DashboardPage extends React.Component { } protected onSortChange = (sortBy: string, dir: SortDirection) => { - const { paged, applyFilters, filterCode } = this.props; + const { apiCall, applyFilters, filterCode } = this.props; + const {data: paged} = apiCall || {data: undefined}; applyFilters(filterCode || paged.filterCode || '', FilteredPage.reSort(paged, sortBy, dir)); } @@ -97,7 +101,8 @@ class DashboardPage extends React.Component { } public render() { - const {paged, login: { authorities: userRoles }, loadMoreSubsets, t} = this.props; + const {apiCall, login: { authorities: userRoles }, loadMoreSubsets, t} = this.props; + const {data: paged} = apiCall || {data: undefined}; const renderSubset = (s: Subset, index: number) => { return ( { } const mapStateToProps = (state, ownProps) => ({ - paged: state.subsets.dashboard.paged ? state.subsets.dashboard.paged.data : undefined, + apiCall: state.subsets.dashboard.paged, login: state.login, filterCode: ownProps.match.params.filterCode, dataClassName: Subset.clazz, -- GitLab