22 branches 3 (#13181)

This PR does not produce any functional changes for our users. It
prepares the branches for workflows by:

- decommissioning `output` and `context` fields or `workflowRun` records
and use newly created `state` field from front-end and back-end
- use `stepStatus` computed by `back-end` in `front-end`
- add utils and types in `twenty-shared/workflow` (not completed, a
follow-up is scheduled
https://github.com/twentyhq/core-team-issues/issues/1211)
- add concurrency to `workflowQueue` message queue to avoid weird branch
execution when using forms in workflow branches
- add a WithLock decorator for better dev experience of
`CacheLockService.withLock` usage

Here is an example of such a workflow running (front branch display is
not yet done that's why it looks ugly) ->
https://discord.com/channels/1130383047699738754/1258024460238192691/1392897615171158098
This commit is contained in:
martmull
2025-07-16 11:16:04 +02:00
committed by GitHub
parent bf6330469b
commit 47386e92a3
47 changed files with 5124 additions and 6380 deletions
@@ -49,18 +49,18 @@ export const useUpdateWorkflowRunStep = () => {
if (
!isDefined(cachedRecord) ||
!isDefined(cachedRecord?.output?.flow?.steps)
!isDefined(cachedRecord?.state?.flow?.steps)
) {
return;
}
const newCachedRecord = {
...cachedRecord,
output: {
...cachedRecord.output,
state: {
...cachedRecord.state,
flow: {
...cachedRecord.output.flow,
steps: cachedRecord.output.flow.steps.map((step: WorkflowAction) => {
...cachedRecord.state.flow,
steps: cachedRecord.state.flow.steps.map((step: WorkflowAction) => {
if (step.id === updatedStep.id) {
return updatedStep;
}
@@ -71,7 +71,7 @@ export const useUpdateWorkflowRunStep = () => {
};
const recordGqlFields = {
output: true,
state: true,
};
updateRecordFromCache({
objectMetadataItems,