From ccb57c91a3cf3f69d33a640b1eb2ce52fd4d4e5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tha=C3=AFs?= Date: Fri, 8 Sep 2023 11:26:15 +0200 Subject: [PATCH] refactor: move view recoil states to ui/view-bar folder (#1482) * refactor: move view recoil states to ui/view-bar folder Closes #1481 * refactor: rename some view related Recoil states and selectors --- .../ui/table/components/EntityTable.tsx | 4 +- .../components/TableOptionsDropdown.tsx | 5 +- .../TableOptionsDropdownContent.tsx | 66 +++++++++--------- .../components/TableUpdateViewButtonGroup.tsx | 40 +++++------ .../components/TableViewsDropdownButton.tsx | 68 ++++++++----------- ...ate.ts => savedTableColumnsFamilyState.ts} | 4 +- ...ersistTableColumnsScopedFamilySelector.ts} | 8 +-- ...> savedTableColumnsByKeyFamilySelector.ts} | 8 +-- .../ui/table/states/tableViewsState.ts | 50 -------------- .../table-header/components/TableHeader.tsx | 30 ++++---- .../ui/table/types/TableViewsHotkeyScope.ts | 4 -- .../states/currentViewIdScopedState.ts | 6 ++ ...pedState.ts => savedFiltersFamilyState.ts} | 4 +- ...copedState.ts => savedSortsFamilyState.ts} | 4 +- ... canPersistFiltersScopedFamilySelector.ts} | 8 +-- ...=> canPersistSortsScopedFamilySelector.ts} | 8 +-- .../selectors/currentViewScopedSelector.ts | 21 ++++++ .../savedFiltersByKeyFamilySelector.ts | 15 ++++ .../savedFiltersByKeyScopedSelector.ts | 15 ---- ...or.ts => savedSortsByKeyFamilySelector.ts} | 8 +-- .../selectors/viewsByIdScopedSelector.ts | 18 +++++ .../ui/view-bar/states/viewEditModeState.ts | 9 +++ .../ui/view-bar/states/viewsScopedState.ts | 8 +++ front/src/modules/ui/view-bar/types/View.ts | 1 + .../ui/view-bar/types/ViewsHotkeyScope.ts | 4 ++ .../modules/views/hooks/useTableViewFields.ts | 32 ++++----- .../src/modules/views/hooks/useTableViews.ts | 7 -- .../src/modules/views/hooks/useViewFilters.ts | 16 +++-- front/src/modules/views/hooks/useViewSorts.ts | 16 +++-- front/src/modules/views/hooks/useViews.ts | 60 ++++++++-------- 30 files changed, 268 insertions(+), 279 deletions(-) rename front/src/modules/ui/table/states/{savedTableColumnsScopedState.ts => savedTableColumnsFamilyState.ts} (73%) rename front/src/modules/ui/table/states/selectors/{canPersistTableColumnsScopedSelector.ts => canPersistTableColumnsScopedFamilySelector.ts} (56%) rename front/src/modules/ui/table/states/selectors/{savedTableColumnsByKeyScopedSelector.ts => savedTableColumnsByKeyFamilySelector.ts} (61%) delete mode 100644 front/src/modules/ui/table/states/tableViewsState.ts delete mode 100644 front/src/modules/ui/table/types/TableViewsHotkeyScope.ts create mode 100644 front/src/modules/ui/view-bar/states/currentViewIdScopedState.ts rename front/src/modules/ui/view-bar/states/{savedFiltersScopedState.ts => savedFiltersFamilyState.ts} (56%) rename front/src/modules/ui/view-bar/states/{savedSortsScopedState.ts => savedSortsFamilyState.ts} (67%) rename front/src/modules/ui/view-bar/states/selectors/{canPersistFiltersScopedSelector.ts => canPersistFiltersScopedFamilySelector.ts} (58%) rename front/src/modules/ui/view-bar/states/selectors/{canPersistSortsScopedSelector.ts => canPersistSortsScopedFamilySelector.ts} (58%) create mode 100644 front/src/modules/ui/view-bar/states/selectors/currentViewScopedSelector.ts create mode 100644 front/src/modules/ui/view-bar/states/selectors/savedFiltersByKeyFamilySelector.ts delete mode 100644 front/src/modules/ui/view-bar/states/selectors/savedFiltersByKeyScopedSelector.ts rename front/src/modules/ui/view-bar/states/selectors/{savedSortsByKeyScopedSelector.ts => savedSortsByKeyFamilySelector.ts} (56%) create mode 100644 front/src/modules/ui/view-bar/states/selectors/viewsByIdScopedSelector.ts create mode 100644 front/src/modules/ui/view-bar/states/viewEditModeState.ts create mode 100644 front/src/modules/ui/view-bar/states/viewsScopedState.ts create mode 100644 front/src/modules/ui/view-bar/types/View.ts create mode 100644 front/src/modules/ui/view-bar/types/ViewsHotkeyScope.ts diff --git a/front/src/modules/ui/table/components/EntityTable.tsx b/front/src/modules/ui/table/components/EntityTable.tsx index 8d45ca2dd..addb6f75a 100644 --- a/front/src/modules/ui/table/components/EntityTable.tsx +++ b/front/src/modules/ui/table/components/EntityTable.tsx @@ -9,13 +9,13 @@ import { } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside'; import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper'; import { SortType } from '@/ui/view-bar/types/interface'; +import type { View } from '@/ui/view-bar/types/View'; import { EntityUpdateMutationContext } from '../contexts/EntityUpdateMutationHookContext'; import { useLeaveTableFocus } from '../hooks/useLeaveTableFocus'; import { useMapKeyboardToSoftFocus } from '../hooks/useMapKeyboardToSoftFocus'; import { useResetTableRowSelection } from '../hooks/useResetTableRowSelection'; import { useSetRowSelectedState } from '../hooks/useSetRowSelectedState'; -import type { TableView } from '../states/tableViewsState'; import { TableHeader } from '../table-header/components/TableHeader'; import { TableHotkeyScope } from '../types/TableHotkeyScope'; @@ -88,7 +88,7 @@ type OwnProps = { viewName: string; viewIcon?: React.ReactNode; availableSorts?: Array>; - onViewsChange?: (views: TableView[]) => void; + onViewsChange?: (views: View[]) => void; onViewSubmit?: () => void; onImport?: () => void; updateEntityMutation: any; diff --git a/front/src/modules/ui/table/options/components/TableOptionsDropdown.tsx b/front/src/modules/ui/table/options/components/TableOptionsDropdown.tsx index abbb8da49..2a8d5db6e 100644 --- a/front/src/modules/ui/table/options/components/TableOptionsDropdown.tsx +++ b/front/src/modules/ui/table/options/components/TableOptionsDropdown.tsx @@ -1,13 +1,12 @@ import { DropdownButton } from '@/ui/dropdown/components/DropdownButton'; import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; - -import { type TableView } from '../../states/tableViewsState'; +import type { View } from '@/ui/view-bar/types/View'; import { TableOptionsDropdownButton } from './TableOptionsDropdownButton'; import { TableOptionsDropdownContent } from './TableOptionsDropdownContent'; type TableOptionsDropdownProps = { - onViewsChange?: (views: TableView[]) => void; + onViewsChange?: (views: View[]) => void; onImport?: () => void; customHotkeyScope: HotkeyScope; }; diff --git a/front/src/modules/ui/table/options/components/TableOptionsDropdownContent.tsx b/front/src/modules/ui/table/options/components/TableOptionsDropdownContent.tsx index aa5c68dc6..e37ddba8d 100644 --- a/front/src/modules/ui/table/options/components/TableOptionsDropdownContent.tsx +++ b/front/src/modules/ui/table/options/components/TableOptionsDropdownContent.tsx @@ -15,28 +15,26 @@ import { tableColumnsScopedState } from '@/ui/table/states/tableColumnsScopedSta import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useContextScopeId } from '@/ui/utilities/recoil-scope/hooks/useContextScopeId'; import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue'; +import { currentViewIdScopedState } from '@/ui/view-bar/states/currentViewIdScopedState'; import { filtersScopedState } from '@/ui/view-bar/states/filtersScopedState'; -import { savedFiltersScopedState } from '@/ui/view-bar/states/savedFiltersScopedState'; -import { savedSortsScopedState } from '@/ui/view-bar/states/savedSortsScopedState'; +import { savedFiltersFamilyState } from '@/ui/view-bar/states/savedFiltersFamilyState'; +import { savedSortsFamilyState } from '@/ui/view-bar/states/savedSortsFamilyState'; +import { viewsByIdScopedSelector } from '@/ui/view-bar/states/selectors/viewsByIdScopedSelector'; import { sortsScopedState } from '@/ui/view-bar/states/sortsScopedState'; +import { viewEditModeState } from '@/ui/view-bar/states/viewEditModeState'; +import { viewsScopedState } from '@/ui/view-bar/states/viewsScopedState'; +import type { View } from '@/ui/view-bar/types/View'; import { TableRecoilScopeContext } from '../../states/recoil-scope-contexts/TableRecoilScopeContext'; -import { savedTableColumnsScopedState } from '../../states/savedTableColumnsScopedState'; +import { savedTableColumnsFamilyState } from '../../states/savedTableColumnsFamilyState'; import { hiddenTableColumnsScopedSelector } from '../../states/selectors/hiddenTableColumnsScopedSelector'; import { visibleTableColumnsScopedSelector } from '../../states/selectors/visibleTableColumnsScopedSelector'; -import { - currentTableViewIdState, - type TableView, - tableViewEditModeState, - tableViewsByIdState, - tableViewsState, -} from '../../states/tableViewsState'; import { TableOptionsHotkeyScope } from '../../types/TableOptionsHotkeyScope'; import { TableOptionsDropdownColumnVisibility } from './TableOptionsDropdownSection'; type TableOptionsDropdownButtonProps = { - onViewsChange?: (views: TableView[]) => void; + onViewsChange?: (views: View[]) => void; onImport?: () => void; }; @@ -58,9 +56,7 @@ export function TableOptionsDropdownContent({ const viewEditInputRef = useRef(null); - const [tableViewEditMode, setTableViewEditMode] = useRecoilState( - tableViewEditModeState, - ); + const [viewEditMode, setViewEditMode] = useRecoilState(viewEditModeState); const visibleTableColumns = useRecoilScopedValue( visibleTableColumnsScopedSelector, TableRecoilScopeContext, @@ -69,18 +65,18 @@ export function TableOptionsDropdownContent({ hiddenTableColumnsScopedSelector, TableRecoilScopeContext, ); - const tableViewsById = useRecoilScopedValue( - tableViewsByIdState, + const viewsById = useRecoilScopedValue( + viewsByIdScopedSelector, TableRecoilScopeContext, ); const resetViewEditMode = useCallback(() => { - setTableViewEditMode({ mode: undefined, viewId: undefined }); + setViewEditMode({ mode: undefined, viewId: undefined }); if (viewEditInputRef.current) { viewEditInputRef.current.value = ''; } - }, [setTableViewEditMode]); + }, [setViewEditMode]); const handleViewNameSubmit = useRecoilCallback( ({ set, snapshot }) => @@ -89,43 +85,43 @@ export function TableOptionsDropdownContent({ const name = viewEditInputRef.current?.value; - if (!tableViewEditMode.mode || !name) { + if (!viewEditMode.mode || !name) { return resetViewEditMode(); } - const views = await snapshot.getPromise(tableViewsState(tableScopeId)); + const views = await snapshot.getPromise(viewsScopedState(tableScopeId)); - if (tableViewEditMode.mode === 'create') { + if (viewEditMode.mode === 'create') { const viewToCreate = { id: v4(), name }; const nextViews = [...views, viewToCreate]; const currentColumns = await snapshot.getPromise( tableColumnsScopedState(tableScopeId), ); - set(savedTableColumnsScopedState(viewToCreate.id), currentColumns); + set(savedTableColumnsFamilyState(viewToCreate.id), currentColumns); const selectedFilters = await snapshot.getPromise( filtersScopedState(tableScopeId), ); - set(savedFiltersScopedState(viewToCreate.id), selectedFilters); + set(savedFiltersFamilyState(viewToCreate.id), selectedFilters); const selectedSorts = await snapshot.getPromise( sortsScopedState(tableScopeId), ); - set(savedSortsScopedState(viewToCreate.id), selectedSorts); + set(savedSortsFamilyState(viewToCreate.id), selectedSorts); - set(tableViewsState(tableScopeId), nextViews); + set(viewsScopedState(tableScopeId), nextViews); await Promise.resolve(onViewsChange?.(nextViews)); - set(currentTableViewIdState(tableScopeId), viewToCreate.id); + set(currentViewIdScopedState(tableScopeId), viewToCreate.id); } - if (tableViewEditMode.mode === 'edit') { + if (viewEditMode.mode === 'edit') { const nextViews = views.map((view) => - view.id === tableViewEditMode.viewId ? { ...view, name } : view, + view.id === viewEditMode.viewId ? { ...view, name } : view, ); - set(tableViewsState(tableScopeId), nextViews); + set(viewsScopedState(tableScopeId), nextViews); await Promise.resolve(onViewsChange?.(nextViews)); } @@ -135,8 +131,8 @@ export function TableOptionsDropdownContent({ onViewsChange, resetViewEditMode, tableScopeId, - tableViewEditMode.mode, - tableViewEditMode.viewId, + viewEditMode.mode, + viewEditMode.viewId, ], ); @@ -174,16 +170,16 @@ export function TableOptionsDropdownContent({ {!selectedOption && ( <> - {!!tableViewEditMode.mode ? ( + {!!viewEditMode.mode ? ( diff --git a/front/src/modules/ui/table/options/components/TableUpdateViewButtonGroup.tsx b/front/src/modules/ui/table/options/components/TableUpdateViewButtonGroup.tsx index 14b9d25fe..8030597c8 100644 --- a/front/src/modules/ui/table/options/components/TableUpdateViewButtonGroup.tsx +++ b/front/src/modules/ui/table/options/components/TableUpdateViewButtonGroup.tsx @@ -13,21 +13,19 @@ import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys'; import { useContextScopeId } from '@/ui/utilities/recoil-scope/hooks/useContextScopeId'; import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue'; import { DropdownMenuContainer } from '@/ui/view-bar/components/DropdownMenuContainer'; +import { currentViewIdScopedState } from '@/ui/view-bar/states/currentViewIdScopedState'; import { filtersScopedState } from '@/ui/view-bar/states/filtersScopedState'; -import { savedFiltersScopedState } from '@/ui/view-bar/states/savedFiltersScopedState'; -import { savedSortsScopedState } from '@/ui/view-bar/states/savedSortsScopedState'; -import { canPersistFiltersScopedSelector } from '@/ui/view-bar/states/selectors/canPersistFiltersScopedSelector'; -import { canPersistSortsScopedSelector } from '@/ui/view-bar/states/selectors/canPersistSortsScopedSelector'; +import { savedFiltersFamilyState } from '@/ui/view-bar/states/savedFiltersFamilyState'; +import { savedSortsFamilyState } from '@/ui/view-bar/states/savedSortsFamilyState'; +import { canPersistFiltersScopedFamilySelector } from '@/ui/view-bar/states/selectors/canPersistFiltersScopedFamilySelector'; +import { canPersistSortsScopedFamilySelector } from '@/ui/view-bar/states/selectors/canPersistSortsScopedFamilySelector'; import { sortsScopedState } from '@/ui/view-bar/states/sortsScopedState'; +import { viewEditModeState } from '@/ui/view-bar/states/viewEditModeState'; import { TableRecoilScopeContext } from '../../states/recoil-scope-contexts/TableRecoilScopeContext'; -import { savedTableColumnsScopedState } from '../../states/savedTableColumnsScopedState'; -import { canPersistTableColumnsScopedSelector } from '../../states/selectors/canPersistTableColumnsScopedSelector'; +import { savedTableColumnsFamilyState } from '../../states/savedTableColumnsFamilyState'; +import { canPersistTableColumnsScopedFamilySelector } from '../../states/selectors/canPersistTableColumnsScopedFamilySelector'; import { tableColumnsScopedState } from '../../states/tableColumnsScopedState'; -import { - currentTableViewIdState, - tableViewEditModeState, -} from '../../states/tableViewsState'; const StyledContainer = styled.div` display: inline-flex; @@ -48,8 +46,8 @@ export const TableUpdateViewButtonGroup = ({ const tableScopeId = useContextScopeId(TableRecoilScopeContext); - const currentTableViewId = useRecoilScopedValue( - currentTableViewIdState, + const currentViewId = useRecoilScopedValue( + currentViewIdScopedState, TableRecoilScopeContext, ); @@ -58,10 +56,10 @@ export const TableUpdateViewButtonGroup = ({ TableRecoilScopeContext, ); const setSavedColumns = useSetRecoilState( - savedTableColumnsScopedState(currentTableViewId), + savedTableColumnsFamilyState(currentViewId), ); const canPersistColumns = useRecoilValue( - canPersistTableColumnsScopedSelector([tableScopeId, currentTableViewId]), + canPersistTableColumnsScopedFamilySelector([tableScopeId, currentViewId]), ); const filters = useRecoilScopedValue( @@ -69,21 +67,19 @@ export const TableUpdateViewButtonGroup = ({ TableRecoilScopeContext, ); const setSavedFilters = useSetRecoilState( - savedFiltersScopedState(currentTableViewId), + savedFiltersFamilyState(currentViewId), ); const canPersistFilters = useRecoilValue( - canPersistFiltersScopedSelector([tableScopeId, currentTableViewId]), + canPersistFiltersScopedFamilySelector([tableScopeId, currentViewId]), ); const sorts = useRecoilScopedValue(sortsScopedState, TableRecoilScopeContext); - const setSavedSorts = useSetRecoilState( - savedSortsScopedState(currentTableViewId), - ); + const setSavedSorts = useSetRecoilState(savedSortsFamilyState(currentViewId)); const canPersistSorts = useRecoilValue( - canPersistSortsScopedSelector([tableScopeId, currentTableViewId]), + canPersistSortsScopedFamilySelector([tableScopeId, currentViewId]), ); - const setViewEditMode = useSetRecoilState(tableViewEditModeState); + const setViewEditMode = useSetRecoilState(viewEditModeState); const { openDropdownButton: openOptionsDropdownButton } = useDropdownButton({ key: 'options', @@ -135,7 +131,7 @@ export const TableUpdateViewButtonGroup = ({