From b5124c2bdc1e9ad079f2bc1e99050e7f5227d349 Mon Sep 17 00:00:00 2001 From: Shifa Zhang Date: Fri, 14 Jul 2023 16:59:57 -0400 Subject: [PATCH 1/2] Support per project family-table-filters. --- ui/pages/Project/reducers.js | 11 ++++++++++- ui/pages/Project/selectors.js | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ui/pages/Project/reducers.js b/ui/pages/Project/reducers.js index b00c493ee3..fc1d7a7e7f 100644 --- a/ui/pages/Project/reducers.js +++ b/ui/pages/Project/reducers.js @@ -10,6 +10,7 @@ import { import { SHOW_ALL, SORT_BY_FAMILY_GUID, NOTE_TAG_NAME } from 'shared/utils/constants' import { HttpRequestHelper } from 'shared/utils/httpRequestHelper' import { SHOW_IN_REVIEW, SORT_BY_FAMILY_NAME, SORT_BY_FAMILY_ADDED_DATE, CASE_REVIEW_TABLE_NAME } from './constants' +import { getFamiliesTableFiltersByProject } from './selectors' // action creators and reducers in one file as suggested by https://github.com/erikras/ducks-modular-redux const RECEIVE_DATA = 'RECEIVE_DATA' @@ -370,7 +371,15 @@ export const updateFamiliesTable = (updates, tableName) => ( { type: tableName === CASE_REVIEW_TABLE_NAME ? UPDATE_CASE_REVIEW_TABLE_STATE : UPDATE_FAMILY_TABLE_STATE, updates } ) -export const updateFamiliesTableFilters = updates => ({ type: UPDATE_FAMILY_TABLE_FILTER_STATE, updates }) +export const updateFamiliesTableFilters = updates => (dispatch, getState) => { + const state = getState() + const { currentProjectGuid } = state + const familyTableFilters = (getFamiliesTableFiltersByProject(state) || {})[currentProjectGuid] || {} + dispatch({ + type: UPDATE_FAMILY_TABLE_FILTER_STATE, + updates: { [currentProjectGuid]: { ...familyTableFilters, ...updates } }, + }) +} export const updateSavedVariantTable = updates => ({ type: UPDATE_SAVED_VARIANT_TABLE_STATE, updates }) diff --git a/ui/pages/Project/selectors.js b/ui/pages/Project/selectors.js index 3417593ba0..84e5667126 100644 --- a/ui/pages/Project/selectors.js +++ b/ui/pages/Project/selectors.js @@ -63,7 +63,7 @@ export const getMmeSubmissionsLoading = state => state.mmeSubmissionsLoading.isL export const getSamplesLoading = state => state.samplesLoading.isLoading export const getTagTypesLoading = state => state.tagTypesLoading.isLoading export const getFamilyTagTypeCounts = state => state.familyTagTypeCounts -export const getFamiliesTableFilters = state => state.familyTableFilterState +export const getFamiliesTableFiltersByProject = state => state.familyTableFilterState export const getCurrentProject = createSelector( getProjectsByGuid, getProjectGuid, (projectsByGuid, currentProjectGuid) => projectsByGuid[currentProjectGuid], @@ -432,6 +432,12 @@ const analysedByFilters = (filter, analysedByOptions) => { return filterGroups } +export const getFamiliesTableFilters = createSelector( + getFamiliesTableFiltersByProject, + getCurrentProject, + (familyTableFiltersByProject, project) => (familyTableFiltersByProject || {})[project.projectGuid], +) + const getFamiliesFilterFunc = createSelector( (state, ownProps) => ownProps?.tableName === CASE_REVIEW_TABLE_NAME, state => state.caseReviewTableState.familiesFilter, From 8cbc8aa9fb8edd0d94f30c6373a3322e6d73aab3 Mon Sep 17 00:00:00 2001 From: Shifa Zhang Date: Tue, 18 Jul 2023 12:06:22 -0400 Subject: [PATCH 2/2] Update per reviews. --- ui/pages/Project/reducers.js | 12 +++--------- ui/pages/Project/selectors.js | 6 +++--- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/ui/pages/Project/reducers.js b/ui/pages/Project/reducers.js index fc1d7a7e7f..3a7ba7689a 100644 --- a/ui/pages/Project/reducers.js +++ b/ui/pages/Project/reducers.js @@ -10,7 +10,6 @@ import { import { SHOW_ALL, SORT_BY_FAMILY_GUID, NOTE_TAG_NAME } from 'shared/utils/constants' import { HttpRequestHelper } from 'shared/utils/httpRequestHelper' import { SHOW_IN_REVIEW, SORT_BY_FAMILY_NAME, SORT_BY_FAMILY_ADDED_DATE, CASE_REVIEW_TABLE_NAME } from './constants' -import { getFamiliesTableFiltersByProject } from './selectors' // action creators and reducers in one file as suggested by https://github.com/erikras/ducks-modular-redux const RECEIVE_DATA = 'RECEIVE_DATA' @@ -372,13 +371,8 @@ export const updateFamiliesTable = (updates, tableName) => ( ) export const updateFamiliesTableFilters = updates => (dispatch, getState) => { - const state = getState() - const { currentProjectGuid } = state - const familyTableFilters = (getFamiliesTableFiltersByProject(state) || {})[currentProjectGuid] || {} - dispatch({ - type: UPDATE_FAMILY_TABLE_FILTER_STATE, - updates: { [currentProjectGuid]: { ...familyTableFilters, ...updates } }, - }) + const { currentProjectGuid } = getState() + dispatch({ type: UPDATE_FAMILY_TABLE_FILTER_STATE, updatesById: { [currentProjectGuid]: updates } }) } export const updateSavedVariantTable = updates => ({ type: UPDATE_SAVED_VARIANT_TABLE_STATE, updates }) @@ -405,7 +399,7 @@ export const reducers = { familiesSortOrder: SORT_BY_FAMILY_NAME, familiesSortDirection: 1, }, false), - familyTableFilterState: createSingleObjectReducer(UPDATE_FAMILY_TABLE_FILTER_STATE), + familyTableFilterState: createObjectsByIdReducer(UPDATE_FAMILY_TABLE_FILTER_STATE), caseReviewTableState: createSingleObjectReducer(UPDATE_CASE_REVIEW_TABLE_STATE, { familiesFilter: SHOW_IN_REVIEW, familiesSortOrder: SORT_BY_FAMILY_ADDED_DATE, diff --git a/ui/pages/Project/selectors.js b/ui/pages/Project/selectors.js index 84e5667126..50a103c0fa 100644 --- a/ui/pages/Project/selectors.js +++ b/ui/pages/Project/selectors.js @@ -63,7 +63,7 @@ export const getMmeSubmissionsLoading = state => state.mmeSubmissionsLoading.isL export const getSamplesLoading = state => state.samplesLoading.isLoading export const getTagTypesLoading = state => state.tagTypesLoading.isLoading export const getFamilyTagTypeCounts = state => state.familyTagTypeCounts -export const getFamiliesTableFiltersByProject = state => state.familyTableFilterState +const getFamiliesTableFiltersByProject = state => state.familyTableFilterState export const getCurrentProject = createSelector( getProjectsByGuid, getProjectGuid, (projectsByGuid, currentProjectGuid) => projectsByGuid[currentProjectGuid], @@ -434,8 +434,8 @@ const analysedByFilters = (filter, analysedByOptions) => { export const getFamiliesTableFilters = createSelector( getFamiliesTableFiltersByProject, - getCurrentProject, - (familyTableFiltersByProject, project) => (familyTableFiltersByProject || {})[project.projectGuid], + getProjectGuid, + (familyTableFiltersByProject, projectGuid) => (familyTableFiltersByProject || {})[projectGuid], ) const getFamiliesFilterFunc = createSelector(