From 2437572a5c792beb36fdb46bd4f833e4ffe76717 Mon Sep 17 00:00:00 2001 From: martmull Date: Fri, 20 Dec 2024 11:36:47 +0100 Subject: [PATCH] Fix discard draft optimistic rendering (#9153) Remove draft workflow version from cached workflow --- packages/twenty-front/nyc.config.cjs | 10 ++++++ .../hooks/useDeleteOneWorkflowVersion.ts | 36 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/packages/twenty-front/nyc.config.cjs b/packages/twenty-front/nyc.config.cjs index b4c04651e..639a738ff 100644 --- a/packages/twenty-front/nyc.config.cjs +++ b/packages/twenty-front/nyc.config.cjs @@ -23,6 +23,14 @@ const pagesCoverage = { exclude: ['src/generated/**/*', 'src/modules/**/*', 'src/**/*.ts'], }; +const performanceCoverage = { + branches: 35, + statements: 60, + lines: 60, + functions: 45, + exclude: ['src/generated/**/*', 'src/modules/**/*', 'src/**/*.ts'], +}; + const storybookStoriesFolders = process.env.STORYBOOK_SCOPE; module.exports = @@ -30,4 +38,6 @@ module.exports = ? pagesCoverage : storybookStoriesFolders === 'modules' ? modulesCoverage + : storybookStoriesFolders === 'performance' + ? performanceCoverage : globalCoverage; diff --git a/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts b/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts index bd3cf0305..3a539bff9 100644 --- a/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts +++ b/packages/twenty-front/src/modules/workflow/hooks/useDeleteOneWorkflowVersion.ts @@ -1,10 +1,20 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord'; +import { useGetRecordFromCache } from '@/object-record/cache/hooks/useGetRecordFromCache'; +import { Workflow, WorkflowVersion } from '@/workflow/types/Workflow'; +import { useApolloClient } from '@apollo/client'; export const useDeleteOneWorkflowVersion = () => { + const apolloClient = useApolloClient(); const { deleteOneRecord } = useDeleteOneRecord({ objectNameSingular: CoreObjectNameSingular.WorkflowVersion, }); + const getWorkflowVersionFromCache = useGetRecordFromCache({ + objectNameSingular: CoreObjectNameSingular.WorkflowVersion, + }); + const getWorkflowFromCache = useGetRecordFromCache({ + objectNameSingular: CoreObjectNameSingular.Workflow, + }); const deleteOneWorkflowVersion = async ({ workflowVersionId, @@ -12,6 +22,32 @@ export const useDeleteOneWorkflowVersion = () => { workflowVersionId: string; }) => { await deleteOneRecord(workflowVersionId); + + const cachedWorkflowVersion = + getWorkflowVersionFromCache(workflowVersionId); + + if (!cachedWorkflowVersion) { + return; + } + + const cachedWorkflow = getWorkflowFromCache( + cachedWorkflowVersion.workflowId, + ); + + if (!cachedWorkflow) { + return; + } + + apolloClient.cache.modify({ + id: apolloClient.cache.identify(cachedWorkflow), + fields: { + versions: () => { + return cachedWorkflow.versions.filter( + (version) => version.id !== workflowVersionId, + ); + }, + }, + }); }; return { deleteOneWorkflowVersion };