mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-24 23:10:13 +08:00
feat(ui): node outputs adapt to new workflow designer
This commit is contained in:
+1
-1
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/logo.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Certimate - Your Trusted SSL Automation Partner</title>
|
||||
<title>Certimate - Your Trusted Partner in SSL Automation</title>
|
||||
</head>
|
||||
<body style="pointer-events: auto !important">
|
||||
<div id="root"></div>
|
||||
|
||||
Generated
+244
-244
@@ -11,13 +11,13 @@
|
||||
"@codemirror/lang-yaml": "^6.1.2",
|
||||
"@codemirror/language": "^6.11.2",
|
||||
"@codemirror/legacy-modes": "^6.5.1",
|
||||
"@flowgram.ai/document": "^0.3.5",
|
||||
"@flowgram.ai/fixed-layout-editor": "^0.3.5",
|
||||
"@flowgram.ai/minimap-plugin": "^0.3.5",
|
||||
"@flowgram.ai/document": "^0.3.6",
|
||||
"@flowgram.ai/fixed-layout-editor": "^0.3.6",
|
||||
"@flowgram.ai/minimap-plugin": "^0.3.6",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"@uiw/codemirror-extensions-basic-setup": "^4.24.2",
|
||||
"@uiw/codemirror-theme-vscode": "^4.24.2",
|
||||
"@uiw/react-codemirror": "^4.24.2",
|
||||
"@uiw/codemirror-extensions-basic-setup": "^4.25.1",
|
||||
"@uiw/codemirror-theme-vscode": "^4.25.1",
|
||||
"@uiw/react-codemirror": "^4.25.1",
|
||||
"ahooks": "^3.9.0",
|
||||
"antd": "^5.27.0",
|
||||
"antd-zod": "^7.0.0",
|
||||
@@ -2408,12 +2408,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/background-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/background-plugin/-/background-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-4iUka9SQNNceNQwivTBE1XPJjNSj4tP/6dieO2CVInPEl/PgIRodgTM5gjVvrnr/Mvrk1231+ttFL68HsVnByA==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/background-plugin/-/background-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-nFCbR1JDbuZHPmwlnjxHyP1WeM3xv786GLdKfzU6h5v+VRrHZsRgu3r+j6d+CQSYTM3Mem3UAlXI4BWukZa9UQ==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2423,11 +2423,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/command": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/command/-/command-0.3.5.tgz",
|
||||
"integrity": "sha512-FWGaOD0+vGaKzDq2+c7NtzTyLofK/9rUoXA8YLbEnG+CNSaCDh9Q2+93YrTowRcCvSWxSHewGlLSquj2uAP3Wg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/command/-/command-0.3.6.tgz",
|
||||
"integrity": "sha512-tI7192YZnFmC4t298PLd9u+dDwFsCzWaA2p2qVSpiTlGsk2ZOdTOfKbA/sFqearV0DOAG97KW1h81M4XbXGKkQ==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2437,12 +2437,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/core": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/core/-/core-0.3.5.tgz",
|
||||
"integrity": "sha512-XrrogUnSjari3FipYUqpyiPKy30vewI5Jp9khRgyXc9cZiLVbdOd8Ki/LzHyxQc0E5R2H84XHHCpt1eWcKGMew==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/core/-/core-0.3.6.tgz",
|
||||
"integrity": "sha512-/6PeNGAa0lGmCoA7/PzqGx0vnWQ+oizdvKG9P8/sm0aI8iu9+wxGOKUGUNUASkDRzJk8vzIPzP/26qaPrxKK2w==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/command": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/command": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"@phosphor/messaging": "^1.3.0",
|
||||
"@tweenjs/tween.js": "^18",
|
||||
"clsx": "^1.1.1",
|
||||
@@ -2482,12 +2482,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/document": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/document/-/document-0.3.5.tgz",
|
||||
"integrity": "sha512-Y6Rrka33peD56bfJ5kDm2Ah+aDXiLJZdhepVoyvVBupySDnsGvAl7D4s0/dev+zQb6XsatgWAJf1SZ3UzdeTxQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/document/-/document-0.3.6.tgz",
|
||||
"integrity": "sha512-idEXiFsoOrWgxA1DAQy2QBm+OI14xAZ87L7IjDJO6aaU52VpJxZZuQEQ3DI+ocndzT4kTaJsK2/QyzRPA98H7A==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"nanoid": "^4.0.2",
|
||||
@@ -2512,29 +2512,29 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/editor": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/editor/-/editor-0.3.5.tgz",
|
||||
"integrity": "sha512-/DCivTv4Gog8bXJ/qL10CTAGcwitnP3+Mnb6bJAjwvfX/y5FCD0OL9SKRIVXQhip4zxmFrmZmwnswJPnpbvxtA==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/editor/-/editor-0.3.6.tgz",
|
||||
"integrity": "sha512-xsKJ0RtJUDlq08KXaFTnjYgvDhg5zU2EaeXPk1vGGgK2dWKrEir7odpGrr3jOxt9oTIaT3Xdxoi9YwneqL3srw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/background-plugin": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/group-plugin": "0.3.5",
|
||||
"@flowgram.ai/history": "0.3.5",
|
||||
"@flowgram.ai/history-node-plugin": "0.3.5",
|
||||
"@flowgram.ai/i18n-plugin": "0.3.5",
|
||||
"@flowgram.ai/materials-plugin": "0.3.5",
|
||||
"@flowgram.ai/node": "0.3.5",
|
||||
"@flowgram.ai/node-core-plugin": "0.3.5",
|
||||
"@flowgram.ai/node-variable-plugin": "0.3.5",
|
||||
"@flowgram.ai/playground-react": "0.3.5",
|
||||
"@flowgram.ai/redux-devtool-plugin": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/shortcuts-plugin": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/variable-plugin": "0.3.5",
|
||||
"@flowgram.ai/background-plugin": "0.3.6",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/group-plugin": "0.3.6",
|
||||
"@flowgram.ai/history": "0.3.6",
|
||||
"@flowgram.ai/history-node-plugin": "0.3.6",
|
||||
"@flowgram.ai/i18n-plugin": "0.3.6",
|
||||
"@flowgram.ai/materials-plugin": "0.3.6",
|
||||
"@flowgram.ai/node": "0.3.6",
|
||||
"@flowgram.ai/node-core-plugin": "0.3.6",
|
||||
"@flowgram.ai/node-variable-plugin": "0.3.6",
|
||||
"@flowgram.ai/playground-react": "0.3.6",
|
||||
"@flowgram.ai/redux-devtool-plugin": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"@flowgram.ai/shortcuts-plugin": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"@flowgram.ai/variable-plugin": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2544,13 +2544,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/fixed-drag-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-drag-plugin/-/fixed-drag-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-sytXPYyiNU6RpLKsTPeXd83BWQjQaIrgQRGKuSoTYI9LUe8fDKz558xE/kJaLOvoyfeQwvpKj1kp03LAZ63+zA==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-drag-plugin/-/fixed-drag-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-UhWVMTCKpsVu63M3VCxDjmAST88eNKrfkHNCQ73+obS/dKNKh4tyroz9kSnGHYfWjxme40fUP4bO459QgDhg7Q==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2560,29 +2560,29 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/fixed-history-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-history-plugin/-/fixed-history-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-V7QTfMykzmVfn0eaq1z7C/ukQnJhP8kr2qGUK/fxjOqhacgcBYW1+Pc+XsQWHQbo5dADr2kTlr42dgqjqY2Grg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-history-plugin/-/fixed-history-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-bVWoKNUDybC5ojnZ/j1LFGRAfKw/3Ur/JYtA80d2qaq2WT+XXd2+f1RrbpRQaGQvcpVwhZT+oHFINn4srUl5vg==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/history": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/history": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/fixed-layout-core": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-layout-core/-/fixed-layout-core-0.3.5.tgz",
|
||||
"integrity": "sha512-ojhQaIOweR5QH7gsc7fWavb5aF270jHu0m0RIjLtc7dFCUMiadlU+tkm2sP7Y1BM76aPXsG3hnjHUk7wM2sU4A==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-layout-core/-/fixed-layout-core-0.3.6.tgz",
|
||||
"integrity": "sha512-TbpDN7zKaZCMk5RfRxTCuQkmd56cC11qFPysMzGe5g/2Yqy3OZ5P8VdavhHrOv/hN9sdnHrs8mEirN1APIp22Q==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
@@ -2593,19 +2593,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/fixed-layout-editor": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-layout-editor/-/fixed-layout-editor-0.3.5.tgz",
|
||||
"integrity": "sha512-bwMChriT0e0msP/6UGS6gAH+r3wqPDI2PObV01c/+JxkPjTHK/B+e1WoI5xZriQB7WQ0Y0/v2pxxrYmiGP3rvw==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/fixed-layout-editor/-/fixed-layout-editor-0.3.6.tgz",
|
||||
"integrity": "sha512-0FMBbd6VXsHLFF5kBptEKp6S0YGYdlHNKZGI+KYJL3KwtklqoYr8/AvFtY5IS6nF3n44tP6m8CsuvwQZUXIFAw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/editor": "0.3.5",
|
||||
"@flowgram.ai/fixed-drag-plugin": "0.3.5",
|
||||
"@flowgram.ai/fixed-history-plugin": "0.3.5",
|
||||
"@flowgram.ai/fixed-layout-core": "0.3.5",
|
||||
"@flowgram.ai/history": "0.3.5",
|
||||
"@flowgram.ai/reactive": "0.3.5",
|
||||
"@flowgram.ai/select-box-plugin": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/editor": "0.3.6",
|
||||
"@flowgram.ai/fixed-drag-plugin": "0.3.6",
|
||||
"@flowgram.ai/fixed-history-plugin": "0.3.6",
|
||||
"@flowgram.ai/fixed-layout-core": "0.3.6",
|
||||
"@flowgram.ai/history": "0.3.6",
|
||||
"@flowgram.ai/reactive": "0.3.6",
|
||||
"@flowgram.ai/select-box-plugin": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2615,12 +2615,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/form": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/form/-/form-0.3.5.tgz",
|
||||
"integrity": "sha512-PmoG4k+aAdzt0v2aZKb3A/ArpUe0NKsACU68185PyXfGl8AU+GWP8ujdx3txKm2VTVEDjOFWsLSMh1/3RkRgkA==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/form/-/form-0.3.6.tgz",
|
||||
"integrity": "sha512-lXNCq8sgNOPc50uVbPHAk+IsSFFNIvLkMMVvGaXXapH9p4Up5zGVPrRRuzCKeUdZHMe7wvWiAvR5hG335EsCKQ==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/reactive": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/reactive": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"fast-equals": "^2.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"nanoid": "^4.0.2"
|
||||
@@ -2631,13 +2631,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/form-core": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/form-core/-/form-core-0.3.5.tgz",
|
||||
"integrity": "sha512-fgzjJT9cUIYcclRSbMfoAHS9hqN8AvbvaZcx2EXlQDVpGAZsrTrMe4WmPe1mQ3eCakj9oj4VKqu8kipfT6spSg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/form-core/-/form-core-0.3.6.tgz",
|
||||
"integrity": "sha512-wVrJZ+o1FbLwLBOchbJ1vc8BYPeMqHUuGNUu4TdmNvmHQtxChwUqX2nyCQYUXP3/sXnQnpuKHfvwA6VY12H6gQ==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
@@ -2665,16 +2665,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/free-layout-core": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/free-layout-core/-/free-layout-core-0.3.5.tgz",
|
||||
"integrity": "sha512-ZyjSFe+/Wg8wYXtxylMfLTuapOwSucHIXmJXD4Oz6WJQk39mJ6Cfds8pbp9aPDpFYfhRdQJOLAb9nUOh5+QnBw==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/free-layout-core/-/free-layout-core-0.3.6.tgz",
|
||||
"integrity": "sha512-Rcaol6+X1cBLX6Iu3AwixZC7516fOocxMPW2JeSPrWJChDOJmHtme5iMcxAKirpct9L/+AxSD0c0gIsrEmiqag==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/node": "0.3.5",
|
||||
"@flowgram.ai/reactive": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/node": "0.3.6",
|
||||
"@flowgram.ai/reactive": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
"nanoid": "^4.0.2",
|
||||
@@ -2703,14 +2703,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/group-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/group-plugin/-/group-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-FRic+LX9NjjW18sd7A/lV1v+wBJKwDnFUranye1nK2f9znN51k1GLm/0W/Ch0N0pZXlV8clCHYaMN9TIIZMHtQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/group-plugin/-/group-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-neDrH5KNPStAmUgQhEuTmfd0zFgsERFplRIwXX+ByV7gPpHWdPHoboTPSzJ7ZXEAjogFEQgY8IRsp7KSA7iNAw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2720,12 +2720,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/history": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/history/-/history-0.3.5.tgz",
|
||||
"integrity": "sha512-G0vU9vNJdpbHSnBx8GG8VOyTfD5Qy4L4j8S577SHl3RxhIIh7vr1tm5REEzzhxJWsvOID+v1+73XhSTzTmVi8w==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/history/-/history-0.3.6.tgz",
|
||||
"integrity": "sha512-Hk3u5lLh29XqZovyrzPI35ItgB4u0+J1N36u6+HlR+Wk82HTHW6K4sKQErzZFSVEByBC/X1XlwtSNOOutxQALw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"nanoid": "^4.0.2",
|
||||
@@ -2733,17 +2733,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/history-node-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/history-node-plugin/-/history-node-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-oeoy0DJdP0dAfcOLRnKPB/r6wJcnd2rtkVwVrrpQCr3H2QF7IBNKmQFf+ueXR6e8onbNoS0b7stYqCRIFeeCaQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/history-node-plugin/-/history-node-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-PD7w6/VBExL4VQkWwh+x7OjnPZaGTPhXB1DSETivTtj8pfB4HkihbtG5VlnyoDJWooBvzBJhk2Dmx91fGak6Tw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/history": "0.3.5",
|
||||
"@flowgram.ai/node": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/history": "0.3.6",
|
||||
"@flowgram.ai/node": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
@@ -2772,32 +2772,32 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/i18n": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/i18n/-/i18n-0.3.5.tgz",
|
||||
"integrity": "sha512-5G4wMZ3QjCIEeU2g0Cqa+vjvEoVZxs/hFx/9AV1HusBBDjeV3LOod8AM50VwIDbL/nGjLHQo2e7Nf6WBMOj86Q==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/i18n/-/i18n-0.3.6.tgz",
|
||||
"integrity": "sha512-yPuYl1miztb4I4tC1QFzvYyN82j+qWIsxcahizbmrI9eA3RhsqTDq/UgX7r9pOzVlfdITMqQ8OKUyW/lPNZcjA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"i18n-js": "^4.5.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/i18n-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/i18n-plugin/-/i18n-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-rm+nQ5r7QAWSEjEyO+cT9raIVOGDa5QIdezI+NiCco27VFGsRY28dQXROd0jf/mDK91IfHrSec5nVks5bE9ZMg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/i18n-plugin/-/i18n-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-2FJACeapk49F/kpfVNI9DwYPQITvXYfA86pAWKPL51v1TncBdbdvzc3WSSOEXVdWpvA8axztYlrwYQz8ra9tvA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/i18n": "0.3.5"
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/i18n": "0.3.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/materials-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/materials-plugin/-/materials-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-ZORaEEDBPKXbTD9LIhPX8PfPfeIYiyJsPkwKm+wtSEoKbP7G+tahSMTVPDwLiIeWbQ93lEZK1/JK2XpL6rA19Q==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/materials-plugin/-/materials-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-UVyPEMnzP14bULUIpThogzaJA3Xc0Uo5QVTwB8nZ4gpo4tlkv2ssLbAUnJx6fB/+1Fh99vRdJb1lR8mbfsauOA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2808,14 +2808,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/minimap-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/minimap-plugin/-/minimap-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-+mQx4SoaoA0EghPRmBxqIK5jbHQrzswfg9CQ3kqk5Yu5rhPTpmr+IaHbRK6FWpuehJZNxkjcUKAY705rtFIZcA==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/minimap-plugin/-/minimap-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-f3sDist0dOp3hHDTp83e5Y8m+9c/vKnm3emdGXeomZZgDqCMTCYC+4OPHLCxNLhdxdaLbV5EAvRY7mVHk63qIw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
@@ -2827,15 +2827,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/node": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/node/-/node-0.3.5.tgz",
|
||||
"integrity": "sha512-OQvcuMH3T+l9RCXfAt4tWX6tijXtCp/Kkp/pcoNFfJ7o1abfRHMKEE66i51TPn89MYrIjRxH0GY+qcm9UOuiQQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/node/-/node-0.3.6.tgz",
|
||||
"integrity": "sha512-Wg7lbw/MAezapLuYCfJ/m89f/RbFwntpoWuR9B9/Eah2riGTQOYpU69+9IuRjokpaqW4T/KNDFF6BZiOz0h+Ew==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"nanoid": "^4.0.2",
|
||||
@@ -2847,16 +2847,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/node-core-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/node-core-plugin/-/node-core-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-SdWDx2ghcRbb6imacoAi+j/tZIVPcLt7FGYBg0FpXH2r0jVioXjq1BRq11GpvQqlCyDuE/J+IP21NWi1DSwKcA==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/node-core-plugin/-/node-core-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-5KIJaFb6CmZbXosN+D5ulNLRiDFJEq+DK3jbCqw+Hg+BC1YA2EAwCVTQvphptYAXP12BQ8B23S0QMYGUkuhWsA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/node": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/node": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2867,16 +2867,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/node-variable-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/node-variable-plugin/-/node-variable-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-uZXyuBQDC9GHnJsx8w+aVM3Eb9+DNNH0qe1rZzS5MrrRG7A85t/OsGPL98p2kZJVU6Q6N+38REchsV9KdYot+Q==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/node-variable-plugin/-/node-variable-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-7lBgAOyfGqNCSSVWqe3QetNG4hK9UiABz0DCVZl2ihc/9TuTev+BS+Lb0w/aTNKsr4HvTXbeERsxyTdolKrYVA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/form-core": "0.3.5",
|
||||
"@flowgram.ai/node": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/variable-plugin": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/form-core": "0.3.6",
|
||||
"@flowgram.ai/node": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"@flowgram.ai/variable-plugin": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
@@ -2905,14 +2905,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/playground-react": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/playground-react/-/playground-react-0.3.5.tgz",
|
||||
"integrity": "sha512-zBcHDS7hQ58F4o3yw0eGNv3U2qcp2qvdRJmHD0oyyCCfygBk1iqycqB8mK0J0CaferPIr7xf7CW4QAsJ/EAvbQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/playground-react/-/playground-react-0.3.6.tgz",
|
||||
"integrity": "sha512-cL4i0sg3h9Y693N5i1tLrjleJsM9wMC+E+bNR7pV2BatRji7boz3+sfBfOIZnMCAxgl4ppUtnXGt2BYnkl2Pkw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/background-plugin": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/shortcuts-plugin": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/background-plugin": "0.3.6",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/shortcuts-plugin": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -2922,11 +2922,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/reactive": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/reactive/-/reactive-0.3.5.tgz",
|
||||
"integrity": "sha512-qzb7bB7SXk2JkikaCRxzKAs5rvSJqAfCCSwgbXSo3/1r4XsARuGYE0iyoobl0Fa4gD9kUk1FSv7htsxTqja9SQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/reactive/-/reactive-0.3.6.tgz",
|
||||
"integrity": "sha512-iv0eWuZkVo1vHRO6f+nFGlZCDiRNSN4+cOtZb40RepKVU8vNZr9xLptsnZ1vvh8csl7LLi5V/7V/ZaZ2BqGskw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/utils": "0.3.5"
|
||||
"@flowgram.ai/utils": "0.3.6"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.8",
|
||||
@@ -2934,12 +2934,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/redux-devtool-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/redux-devtool-plugin/-/redux-devtool-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-3mLlbz+RI5mPKVXLwqH2tT4L9ngmMZlq2Z4zmMl/F83JSOi1PCdYlD6J4FHG2jRBES7iI37VTFDxiJoHbP9tFw==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/redux-devtool-plugin/-/redux-devtool-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-3nM+O9C0Sv1+k3PdrWEPZfGTDppf+lKSvUj4tZcEOHv1XTwd8wZ23ZVz5+8wWy3UBzEFCbC/BNHl4ahEcIDbKA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/variable-core": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/variable-core": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2",
|
||||
"styled-components": "^5"
|
||||
@@ -2994,14 +2994,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/renderer": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/renderer/-/renderer-0.3.5.tgz",
|
||||
"integrity": "sha512-YheWVjZ1CUIUfjfQwf7G/4jeyWsYWKG9+4zJW+co5U8isNAnVH2l+8Ahibx5fOIEnmzerOVRN73dKSSetwDdPg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/renderer/-/renderer-0.3.6.tgz",
|
||||
"integrity": "sha512-o2S1oeWfWSR7C2Y6TSFAjdcHqdOPBOBWNtAglB4nK1SdHT9/sRWt60rdyArrWajU9DLvG197RN8qzSRTNkDbsQ==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/i18n": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/i18n": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
@@ -3012,12 +3012,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/select-box-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/select-box-plugin/-/select-box-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-8I1+KoE9LQaDIfte/AyC4SwB9pcmb/HcQQNKklZbSPR8He3Fu4dLrTcquLO6dkRx/aF6dvugT3/78ise3mijoQ==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/select-box-plugin/-/select-box-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-lsrFq01YUhLOFGjPhKQA6nmsNI9U1aM7hg3p1Fw4ILIHyRFZse8mvHrMvf/fjAPfVOdJTKjcsGfQPOjWTrhWFQ==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/renderer": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/renderer": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2"
|
||||
},
|
||||
@@ -3027,13 +3027,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/shortcuts-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/shortcuts-plugin/-/shortcuts-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-68RV3LAgsZxeHvUpHCQpa4k80J06D9zpRgCjXfCpyBqUkXfMqp/uvv3pM/LBynl+4OyLzbFCxt0dsXDQP6mjNw==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/shortcuts-plugin/-/shortcuts-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-RQ5fnqtqw2aXJTptV3yLEKFNl7mdd2q8CXQ7v8snqRUaB5vzI55M3SJUvCgmenayXSGktBofGcZ/mpA578lVKw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2",
|
||||
"styled-components": "^5"
|
||||
@@ -3088,9 +3088,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/utils": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/utils/-/utils-0.3.5.tgz",
|
||||
"integrity": "sha512-t8KZ7c0+evAqo0e+wE3Kw58UGRkM0+DSit+X0wqerbVZe0K3j6fIIU/C0xuiVxhvxYAyCHpbNaJR0REE6jCcgg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/utils/-/utils-0.3.6.tgz",
|
||||
"integrity": "sha512-5RKx2JrEjlcMOFe81F2DnroQT195ycSmuzt71p2LP/JDzNM0nG5FDRFY9DN5xuvXAeDvbD9L61rZBIgaAIXFKw==",
|
||||
"dependencies": {
|
||||
"clsx": "^1.1.1",
|
||||
"inversify": "^6.0.1",
|
||||
@@ -3128,12 +3128,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/variable-core": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/variable-core/-/variable-core-0.3.5.tgz",
|
||||
"integrity": "sha512-A+FwAF3uFOnULsnRz6UeVofax3fR9nIY4f+9f2td1+SEN/sCrI15vmsb9rWynC2OfSdx3k+IMzuQrpP/BwGVPw==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/variable-core/-/variable-core-0.3.6.tgz",
|
||||
"integrity": "sha512-IIssDNEpjyno7m+T3FiOzsrx4bM0qJGsZM+0MIF/CG8lbu//mtpd35SFEODePB8jZLg8sMU49/9f81LtWXXZsA==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"fast-equals": "^2.0.0",
|
||||
"inversify": "^6.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
@@ -3164,15 +3164,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/variable-layout": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/variable-layout/-/variable-layout-0.3.5.tgz",
|
||||
"integrity": "sha512-ah0J5Jzj0nDHNMdjMrZ7VJtxi5DkVgolNhLjN6HyoC4JyxRTMqDSwT1JQI09pLoxqhC+LuEZ4D36eJqAY883uw==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/variable-layout/-/variable-layout-0.3.6.tgz",
|
||||
"integrity": "sha512-f43k2OnOL7KXcuewQHX9Oy4t6cy4iotIYRnV5kvlD5JlZpPxCxKBtFeRPH6L/xXoKNCLA9JFv9IIBvO+omeU4A==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/free-layout-core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/variable-core": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/free-layout-core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"@flowgram.ai/variable-core": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2",
|
||||
"styled-components": "^5"
|
||||
@@ -3227,16 +3227,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@flowgram.ai/variable-plugin": {
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/variable-plugin/-/variable-plugin-0.3.5.tgz",
|
||||
"integrity": "sha512-Y7kgLgV/jZS/u9BfcstmxxHYi9NbGZqr2jsBXkOiV/+eYsSaVZW11YXZaC0ZNetl5/SVR68zbvzqjJV6nKIIHg==",
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npmmirror.com/@flowgram.ai/variable-plugin/-/variable-plugin-0.3.6.tgz",
|
||||
"integrity": "sha512-b7q5/FjdbLTChuW2eLh708KDhLF4gdjzkXrjwWoyZ0vleo/Qs7S8NMuzHnhYusu5zdj0N0aFDOb+5jl7uPk2rw==",
|
||||
"dependencies": {
|
||||
"@flowgram.ai/core": "0.3.5",
|
||||
"@flowgram.ai/document": "0.3.5",
|
||||
"@flowgram.ai/free-layout-core": "0.3.5",
|
||||
"@flowgram.ai/utils": "0.3.5",
|
||||
"@flowgram.ai/variable-core": "0.3.5",
|
||||
"@flowgram.ai/variable-layout": "0.3.5",
|
||||
"@flowgram.ai/core": "0.3.6",
|
||||
"@flowgram.ai/document": "0.3.6",
|
||||
"@flowgram.ai/free-layout-core": "0.3.6",
|
||||
"@flowgram.ai/utils": "0.3.6",
|
||||
"@flowgram.ai/variable-core": "0.3.6",
|
||||
"@flowgram.ai/variable-layout": "0.3.6",
|
||||
"inversify": "^6.0.1",
|
||||
"reflect-metadata": "~0.2.2",
|
||||
"styled-components": "^5"
|
||||
@@ -4643,9 +4643,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@uiw/codemirror-extensions-basic-setup": {
|
||||
"version": "4.24.2",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.24.2.tgz",
|
||||
"integrity": "sha512-wW/gjLRvVUeYyhdh2TApn25cvdcR+Rhg6R/j3eTOvXQzU1HNzNYCVH4YKVIfgtfdM/Xs+N8fkk+rbr1YvBppCg==",
|
||||
"version": "4.25.1",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.25.1.tgz",
|
||||
"integrity": "sha512-zxgA2QkvP3ZDKxTBc9UltNFTrSeFezGXcZtZj6qcsBxiMzowoEMP5mVwXcKjpzldpZVRuY+JCC+RsekEgid4vg==",
|
||||
"dependencies": {
|
||||
"@codemirror/autocomplete": "^6.0.0",
|
||||
"@codemirror/commands": "^6.0.0",
|
||||
@@ -4669,20 +4669,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@uiw/codemirror-theme-vscode": {
|
||||
"version": "4.24.2",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-vscode/-/codemirror-theme-vscode-4.24.2.tgz",
|
||||
"integrity": "sha512-5rLvAMKNjqtHSy3BZnI1Q4ZLqUDDJC5fKOp8Mv5VjPqEmAxEAIGrIXBnhAFlRg5VjHbHEMtM1O5ugL3IeHoBdQ==",
|
||||
"version": "4.25.1",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/codemirror-theme-vscode/-/codemirror-theme-vscode-4.25.1.tgz",
|
||||
"integrity": "sha512-vZXvErVDvHLFWCo78Y22R2grisGkWJFFKkdOu9+tcRjWfOVb7K3fDu/H4fDr6JujLTaL+LY/vP/LZYAGJXVqgA==",
|
||||
"dependencies": {
|
||||
"@uiw/codemirror-themes": "4.24.2"
|
||||
"@uiw/codemirror-themes": "4.25.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://jaywcjlove.github.io/#/sponsor"
|
||||
}
|
||||
},
|
||||
"node_modules/@uiw/codemirror-themes": {
|
||||
"version": "4.24.2",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/codemirror-themes/-/codemirror-themes-4.24.2.tgz",
|
||||
"integrity": "sha512-0fQusJE08APL+1WM0xYqvampVM2RpABHjvZbcJWHdRc+teZbrP8907VW1ZX1tO/7/xgRRt4Fc3RHPCcTs7b0NQ==",
|
||||
"version": "4.25.1",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/codemirror-themes/-/codemirror-themes-4.25.1.tgz",
|
||||
"integrity": "sha512-6o8tQ8bdq14RuVFpZ7l9u8KnuPq824uG3U1VV933Uhv8mfaxaoaOQSjv6T2bQUPhjH6ZlEu5+tAMkOfIL21eIQ==",
|
||||
"dependencies": {
|
||||
"@codemirror/language": "^6.0.0",
|
||||
"@codemirror/state": "^6.0.0",
|
||||
@@ -4698,15 +4698,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@uiw/react-codemirror": {
|
||||
"version": "4.24.2",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/react-codemirror/-/react-codemirror-4.24.2.tgz",
|
||||
"integrity": "sha512-kp7DhTq4RR+M2zJBQBrHn1dIkBrtOskcwJX4vVsKGByReOvfMrhqRkGTxYMRDTX6x75EG2mvBJPDKYcUQcHWBw==",
|
||||
"version": "4.25.1",
|
||||
"resolved": "https://registry.npmmirror.com/@uiw/react-codemirror/-/react-codemirror-4.25.1.tgz",
|
||||
"integrity": "sha512-eESBKHndoYkaEGlKCwRO4KrnTw1HkWBxVpEeqntoWTpoFEUYxdLWUYmkPBVk4/u8YzVy9g91nFfIRpqe5LjApg==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.18.6",
|
||||
"@codemirror/commands": "^6.1.0",
|
||||
"@codemirror/state": "^6.1.1",
|
||||
"@codemirror/theme-one-dark": "^6.0.0",
|
||||
"@uiw/codemirror-extensions-basic-setup": "4.24.2",
|
||||
"@uiw/codemirror-extensions-basic-setup": "4.25.1",
|
||||
"codemirror": "^6.0.0"
|
||||
},
|
||||
"funding": {
|
||||
|
||||
+10
-10
@@ -13,20 +13,20 @@
|
||||
"@codemirror/lang-yaml": "^6.1.2",
|
||||
"@codemirror/language": "^6.11.2",
|
||||
"@codemirror/legacy-modes": "^6.5.1",
|
||||
"@flowgram.ai/document": "^0.3.5",
|
||||
"@flowgram.ai/fixed-layout-editor": "^0.3.5",
|
||||
"@flowgram.ai/minimap-plugin": "^0.3.5",
|
||||
"@flowgram.ai/document": "^0.3.6",
|
||||
"@flowgram.ai/fixed-layout-editor": "^0.3.6",
|
||||
"@flowgram.ai/minimap-plugin": "^0.3.6",
|
||||
"@tabler/icons-react": "^3.34.1",
|
||||
"@uiw/codemirror-extensions-basic-setup": "^4.24.2",
|
||||
"@uiw/codemirror-theme-vscode": "^4.24.2",
|
||||
"@uiw/react-codemirror": "^4.24.2",
|
||||
"@uiw/codemirror-extensions-basic-setup": "^4.25.1",
|
||||
"@uiw/codemirror-theme-vscode": "^4.25.1",
|
||||
"@uiw/react-codemirror": "^4.25.1",
|
||||
"ahooks": "^3.9.0",
|
||||
"antd": "^5.27.0",
|
||||
"antd-zod": "^7.0.0",
|
||||
"clsx": "^2.1.1",
|
||||
"cron-parser": "^5.3.0",
|
||||
"file-saver": "^2.0.5",
|
||||
"i18next": "^25.3.4",
|
||||
"i18next": "^25.3.6",
|
||||
"i18next-browser-languagedetector": "^8.2.0",
|
||||
"immer": "^10.1.1",
|
||||
"nanoid": "^5.1.5",
|
||||
@@ -43,8 +43,8 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.33.0",
|
||||
"@tailwindcss/postcss": "^4.1.11",
|
||||
"@tailwindcss/vite": "^4.1.11",
|
||||
"@tailwindcss/postcss": "^4.1.12",
|
||||
"@tailwindcss/vite": "^4.1.12",
|
||||
"@types/file-saver": "^2.0.7",
|
||||
"@types/fs-extra": "^11.0.4",
|
||||
"@types/node": "^22.16.5",
|
||||
@@ -63,7 +63,7 @@
|
||||
"eslint-plugin-react-refresh": "^0.4.20",
|
||||
"fs-extra": "^11.3.1",
|
||||
"prettier": "^3.6.2",
|
||||
"tailwindcss": "^4.1.11",
|
||||
"tailwindcss": "^4.1.12",
|
||||
"typescript": "^5.8.3",
|
||||
"typescript-eslint": "^8.39.1",
|
||||
"vite": "^6.3.5"
|
||||
|
||||
@@ -7,7 +7,7 @@ import { shell } from "@codemirror/legacy-modes/mode/shell";
|
||||
import { basicSetup } from "@uiw/codemirror-extensions-basic-setup";
|
||||
import { vscodeDark, vscodeLight } from "@uiw/codemirror-theme-vscode";
|
||||
import CodeMirror, { type ReactCodeMirrorProps, type ReactCodeMirrorRef } from "@uiw/react-codemirror";
|
||||
import { useFocusWithin } from "ahooks";
|
||||
import { useFocusWithin, useHover } from "ahooks";
|
||||
import { theme } from "antd";
|
||||
|
||||
import { useBrowserTheme } from "@/hooks";
|
||||
@@ -24,7 +24,8 @@ const CodeInput = ({ className, style, disabled, language, ...props }: CodeInput
|
||||
const { theme: browserTheme } = useBrowserTheme();
|
||||
|
||||
const cmRef = useRef<ReactCodeMirrorRef>(null);
|
||||
const isFocusWithin = useFocusWithin(cmRef.current?.editor);
|
||||
const isFocusing = useFocusWithin(cmRef.current?.editor);
|
||||
const isHovering = useHover(cmRef.current?.editor);
|
||||
|
||||
const cmTheme = useMemo(() => {
|
||||
if (browserTheme === "dark") {
|
||||
@@ -66,13 +67,30 @@ const CodeInput = ({ className, style, disabled, language, ...props }: CodeInput
|
||||
|
||||
return (
|
||||
<div
|
||||
className={mergeCls(className, `hover:border-[${themeToken.colorPrimaryBorderHover}]`)}
|
||||
className={mergeCls("ant-input", className)}
|
||||
style={{
|
||||
...(style ?? {}),
|
||||
border: `1px solid ${isFocusWithin ? (themeToken.Input?.activeBorderColor ?? themeToken.colorPrimaryBorder) : themeToken.colorBorder}`,
|
||||
...style,
|
||||
paddingBlock: themeToken.Input?.paddingBlock,
|
||||
paddingInline: themeToken.Input?.paddingInline,
|
||||
fontSize: themeToken.Input?.inputFontSize,
|
||||
lineHeight: themeToken.lineHeight,
|
||||
color: disabled ? themeToken.colorTextDisabled : themeToken.colorText,
|
||||
backgroundColor: disabled
|
||||
? themeToken.colorBgContainerDisabled
|
||||
: isFocusing
|
||||
? (themeToken.Input?.activeBg ?? themeToken.colorBgContainer)
|
||||
: isHovering
|
||||
? (themeToken.Input?.hoverBg ?? themeToken.colorBgContainer)
|
||||
: void 0,
|
||||
borderWidth: `${themeToken.lineWidth}px`,
|
||||
borderStyle: themeToken.lineType,
|
||||
borderColor: isFocusing
|
||||
? (themeToken.Input?.activeBorderColor ?? themeToken.colorPrimaryActive)
|
||||
: isHovering
|
||||
? (themeToken.Input?.hoverBorderColor ?? themeToken.colorPrimaryHover)
|
||||
: themeToken.colorBorder,
|
||||
borderRadius: `${themeToken.borderRadius}px`,
|
||||
backgroundColor: disabled ? themeToken.colorBgContainerDisabled : themeToken.colorBgContainer,
|
||||
boxShadow: isFocusWithin ? themeToken.Input?.activeShadow : void 0,
|
||||
boxShadow: isFocusing ? themeToken.Input?.activeShadow : void 0,
|
||||
overflow: "hidden",
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from "react";
|
||||
import { forwardRef, useImperativeHandle, useMemo, useRef } from "react";
|
||||
import {
|
||||
ConstantKeys,
|
||||
EditorRenderer,
|
||||
@@ -119,6 +119,18 @@ const Designer = forwardRef<DesignerInstance, DesignerProps>(
|
||||
}),
|
||||
],
|
||||
|
||||
onInit: (ctx) => {
|
||||
const callback = () => {
|
||||
if (rendered.current) {
|
||||
onDocumentChange?.(flowgramEditorRef.current!);
|
||||
}
|
||||
};
|
||||
ctx.document.onNodeCreate(callback);
|
||||
ctx.document.onNodeUpdate(callback);
|
||||
ctx.document.onNodeDispose(callback);
|
||||
ctx.document.originTree.onTreeChange(callback);
|
||||
},
|
||||
|
||||
onAllLayersRendered: (ctx) => {
|
||||
rendered.current = true;
|
||||
|
||||
@@ -128,50 +140,34 @@ const Designer = forwardRef<DesignerInstance, DesignerProps>(
|
||||
}, 1);
|
||||
},
|
||||
}),
|
||||
[themeToken, initialData, readonly]
|
||||
[themeToken, initialData, readonly, onDocumentChange]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
const callback = () => {
|
||||
if (rendered.current) {
|
||||
onDocumentChange?.(flowgramEditorRef.current!);
|
||||
}
|
||||
};
|
||||
const d1 = flowgramEditorRef.current?.document?.onNodeCreate(callback);
|
||||
const d2 = flowgramEditorRef.current?.document?.onNodeUpdate(callback);
|
||||
const d3 = flowgramEditorRef.current?.document?.onNodeDispose(callback);
|
||||
const d4 = flowgramEditorRef.current?.document?.renderTree?.onTreeChange(callback);
|
||||
|
||||
return () => {
|
||||
d1?.dispose();
|
||||
d2?.dispose();
|
||||
d3?.dispose();
|
||||
d4?.dispose();
|
||||
};
|
||||
}, [onDocumentChange]);
|
||||
|
||||
useImperativeHandle(ref, () => {
|
||||
return {
|
||||
get clipboard() {
|
||||
return flowgramEditorRef.current!.clipboard;
|
||||
},
|
||||
get container() {
|
||||
return flowgramEditorRef.current!.container;
|
||||
},
|
||||
get document() {
|
||||
return flowgramEditorRef.current!.document;
|
||||
},
|
||||
get playground() {
|
||||
return flowgramEditorRef.current!.playground;
|
||||
get history() {
|
||||
return flowgramEditorRef.current!.history;
|
||||
},
|
||||
get operation() {
|
||||
return flowgramEditorRef.current!.operation;
|
||||
},
|
||||
get clipboard() {
|
||||
return flowgramEditorRef.current!.clipboard;
|
||||
get playground() {
|
||||
return flowgramEditorRef.current!.playground;
|
||||
},
|
||||
get selection() {
|
||||
return flowgramEditorRef.current!.selection;
|
||||
},
|
||||
get history() {
|
||||
return flowgramEditorRef.current!.history;
|
||||
get tools() {
|
||||
return flowgramEditorRef.current!.tools;
|
||||
},
|
||||
|
||||
get(identifier) {
|
||||
|
||||
@@ -19,7 +19,7 @@ const Toolbar = ({ className, style }: ToolbarProps) => {
|
||||
const ctx = useClientContext();
|
||||
const { playground } = ctx;
|
||||
|
||||
const tools = usePlaygroundTools({ minZoom: 0.1, maxZoom: 3, padding: 48 });
|
||||
const tools = usePlaygroundTools({ minZoom: 0.1, maxZoom: 3 });
|
||||
|
||||
const refresh = useRefresh();
|
||||
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
import { FlowNodeBaseType, type FlowNodeEntity } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { Immer } from "immer";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { type NodeJSON, NodeType } from "./nodes/typings";
|
||||
|
||||
/**
|
||||
* 返回一个新的节点 ID。
|
||||
* @returns {String}
|
||||
*/
|
||||
export const newNodeId = () => nanoid();
|
||||
|
||||
/**
|
||||
* 克隆节点 JSON 对象。节点及其子节点 ID 均会重新分配。
|
||||
* @param {NodeJSON} node
|
||||
* @param {Object} options
|
||||
* @returns {NodeJSON}
|
||||
*/
|
||||
export const duplicateNodeJSON = (node: NodeJSON, options?: { withCopySuffix?: boolean }) => {
|
||||
const { produce } = new Immer({ autoFreeze: false });
|
||||
const deepClone = (node: NodeJSON, { withCopySuffix, nodeIdMap }: { withCopySuffix: boolean; nodeIdMap: Map<string, string> }) => {
|
||||
return produce(node, (draft) => {
|
||||
draft.data ??= {};
|
||||
draft.id = newNodeId();
|
||||
draft.data.name = withCopySuffix ? `${draft.data?.name || ""}-copy` : `${draft.data?.name || ""}`;
|
||||
|
||||
nodeIdMap.set(node.id, draft.id); // 原节点 ID 映射到新节点 ID
|
||||
|
||||
if (draft.blocks) {
|
||||
draft.blocks = draft.blocks.map((block) => deepClone(block as NodeJSON, { withCopySuffix: false, nodeIdMap }));
|
||||
}
|
||||
|
||||
if (draft.data?.config) {
|
||||
switch (draft.type) {
|
||||
case NodeType.BizDeploy:
|
||||
{
|
||||
const prevNodeId = draft.data.config.certificate?.split("#")?.[0];
|
||||
if (nodeIdMap.has(prevNodeId)) {
|
||||
draft.data.config = {
|
||||
...draft.data.config,
|
||||
certificate: `${nodeIdMap.get(prevNodeId)}#certificate`,
|
||||
};
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NodeType.Condition:
|
||||
{
|
||||
const stack = [] as any[];
|
||||
const expr = draft.data.config.expression;
|
||||
if (expr) {
|
||||
stack.push(expr);
|
||||
while (stack.length > 0) {
|
||||
const n = stack.pop()!;
|
||||
if ("left" in n) {
|
||||
stack.push(n.left);
|
||||
if ("selector" in n.left) {
|
||||
const prevNodeId = n.left.selector.id;
|
||||
if (nodeIdMap.has(prevNodeId)) {
|
||||
n.left.selector.id = nodeIdMap.get(prevNodeId)!;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ("right" in n) {
|
||||
stack.push(n.right);
|
||||
}
|
||||
}
|
||||
draft.data.config = {
|
||||
...draft.data.config,
|
||||
expression: expr,
|
||||
};
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
|
||||
return deepClone(node, { withCopySuffix: options?.withCopySuffix ?? true, nodeIdMap: new Map() });
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取指定节点到根节点为止的所有前序节点。不包括自身和根节点或开始节点。
|
||||
* @param {FlowNodeEntity} node
|
||||
* @returns {FlowNodeEntity[]}
|
||||
*/
|
||||
export const getAllPreviousNodes = (node: FlowNodeEntity): FlowNodeEntity[] => {
|
||||
if (node == null) return [];
|
||||
|
||||
// TODO: 不应该获取到旁路分支
|
||||
// // 先获取单一链路(即不包含分支)的全部节点
|
||||
// const chains: FlowNodeEntity[] = [];
|
||||
// let chain: FlowNodeEntity | undefined = node;
|
||||
// while (chain) {
|
||||
// if (chain.isStart || chain.flowNodeType === FlowNodeBaseType.ROOT) {
|
||||
// break;
|
||||
// }
|
||||
|
||||
// chains.push(chain);
|
||||
// chain = chain.pre ?? chain.parent;
|
||||
// }
|
||||
|
||||
// 再获取实际的全部节点
|
||||
const visited = new Set<string>();
|
||||
const result: FlowNodeEntity[] = [];
|
||||
let current: FlowNodeEntity | undefined = node;
|
||||
while (current) {
|
||||
if (current.isStart || current.flowNodeType === FlowNodeBaseType.ROOT) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (current.flowNodeType === NodeType.Condition) {
|
||||
/**
|
||||
* condition
|
||||
* blockIcon
|
||||
* inlineBlocks
|
||||
* branchBlock_1
|
||||
* blockOrderIcon
|
||||
* ...
|
||||
* branchBlock_2
|
||||
* blockOrderIcon
|
||||
* ...
|
||||
*/
|
||||
current.lastBlock?.blocks?.forEach((block) => {
|
||||
block.allChildren?.forEach((child) => {
|
||||
if (!visited.has(child.id)) {
|
||||
visited.add(child.id);
|
||||
result.push(child);
|
||||
}
|
||||
});
|
||||
});
|
||||
} else if (current.flowNodeType === NodeType.TryCatch) {
|
||||
/**
|
||||
* tryCatch
|
||||
* blockIcon
|
||||
* mainInlineBlocks
|
||||
* tryBlock
|
||||
* trySlot
|
||||
* ...
|
||||
* catchInlineBlocks
|
||||
* catchBlock_1
|
||||
* blockOrderIcon
|
||||
* ...
|
||||
* end
|
||||
* catchBlock_2
|
||||
* blockOrderIcon
|
||||
* ...
|
||||
* end
|
||||
*/
|
||||
current.lastBlock?.blocks?.forEach((block) => {
|
||||
block.allChildren?.forEach((child) => {
|
||||
if (!visited.has(child.id)) {
|
||||
visited.add(child.id);
|
||||
result.push(child);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (!visited.has(current.id)) {
|
||||
visited.add(current.id);
|
||||
result.push(current);
|
||||
}
|
||||
current = current.pre ?? current.parent;
|
||||
}
|
||||
|
||||
const prevNodes = result.filter((e) => {
|
||||
if (e.id === node.id) return false;
|
||||
if (e.isTypeOrExtendType(FlowNodeBaseType.BLOCK_ICON)) return false;
|
||||
if (e.isTypeOrExtendType(FlowNodeBaseType.BLOCK_ORDER_ICON)) return false;
|
||||
if (e.isTypeOrExtendType(FlowNodeBaseType.INLINE_BLOCKS)) return false;
|
||||
if (e.isTypeOrExtendType("trySlot")) return false;
|
||||
|
||||
return true;
|
||||
});
|
||||
console.log(node.document.root);
|
||||
console.log(prevNodes);
|
||||
return prevNodes;
|
||||
};
|
||||
@@ -555,13 +555,13 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
contactEmail: z.email(t("common.errmsg.email_invalid")),
|
||||
challengeType: z.string().nullish(),
|
||||
provider: z.string().nonempty(t("workflow_node.apply.form.provider.placeholder")),
|
||||
providerAccessId: z.string().nonempty(t("workflow_node.apply.form.provider_access.placeholder")),
|
||||
provider: z.string(t("workflow_node.apply.form.provider.placeholder")).nonempty(t("workflow_node.apply.form.provider.placeholder")),
|
||||
providerAccessId: z.string(t("workflow_node.apply.form.provider_access.placeholder")).nonempty(t("workflow_node.apply.form.provider_access.placeholder")),
|
||||
providerConfig: z.any().nullish(),
|
||||
caProvider: z.string().nullish(),
|
||||
caProviderAccessId: z.string().nullish(),
|
||||
caProviderConfig: z.any().nullish(),
|
||||
keyAlgorithm: z.string().nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
|
||||
keyAlgorithm: z.string(t("workflow_node.apply.form.key_algorithm.placeholder")).nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
|
||||
nameservers: z
|
||||
.string()
|
||||
.nullish()
|
||||
|
||||
@@ -12,10 +12,10 @@ import DeploymentProviderPicker from "@/components/provider/DeploymentProviderPi
|
||||
import DeploymentProviderSelect from "@/components/provider/DeploymentProviderSelect";
|
||||
import Show from "@/components/Show";
|
||||
import { ACCESS_USAGES, DEPLOYMENT_PROVIDERS, accessProvidersMap, deploymentProvidersMap } from "@/domain/provider";
|
||||
import { type WorkflowNodeConfigForDeploy, WorkflowNodeType, defaultNodeConfigForDeploy } from "@/domain/workflow";
|
||||
import { useAntdForm, useZustandShallowSelector } from "@/hooks";
|
||||
import { useWorkflowStore } from "@/stores/workflow";
|
||||
import { type WorkflowNodeConfigForDeploy, defaultNodeConfigForDeploy } from "@/domain/workflow";
|
||||
import { useAntdForm } from "@/hooks";
|
||||
|
||||
import { getAllPreviousNodes } from "../_util";
|
||||
import { FormNestedFieldsContextProvider, NodeFormContextProvider } from "./_context";
|
||||
import BizDeployNodeConfigFormProvider1PanelConsole from "./BizDeployNodeConfigFormProvider1PanelConsole";
|
||||
import BizDeployNodeConfigFormProvider1PanelSite from "./BizDeployNodeConfigFormProvider1PanelSite";
|
||||
@@ -126,13 +126,21 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
|
||||
|
||||
const { token: themeToken } = theme.useToken();
|
||||
|
||||
const { getWorkflowOuptutBeforeId } = useWorkflowStore(useZustandShallowSelector(["updateNode", "getWorkflowOuptutBeforeId"]));
|
||||
|
||||
const initialValues = useMemo(() => {
|
||||
return getNodeForm(node)?.getValueIn("config") as WorkflowNodeConfigForDeploy | undefined;
|
||||
}, [node]);
|
||||
|
||||
const formSchema = getSchema({ i18n });
|
||||
const formSchema = getSchema({ i18n }).superRefine((values, ctx) => {
|
||||
if (values.certificateOutputNodeId) {
|
||||
if (!certificateOutputNodeIdOptions.some((option) => option.value === values.certificateOutputNodeId)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.certificate_output_node_id.placeholder"),
|
||||
path: ["certificateOutputNodeId"],
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
const { form: formInst, formProps } = useAntdForm({
|
||||
form: props.form,
|
||||
@@ -142,6 +150,17 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
|
||||
|
||||
const fieldProvider = Form.useWatch<string>("provider", { form: formInst, preserve: true });
|
||||
|
||||
const certificateOutputNodeIdOptions = useMemo(() => {
|
||||
return getAllPreviousNodes(node)
|
||||
.filter((node) => node.flowNodeType === NodeType.BizApply || node.flowNodeType === NodeType.BizUpload)
|
||||
.map((node) => {
|
||||
return {
|
||||
label: getNodeForm(node)?.getValueIn("name"),
|
||||
value: node.id,
|
||||
};
|
||||
});
|
||||
}, [node]);
|
||||
|
||||
const [showProviderAccess, setShowProviderAccess] = useState(false);
|
||||
useEffect(() => {
|
||||
// 内置的部署提供商(如本地部署)无需显示授权信息字段
|
||||
@@ -153,25 +172,6 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
|
||||
}
|
||||
}, [fieldProvider]);
|
||||
|
||||
// TODO: 适配 flowgram
|
||||
const certificateCandidates = useMemo(() => {
|
||||
const previousNodes = getWorkflowOuptutBeforeId(node.id, "certificate");
|
||||
return previousNodes
|
||||
.filter((node) => node.type === WorkflowNodeType.Apply || node.type === WorkflowNodeType.Upload)
|
||||
.map((item) => {
|
||||
return {
|
||||
label: item.name,
|
||||
options: (item.outputs ?? [])?.map((output) => {
|
||||
return {
|
||||
label: output.label,
|
||||
value: `${item.id}#${output.name}`,
|
||||
};
|
||||
}),
|
||||
};
|
||||
})
|
||||
.filter((group) => group.options.length > 0);
|
||||
}, [node.id]);
|
||||
|
||||
const NestedProviderConfigFields = useMemo(() => {
|
||||
/*
|
||||
注意:如果追加新的子组件,请保持以 ASCII 排序。
|
||||
@@ -369,7 +369,6 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
|
||||
|
||||
const handleProviderPick = (value: string) => {
|
||||
formInst.setFieldValue("provider", value);
|
||||
console.log();
|
||||
};
|
||||
|
||||
const handleProviderSelect = (value?: string | undefined) => {
|
||||
@@ -380,7 +379,7 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
|
||||
const oldValues = formInst.getFieldsValue();
|
||||
const newValues: Record<string, unknown> = {};
|
||||
for (const key in oldValues) {
|
||||
if (key === "provider" || key === "providerAccessId" || key === "certificate" || key === "skipOnLastSucceeded") {
|
||||
if (key === "certificateOutputNodeId" || key === "provider" || key === "providerAccessId" || key === "skipOnLastSucceeded") {
|
||||
newValues[key] = oldValues[key];
|
||||
} else {
|
||||
delete newValues[key];
|
||||
@@ -455,22 +454,24 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name="certificate"
|
||||
label={t("workflow_node.deploy.form.certificate.label")}
|
||||
extra={t("workflow_node.deploy.form.certificate.help")}
|
||||
name="certificateOutputNodeId"
|
||||
label={t("workflow_node.deploy.form.certificate_output_node_id.label")}
|
||||
extra={t("workflow_node.deploy.form.certificate_output_node_id.help")}
|
||||
rules={[formRule]}
|
||||
>
|
||||
<Select
|
||||
labelRender={({ label, value }) => {
|
||||
if (value != null) {
|
||||
const group = certificateCandidates.find((group) => group.options.some((option) => option.value === value));
|
||||
return `${group?.label} - ${label}`;
|
||||
}
|
||||
|
||||
return <span style={{ color: themeToken.colorTextPlaceholder }}>{t("workflow_node.deploy.form.certificate.placeholder")}</span>;
|
||||
optionRender={({ label, value }) => {
|
||||
return (
|
||||
<div className="flex items-center justify-between gap-4 overflow-hidden">
|
||||
<div className="flex-1 truncate">{label}</div>
|
||||
<div className="origin-right scale-90 font-mono text-xs" style={{ color: themeToken.colorTextSecondary }}>
|
||||
(NodeID: {value})
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}}
|
||||
options={certificateCandidates}
|
||||
placeholder={t("workflow_node.deploy.form.certificate.placeholder")}
|
||||
options={certificateOutputNodeIdOptions}
|
||||
placeholder={t("workflow_node.deploy.form.certificate_output_node_id.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
</div>
|
||||
@@ -529,8 +530,6 @@ const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n
|
||||
|
||||
const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
certificate: "",
|
||||
provider: "",
|
||||
...defaultNodeConfigForDeploy(),
|
||||
};
|
||||
};
|
||||
@@ -540,8 +539,10 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z
|
||||
.object({
|
||||
certificate: z.string().nonempty(t("workflow_node.deploy.form.certificate.placeholder")),
|
||||
provider: z.string().nonempty(t("workflow_node.deploy.form.provider.placeholder")),
|
||||
certificateOutputNodeId: z
|
||||
.string(t("workflow_node.deploy.form.certificate_output_node_id.placeholder"))
|
||||
.nonempty(t("workflow_node.deploy.form.certificate_output_node_id.placeholder")),
|
||||
provider: z.string(t("workflow_node.deploy.form.provider.placeholder")).nonempty(t("workflow_node.deploy.form.provider.placeholder")),
|
||||
providerAccessId: z.string().nullish(),
|
||||
providerConfig: z.any().nullish(),
|
||||
skipOnLastSucceeded: z.boolean().nullish(),
|
||||
|
||||
@@ -213,8 +213,6 @@ const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
return {
|
||||
subject: "",
|
||||
message: "",
|
||||
provider: "",
|
||||
providerAccessId: "",
|
||||
...defaultNodeConfigForNotify(),
|
||||
};
|
||||
};
|
||||
@@ -231,8 +229,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.min(1, t("workflow_node.notify.form.message.placeholder"))
|
||||
.max(20480, t("common.errmsg.string_max", { max: 20480 })),
|
||||
provider: z.string().nonempty(t("workflow_node.notify.form.provider.placeholder")),
|
||||
providerAccessId: z.string().nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
|
||||
provider: z.string(t("workflow_node.notify.form.provider.placeholder")).nonempty(t("workflow_node.notify.form.provider.placeholder")),
|
||||
providerAccessId: z.string(t("workflow_node.notify.form.provider_access.placeholder")).nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
|
||||
providerConfig: z.any().nullish(),
|
||||
skipOnAllPrevSkipped: z.boolean().nullish(),
|
||||
});
|
||||
|
||||
+23
-14
@@ -1,5 +1,6 @@
|
||||
import { forwardRef, useEffect, useImperativeHandle, useMemo, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { getNodeForm } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconCircleMinus, IconCirclePlus } from "@tabler/icons-react";
|
||||
import { useControllableValue } from "ahooks";
|
||||
import { Button, Form, Input, Radio, Select, theme } from "antd";
|
||||
@@ -7,10 +8,10 @@ import { Button, Form, Input, Radio, Select, theme } from "antd";
|
||||
import Show from "@/components/Show";
|
||||
import type { Expr, ExprComparisonOperator, ExprLogicalOperator, ExprValue, ExprValueSelector, ExprValueType } from "@/domain/workflow";
|
||||
import { ExprType } from "@/domain/workflow";
|
||||
import { useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
||||
import { useWorkflowStore } from "@/stores/workflow";
|
||||
import { useAntdFormName } from "@/hooks";
|
||||
|
||||
import { useNodeFormContext } from "./_context";
|
||||
import { getAllPreviousNodes } from "../_util";
|
||||
|
||||
export interface BranchBlockNodeConfigFormExpressionEditorProps {
|
||||
className?: string;
|
||||
@@ -135,8 +136,6 @@ const BranchBlockNodeConfigFormExpressionEditor = forwardRef<BranchBlockNodeConf
|
||||
|
||||
const { token: themeToken } = theme.useToken();
|
||||
|
||||
const { getWorkflowOuptutBeforeId } = useWorkflowStore(useZustandShallowSelector(["updateNode", "getWorkflowOuptutBeforeId"]));
|
||||
|
||||
const [value, setValue] = useControllableValue<Expr | undefined>(props, {
|
||||
valuePropName: "value",
|
||||
defaultValuePropName: "defaultValue",
|
||||
@@ -160,17 +159,27 @@ const BranchBlockNodeConfigFormExpressionEditor = forwardRef<BranchBlockNodeConf
|
||||
}
|
||||
}, [value]);
|
||||
|
||||
// TODO: 适配 flowgram
|
||||
const ciSelectorCandidates = useMemo(() => {
|
||||
const previousNodes = getWorkflowOuptutBeforeId(node.id);
|
||||
return previousNodes
|
||||
const ciSelectorOptions = useMemo(() => {
|
||||
return getAllPreviousNodes(node)
|
||||
.map((node) => {
|
||||
const form = getNodeForm(node);
|
||||
const group = {
|
||||
label: node.name,
|
||||
data: {
|
||||
name: form?.getValueIn("name"),
|
||||
...form?.values,
|
||||
},
|
||||
label: (
|
||||
<div className="flex items-center justify-between gap-4 overflow-hidden">
|
||||
<div className="flex-1 truncate">{form?.getValueIn("name")}</div>
|
||||
<div className="origin-right scale-90 font-mono text-xs" style={{ color: themeToken.colorTextSecondary }}>
|
||||
(NodeID: {node.id})
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
options: Array<{ label: string; value: string }>(),
|
||||
};
|
||||
|
||||
for (const output of node.outputs ?? []) {
|
||||
for (const output of form?.getValueIn("outputs") ?? []) {
|
||||
switch (output.type) {
|
||||
case "certificate":
|
||||
group.options.push({
|
||||
@@ -196,7 +205,7 @@ const BranchBlockNodeConfigFormExpressionEditor = forwardRef<BranchBlockNodeConf
|
||||
return group;
|
||||
})
|
||||
.filter((item) => item.options.length > 0);
|
||||
}, [node.id]);
|
||||
}, [node]);
|
||||
|
||||
const getValueTypeBySelector = (selector: string): ExprValueType | undefined => {
|
||||
if (!selector) return;
|
||||
@@ -279,15 +288,15 @@ const BranchBlockNodeConfigFormExpressionEditor = forwardRef<BranchBlockNodeConf
|
||||
<Select
|
||||
labelRender={({ label, value }) => {
|
||||
if (value != null) {
|
||||
const group = ciSelectorCandidates.find((group) => group.options.some((option) => option.value === value));
|
||||
return `${group?.label} - ${label}`;
|
||||
const group = ciSelectorOptions.find((group) => group.options.some((option) => option.value === value));
|
||||
return `${group?.data?.name} - ${label}`;
|
||||
}
|
||||
|
||||
return (
|
||||
<span style={{ color: themeToken.colorTextPlaceholder }}>{t("workflow_node.branch_block.form.expression.variable.placeholder")}</span>
|
||||
);
|
||||
}}
|
||||
options={ciSelectorCandidates}
|
||||
options={ciSelectorOptions}
|
||||
placeholder={t("workflow_node.branch_block.form.expression.variable.placeholder")}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
@@ -114,7 +114,6 @@ export const NodeConfigDrawer = ({ children, afterClose, anchor, footer = true,
|
||||
|
||||
const { promise, resolve, reject } = Promise.withResolvers();
|
||||
if (changed) {
|
||||
console.log(oldValues, newValues);
|
||||
modal.confirm({
|
||||
title: t("common.text.operation_confirm"),
|
||||
content: t("workflow.detail.design.unsaved_changes.confirm"),
|
||||
@@ -192,7 +191,7 @@ export const NodeConfigDrawer = ({ children, afterClose, anchor, footer = true,
|
||||
}
|
||||
onClose={handleClose}
|
||||
>
|
||||
<div ref={containerRef} style={{ height: "100%", overflow: "auto" }}>
|
||||
<div ref={containerRef} style={{ height: "100%", overflowX: "hidden", overflowY: "auto" }}>
|
||||
{children}
|
||||
</div>
|
||||
</Drawer>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import Designer from "./Designer";
|
||||
import NodeDrawer from "./NodeDrawer";
|
||||
import Toolbar from "./Toolbar";
|
||||
|
||||
export { type DesignerInstance as WorkflowDesignerInstance, type DesignerProps as WorkflowDesignerProps } from "./Designer";
|
||||
export const WorkflowDesigner = Designer;
|
||||
|
||||
export { type NodeDrawerProps as WorkflowNodeDrawerProps } from "./NodeDrawer";
|
||||
export const WorkflowNodeDrawer = NodeDrawer;
|
||||
|
||||
export { type ToolbarProps as WorkflowToolbarProps } from "./Toolbar";
|
||||
export const WorkflowToolbar = Toolbar;
|
||||
|
||||
export * from "./_util";
|
||||
|
||||
export type * from "./nodes/typings";
|
||||
@@ -2,12 +2,13 @@ import { getI18n } from "react-i18next";
|
||||
import { FeedbackLevel, Field } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconContract } from "@tabler/icons-react";
|
||||
import { Avatar } from "antd";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { acmeDns01ProvidersMap } from "@/domain/provider";
|
||||
import { defaultNodeConfigForApply } from "@/domain/workflow";
|
||||
|
||||
import { BaseNode } from "./_shared";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
import { newNodeId } from "../_util";
|
||||
import BizApplyNodeConfigForm from "../forms/BizApplyNodeConfigForm";
|
||||
|
||||
export const BizApplyNodeRegistry: NodeRegistry = {
|
||||
@@ -64,10 +65,11 @@ export const BizApplyNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BizApply,
|
||||
data: {
|
||||
name: t("workflow_node.apply.default_name"),
|
||||
config: defaultNodeConfigForApply(),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
@@ -2,10 +2,11 @@ import { getI18n } from "react-i18next";
|
||||
import { FeedbackLevel, Field } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconPackage } from "@tabler/icons-react";
|
||||
import { Avatar } from "antd";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { deploymentProvidersMap } from "@/domain/provider";
|
||||
import { defaultNodeConfigForDeploy } from "@/domain/workflow";
|
||||
|
||||
import { getAllPreviousNodes, newNodeId } from "../_util";
|
||||
import { BaseNode } from "./_shared";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
import BizDeployNodeConfigForm from "../forms/BizDeployNodeConfigForm";
|
||||
@@ -36,6 +37,14 @@ export const BizDeployNodeRegistry: NodeRegistry = {
|
||||
};
|
||||
}
|
||||
},
|
||||
["config.certificateOutputNodeId"]: ({ value, context: { node } }) => {
|
||||
if (!getAllPreviousNodes(node).includes(value)) {
|
||||
return {
|
||||
message: "Invalid input",
|
||||
level: FeedbackLevel.Error,
|
||||
};
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
render: () => {
|
||||
@@ -70,10 +79,11 @@ export const BizDeployNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
type: NodeType.BizMonitor,
|
||||
id: newNodeId(),
|
||||
type: NodeType.BizDeploy,
|
||||
data: {
|
||||
name: t("workflow_node.deploy.default_name"),
|
||||
config: defaultNodeConfigForDeploy(),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { getI18n } from "react-i18next";
|
||||
import { FeedbackLevel, Field } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconDeviceDesktopSearch } from "@tabler/icons-react";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { defaultNodeConfigForMonitor } from "@/domain/workflow";
|
||||
|
||||
import { BaseNode } from "./_shared";
|
||||
import { newNodeId } from "../_util";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
import BizMonitorNodeConfigForm from "../forms/BizMonitorNodeConfigForm";
|
||||
|
||||
@@ -60,10 +62,11 @@ export const BizMonitorNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BizMonitor,
|
||||
data: {
|
||||
name: t("workflow_node.monitor.default_name"),
|
||||
config: defaultNodeConfigForMonitor(),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
@@ -2,11 +2,12 @@ import { getI18n } from "react-i18next";
|
||||
import { FeedbackLevel, Field } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconSend } from "@tabler/icons-react";
|
||||
import { Avatar } from "antd";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { notificationProvidersMap } from "@/domain/provider";
|
||||
import { defaultNodeConfigForNotify } from "@/domain/workflow";
|
||||
|
||||
import { BaseNode } from "./_shared";
|
||||
import { newNodeId } from "../_util";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
import BizNotifyNodeConfigForm from "../forms/BizNotifyNodeConfigForm";
|
||||
|
||||
@@ -70,10 +71,11 @@ export const BizNotifyNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BizNotify,
|
||||
data: {
|
||||
name: t("workflow_node.notify.default_name"),
|
||||
config: defaultNodeConfigForNotify(),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { getI18n } from "react-i18next";
|
||||
import { FeedbackLevel, Field } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconCloudUpload } from "@tabler/icons-react";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { defaultNodeConfigForUpload } from "@/domain/workflow";
|
||||
|
||||
import { BaseNode } from "./_shared";
|
||||
import { newNodeId } from "../_util";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
import BizUploadNodeConfigForm from "../forms/BizUploadNodeConfigForm";
|
||||
|
||||
@@ -50,10 +52,11 @@ export const BizUploadNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BizUpload,
|
||||
data: {
|
||||
name: t("workflow_node.upload.default_name"),
|
||||
config: defaultNodeConfigForUpload(),
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
@@ -2,11 +2,11 @@ import { getI18n } from "react-i18next";
|
||||
import { FeedbackLevel, Field, FlowNodeBaseType, FlowNodeSplitType } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconFilter, IconFilterFilled, IconSitemap } from "@tabler/icons-react";
|
||||
import { Typography } from "antd";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { type Expr, ExprType } from "@/domain/workflow";
|
||||
|
||||
import { BaseNode, BranchNode } from "./_shared";
|
||||
import { newNodeId } from "../_util";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
import BranchBlockNodeConfigForm from "../forms/BranchBlockNodeConfigForm";
|
||||
|
||||
@@ -40,14 +40,14 @@ export const ConditionNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.Condition,
|
||||
data: {
|
||||
name: t("workflow_node.condition.default_name"),
|
||||
},
|
||||
blocks: [
|
||||
{
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BranchBlock,
|
||||
blocks: [],
|
||||
data: {
|
||||
@@ -55,7 +55,7 @@ export const ConditionNodeRegistry: NodeRegistry = {
|
||||
},
|
||||
},
|
||||
{
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BranchBlock,
|
||||
data: {
|
||||
name: t("workflow_node.branch_block.default_name") + " 2",
|
||||
@@ -165,7 +165,7 @@ export const BranchBlockNodeRegistry: NodeRegistry = {
|
||||
}
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.BranchBlock,
|
||||
data: {
|
||||
name: nodeName,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { getI18n } from "react-i18next";
|
||||
import { FlowNodeBaseType } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconLogout } from "@tabler/icons-react";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { BaseNode } from "./_shared";
|
||||
import { newNodeId } from "../_util";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
|
||||
export const EndNodeRegistry: NodeRegistry = {
|
||||
@@ -37,22 +37,11 @@ export const EndNodeRegistry: NodeRegistry = {
|
||||
// You can only add to the last node of the branch
|
||||
if (!from.isLast) return false;
|
||||
|
||||
/**
|
||||
* condition
|
||||
* blockIcon
|
||||
* inlineBlocks
|
||||
* block1
|
||||
* blockOrderIcon
|
||||
* <---- [add end]
|
||||
* block2
|
||||
* blockOrderIcon
|
||||
* end
|
||||
*/
|
||||
// originParent can determine whether it is condition , and then determine whether it is the last one
|
||||
// `originParent` can determine whether it is condition, and then determine whether it is the last one
|
||||
// https://github.com/bytedance/flowgram.ai/pull/146
|
||||
if (from.parent && from.parent.parent?.flowNodeType === FlowNodeBaseType.INLINE_BLOCKS && from.parent.originParent && !from.parent.originParent.isLast) {
|
||||
const allBranches = from.parent.parent!.blocks;
|
||||
// Determine whether the last node of all branch is end, All branches are not allowed to be end
|
||||
// Determine whether the last node of all branch is end, all branches are not allowed to be end
|
||||
const branchEndCount = allBranches.filter((block) => block.blocks[block.blocks.length - 1]?.getNodeMeta().isNodeEnd).length;
|
||||
return branchEndCount < allBranches.length - 1;
|
||||
}
|
||||
@@ -68,7 +57,7 @@ export const EndNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.End,
|
||||
data: {
|
||||
name: t("workflow_node.end.default_name"),
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { getI18n } from "react-i18next";
|
||||
import { Field } from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconArrowsSplit, IconCircleX } from "@tabler/icons-react";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { BaseNode, BranchNode } from "./_shared";
|
||||
import { newNodeId } from "../_util";
|
||||
import { NodeKindType, type NodeRegistry, NodeType } from "./typings";
|
||||
|
||||
export const TryCatchNodeRegistry: NodeRegistry = {
|
||||
@@ -32,23 +32,23 @@ export const TryCatchNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.TryCatch,
|
||||
data: {
|
||||
name: t("workflow_node.try_catch.default_name"),
|
||||
},
|
||||
blocks: [
|
||||
{
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.TryBlock,
|
||||
blocks: [],
|
||||
},
|
||||
{
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.CatchBlock,
|
||||
blocks: [
|
||||
{
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.End,
|
||||
data: {
|
||||
name: t("workflow_node.end.default_name"),
|
||||
@@ -106,11 +106,11 @@ export const CatchBlockNodeRegistry: NodeRegistry = {
|
||||
const { t } = getI18n();
|
||||
|
||||
return {
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.CatchBlock,
|
||||
blocks: [
|
||||
{
|
||||
id: nanoid(),
|
||||
id: newNodeId(),
|
||||
type: NodeType.End,
|
||||
data: {
|
||||
name: t("workflow_node.end.default_name"),
|
||||
|
||||
@@ -8,14 +8,13 @@ import {
|
||||
useClientContext,
|
||||
useWatchFormState,
|
||||
} from "@flowgram.ai/fixed-layout-editor";
|
||||
import { IconCopy, IconDotsVertical, IconExclamationCircle, IconGripVertical, IconLabel, IconX } from "@tabler/icons-react";
|
||||
import { IconCopy, IconDotsVertical, IconGripVertical, IconLabel, IconX } from "@tabler/icons-react";
|
||||
import { Button, type ButtonProps, Card, Dropdown, Input, type InputRef, Popover, Tooltip, theme } from "antd";
|
||||
import { Immer } from "immer";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import { mergeCls } from "@/utils/css";
|
||||
|
||||
import { type NodeJSON, type NodeRegistry, NodeType } from "./typings";
|
||||
import { type NodeJSON, type NodeRegistry } from "./typings";
|
||||
import { duplicateNodeJSON } from "../_util";
|
||||
import { useNodeRenderContext } from "../NodeRenderContext";
|
||||
|
||||
const useInternalRenamingInput = ({ nodeRender }: { nodeRender: NodeRenderReturnType }) => {
|
||||
@@ -44,7 +43,7 @@ const useInternalRenamingInput = ({ nodeRender }: { nodeRender: NodeRenderReturn
|
||||
|
||||
setInputVisible(false);
|
||||
|
||||
nodeRender.updateData({ name: value });
|
||||
nodeRender.updateData({ ...nodeRender.data, name: value });
|
||||
};
|
||||
|
||||
return {
|
||||
@@ -72,7 +71,7 @@ const InternalNodeCard = ({
|
||||
const nodeRegistry = nodeRender.node.getNodeRegistry<NodeRegistry>();
|
||||
|
||||
const isActivated = useMemo(() => nodeRenderData.activated || nodeRenderData.lineActivated, [nodeRenderData.activated, nodeRenderData.lineActivated]);
|
||||
const [isHovered, setIsHovered] = useState(false);
|
||||
const [isHovering, setIsHovering] = useState(false);
|
||||
const [isInvalid, setIsInvalid] = useState(false);
|
||||
|
||||
const formState = useWatchFormState(nodeRender.node);
|
||||
@@ -89,8 +88,8 @@ const InternalNodeCard = ({
|
||||
style={style}
|
||||
styles={{ body: { padding: 0 } }}
|
||||
hoverable
|
||||
onMouseEnter={() => startTransition(() => setIsHovered(true))}
|
||||
onMouseLeave={() => startTransition(() => setIsHovered(false))}
|
||||
onMouseEnter={() => startTransition(() => setIsHovering(true))}
|
||||
onMouseLeave={() => startTransition(() => setIsHovering(false))}
|
||||
>
|
||||
<div className="relative z-1">{children}</div>
|
||||
<div
|
||||
@@ -101,7 +100,7 @@ const InternalNodeCard = ({
|
||||
right: "-1px",
|
||||
bottom: "-1px",
|
||||
borderWidth: "2px",
|
||||
borderColor: isHovered ? "var(--color-primary)" : isInvalid ? "var(--color-error)" : void 0,
|
||||
borderColor: isHovering ? "var(--color-primary)" : isInvalid ? "var(--color-error)" : void 0,
|
||||
}}
|
||||
/>
|
||||
</Card>
|
||||
@@ -284,11 +283,6 @@ export const BaseNode = ({ className, style, children, description }: BaseNodePr
|
||||
);
|
||||
};
|
||||
|
||||
const [isInvalid, setIsInvalid] = useState(false);
|
||||
|
||||
const formState = useWatchFormState(nodeRender.node);
|
||||
useEffect(() => setIsInvalid(!!formState?.invalid), [formState?.invalid]);
|
||||
|
||||
const {
|
||||
inputRef,
|
||||
visible: inputVisible,
|
||||
@@ -349,9 +343,6 @@ export const BaseNode = ({ className, style, children, description }: BaseNodePr
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center justify-center" onClick={(e) => e.stopPropagation()}>
|
||||
{isInvalid && <IconExclamationCircle color="var(--color-error)" size="1.25em" />}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</InternalNodeCard>
|
||||
@@ -462,70 +453,3 @@ export const BranchNode = ({ className, style, children, description }: BranchNo
|
||||
</Popover>
|
||||
);
|
||||
};
|
||||
|
||||
// TODO: 应放至领域层
|
||||
export const duplicateNodeJSON = (node: NodeJSON, options?: { withCopySuffix?: boolean }) => {
|
||||
const { produce } = new Immer({ autoFreeze: false });
|
||||
const deepClone = (node: NodeJSON, { withCopySuffix, nodeIdMap }: { withCopySuffix: boolean; nodeIdMap: Map<string, string> }) => {
|
||||
return produce(node, (draft) => {
|
||||
draft.data ??= {};
|
||||
draft.id = nanoid();
|
||||
draft.data.name = withCopySuffix ? `${draft.data?.name || ""}-copy` : `${draft.data?.name || ""}`;
|
||||
|
||||
nodeIdMap.set(node.id, draft.id); // 原节点 ID 映射到新节点 ID
|
||||
|
||||
if (draft.blocks) {
|
||||
draft.blocks = draft.blocks.map((block) => deepClone(block as NodeJSON, { withCopySuffix: false, nodeIdMap }));
|
||||
}
|
||||
|
||||
if (draft.data?.config) {
|
||||
switch (draft.type) {
|
||||
case NodeType.BizDeploy:
|
||||
{
|
||||
const prevNodeId = draft.data.config.certificate?.split("#")?.[0];
|
||||
if (nodeIdMap.has(prevNodeId)) {
|
||||
draft.data.config = {
|
||||
...draft.data.config,
|
||||
certificate: `${nodeIdMap.get(prevNodeId)}#certificate`,
|
||||
};
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case NodeType.Condition:
|
||||
{
|
||||
const stack = [] as any[];
|
||||
const expr = draft.data.config.expression;
|
||||
if (expr) {
|
||||
stack.push(expr);
|
||||
while (stack.length > 0) {
|
||||
const n = stack.pop()!;
|
||||
if ("left" in n) {
|
||||
stack.push(n.left);
|
||||
if ("selector" in n.left) {
|
||||
const prevNodeId = n.left.selector.id;
|
||||
if (nodeIdMap.has(prevNodeId)) {
|
||||
n.left.selector.id = nodeIdMap.get(prevNodeId)!;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ("right" in n) {
|
||||
stack.push(n.right);
|
||||
}
|
||||
}
|
||||
draft.data.config = {
|
||||
...draft.data.config,
|
||||
expression: expr,
|
||||
};
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
|
||||
return deepClone(node, { withCopySuffix: options?.withCopySuffix ?? true, nodeIdMap: new Map() });
|
||||
};
|
||||
|
||||
@@ -24,6 +24,4 @@ export const getAllNodeRegistries = () => {
|
||||
];
|
||||
};
|
||||
|
||||
export { duplicateNodeJSON } from "./_shared";
|
||||
|
||||
export type * from "./typings";
|
||||
|
||||
@@ -140,7 +140,6 @@ export type WorkflowNodeConfigForStart = {
|
||||
export const defaultNodeConfigForStart = (): Partial<WorkflowNodeConfigForStart> => {
|
||||
return {
|
||||
trigger: WORKFLOW_TRIGGERS.MANUAL,
|
||||
triggerCron: "0 0 * * *",
|
||||
};
|
||||
};
|
||||
|
||||
@@ -199,7 +198,9 @@ export const defaultNodeConfigForMonitor = (): Partial<WorkflowNodeConfigForMoni
|
||||
};
|
||||
|
||||
export type WorkflowNodeConfigForDeploy = {
|
||||
/** @deprecated **/
|
||||
certificate: string;
|
||||
certificateOutputNodeId: string;
|
||||
provider: string;
|
||||
providerAccessId?: string;
|
||||
providerConfig?: Record<string, unknown>;
|
||||
|
||||
@@ -137,6 +137,9 @@
|
||||
"workflow_node.deploy.form_anchor.deployment.title": "Deployment settings",
|
||||
"workflow_node.deploy.form_anchor.strategy.tab": "Strategy",
|
||||
"workflow_node.deploy.form_anchor.strategy.title": "Strategy settings",
|
||||
"workflow_node.deploy.form.certificate_output_node_id.label": "Certificate reference node",
|
||||
"workflow_node.deploy.form.certificate_output_node_id.placeholder": "Please select certificate reference node",
|
||||
"workflow_node.deploy.form.certificate_output_node_id.help": "Notes: The certificate to be deployed comes from the previous nodes of application or upload.",
|
||||
"workflow_node.deploy.form.provider.label": "Deploy target",
|
||||
"workflow_node.deploy.form.provider.placeholder": "Please select deploy target",
|
||||
"workflow_node.deploy.form.provider.search.placeholder": "Search deploy target ...",
|
||||
@@ -144,9 +147,6 @@
|
||||
"workflow_node.deploy.form.provider_access.placeholder": "Please select an credential of Hosting provider",
|
||||
"workflow_node.deploy.form.provider_access.tooltip": "Used to invoke API during deployment.",
|
||||
"workflow_node.deploy.form.provider_access.button": "Create",
|
||||
"workflow_node.deploy.form.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.certificate.placeholder": "Please select certificate",
|
||||
"workflow_node.deploy.form.certificate.help": "Notes: The certificate to be deployed comes from the previous nodes of application or upload.",
|
||||
"workflow_node.deploy.form.1panel_console_auto_restart.label": "Auto restart 1Panel after deployment",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.label": "1Panel node name (Optional)",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.placeholder": "Please enter 1Panel node name",
|
||||
@@ -1079,6 +1079,9 @@
|
||||
"workflow_node.action.rename_branch": "Rename branch",
|
||||
"workflow_node.action.duplicate_branch": "Duplicate branch",
|
||||
"workflow_node.action.remove_branch": "Delete branch",
|
||||
"workflow_node.deploy.form.certificate.label": "Certificate",
|
||||
"workflow_node.deploy.form.certificate.placeholder": "Please select certificate",
|
||||
"workflow_node.deploy.form.certificate.help": "Notes: The certificate to be deployed comes from the previous nodes of application or upload.",
|
||||
"workflow_node.branch.label": "Parallel/Conditional branch",
|
||||
"workflow_node.branch.default_name": "Branch",
|
||||
"workflow_node.condition.form.expression.label": "Conditions to enter the branch",
|
||||
|
||||
@@ -136,6 +136,9 @@
|
||||
"workflow_node.deploy.form_anchor.deployment.title": "部署设置",
|
||||
"workflow_node.deploy.form_anchor.strategy.tab": "执行策略",
|
||||
"workflow_node.deploy.form_anchor.strategy.title": "执行策略",
|
||||
"workflow_node.deploy.form.certificate_output_node_id.label": "待部署证书节点",
|
||||
"workflow_node.deploy.form.certificate_output_node_id.placeholder": "请选择待部署证书节点",
|
||||
"workflow_node.deploy.form.certificate_output_node_id.help": "提示:待部署证书来自之前的申请或上传节点,如果选项为空请先检查前序节点。",
|
||||
"workflow_node.deploy.form.provider.label": "部署目标",
|
||||
"workflow_node.deploy.form.provider.placeholder": "请选择部署目标",
|
||||
"workflow_node.deploy.form.provider.search.placeholder": "搜索部署目标……",
|
||||
@@ -143,9 +146,6 @@
|
||||
"workflow_node.deploy.form.provider_access.placeholder": "请选择主机提供商授权",
|
||||
"workflow_node.deploy.form.provider_access.tooltip": "用于部署证书时调用相关 API,注意与申请阶段所需的 DNS 提供商相区分。",
|
||||
"workflow_node.deploy.form.provider_access.button": "新建",
|
||||
"workflow_node.deploy.form.certificate.label": "待部署证书",
|
||||
"workflow_node.deploy.form.certificate.placeholder": "请选择待部署证书",
|
||||
"workflow_node.deploy.form.certificate.help": "提示:待部署证书来自之前的申请或上传节点,如果选项为空请先检查前序节点。",
|
||||
"workflow_node.deploy.form.1panel_console_auto_restart.label": "部署后自动重启 1Panel 服务",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.label": "1Panel 子节点名称(可选)",
|
||||
"workflow_node.deploy.form.1panel_site_node_name.placeholder": "请输入 1Panel 子节点名称",
|
||||
@@ -1077,6 +1077,9 @@
|
||||
"workflow_node.action.rename_branch": "重命名",
|
||||
"workflow_node.action.duplicate_branch": "复制分支",
|
||||
"workflow_node.action.remove_branch": "删除分支",
|
||||
"workflow_node.deploy.form.certificate.label": "待部署证书",
|
||||
"workflow_node.deploy.form.certificate.placeholder": "请选择待部署证书",
|
||||
"workflow_node.deploy.form.certificate.help": "提示:待部署证书来自之前的申请或上传节点,如果选项为空请先检查前序节点。",
|
||||
"workflow_node.branch.label": "并行/条件分支",
|
||||
"workflow_node.branch.default_name": "分支",
|
||||
"workflow_node.condition.form.expression.label": "分支进入条件",
|
||||
|
||||
@@ -368,7 +368,6 @@ const WorkflowRunHistoryTable = ({ className, style }: { className?: string; sty
|
||||
rowClassName="cursor-pointer"
|
||||
rowKey={(record) => record.id}
|
||||
scroll={{ x: "max(100%, 720px)" }}
|
||||
size="small"
|
||||
onRow={(record) => ({
|
||||
onClick: () => {
|
||||
handleRecordDetailClick(record);
|
||||
|
||||
@@ -8,9 +8,7 @@ import { nanoid } from "nanoid";
|
||||
import { debounce, isEqual } from "radash";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import WorkflowDesigner, { type DesignerInstance as WorkflowDesignerInstance } from "@/components/workflow/designer/Designer";
|
||||
import WorkflowNodeDrawer from "@/components/workflow/designer/NodeDrawer";
|
||||
import WorkflowToolbar from "@/components/workflow/designer/Toolbar";
|
||||
import { WorkflowDesigner, type WorkflowDesignerInstance, WorkflowNodeDrawer, WorkflowToolbar } from "@/components/workflow/designer";
|
||||
import { type WorkflowNode, WorkflowNodeType } from "@/domain/workflow";
|
||||
import { WORKFLOW_RUN_STATUSES } from "@/domain/workflowRun";
|
||||
import { useZustandShallowSelector } from "@/hooks";
|
||||
@@ -222,6 +220,8 @@ const compactWorkflowDraft = (root: WorkflowNode | undefined) => {
|
||||
data: {
|
||||
name: current.name,
|
||||
config: current.config,
|
||||
inputs: current.inputs,
|
||||
outputs: current.outputs,
|
||||
},
|
||||
});
|
||||
break;
|
||||
@@ -233,6 +233,8 @@ const compactWorkflowDraft = (root: WorkflowNode | undefined) => {
|
||||
data: {
|
||||
name: current.name,
|
||||
config: current.config,
|
||||
inputs: current.inputs,
|
||||
outputs: current.outputs,
|
||||
},
|
||||
});
|
||||
break;
|
||||
@@ -244,6 +246,8 @@ const compactWorkflowDraft = (root: WorkflowNode | undefined) => {
|
||||
data: {
|
||||
name: current.name,
|
||||
config: current.config,
|
||||
inputs: current.inputs,
|
||||
outputs: current.outputs,
|
||||
},
|
||||
});
|
||||
break;
|
||||
@@ -254,7 +258,13 @@ const compactWorkflowDraft = (root: WorkflowNode | undefined) => {
|
||||
type: "bizDeploy",
|
||||
data: {
|
||||
name: current.name,
|
||||
config: current.config,
|
||||
config: {
|
||||
...current.config,
|
||||
certificate: undefined,
|
||||
certificateOutputNodeId: (current.config?.certificate as string)?.split("#")?.shift(),
|
||||
},
|
||||
inputs: current.inputs,
|
||||
outputs: current.outputs,
|
||||
},
|
||||
});
|
||||
break;
|
||||
@@ -266,6 +276,8 @@ const compactWorkflowDraft = (root: WorkflowNode | undefined) => {
|
||||
data: {
|
||||
name: current.name,
|
||||
config: current.config,
|
||||
inputs: current.inputs,
|
||||
outputs: current.outputs,
|
||||
},
|
||||
});
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user