diff --git a/packages/twenty-front/src/modules/page-layout/widgets/graph/hooks/useGraphWidgetQueryCommon.ts b/packages/twenty-front/src/modules/page-layout/widgets/graph/hooks/useGraphWidgetQueryCommon.ts index 5713f057734..03fe103fe78 100644 --- a/packages/twenty-front/src/modules/page-layout/widgets/graph/hooks/useGraphWidgetQueryCommon.ts +++ b/packages/twenty-front/src/modules/page-layout/widgets/graph/hooks/useGraphWidgetQueryCommon.ts @@ -1,5 +1,5 @@ import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById'; -import { useUserTimezone } from '@/ui/input/components/internal/date/hooks/useUserTimezone'; +import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies'; import { computeRecordGqlOperationFilter, isDefined, @@ -36,13 +36,11 @@ export const useGraphWidgetQueryCommon = ({ throw new Error('Aggregate field not found'); } - const { userTimezone } = useUserTimezone(); + const { filterValueDependencies } = useFilterValueDependencies(); const gqlOperationFilter = computeRecordGqlOperationFilter({ fields: objectMetadataItem.fields, - filterValueDependencies: { - timeZone: userTimezone, - }, + filterValueDependencies, recordFilters: configuration.filter?.recordFilters ?? [], recordFilterGroups: configuration.filter?.recordFilterGroups ?? [], }); diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionEdge.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionEdge.ts index ed3a580ac38..656499430a6 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionEdge.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionEdge.ts @@ -1,4 +1,5 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useMutation } from '@apollo/client/react'; import { type CreateWorkflowVersionEdgeMutation, @@ -12,6 +13,7 @@ export const useCreateWorkflowVersionEdge = () => { const apolloCoreClient = useApolloCoreClient(); const { updateWorkflowVersionCache } = useUpdateWorkflowVersionCache(); + const { enqueueErrorSnackBar } = useSnackBar(); const [mutate] = useMutation< CreateWorkflowVersionEdgeMutation, @@ -21,7 +23,12 @@ export const useCreateWorkflowVersionEdge = () => { const createWorkflowVersionEdge = async ( input: CreateWorkflowVersionEdgeInput, ) => { - const result = await mutate({ variables: { input } }); + const result = await mutate({ + variables: { input }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, + }); const workflowVersionStepChanges = result?.data?.createWorkflowVersionEdge; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts index 6ad2d8a186c..134302452f3 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useCreateWorkflowVersionStep.ts @@ -1,5 +1,6 @@ import { useApolloCoreClient } from '@/object-metadata/hooks/useApolloCoreClient'; import { CREATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/createWorkflowVersionStep'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useMutation } from '@apollo/client/react'; import { type CreateWorkflowVersionStepInput, @@ -17,6 +18,7 @@ export const useCreateWorkflowVersionStep = () => { const { updateWorkflowVersionCache } = useUpdateWorkflowVersionCache(); const setFlow = useSetAtomComponentState(flowComponentState); + const { enqueueErrorSnackBar } = useSnackBar(); const [mutate] = useMutation< CreateWorkflowVersionStepMutation, @@ -30,6 +32,9 @@ export const useCreateWorkflowVersionStep = () => { ) => { const result = await mutate({ variables: { input }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); const workflowVersionStepChanges = result?.data?.createWorkflowVersionStep; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts index f1a8b6a0bc8..fa2dd27209d 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDeleteWorkflowVersionStep.ts @@ -3,6 +3,7 @@ import { CoreObjectNameSingular } from 'twenty-shared/types'; import { useFindOneRecordQuery } from '@/object-record/hooks/useFindOneRecordQuery'; import { DELETE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/deleteWorkflowVersionStep'; import { useUpdateWorkflowVersionCache } from '@/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useMutation } from '@apollo/client/react'; import { type DeleteWorkflowVersionStepInput, @@ -14,6 +15,7 @@ export const useDeleteWorkflowVersionStep = () => { const apolloCoreClient = useApolloCoreClient(); const { updateWorkflowVersionCache } = useUpdateWorkflowVersionCache(); + const { enqueueErrorSnackBar } = useSnackBar(); const { findOneRecordQuery: findOneWorkflowVersionQuery } = useFindOneRecordQuery({ @@ -39,6 +41,9 @@ export const useDeleteWorkflowVersionStep = () => { variables: { objectRecordId: input.workflowVersionId }, }, ], + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); const workflowVersionStepChanges = result?.data?.deleteWorkflowVersionStep; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDuplicateWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDuplicateWorkflowVersionStep.ts index db3b147cb37..efa64f4e673 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDuplicateWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useDuplicateWorkflowVersionStep.ts @@ -3,6 +3,7 @@ import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSe import { DUPLICATE_WORKFLOW_VERSION_STEP } from '@/workflow/graphql/mutations/duplicateWorkflowVersionStep'; import { flowComponentState } from '@/workflow/states/flowComponentState'; import { useUpdateWorkflowVersionCache } from '@/workflow/workflow-steps/hooks/useUpdateWorkflowVersionCache'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useMutation } from '@apollo/client/react'; import { isDefined } from 'twenty-shared/utils'; import { @@ -17,6 +18,7 @@ export const useDuplicateWorkflowVersionStep = () => { const { updateWorkflowVersionCache } = useUpdateWorkflowVersionCache(); const setFlow = useSetAtomComponentState(flowComponentState); + const { enqueueErrorSnackBar } = useSnackBar(); const [mutate] = useMutation< DuplicateWorkflowVersionStepMutation, @@ -30,6 +32,9 @@ export const useDuplicateWorkflowVersionStep = () => { ) => { const result = await mutate({ variables: { input }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); const workflowVersionStepChanges = diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts index e3f6b5cb722..ea276c3fda3 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowRunStep.ts @@ -7,6 +7,7 @@ import { updateRecordFromCache } from '@/object-record/cache/utils/updateRecordF import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; import { UPDATE_WORKFLOW_RUN_STEP } from '@/workflow/graphql/mutations/updateWorkflowRunStep'; import { type WorkflowStep, type WorkflowRun } from '@/workflow/types/Workflow'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useMutation } from '@apollo/client/react'; import { isDefined } from 'twenty-shared/utils'; import { @@ -32,12 +33,16 @@ export const useUpdateWorkflowRunStep = () => { const getRecordFromCache = useGetRecordFromCache({ objectNameSingular: CoreObjectNameSingular.WorkflowRun, }); + const { enqueueErrorSnackBar } = useSnackBar(); const updateWorkflowRunStep = async (input: UpdateWorkflowRunStepInput) => { const result = await mutate({ variables: { input: { workflowRunId: input.workflowRunId, step: input.step }, }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); const updatedStep = result?.data?.updateWorkflowRunStep; if (!isDefined(updatedStep)) { diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts index 666d516b64c..e30231b1b92 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/hooks/useUpdateWorkflowVersionStep.ts @@ -10,6 +10,7 @@ import { type WorkflowVersion, type WorkflowStep, } from '@/workflow/types/Workflow'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; import { useMutation } from '@apollo/client/react'; import { isDefined } from 'twenty-shared/utils'; import { @@ -22,6 +23,7 @@ export const useUpdateWorkflowVersionStep = () => { const apolloCoreClient = useApolloCoreClient(); const { objectMetadataItems } = useObjectMetadataItems(); const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); + const { enqueueErrorSnackBar } = useSnackBar(); const { objectMetadataItem } = useObjectMetadataItem({ objectNameSingular: CoreObjectNameSingular.WorkflowVersion, @@ -39,7 +41,12 @@ export const useUpdateWorkflowVersionStep = () => { const updateWorkflowVersionStep = async ( input: UpdateWorkflowVersionStepInput, ) => { - const result = await mutate({ variables: { input } }); + const result = await mutate({ + variables: { input }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, + }); const updatedStep = result?.data?.updateWorkflowVersionStep; if (!isDefined(updatedStep)) { return; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/filter-action/components/__stories__/WorkflowEditActionFilter.stories.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/filter-action/components/__stories__/WorkflowEditActionFilter.stories.tsx index 324be374070..7b650ed9210 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/filter-action/components/__stories__/WorkflowEditActionFilter.stories.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/filter-action/components/__stories__/WorkflowEditActionFilter.stories.tsx @@ -4,6 +4,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite'; import { fn } from 'storybook/test'; import { StepLogicalOperator, ViewFilterOperand } from 'twenty-shared/types'; import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing'; +import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; import { WorkflowStepActionDrawerDecorator } from '~/testing/decorators/WorkflowStepActionDrawerDecorator'; import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator'; import { WorkspaceDecorator } from '~/testing/decorators/WorkspaceDecorator'; @@ -87,6 +88,7 @@ const meta: Meta = { ComponentDecorator, RouterDecorator, WorkspaceDecorator, + SnackBarDecorator, ], }; diff --git a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/__stories__/WorkflowEditActionFormBuilder.stories.tsx b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/__stories__/WorkflowEditActionFormBuilder.stories.tsx index 2ee3a5e6d4d..d0fb20a993b 100644 --- a/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/__stories__/WorkflowEditActionFormBuilder.stories.tsx +++ b/packages/twenty-front/src/modules/workflow/workflow-steps/workflow-actions/form-action/components/__stories__/WorkflowEditActionFormBuilder.stories.tsx @@ -5,6 +5,7 @@ import { expect, fn, userEvent, waitFor, within } from 'storybook/test'; import { FieldMetadataType } from 'twenty-shared/types'; import { ComponentDecorator, RouterDecorator } from 'twenty-ui/testing'; import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator'; +import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; import { WorkflowStepActionDrawerDecorator } from '~/testing/decorators/WorkflowStepActionDrawerDecorator'; import { WorkflowStepDecorator } from '~/testing/decorators/WorkflowStepDecorator'; import { graphqlMocks } from '~/testing/graphqlMocks'; @@ -61,6 +62,7 @@ const meta: Meta = { ComponentDecorator, RouterDecorator, ObjectMetadataItemsDecorator, + SnackBarDecorator, ], }; diff --git a/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useCreateWorkspaceInvitation.test.tsx b/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useCreateWorkspaceInvitation.test.tsx index 5d5ed36aa8f..0a32d97b92d 100644 --- a/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useCreateWorkspaceInvitation.test.tsx +++ b/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useCreateWorkspaceInvitation.test.tsx @@ -30,6 +30,7 @@ describe('useCreateWorkspaceInvitation', () => { expect(mutationCallSpy).toHaveBeenCalledWith({ onCompleted: expect.any(Function), + onError: expect.any(Function), variables: params, }); }); @@ -46,6 +47,7 @@ describe('useCreateWorkspaceInvitation', () => { expect(mutationCallSpy).toHaveBeenCalledWith({ onCompleted: expect.any(Function), + onError: expect.any(Function), variables: params, }); }); diff --git a/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useDeleteWorkspaceInvitation.test.tsx b/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useDeleteWorkspaceInvitation.test.tsx index ce25af33ad6..8a3b1d2800a 100644 --- a/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useDeleteWorkspaceInvitation.test.tsx +++ b/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useDeleteWorkspaceInvitation.test.tsx @@ -30,6 +30,7 @@ describe('useDeleteWorkspaceInvitation', () => { expect(mutationCallSpy).toHaveBeenCalledWith({ onCompleted: expect.any(Function), + onError: expect.any(Function), variables: params, }); }); diff --git a/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useResendWorkspaceInvitation.test.tsx b/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useResendWorkspaceInvitation.test.tsx index c8f9d6f9bdc..f029eb520df 100644 --- a/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useResendWorkspaceInvitation.test.tsx +++ b/packages/twenty-front/src/modules/workspace-invitation/hooks/__tests__/useResendWorkspaceInvitation.test.tsx @@ -30,6 +30,7 @@ describe('useResendWorkspaceInvitation', () => { expect(mutationCallSpy).toHaveBeenCalledWith({ onCompleted: expect.any(Function), + onError: expect.any(Function), variables: params, }); }); diff --git a/packages/twenty-front/src/modules/workspace-invitation/hooks/useCreateWorkspaceInvitation.ts b/packages/twenty-front/src/modules/workspace-invitation/hooks/useCreateWorkspaceInvitation.ts index 5f6fb0979a7..e56d21fb8c1 100644 --- a/packages/twenty-front/src/modules/workspace-invitation/hooks/useCreateWorkspaceInvitation.ts +++ b/packages/twenty-front/src/modules/workspace-invitation/hooks/useCreateWorkspaceInvitation.ts @@ -5,11 +5,13 @@ import { } from '~/generated-metadata/graphql'; import { workspaceInvitationsState } from '@/workspace-invitation/states/workspaceInvitationsStates'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; export const useCreateWorkspaceInvitation = () => { const [sendInvitationsMutation] = useMutation(SendInvitationsDocument); const setWorkspaceInvitations = useSetAtomState(workspaceInvitationsState); + const { enqueueErrorSnackBar } = useSnackBar(); const sendInvitation = async ( variables: SendInvitationsMutationVariables, @@ -22,6 +24,9 @@ export const useCreateWorkspaceInvitation = () => { ...data.sendInvitations.result, ]); }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); }; diff --git a/packages/twenty-front/src/modules/workspace-invitation/hooks/useDeleteWorkspaceInvitation.ts b/packages/twenty-front/src/modules/workspace-invitation/hooks/useDeleteWorkspaceInvitation.ts index c774e1a7127..538fb642025 100644 --- a/packages/twenty-front/src/modules/workspace-invitation/hooks/useDeleteWorkspaceInvitation.ts +++ b/packages/twenty-front/src/modules/workspace-invitation/hooks/useDeleteWorkspaceInvitation.ts @@ -5,6 +5,7 @@ import { } from '~/generated-metadata/graphql'; import { workspaceInvitationsState } from '@/workspace-invitation/states/workspaceInvitationsStates'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; export const useDeleteWorkspaceInvitation = () => { const [deleteWorkspaceInvitationMutation] = useMutation( @@ -12,6 +13,7 @@ export const useDeleteWorkspaceInvitation = () => { ); const setWorkspaceInvitations = useSetAtomState(workspaceInvitationsState); + const { enqueueErrorSnackBar } = useSnackBar(); const deleteWorkspaceInvitation = async ({ appTokenId, @@ -27,6 +29,9 @@ export const useDeleteWorkspaceInvitation = () => { ), ); }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); }; diff --git a/packages/twenty-front/src/modules/workspace-invitation/hooks/useResendWorkspaceInvitation.ts b/packages/twenty-front/src/modules/workspace-invitation/hooks/useResendWorkspaceInvitation.ts index 56b1a91cf81..3716850e19a 100644 --- a/packages/twenty-front/src/modules/workspace-invitation/hooks/useResendWorkspaceInvitation.ts +++ b/packages/twenty-front/src/modules/workspace-invitation/hooks/useResendWorkspaceInvitation.ts @@ -5,6 +5,7 @@ import { } from '~/generated-metadata/graphql'; import { workspaceInvitationsState } from '@/workspace-invitation/states/workspaceInvitationsStates'; import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; +import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar'; export const useResendWorkspaceInvitation = () => { const [resendWorkspaceInvitationMutation] = useMutation( @@ -12,6 +13,7 @@ export const useResendWorkspaceInvitation = () => { ); const setWorkspaceInvitations = useSetAtomState(workspaceInvitationsState); + const { enqueueErrorSnackBar } = useSnackBar(); const resendInvitation = async ({ appTokenId, @@ -28,6 +30,9 @@ export const useResendWorkspaceInvitation = () => { ), ]); }, + onError: (error) => { + enqueueErrorSnackBar({ apolloError: error }); + }, }); };