Add initialization of new record sorts state and added remove record sorts util (#10358)
This PR adds the same synchronization utils and hooks from view to record sorts, as we did with view and record filters. The goal is to apply what's in the view sorts only when needed. Also added tests for those utils and hooks. We also add useRemoveRecordSorts.
This commit is contained in:
@ -6,7 +6,7 @@ import { useCloseSortDropdown } from '@/object-record/object-sort-dropdown/hooks
|
||||
import { useResetRecordSortDropdownSearchInput } from '@/object-record/object-sort-dropdown/hooks/useResetRecordSortDropdownSearchInput';
|
||||
import { useResetSortDropdown } from '@/object-record/object-sort-dropdown/hooks/useResetSortDropdown';
|
||||
import { useToggleSortDropdown } from '@/object-record/object-sort-dropdown/hooks/useToggleSortDropdown';
|
||||
import { isRecordSortDirectionMenuUnfoldedComponentState } from '@/object-record/object-sort-dropdown/states/isRecordSortDirectionMenuUnfoldedComponentState';
|
||||
import { isRecordSortDirectionDropdownMenuUnfoldedComponentState } from '@/object-record/object-sort-dropdown/states/isRecordSortDirectionDropdownMenuUnfoldedComponentState';
|
||||
import { objectSortDropdownSearchInputComponentState } from '@/object-record/object-sort-dropdown/states/objectSortDropdownSearchInputComponentState';
|
||||
import { onSortSelectComponentState } from '@/object-record/object-sort-dropdown/states/onSortSelectScopedState';
|
||||
import { selectedRecordSortDirectionComponentState } from '@/object-record/object-sort-dropdown/states/selectedRecordSortDirectionComponentState';
|
||||
@ -84,7 +84,7 @@ export const ObjectSortDropdownButton = ({
|
||||
);
|
||||
|
||||
const isRecordSortDirectionMenuUnfolded = useRecoilComponentValueV2(
|
||||
isRecordSortDirectionMenuUnfoldedComponentState,
|
||||
isRecordSortDirectionDropdownMenuUnfoldedComponentState,
|
||||
);
|
||||
|
||||
const { resetSortDropdown } = useResetSortDropdown();
|
||||
@ -168,7 +168,7 @@ export const ObjectSortDropdownButton = ({
|
||||
useRecoilComponentStateV2(selectedRecordSortDirectionComponentState);
|
||||
|
||||
const setIsRecordSortDirectionMenuUnfolded = useSetRecoilComponentStateV2(
|
||||
isRecordSortDirectionMenuUnfoldedComponentState,
|
||||
isRecordSortDirectionDropdownMenuUnfoldedComponentState,
|
||||
);
|
||||
|
||||
const handleSortDirectionClick = (sortDirection: RecordSortDirection) => {
|
||||
|
||||
@ -1,18 +1,19 @@
|
||||
import { isRecordSortDirectionMenuUnfoldedComponentState } from '@/object-record/object-sort-dropdown/states/isRecordSortDirectionMenuUnfoldedComponentState';
|
||||
import { isRecordSortDirectionDropdownMenuUnfoldedComponentState } from '@/object-record/object-sort-dropdown/states/isRecordSortDirectionDropdownMenuUnfoldedComponentState';
|
||||
import { selectedRecordSortDirectionComponentState } from '@/object-record/object-sort-dropdown/states/selectedRecordSortDirectionComponentState';
|
||||
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
||||
|
||||
export const useResetSortDropdown = () => {
|
||||
const setIsRecordSortDirectionMenuUnfolded = useSetRecoilComponentStateV2(
|
||||
isRecordSortDirectionMenuUnfoldedComponentState,
|
||||
);
|
||||
const setIsRecordSortDirectionDropdownMenuUnfolded =
|
||||
useSetRecoilComponentStateV2(
|
||||
isRecordSortDirectionDropdownMenuUnfoldedComponentState,
|
||||
);
|
||||
|
||||
const setSelectedRecordSortDirection = useSetRecoilComponentStateV2(
|
||||
selectedRecordSortDirectionComponentState,
|
||||
);
|
||||
|
||||
const resetSortDropdown = () => {
|
||||
setIsRecordSortDirectionMenuUnfolded(false);
|
||||
setIsRecordSortDirectionDropdownMenuUnfolded(false);
|
||||
setSelectedRecordSortDirection('asc');
|
||||
};
|
||||
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { ObjectSortDropdownComponentInstanceContext } from '@/object-record/object-sort-dropdown/states/context/ObjectSortDropdownComponentInstanceContext';
|
||||
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
|
||||
|
||||
export const isRecordSortDirectionMenuUnfoldedComponentState =
|
||||
export const isRecordSortDirectionDropdownMenuUnfoldedComponentState =
|
||||
createComponentStateV2<boolean>({
|
||||
key: 'isRecordSortDirectionMenuUnfoldedComponentState',
|
||||
key: 'isRecordSortDirectionDropdownMenuUnfoldedComponentState',
|
||||
defaultValue: false,
|
||||
componentInstanceContext: ObjectSortDropdownComponentInstanceContext,
|
||||
});
|
||||
@ -1,5 +1,6 @@
|
||||
import { useRecoilState } from 'recoil';
|
||||
|
||||
import { useRemoveRecordSort } from '@/object-record/record-sort/hooks/useRemoveRecordSort';
|
||||
import { isRemoveSortingModalOpenState } from '@/object-record/record-table/states/isRemoveSortingModalOpenState';
|
||||
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
|
||||
import { useDeleteCombinedViewSorts } from '@/views/hooks/useDeleteCombinedViewSorts';
|
||||
@ -22,9 +23,12 @@ export const RecordIndexRemoveSortingModal = ({
|
||||
|
||||
const { deleteCombinedViewSort } = useDeleteCombinedViewSorts(recordIndexId);
|
||||
|
||||
const { removeRecordSort } = useRemoveRecordSort();
|
||||
|
||||
const handleRemoveClick = () => {
|
||||
fieldMetadataIds.forEach((id) => {
|
||||
deleteCombinedViewSort(id);
|
||||
removeRecordSort(id);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@ export const useHandleToggleColumnSort = ({
|
||||
const { upsertRecordSort } = useUpsertRecordSort();
|
||||
|
||||
const handleToggleColumnSort = useCallback(
|
||||
(fieldMetadataId: string) => {
|
||||
async (fieldMetadataId: string) => {
|
||||
const correspondingColumnDefinition = columnDefinitions.find(
|
||||
(columnDefinition) =>
|
||||
columnDefinition.fieldMetadataId === fieldMetadataId,
|
||||
@ -48,8 +48,9 @@ export const useHandleToggleColumnSort = ({
|
||||
direction: 'asc',
|
||||
};
|
||||
|
||||
upsertCombinedViewSort(newSort);
|
||||
upsertRecordSort(newSort);
|
||||
|
||||
await upsertCombinedViewSort(newSort);
|
||||
},
|
||||
[columnDefinitions, upsertCombinedViewSort, upsertRecordSort],
|
||||
);
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
import { currentRecordSortsComponentState } from '@/object-record/record-sort/states/currentRecordSortsComponentState';
|
||||
import { useRecoilComponentCallbackStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentCallbackStateV2';
|
||||
import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue';
|
||||
import { useRecoilCallback } from 'recoil';
|
||||
|
||||
export const useRemoveRecordSort = () => {
|
||||
const currentRecordSortsCallbackState = useRecoilComponentCallbackStateV2(
|
||||
currentRecordSortsComponentState,
|
||||
);
|
||||
|
||||
const removeRecordSort = useRecoilCallback(
|
||||
({ set, snapshot }) =>
|
||||
(fieldMetadataId: string) => {
|
||||
const currentRecordSorts = getSnapshotValue(
|
||||
snapshot,
|
||||
currentRecordSortsCallbackState,
|
||||
);
|
||||
|
||||
const hasFoundRecordSortInCurrentRecordSorts = currentRecordSorts.some(
|
||||
(existingSort) => existingSort.fieldMetadataId === fieldMetadataId,
|
||||
);
|
||||
|
||||
if (hasFoundRecordSortInCurrentRecordSorts) {
|
||||
set(currentRecordSortsCallbackState, (currentRecordSorts) => {
|
||||
const newCurrentRecordSorts = [...currentRecordSorts];
|
||||
|
||||
const indexOfSortToRemove = newCurrentRecordSorts.findIndex(
|
||||
(existingSort) =>
|
||||
existingSort.fieldMetadataId === fieldMetadataId,
|
||||
);
|
||||
|
||||
if (indexOfSortToRemove < 0) {
|
||||
return newCurrentRecordSorts;
|
||||
}
|
||||
|
||||
newCurrentRecordSorts.splice(indexOfSortToRemove, 1);
|
||||
|
||||
return newCurrentRecordSorts;
|
||||
});
|
||||
}
|
||||
},
|
||||
[currentRecordSortsCallbackState],
|
||||
);
|
||||
|
||||
return {
|
||||
removeRecordSort,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user