@bsuite/workflow-canvas
进程形状的 xyflow 画布 : step 编号 : decision 编号 : terminator 编号 : handoff 节点, 泳道为
真实的 xyflow 父节点, 循环允许 连接验证,以及控制器+服务
持续 xyflow 的本地 {nodes, edges, viewport} 输入 workflow_definition_versions.graph。 。 。 .
第一阶段 docs/plans/20260901-workflow-canvas-implementation-v1.00A.md,结束工作
已瞄准和红色 docs/plans/20260510-universal-canvas-capability-implementation-v1.00F.md
5月的时候.
这不是重建
| 东西 | 何处 | 被带走的 |
|---|---|---|
@bsuite/schema-builder 页:1 | packages/schema-builder/ | 建筑学. Controller chook + RPC后卫服务 + TanStack 乐观的突变后回滚 + 实时交叉tab同步 + 薄薄的每个app包装. 还有 computeDagreLayout 财务报告和审定财务报表 XY_TOKEN_BINDINGS, (中文(简体) ), 导入, 未复制。 。 。 . |
RelationshipCanvas | business-suite-unified/src/components/feature-builder/ | 这个 ReactFlowProvider 只有包装. |
useUndoRedo | crm7/src/pages/sales/pipeline-flow-inner.tsx | 50相机接钩,起而改正. |
0新运行时间依赖关系. package.json是因为 dependencies 实值 {}。 。 。 . @dagrejs/dagre, (中文(简体) ),
@xyflow/react, (中文(简体) ), zod 财务报告和审定财务报表 @tanstack/react-query 已经是每个消费者的捆绑.
最重要的规则:LOPS是经过检验的
RelationshipCanvas 运行一个循环检测的外勤部和 拒绝 循环。 对外国来说是的
键和错在这里。 学徒安置过程需要循环, 和Lucidchart源
名称二:
- "变更费率或安放并重新发布电子签名" 回到你身边 "寄出位置为: CRM-触发电子签名"
- "取消安排,寻找新的主机" 回到你身边 创建或确认主机位置
wouldCreateCycle 从未从此软件包中调用. __tests__/connectionValidation.test.ts
声称周期 已接受 - 一个被证明拒绝的套房就是虫子.
仍然被拒绝的东西
| {\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0} | 拒绝 | 为什么不是一个循环问题 |
|---|---|---|
| R1级 | 无源或目标 | 无附加 |
| 资源2 | 自动跳出 (单位:千美元)source === target(中文(简体) ) | 步入自旋会改变迭代之间的任何状态 。 A 类 两个- 节点周期 A → B → A 被接受——两个学徒循环都是这个形状 |
| R3 导弹 | 结束错误 | A 类 start 只声明一个源控件, 一个 end 只有一个目标,所以没有港口可抓。 通过登记处的手柄套装执行,而非作为特殊情况 |
| 第4条 | 手性或手性作用不匹配 | 一种( E)flow)在今天存在;轴现在被命名了,所以这个同代码拒绝一个后期的数据边缘 |
| 5个R5 | 摸起泳道的边缘 | 车道组合步; 边缘附着在车道内的工作上 |
| 编号6 | 精确的重复边缘 | 第二个复制件在第一个复制件上方, 所以拖放看起来是惰性的, 而图表会增长 |
明确 没有 拒绝:任意长度的周期 -- -- 2,若干边缘留下一个决定( 学徒流程分支 四出 东道主接受安置吗?),数个边缘到达 跳过泳道的边缘——最后一步就是交接 实值。 。 。 .
节点类型的注册
没有通用的 nodeTypes 破产财产中其他任何地方的登记: SchemaCanvas 实值
{ entity: EntityNode } 财务报告和审定财务报表 RelationshipCanvas 实值 { entity, reference }两者对
计划图和关闭。 这个是开放的.
import { workflowNodeTypeRegistry } from '@bsuite/workflow-canvas';
// Add a kind without forking the package. Returns a NEW registry.
const registry = workflowNodeTypeRegistry.extend([myDelayDescriptor]);
一个描述者在一个地方回答了四个问题,所以它们不能漂移:它看起来像什么
(单位:千美元)component),可以连接到什么(handles(data),由卡片和
isValidConnection),其含义是:dataSchema及其行为
(单位:千美元)container, (中文(简体) ), defaultSize, (中文(简体) ), defaultData) (中文(简体) ).
手按节点 数据,不仅仅是此类——决定的端口追踪其分支列表,a 终结者追踪其起/起角色.
游泳场
巷子是xyflow的 (歌词) 父节点 与 extent: 'parent' 而不是背景乐队.
不同的是,xyflow在拖动本身期间执行车道,所以图不能
表示一个已经漂出车道 拥有它. parentId 财务报告和审定财务报表 extent 当地人
xyflow 字段,所以它们会穿行 graph jsonb 免费的.
computeSwimlaneLayout {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我问了一下 仅为 x 轴 - 过程命令 - 并从中取出 y
节点的行道,因为所有权不是某种得到投票的布局算法.
6个学徒道:学徒-GTO/劳工雇佣团队-学徒连接提供商-DEWR 培训提供者 东道雇主.
使用量
import {
WorkflowCanvas,
WorkflowInspector,
WorkflowPalette,
WorkflowToolbar,
useWorkflowController,
} from '@bsuite/workflow-canvas';
function WorkflowPage({ id }: { id: string }) {
const controller = useWorkflowController({
supabase,
tenantId,
definitionId: id,
onError: (message, err) => toast.error(message, err),
onConnectionRefused: (v) => toast.info(v.reason),
});
return (
<WorkflowCanvas controller={controller}>
<WorkflowPalette controller={controller} activeLaneId={activeLane} />
<WorkflowToolbar controller={controller} onDuplicated={(id) => navigate(`/workflows/${id}`)} />
<WorkflowInspector
controller={controller}
selectedNodeId={selected}
onNodeDeleted={() => setSelected(null)}
/>
</WorkflowCanvas>
);
}
三个铬成分是帆布上的孩子. 画布把它们分到保留地
区域(工具栏/调色板/图表/检查员),因此不会在流板上作画——
适合视图和边缘点击可看到所剩框。 每个染色体成分都没什么
当它无所事事时——没有选择,或者一个工作流程,会话无法编辑——所以消费者
从来不需要自己去关 不只通过安插 classNames; 表面类为
总是应用和额外组成而不是替换。 低于 ~800px 时 画布 宽度
调色板变成芯片行; 选择步骤时会保留检查柱 .
懒行道. @xyflow/react 绝不能到达进入区块——5月计划C.2阶段
做了一个硬规则 与捆绑分析器证据.
编辑、草稿和出版
- 调色板由登记器构建而不是从一个列表。 一种通过
registry.extend()显示时不触碰调色板; 不包括容器(swimlanes) 因为一条道是图表的框而不是其中的一步. - 重命名在模糊或 Enter 上执行, 而不是按键 .
updateNodeData检查倒数 堆叠,所以一个按键 承诺会花整个50分缓冲 一个字. - 在编辑未保存时, 发布被禁用 . 图表节省了900ms的去弹; 出版 窗口内部会冻结一个版本, 其最后的编辑仍在定时器中 。 控制器 先冲去当后卫.
duplicateToTenant()作为草案复制模板,通过读取来源current_published_version_id所以,它从来没有复制 某人的公开草稿 当同一模板被复制两次时, 而不是表面显示 23505 .
餐桌合同
这个软件包是 没有 创建表格。 这个 workflow_definitions 移民拥有
workflow_definitions 财务报告和审定财务报表 workflow_definition_versions (本国) tenant_id 列,平面 RLS
上游逐字记录 public.form_layouts, (中文(简体) ), graph jsonb, (中文(简体) ), ai_context jsonb) (中文(简体) ). 如果有的话
列名称在 src/types.ts 对文件有异议 迁移是正确的.
这些表格由 20261103000000_workflow_definitions.sql 延长期限
20261105000000_workflow_definition_versions_published_at.sql。将两者分为三个范围
(root, crm7,商务-同名)字节相同,有对齐的条目在
scripts/migration-collision-allowlist.txt。 。 。 .
版本相撞无声.
schema_migrations在十四位数的 AlONE 版本上键入 横跨8个应用范围, 所以一个版本的文件 已经放在分类账 没有跳过 单词 ——成功报告,无所应用. 计划保留20261102000000#2896 把它带走了 当天;published_at是一个基于同样原因的新文件,而不是编辑到合并的20261103000000它本身重新编号为:20261104000000改为20261105000000何时 1085号商机合并了执行桥 一小时后 检查免费。 人口普查是一种快照,而不是两个方向的保留.
0.1.0 不同意自己的表格,每个测试都通过. 由SET和 插入时
label- 一个从未存在的栏目publishVersion()写published_at, (中文(简体) ), 哪个20261103000000从未创建。 列出、重命名、创建和发布工作流程 返回 PostgREST 错误,合并的学徒种子完全无法降落。 没发现 因为每次测试都打乱了Supabase客户端.src/__tests__/tableContract.test.ts现在解析 迁移文件,当服务名称为 DDL 未声明的列时失败.
读者必须经过 current_published_version_id,从来没有"最高版本数字"——即
是什么使出版 原子和可逆, 停止半完成的草稿到达
生产.
测试
pnpm test - 对8个文件进行105次测试:
nodeRegistry.test.ts词汇,nodeTypes稳定,由数据驱动的手柄,开放connectionValidation.test.ts—— 说 一个周期被接受两个学徒圈,四行 和每个拒绝swimlaneLayout.test.ts- 养育子女、车道秩序、父母前子女以及一名间谍证明 微弱的呼唤是计划建设者而不是重新实施graphRoundTrip.test.ts——连载 ——去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相去相相去相去相去相去相JSONundoRedo.test.ts——50分弹出盖,分批正确,一倒一出tableContract.test.ts——服务只可指定迁移 FILES 声明的列,并附有 控制断言, 所以一个匹配无内容的解析器不能报告干净duplicateDefinition.test.ts——抄本作为草稿出自已出版的指针相较 比起来max(version),带有原理说明, 撞出一个相撞的键, 并且 没有 重试一个 错误不是唯一的违反editorChrome.test.tsx——调色板跟随注册,重命名是倒数一步,删除一个 样式先询问,在编辑未保存时拒绝发布