Use optimistic rendering when executing a workflow with manual trigger (#12695)
This PR adds optimistic rendering at two places: - In the `runWorkflowVersion`, to create a workflow run entry as fast as possible in the cache and render it immediately in the side panel. - In the `ListenUpdatesEffect`, to be sure the cache is properly set; we also need to set the record in the record store that's used in the fields card. ## Before https://github.com/user-attachments/assets/8b360ea9-c292-4e05-82a0-d2f12176bb6f ## After https://github.com/user-attachments/assets/2d11023c-2ceb-4fa3-a951-187b9a0b5743 ### With a slowed-down network https://github.com/user-attachments/assets/7d2a592a-1ea7-455b-856f-bf3d9d905061 ## Follow up I will create next a PR to ensure the viewport is always set when we know the dimensions of the nodes.
This commit is contained in:
committed by
GitHub
parent
a6b8830b91
commit
dae282ca0f
@ -0,0 +1,45 @@
|
||||
import { useApolloClient } from '@apollo/client';
|
||||
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { useFindOneRecordQuery } from '@/object-record/hooks/useFindOneRecordQuery';
|
||||
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
|
||||
export const useUpsertFindOneRecordQueryInCache = ({
|
||||
objectMetadataItem,
|
||||
recordGqlFields,
|
||||
withSoftDeleted = false,
|
||||
}: {
|
||||
objectMetadataItem: ObjectMetadataItem;
|
||||
recordGqlFields: Record<string, any>;
|
||||
withSoftDeleted?: boolean;
|
||||
}) => {
|
||||
const apolloClient = useApolloClient();
|
||||
|
||||
const { findOneRecordQuery } = useFindOneRecordQuery({
|
||||
objectNameSingular: objectMetadataItem.nameSingular,
|
||||
recordGqlFields,
|
||||
withSoftDeleted,
|
||||
});
|
||||
|
||||
const upsertFindOneRecordQueryInCache = <
|
||||
T extends ObjectRecord = ObjectRecord,
|
||||
>({
|
||||
objectRecordId,
|
||||
objectRecordToOverwrite,
|
||||
}: {
|
||||
objectRecordId: string;
|
||||
objectRecordToOverwrite: T;
|
||||
}) => {
|
||||
apolloClient.writeQuery({
|
||||
query: findOneRecordQuery,
|
||||
variables: { objectRecordId },
|
||||
data: {
|
||||
[objectMetadataItem.nameSingular]: objectRecordToOverwrite,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
upsertFindOneRecordQueryInCache,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user