* perf: apply record optimistic effects with cache.modify on mutation Closes #3509 * refactor: return early when created records do not match filter * fix: fix id generation on record creation * fix: comment filtering behavior on record creation * Fixed typing error * refactor: review - use ?? * refactor: review - add variables in readFieldValueToSort * docs: review - add comments for variables.first in triggerUpdateRecordOptimisticEffect * refactor: review - add intermediary variable for 'not' filter in useMultiObjectSearchMatchesSearchFilterAndToSelectQuery * refactor: review - add filter utils * fix: fix tests --------- Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
import { useRecoilCallback } from 'recoil';
|
|
|
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
|
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
|
|
import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord';
|
|
import { BoardColumnDefinition } from '@/object-record/record-board/types/BoardColumnDefinition';
|
|
import { currentPipelineState } from '@/pipeline/states/currentPipelineState';
|
|
import { PipelineStep } from '@/pipeline/types/PipelineStep';
|
|
|
|
export const usePipelineSteps = () => {
|
|
const { createOneRecord: createOnePipelineStep } =
|
|
useCreateOneRecord<PipelineStep>({
|
|
objectNameSingular: CoreObjectNameSingular.PipelineStep,
|
|
});
|
|
|
|
const { deleteOneRecord: deleteOnePipelineStep } = useDeleteOneRecord({
|
|
objectNameSingular: CoreObjectNameSingular.PipelineStep,
|
|
});
|
|
|
|
const handlePipelineStepAdd = useRecoilCallback(
|
|
({ snapshot }) =>
|
|
async (boardColumn: BoardColumnDefinition) => {
|
|
const currentPipeline = await snapshot.getPromise(currentPipelineState);
|
|
if (!currentPipeline?.id) return;
|
|
|
|
return createOnePipelineStep?.({
|
|
color: boardColumn.colorCode ?? 'gray',
|
|
id: boardColumn.id,
|
|
position: boardColumn.position,
|
|
name: boardColumn.title,
|
|
});
|
|
},
|
|
[createOnePipelineStep],
|
|
);
|
|
|
|
const handlePipelineStepDelete = useRecoilCallback(
|
|
({ snapshot }) =>
|
|
async (boardColumnId: string) => {
|
|
const currentPipeline = await snapshot.getPromise(currentPipelineState);
|
|
if (!currentPipeline?.id) return;
|
|
|
|
return deleteOnePipelineStep?.(boardColumnId);
|
|
},
|
|
[deleteOnePipelineStep],
|
|
);
|
|
|
|
return { handlePipelineStepAdd, handlePipelineStepDelete };
|
|
};
|