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:
Baptiste Devessier
2025-06-19 14:09:47 +02:00
committed by GitHub
parent a6b8830b91
commit dae282ca0f
13 changed files with 261 additions and 46 deletions

View File

@ -10,6 +10,12 @@ export class RunWorkflowVersionInput {
})
workflowVersionId: string;
@Field(() => String, {
description: 'Workflow run ID',
nullable: true,
})
workflowRunId?: string | null;
@Field(() => graphqlTypeJson, {
description: 'Execution result in JSON format',
nullable: true,

View File

@ -56,7 +56,8 @@ export class WorkflowTriggerResolver {
async runWorkflowVersion(
@AuthUser() user: User,
@AuthWorkspace() workspace: Workspace,
@Args('input') { workflowVersionId, payload }: RunWorkflowVersionInput,
@Args('input')
{ workflowVersionId, workflowRunId, payload }: RunWorkflowVersionInput,
) {
const workspaceMemberRepository =
await this.twentyORMGlobalManager.getRepositoryForWorkspace<WorkspaceMemberWorkspaceEntity>(
@ -72,6 +73,7 @@ export class WorkflowTriggerResolver {
return await this.workflowTriggerWorkspaceService.runWorkflowVersion({
workflowVersionId,
workflowRunId: workflowRunId ?? undefined,
payload: payload ?? {},
createdBy: buildCreatedByFromFullNameMetadata({
fullNameMetadata: {