Add insert step button to workflow edges https://github.com/user-attachments/assets/7144f722-f1c7-450f-a8eb-c902071986a1 Also fixes `iconButtonGroup` UI component ## Before https://github.com/user-attachments/assets/7b5f0245-d0e8-48af-9aa5-a29388a1caea ## After https://github.com/user-attachments/assets/1820874f-aa99-41ae-8254-c76c275ee3ae
92 lines
3.0 KiB
TypeScript
92 lines
3.0 KiB
TypeScript
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
|
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
|
import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache';
|
|
import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordFromCache';
|
|
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
|
|
import { DELETE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/deleteWorkflowVersionStep';
|
|
import { WorkflowVersion } from '@/workflow/types/Workflow';
|
|
import { useApolloClient, useMutation } from '@apollo/client';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
import {
|
|
DeleteWorkflowVersionStepInput,
|
|
DeleteWorkflowVersionStepMutation,
|
|
DeleteWorkflowVersionStepMutationVariables,
|
|
WorkflowAction,
|
|
} from '~/generated/graphql';
|
|
|
|
export const useDeleteWorkflowVersionStep = () => {
|
|
const apolloClient = useApolloClient();
|
|
const { objectMetadataItems } = useObjectMetadataItems();
|
|
const { objectPermissionsByObjectMetadataId } = useObjectPermissions();
|
|
const { objectMetadataItem } = useObjectMetadataItem({
|
|
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
|
|
});
|
|
const getRecordFromCache = useGetRecordFromCache({
|
|
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
|
|
});
|
|
const [mutate] = useMutation<
|
|
DeleteWorkflowVersionStepMutation,
|
|
DeleteWorkflowVersionStepMutationVariables
|
|
>(DELETE_WORKFLOW_VERSION_STEP, {
|
|
client: apolloClient,
|
|
});
|
|
const deleteWorkflowVersionStep = async (
|
|
input: DeleteWorkflowVersionStepInput,
|
|
) => {
|
|
const result = await mutate({ variables: { input } });
|
|
|
|
const deletedStep = result?.data?.deleteWorkflowVersionStep;
|
|
|
|
if (!isDefined(deletedStep)) {
|
|
return;
|
|
}
|
|
|
|
const cachedRecord = getRecordFromCache<WorkflowVersion>(
|
|
input.workflowVersionId,
|
|
);
|
|
|
|
if (!isDefined(cachedRecord)) {
|
|
return;
|
|
}
|
|
|
|
const newCachedRecord = {
|
|
...cachedRecord,
|
|
steps: (cachedRecord.steps || [])
|
|
.filter((step: WorkflowAction) => step.id !== deletedStep.id)
|
|
.map((step: WorkflowAction) => {
|
|
if (!step.nextStepIds?.includes(deletedStep.id)) {
|
|
return step;
|
|
}
|
|
|
|
return {
|
|
...step,
|
|
nextStepIds: [
|
|
...new Set([
|
|
...(step.nextStepIds?.filter(
|
|
(nextStepId) => nextStepId !== deletedStep.id,
|
|
) || []),
|
|
...(deletedStep.nextStepIds || []),
|
|
]),
|
|
],
|
|
};
|
|
}),
|
|
};
|
|
|
|
const recordGqlFields = {
|
|
steps: true,
|
|
};
|
|
|
|
updateRecordFromCache({
|
|
objectMetadataItems,
|
|
objectMetadataItem,
|
|
cache: apolloClient.cache,
|
|
record: newCachedRecord,
|
|
recordGqlFields,
|
|
objectPermissionsByObjectMetadataId,
|
|
});
|
|
};
|
|
|
|
return { deleteWorkflowVersionStep };
|
|
};
|