use-activate-column-sort.ts1.7 KBView on GitHub /**
* useActivateColumnSortAtTop
*
* Shared by every column popover (enum, date, number, binary, task, custom
* field, action). Turning sorting on from a column header means "sort by this
* now", so the column takes priority 0 and existing sorts shift down one slot.
*
* Writes to the canvas viewConfig when `canvasId` is given, otherwise to the
* global CRMSlice columns.
*/
import { useCallback } from 'react';
import type { ConversationViewConfig } from '@/modules/canvas/types/canvas-types';
import { useCedarStore } from '@/modules/store';
import { withTopPrioritySort } from '../utils/sort-priority';
import type { ColumnSort } from '../store/crmSlice';
export function useActivateColumnSortAtTop(field: string, canvasId?: string) {
const setColumnSortAtTopPriority = useCedarStore((state) => state.setColumnSortAtTopPriority);
const updateCanvasViewConfig = useCedarStore((state) => state.updateCanvasViewConfig);
const saveCanvasViewConfig = useCedarStore((state) => state.saveCanvasViewConfig);
return useCallback(
(sort: Omit<ColumnSort, 'priority'>) => {
if (!canvasId) {
setColumnSortAtTopPriority(field, sort);
return;
}
const canvas = useCedarStore.getState().canvasesById[canvasId];
if (!canvas) return;
const viewConfig = (canvas.viewConfig ?? {}) as ConversationViewConfig;
updateCanvasViewConfig(canvasId, {
...viewConfig,
filterSortConfiguration: withTopPrioritySort(
viewConfig.filterSortConfiguration ?? {},
field,
sort,
),
});
void saveCanvasViewConfig(canvasId);
},
[canvasId, field, setColumnSortAtTopPriority, updateCanvasViewConfig, saveCanvasViewConfig],
);
}