- Migrated all workflow Recoil states to component states to isolate each workflow visualizer instance. The use case of having two workflow visualizers displayed at the same time appeared recently and will grow in the near future. - We chose to use the `recordId` as the value for the `instanceId` of the component states. Currently, there are a few cases where two workflows or two workflow runs are rendered at the same time. As a consequence, relying on the `recordId` is enough for the moment. - However, there is one case where it's necessary to have a component state scoped to a workflow visualizer instance: the `workflowVisualizerStatusState`. This component is tightly coupled to the `<Reactflow />` component instance rendered in the workflow visualizer, and it must be set to its default value when the component first renders. I achieved that by using another component instance context whose instanceId is an identifier returned by the `useId()` hook in the Workflow Run Card component.
16 lines
582 B
TypeScript
16 lines
582 B
TypeScript
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
|
import { workflowVisualizerWorkflowRunIdComponentState } from '@/workflow/states/workflowVisualizerWorkflowRunIdComponentState';
|
|
import { isDefined } from 'twenty-shared/utils';
|
|
|
|
export const useWorkflowRunIdOrThrow = () => {
|
|
const workflowRunId = useRecoilComponentValueV2(
|
|
workflowVisualizerWorkflowRunIdComponentState,
|
|
);
|
|
|
|
if (!isDefined(workflowRunId)) {
|
|
throw new Error('Expected the workflow run ID to be defined');
|
|
}
|
|
|
|
return workflowRunId;
|
|
};
|