@open-mercato/core 0.6.2-develop.3400.2.d948268f50 → 0.6.2-develop.3406.1.2b403f40da
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/dist/generated/entities/workflow_definition/index.js +2 -0
- package/dist/generated/entities/workflow_definition/index.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +1 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/sales/workflows.js +180 -0
- package/dist/modules/sales/workflows.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js +172 -0
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +205 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/route.js +91 -2
- package/dist/modules/workflows/api/definitions/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/route.js +32 -9
- package/dist/modules/workflows/api/definitions/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/serialize.js +36 -1
- package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.js +161 -52
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +37 -34
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +134 -41
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +19 -121
- package/dist/modules/workflows/cli.js.map +2 -2
- package/dist/modules/workflows/components/formConfig.js +1 -1
- package/dist/modules/workflows/components/formConfig.js.map +2 -2
- package/dist/modules/workflows/data/entities.js +3 -0
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +2 -2
- package/dist/modules/workflows/data/validators.js.map +2 -2
- package/dist/modules/workflows/events.js +2 -0
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/examples/guard-rules-example.json +6 -6
- package/dist/modules/workflows/examples/order-approval-guard-rules.json +2 -2
- package/dist/modules/workflows/frontend/checkout-demo/page.js +4 -4
- package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
- package/dist/modules/workflows/lib/code-registry.js +40 -0
- package/dist/modules/workflows/lib/code-registry.js.map +7 -0
- package/dist/modules/workflows/lib/find-definition.js +58 -0
- package/dist/modules/workflows/lib/find-definition.js.map +7 -0
- package/dist/modules/workflows/lib/seeds.js +0 -3
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/start-validator.js +1 -20
- package/dist/modules/workflows/lib/start-validator.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-executor.js +1 -19
- package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
- package/dist/modules/workflows/migrations/Migration20260414120000.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260414120000.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260428102318.js +32 -0
- package/dist/modules/workflows/migrations/Migration20260428102318.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +1 -1
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +1 -1
- package/dist/modules/workflows/workflows.js +260 -0
- package/dist/modules/workflows/workflows.js.map +7 -0
- package/generated/entities/workflow_definition/index.ts +1 -0
- package/generated/entity-fields-registry.ts +1 -0
- package/package.json +7 -7
- package/src/modules/sales/workflows.ts +184 -0
- package/src/modules/workflows/api/definitions/[id]/customize/route.ts +197 -0
- package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +252 -0
- package/src/modules/workflows/api/definitions/[id]/route.ts +108 -4
- package/src/modules/workflows/api/definitions/route.ts +54 -10
- package/src/modules/workflows/api/definitions/serialize.ts +42 -0
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +135 -11
- package/src/modules/workflows/backend/definitions/page.tsx +45 -33
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +222 -97
- package/src/modules/workflows/cli.ts +32 -155
- package/src/modules/workflows/components/formConfig.tsx +2 -2
- package/src/modules/workflows/data/entities.ts +4 -1
- package/src/modules/workflows/data/validators.ts +4 -3
- package/src/modules/workflows/events.ts +2 -0
- package/src/modules/workflows/examples/guard-rules-example.json +6 -6
- package/src/modules/workflows/examples/order-approval-guard-rules.json +2 -2
- package/src/modules/workflows/frontend/checkout-demo/page.tsx +4 -4
- package/src/modules/workflows/i18n/de.json +16 -0
- package/src/modules/workflows/i18n/en.json +16 -0
- package/src/modules/workflows/i18n/es.json +16 -0
- package/src/modules/workflows/i18n/pl.json +16 -0
- package/src/modules/workflows/lib/code-registry.ts +65 -0
- package/src/modules/workflows/lib/find-definition.ts +100 -0
- package/src/modules/workflows/lib/seeds.ts +4 -3
- package/src/modules/workflows/lib/start-validator.ts +2 -35
- package/src/modules/workflows/lib/workflow-executor.ts +2 -39
- package/src/modules/workflows/migrations/.snapshot-open-mercato.json +10 -0
- package/src/modules/workflows/migrations/Migration20260414120000.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260428102318.ts +57 -0
- package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +1 -1
- package/src/modules/workflows/workflows.ts +278 -0
- package/dist/modules/workflows/examples/checkout-demo-definition.json +0 -486
- package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
- package/dist/modules/workflows/examples/simple-approval-definition.json +0 -134
- package/src/modules/workflows/examples/checkout-demo-definition.json +0 -486
- package/src/modules/workflows/examples/order-approval-definition.json +0 -257
- package/src/modules/workflows/examples/simple-approval-definition.json +0 -134
|
@@ -28,73 +28,28 @@ function parseArgs(args: string[]) {
|
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Seed demo checkout workflow
|
|
31
|
+
*
|
|
32
|
+
* The 'workflows.checkout-demo' workflow is now code-defined
|
|
33
|
+
* (see packages/core/src/modules/workflows/workflows.ts) and available
|
|
34
|
+
* to every tenant without DB seeding. This command remains as a thin
|
|
35
|
+
* wrapper that informs operators of the new location.
|
|
31
36
|
*/
|
|
32
37
|
const seedDemo: ModuleCli = {
|
|
33
38
|
command: 'seed-demo',
|
|
34
|
-
async run(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
console.error('Usage: mercato workflows seed-demo --tenant <tenantId> --org <organizationId>')
|
|
41
|
-
console.error(' or: mercato workflows seed-demo -t <tenantId> -o <organizationId>')
|
|
42
|
-
return
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
const { resolve } = await createRequestContainer()
|
|
47
|
-
const em = resolve<EntityManager>('em')
|
|
48
|
-
|
|
49
|
-
// Read the demo workflow definition
|
|
50
|
-
const demoPath = path.join(__dirname, 'examples', 'checkout-demo-definition.json')
|
|
51
|
-
const demoData = JSON.parse(fs.readFileSync(demoPath, 'utf8'))
|
|
52
|
-
|
|
53
|
-
// Check if it already exists
|
|
54
|
-
const existing = await em.findOne(WorkflowDefinition, {
|
|
55
|
-
workflowId: demoData.workflowId,
|
|
56
|
-
tenantId,
|
|
57
|
-
organizationId,
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
if (existing) {
|
|
61
|
-
console.log(`ℹ️ Demo workflow '${demoData.workflowId}' already exists (ID: ${existing.id})`)
|
|
62
|
-
return
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Create the workflow definition
|
|
66
|
-
const workflow = em.create(WorkflowDefinition, {
|
|
67
|
-
...demoData,
|
|
68
|
-
tenantId,
|
|
69
|
-
organizationId,
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
await em.persist(workflow).flush()
|
|
73
|
-
|
|
74
|
-
console.log(`✅ Seeded demo workflow: ${workflow.workflowName}`)
|
|
75
|
-
console.log(` - ID: ${workflow.id}`)
|
|
76
|
-
console.log(` - Workflow ID: ${workflow.workflowId}`)
|
|
77
|
-
console.log(` - Version: ${workflow.version}`)
|
|
78
|
-
console.log(` - Steps: ${workflow.definition.steps.length}`)
|
|
79
|
-
console.log(` - Transitions: ${workflow.definition.transitions.length}`)
|
|
80
|
-
console.log('')
|
|
81
|
-
console.log('Demo workflow is ready! You can now:')
|
|
82
|
-
console.log(' 1. View it in admin: /backend/definitions')
|
|
83
|
-
console.log(' 2. Try the demo page: /checkout-demo')
|
|
84
|
-
console.log(' 3. Start an instance via API: POST /api/workflows/instances')
|
|
85
|
-
console.log('')
|
|
86
|
-
console.log('Note: This workflow includes a USER_TASK step for customer information.')
|
|
87
|
-
console.log('When the workflow reaches this step, it will pause and require user input.')
|
|
88
|
-
console.log('Complete pending tasks at: /backend/tasks')
|
|
89
|
-
} catch (error) {
|
|
90
|
-
console.error('Error seeding demo workflow:', error)
|
|
91
|
-
throw error
|
|
92
|
-
}
|
|
39
|
+
async run() {
|
|
40
|
+
console.log('ℹ️ The "workflows.checkout-demo" workflow is now code-defined.')
|
|
41
|
+
console.log(' No seeding required — it is auto-registered by the workflows module')
|
|
42
|
+
console.log(' (see packages/core/src/modules/workflows/workflows.ts).')
|
|
43
|
+
console.log('')
|
|
44
|
+
console.log(' Visit /backend/definitions to view it as a Code-defined workflow.')
|
|
93
45
|
},
|
|
94
46
|
}
|
|
95
47
|
|
|
96
48
|
/**
|
|
97
|
-
* Seed demo checkout workflow
|
|
49
|
+
* Seed demo checkout workflow guard rules
|
|
50
|
+
*
|
|
51
|
+
* The 'workflows.checkout-demo' workflow is code-defined; only the
|
|
52
|
+
* guard rules still need DB seeding.
|
|
98
53
|
*/
|
|
99
54
|
const seedDemoWithRules: ModuleCli = {
|
|
100
55
|
command: 'seed-demo-with-rules',
|
|
@@ -109,15 +64,9 @@ const seedDemoWithRules: ModuleCli = {
|
|
|
109
64
|
return
|
|
110
65
|
}
|
|
111
66
|
|
|
112
|
-
|
|
67
|
+
console.log('🧩 Seeding checkout-demo guard rules (workflow itself is code-defined)...\n')
|
|
113
68
|
|
|
114
69
|
try {
|
|
115
|
-
// Seed the workflow definition
|
|
116
|
-
console.log('1. 🧩 Seeding demo workflow...')
|
|
117
|
-
await seedDemo.run(rest)
|
|
118
|
-
|
|
119
|
-
// Seed the guard rules
|
|
120
|
-
console.log('\n2. 🧠 Seeding guard rules...')
|
|
121
70
|
const { resolve } = await createRequestContainer()
|
|
122
71
|
const em = resolve<EntityManager>('em')
|
|
123
72
|
|
|
@@ -155,12 +104,12 @@ const seedDemoWithRules: ModuleCli = {
|
|
|
155
104
|
seededCount++
|
|
156
105
|
}
|
|
157
106
|
|
|
158
|
-
console.log(`\n✅
|
|
159
|
-
console.log(` - Workflow:
|
|
107
|
+
console.log(`\n✅ Checkout-demo guard rules seeded successfully!`)
|
|
108
|
+
console.log(` - Workflow: workflows.checkout-demo (code-defined)`)
|
|
160
109
|
console.log(` - Guard rules seeded: ${seededCount}`)
|
|
161
110
|
console.log(` - Guard rules skipped: ${skippedCount}`)
|
|
162
111
|
} catch (error) {
|
|
163
|
-
console.error('Error seeding demo
|
|
112
|
+
console.error('Error seeding demo guard rules:', error)
|
|
164
113
|
throw error
|
|
165
114
|
}
|
|
166
115
|
},
|
|
@@ -228,60 +177,19 @@ const seedSalesPipeline: ModuleCli = {
|
|
|
228
177
|
|
|
229
178
|
/**
|
|
230
179
|
* Seed simple approval example
|
|
180
|
+
*
|
|
181
|
+
* The 'workflows.simple-approval' workflow is now code-defined
|
|
182
|
+
* (see packages/core/src/modules/workflows/workflows.ts). This command
|
|
183
|
+
* remains as a thin wrapper that informs operators of the new location.
|
|
231
184
|
*/
|
|
232
185
|
const seedSimpleApproval: ModuleCli = {
|
|
233
186
|
command: 'seed-simple-approval',
|
|
234
|
-
async run(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
console.error('Usage: mercato workflows seed-simple-approval --tenant <tenantId> --org <organizationId>')
|
|
241
|
-
return
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
try {
|
|
245
|
-
const { resolve } = await createRequestContainer()
|
|
246
|
-
const em = resolve<EntityManager>('em')
|
|
247
|
-
|
|
248
|
-
// Read the simple approval workflow definition
|
|
249
|
-
const approvalPath = path.join(__dirname, 'examples', 'simple-approval-definition.json')
|
|
250
|
-
const approvalData = JSON.parse(fs.readFileSync(approvalPath, 'utf8'))
|
|
251
|
-
|
|
252
|
-
// Check if it already exists
|
|
253
|
-
const existing = await em.findOne(WorkflowDefinition, {
|
|
254
|
-
workflowId: approvalData.workflowId,
|
|
255
|
-
tenantId,
|
|
256
|
-
organizationId,
|
|
257
|
-
})
|
|
258
|
-
|
|
259
|
-
if (existing) {
|
|
260
|
-
console.log(`ℹ️ Simple approval workflow '${approvalData.workflowId}' already exists (ID: ${existing.id})`)
|
|
261
|
-
return
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Create the workflow definition
|
|
265
|
-
const workflow = em.create(WorkflowDefinition, {
|
|
266
|
-
...approvalData,
|
|
267
|
-
tenantId,
|
|
268
|
-
organizationId,
|
|
269
|
-
})
|
|
270
|
-
|
|
271
|
-
await em.persist(workflow).flush()
|
|
272
|
-
|
|
273
|
-
console.log(`✅ Seeded simple approval workflow: ${workflow.workflowName}`)
|
|
274
|
-
console.log(` - ID: ${workflow.id}`)
|
|
275
|
-
console.log(` - Workflow ID: ${workflow.workflowId}`)
|
|
276
|
-
console.log(` - Version: ${workflow.version}`)
|
|
277
|
-
console.log(` - Steps: ${workflow.definition.steps.length}`)
|
|
278
|
-
console.log(` - Transitions: ${workflow.definition.transitions.length}`)
|
|
279
|
-
console.log('')
|
|
280
|
-
console.log('Simple approval workflow is ready!')
|
|
281
|
-
} catch (error) {
|
|
282
|
-
console.error('Error seeding simple approval workflow:', error)
|
|
283
|
-
throw error
|
|
284
|
-
}
|
|
187
|
+
async run() {
|
|
188
|
+
console.log('ℹ️ The "workflows.simple-approval" workflow is now code-defined.')
|
|
189
|
+
console.log(' No seeding required — it is auto-registered by the workflows module')
|
|
190
|
+
console.log(' (see packages/core/src/modules/workflows/workflows.ts).')
|
|
191
|
+
console.log('')
|
|
192
|
+
console.log(' Visit /backend/definitions to view it as a Code-defined workflow.')
|
|
285
193
|
},
|
|
286
194
|
}
|
|
287
195
|
|
|
@@ -346,43 +254,12 @@ const seedOrderApproval: ModuleCli = {
|
|
|
346
254
|
await em.flush()
|
|
347
255
|
}
|
|
348
256
|
|
|
349
|
-
|
|
350
|
-
const approvalPath = path.join(__dirname, 'examples', 'order-approval-definition.json')
|
|
351
|
-
const approvalData = JSON.parse(fs.readFileSync(approvalPath, 'utf8'))
|
|
352
|
-
|
|
353
|
-
// Check if it already exists
|
|
354
|
-
const existing = await em.findOne(WorkflowDefinition, {
|
|
355
|
-
workflowId: approvalData.workflowId,
|
|
356
|
-
tenantId,
|
|
357
|
-
organizationId,
|
|
358
|
-
})
|
|
359
|
-
|
|
360
|
-
if (existing) {
|
|
361
|
-
console.log(`✅ Order approval workflow '${approvalData.workflowId}' already exists (ID: ${existing.id})`)
|
|
362
|
-
console.log(` - Guard rules seeded: ${rulesSeeded}`)
|
|
363
|
-
console.log(` - Guard rules skipped: ${rulesSkipped}`)
|
|
364
|
-
return
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// Create the workflow definition
|
|
368
|
-
const workflow = em.create(WorkflowDefinition, {
|
|
369
|
-
...approvalData,
|
|
370
|
-
tenantId,
|
|
371
|
-
organizationId,
|
|
372
|
-
})
|
|
373
|
-
|
|
374
|
-
await em.persist(workflow).flush()
|
|
375
|
-
|
|
376
|
-
console.log(`✅ Seeded order approval workflow: ${workflow.workflowName}`)
|
|
377
|
-
console.log(` - ID: ${workflow.id}`)
|
|
378
|
-
console.log(` - Workflow ID: ${workflow.workflowId}`)
|
|
379
|
-
console.log(` - Version: ${workflow.version}`)
|
|
380
|
-
console.log(` - Steps: ${workflow.definition.steps.length}`)
|
|
381
|
-
console.log(` - Transitions: ${workflow.definition.transitions.length}`)
|
|
257
|
+
console.log(`✅ Seeded order approval guard rules`)
|
|
382
258
|
console.log(` - Guard rules seeded: ${rulesSeeded}`)
|
|
383
259
|
console.log(` - Guard rules skipped: ${rulesSkipped}`)
|
|
384
260
|
console.log('')
|
|
385
|
-
console.log('
|
|
261
|
+
console.log('Note: The "sales.order-approval" workflow definition is now code-defined')
|
|
262
|
+
console.log('(see packages/core/src/modules/sales/workflows.ts) and no longer needs DB seeding.')
|
|
386
263
|
} catch (error) {
|
|
387
264
|
console.error('Error seeding order approval workflow:', error)
|
|
388
265
|
throw error
|
|
@@ -34,8 +34,8 @@ export type WorkflowDefinitionFormValues = {
|
|
|
34
34
|
export const workflowDefinitionFormSchema = z.object({
|
|
35
35
|
workflowId: z.string()
|
|
36
36
|
.min(1, 'Workflow ID is required')
|
|
37
|
-
.max(
|
|
38
|
-
.regex(/^[a-z0-9_
|
|
37
|
+
.max(100, 'Workflow ID must be 100 characters or less')
|
|
38
|
+
.regex(/^[a-z0-9_.-]+$/, 'Workflow ID must contain only lowercase letters, numbers, hyphens, underscores, and dots'),
|
|
39
39
|
workflowName: z.string()
|
|
40
40
|
.min(1, 'Workflow name is required')
|
|
41
41
|
.max(200, 'Workflow name must be 200 characters or less'),
|
|
@@ -147,7 +147,7 @@ export interface WorkflowInstanceMetadata {
|
|
|
147
147
|
@Index({ name: 'workflow_definitions_tenant_org_idx', properties: ['tenantId', 'organizationId'] })
|
|
148
148
|
@Index({ name: 'workflow_definitions_workflow_id_idx', properties: ['workflowId'] })
|
|
149
149
|
export class WorkflowDefinition {
|
|
150
|
-
[OptionalProps]?: 'enabled' | 'version' | 'createdAt' | 'updatedAt' | 'deletedAt'
|
|
150
|
+
[OptionalProps]?: 'enabled' | 'version' | 'createdAt' | 'updatedAt' | 'deletedAt' | 'codeWorkflowId'
|
|
151
151
|
|
|
152
152
|
@PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })
|
|
153
153
|
id!: string
|
|
@@ -155,6 +155,9 @@ export class WorkflowDefinition {
|
|
|
155
155
|
@Property({ name: 'workflow_id', type: 'varchar', length: 100 })
|
|
156
156
|
workflowId!: string
|
|
157
157
|
|
|
158
|
+
@Property({ name: 'code_workflow_id', type: 'varchar', length: 100, nullable: true })
|
|
159
|
+
codeWorkflowId?: string | null
|
|
160
|
+
|
|
158
161
|
@Property({ name: 'workflow_name', type: 'varchar', length: 255 })
|
|
159
162
|
workflowName!: string
|
|
160
163
|
|
|
@@ -285,7 +285,7 @@ const dateOrNull = z.preprocess((value) => {
|
|
|
285
285
|
|
|
286
286
|
// Full schema for database entities (includes tenant fields)
|
|
287
287
|
export const createWorkflowDefinitionSchema = z.object({
|
|
288
|
-
workflowId: z.string().min(1).max(100).regex(/^[a-z0-
|
|
288
|
+
workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),
|
|
289
289
|
workflowName: z.string().min(1).max(255),
|
|
290
290
|
description: z.string().max(2000).optional().nullable(),
|
|
291
291
|
version: z.number().int().positive().default(1),
|
|
@@ -303,7 +303,7 @@ export type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinit
|
|
|
303
303
|
|
|
304
304
|
// API input schema (omits tenant fields - injected from auth context)
|
|
305
305
|
export const createWorkflowDefinitionInputSchema = z.object({
|
|
306
|
-
workflowId: z.string().min(1).max(100).regex(/^[a-z0-
|
|
306
|
+
workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),
|
|
307
307
|
workflowName: z.string().min(1).max(255),
|
|
308
308
|
description: z.string().max(2000).optional().nullable(),
|
|
309
309
|
version: z.number().int().positive().default(1),
|
|
@@ -323,7 +323,8 @@ export type UpdateWorkflowDefinitionInput = z.infer<typeof updateWorkflowDefinit
|
|
|
323
323
|
// API update schema (omits tenant fields and allows partial updates)
|
|
324
324
|
// Accepts the same shape as the create form so the edit page can submit a
|
|
325
325
|
// full payload without triggering "Unrecognized keys" validation errors.
|
|
326
|
-
// workflowId
|
|
326
|
+
// workflowId is accepted but ignored by the route handler (it identifies the
|
|
327
|
+
// row); version is applied when supplied so the form can bump it explicitly.
|
|
327
328
|
export const updateWorkflowDefinitionInputSchema = z.object({
|
|
328
329
|
workflowId: z.string().min(1).max(100).optional(),
|
|
329
330
|
workflowName: z.string().min(1).max(255).optional(),
|
|
@@ -10,6 +10,8 @@ const events = [
|
|
|
10
10
|
{ id: 'workflows.definition.created', label: 'Workflow Definition Created', entity: 'definition', category: 'crud' },
|
|
11
11
|
{ id: 'workflows.definition.updated', label: 'Workflow Definition Updated', entity: 'definition', category: 'crud' },
|
|
12
12
|
{ id: 'workflows.definition.deleted', label: 'Workflow Definition Deleted', entity: 'definition', category: 'crud' },
|
|
13
|
+
{ id: 'workflows.definition.customized', label: 'Workflow Definition Customized', entity: 'definition', category: 'lifecycle' },
|
|
14
|
+
{ id: 'workflows.definition.reset_to_code', label: 'Workflow Definition Reset to Code', entity: 'definition', category: 'lifecycle' },
|
|
13
15
|
|
|
14
16
|
// Workflow Instances
|
|
15
17
|
{ id: 'workflows.instance.created', label: 'Workflow Instance Created', entity: 'instance', category: 'crud' },
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"description": "Guard rule that blocks checkout if cart has no items",
|
|
6
6
|
"ruleType": "GUARD",
|
|
7
7
|
"ruleCategory": "checkout_validation",
|
|
8
|
-
"entityType": "workflow:
|
|
8
|
+
"entityType": "workflow:workflows.checkout-demo:start",
|
|
9
9
|
"eventType": "validate_start",
|
|
10
10
|
"conditionExpression": {
|
|
11
11
|
"operator": "AND",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"description": "Guard rule that checks if all items are in stock",
|
|
47
47
|
"ruleType": "GUARD",
|
|
48
48
|
"ruleCategory": "checkout_validation",
|
|
49
|
-
"entityType": "workflow:
|
|
49
|
+
"entityType": "workflow:workflows.checkout-demo:transition_seed",
|
|
50
50
|
"eventType": "pre_transition",
|
|
51
51
|
"conditionExpression": {
|
|
52
52
|
"field": "workflowContext.inventory.available",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"description": "Guard rule that enforces minimum order amount of $10",
|
|
71
71
|
"ruleType": "GUARD",
|
|
72
72
|
"ruleCategory": "checkout_validation",
|
|
73
|
-
"entityType": "workflow:
|
|
73
|
+
"entityType": "workflow:workflows.checkout-demo:transition_seed",
|
|
74
74
|
"eventType": "pre_transition",
|
|
75
75
|
"conditionExpression": {
|
|
76
76
|
"field": "workflowContext.cart.total",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"description": "Guard rule for payment step - checks payment method is set",
|
|
95
95
|
"ruleType": "GUARD",
|
|
96
96
|
"ruleCategory": "payment_validation",
|
|
97
|
-
"entityType": "workflow:
|
|
97
|
+
"entityType": "workflow:workflows.checkout-demo:transition_seed",
|
|
98
98
|
"eventType": "pre_transition",
|
|
99
99
|
"conditionExpression": {
|
|
100
100
|
"operator": "AND",
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
"description": "Guard rule that checks customer has email and shipping address",
|
|
128
128
|
"ruleType": "GUARD",
|
|
129
129
|
"ruleCategory": "checkout_validation",
|
|
130
|
-
"entityType": "workflow:
|
|
130
|
+
"entityType": "workflow:workflows.checkout-demo:transition_seed",
|
|
131
131
|
"eventType": "pre_transition",
|
|
132
132
|
"conditionExpression": {
|
|
133
133
|
"operator": "AND",
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
"description": "Guard rule that only allows orders between 9 AM and 5 PM",
|
|
164
164
|
"ruleType": "GUARD",
|
|
165
165
|
"ruleCategory": "business_logic",
|
|
166
|
-
"entityType": "workflow:
|
|
166
|
+
"entityType": "workflow:workflows.checkout-demo:transition_seed",
|
|
167
167
|
"eventType": "pre_transition",
|
|
168
168
|
"conditionExpression": {
|
|
169
169
|
"operator": "AND",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"ruleName": "Check Decision is Approve",
|
|
5
5
|
"description": "Validates that the approval task decision is 'approve'",
|
|
6
6
|
"ruleType": "GUARD",
|
|
7
|
-
"entityType": "workflow:
|
|
7
|
+
"entityType": "workflow:sales.order-approval:transition",
|
|
8
8
|
"eventType": "pre_transition",
|
|
9
9
|
"conditionExpression": {
|
|
10
10
|
"field": "workflowContext.decision",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"ruleName": "Check Decision is Reject",
|
|
20
20
|
"description": "Validates that the approval task decision is 'reject'",
|
|
21
21
|
"ruleType": "GUARD",
|
|
22
|
-
"entityType": "workflow:
|
|
22
|
+
"entityType": "workflow:sales.order-approval:transition",
|
|
23
23
|
"eventType": "pre_transition",
|
|
24
24
|
"conditionExpression": {
|
|
25
25
|
"field": "workflowContext.decision",
|
|
@@ -157,9 +157,9 @@ export default function CheckoutDemoPage() {
|
|
|
157
157
|
|
|
158
158
|
// Fetch workflow definition to get dynamic steps
|
|
159
159
|
const { data: workflowDefinition } = useQuery({
|
|
160
|
-
queryKey: ['workflow-definition', '
|
|
160
|
+
queryKey: ['workflow-definition', 'workflows.checkout-demo'],
|
|
161
161
|
queryFn: async () => {
|
|
162
|
-
const response = await fetch('/api/workflows/definitions?workflowId=
|
|
162
|
+
const response = await fetch('/api/workflows/definitions?workflowId=workflows.checkout-demo')
|
|
163
163
|
if (!response.ok) return null
|
|
164
164
|
const json = await response.json()
|
|
165
165
|
return json.data?.[0] || null
|
|
@@ -317,7 +317,7 @@ export default function CheckoutDemoPage() {
|
|
|
317
317
|
method: 'POST',
|
|
318
318
|
headers: { 'Content-Type': 'application/json' },
|
|
319
319
|
body: JSON.stringify({
|
|
320
|
-
workflowId: '
|
|
320
|
+
workflowId: 'workflows.checkout-demo',
|
|
321
321
|
context: {
|
|
322
322
|
cart: {
|
|
323
323
|
items: demoCart,
|
|
@@ -424,7 +424,7 @@ export default function CheckoutDemoPage() {
|
|
|
424
424
|
'Content-Type': 'application/json',
|
|
425
425
|
},
|
|
426
426
|
body: JSON.stringify({
|
|
427
|
-
workflowId: '
|
|
427
|
+
workflowId: 'workflows.checkout-demo',
|
|
428
428
|
version: 1,
|
|
429
429
|
correlationKey: `DEMO-ORDER-${Date.now()}`,
|
|
430
430
|
initialContext,
|
|
@@ -65,9 +65,12 @@
|
|
|
65
65
|
"workflows.actions.cancel": "Abbrechen",
|
|
66
66
|
"workflows.actions.create": "Workflow erstellen",
|
|
67
67
|
"workflows.actions.createVisual": "Workflow erstellen (visuell)",
|
|
68
|
+
"workflows.actions.customize": "Anpassen",
|
|
68
69
|
"workflows.actions.editStep": "Schritt bearbeiten",
|
|
69
70
|
"workflows.actions.editVisually": "Visuell bearbeiten",
|
|
70
71
|
"workflows.actions.openVisualEditor": "Visuellen Editor öffnen",
|
|
72
|
+
"workflows.actions.resetConfirm": "Dies verwirft Ihre Anpassungen und stellt die codebasierte Version wieder her. Fortfahren?",
|
|
73
|
+
"workflows.actions.resetToCode": "Auf Code-Version zurücksetzen",
|
|
71
74
|
"workflows.actions.saveChanges": "Änderungen speichern",
|
|
72
75
|
"workflows.actions.toggleEnabled": "Klicken zum Aktivieren/Deaktivieren",
|
|
73
76
|
"workflows.activities.activityId": "Aktivitäts-ID",
|
|
@@ -942,6 +945,11 @@
|
|
|
942
945
|
"workflows.signals.singular": "Signal",
|
|
943
946
|
"workflows.signals.timeout": "Signal-Zeitlimit",
|
|
944
947
|
"workflows.signals.title": "Signale",
|
|
948
|
+
"workflows.source.code": "Code-definiert",
|
|
949
|
+
"workflows.source.code.readonlyBanner": "Dieser Workflow ist im Code definiert. Passen Sie ihn an, um Änderungen vorzunehmen.",
|
|
950
|
+
"workflows.source.code_override": "Angepasst",
|
|
951
|
+
"workflows.source.code_override.banner": "Dieser Workflow wurde von seiner codebasierten Version angepasst.",
|
|
952
|
+
"workflows.source.user": "Vom Benutzer erstellt",
|
|
945
953
|
"workflows.steps.addStep": "Schritt hinzufügen",
|
|
946
954
|
"workflows.steps.config": "Konfiguration",
|
|
947
955
|
"workflows.steps.deleteStep": "Schritt löschen",
|
|
@@ -1144,6 +1152,8 @@
|
|
|
1144
1152
|
"workflows.visualEditor.clear": "Löschen",
|
|
1145
1153
|
"workflows.visualEditor.clearDescription": "Dies löscht alle Metadaten und die Workflow-Arbeitsfläche. Diese Aktion kann nicht rückgängig gemacht werden.",
|
|
1146
1154
|
"workflows.visualEditor.clearTitle": "Alles löschen?",
|
|
1155
|
+
"workflows.visualEditor.clickToAdd": "Klicke auf einen Schritttyp, um ihn zur Arbeitsfläche hinzuzufügen",
|
|
1156
|
+
"workflows.visualEditor.clickToAddFromPalette": "Klicke auf einen Schritttyp aus der Palette, um ihn zur Arbeitsfläche hinzuzufügen",
|
|
1147
1157
|
"workflows.visualEditor.hideMetadata": "Metadaten ausblenden",
|
|
1148
1158
|
"workflows.visualEditor.hint.addSteps": "Klicke auf Schritttypen, um sie hinzuzufügen",
|
|
1149
1159
|
"workflows.visualEditor.hint.connectSteps": "Verbinde Schritte durch Ziehen von den Griffen",
|
|
@@ -1152,8 +1162,14 @@
|
|
|
1152
1162
|
"workflows.visualEditor.hint.validate": "Vor dem Speichern validieren",
|
|
1153
1163
|
"workflows.visualEditor.howToUse": "Anleitung:",
|
|
1154
1164
|
"workflows.visualEditor.loadExample": "Beispiel laden",
|
|
1165
|
+
"workflows.visualEditor.loadExampleWorkflow": "Beispiel-Workflow laden",
|
|
1166
|
+
"workflows.visualEditor.readOnly": "Schreibgeschützt",
|
|
1155
1167
|
"workflows.visualEditor.runTest": "Test ausführen",
|
|
1156
1168
|
"workflows.visualEditor.showMetadata": "Metadaten anzeigen",
|
|
1169
|
+
"workflows.visualEditor.startBuilding": "Beginne mit dem Aufbau deines Workflows",
|
|
1170
|
+
"workflows.visualEditor.stepPalette": "Schrittpalette",
|
|
1171
|
+
"workflows.visualEditor.tapToAdd": "Tippe auf einen Schritttyp, um ihn zur Arbeitsfläche hinzuzufügen",
|
|
1172
|
+
"workflows.visualEditor.tapToAddBelow": "Tippe unten auf einen Schritttyp, um ihn zur Arbeitsfläche hinzuzufügen",
|
|
1157
1173
|
"workflows.visualEditor.validate": "Validieren",
|
|
1158
1174
|
"workflows.visualEditor.workflowMetadata": "Workflow-Metadaten"
|
|
1159
1175
|
}
|
|
@@ -65,9 +65,12 @@
|
|
|
65
65
|
"workflows.actions.cancel": "Cancel",
|
|
66
66
|
"workflows.actions.create": "Create Workflow",
|
|
67
67
|
"workflows.actions.createVisual": "Create Workflow (Visual)",
|
|
68
|
+
"workflows.actions.customize": "Customize",
|
|
68
69
|
"workflows.actions.editStep": "Edit Step",
|
|
69
70
|
"workflows.actions.editVisually": "Edit Visually",
|
|
70
71
|
"workflows.actions.openVisualEditor": "Open Visual Editor",
|
|
72
|
+
"workflows.actions.resetConfirm": "This will discard your customizations and restore the code-defined version. Continue?",
|
|
73
|
+
"workflows.actions.resetToCode": "Reset to code version",
|
|
71
74
|
"workflows.actions.saveChanges": "Save Changes",
|
|
72
75
|
"workflows.actions.toggleEnabled": "Click to enable/disable",
|
|
73
76
|
"workflows.activities.activityId": "Activity ID",
|
|
@@ -942,6 +945,11 @@
|
|
|
942
945
|
"workflows.signals.singular": "Signal",
|
|
943
946
|
"workflows.signals.timeout": "Signal Timeout",
|
|
944
947
|
"workflows.signals.title": "Signals",
|
|
948
|
+
"workflows.source.code": "Code-defined",
|
|
949
|
+
"workflows.source.code.readonlyBanner": "This workflow is defined in code. Customize it to make changes.",
|
|
950
|
+
"workflows.source.code_override": "Customized",
|
|
951
|
+
"workflows.source.code_override.banner": "This workflow has been customized from its code-defined version.",
|
|
952
|
+
"workflows.source.user": "User-created",
|
|
945
953
|
"workflows.steps.addStep": "Add Step",
|
|
946
954
|
"workflows.steps.config": "Configuration",
|
|
947
955
|
"workflows.steps.deleteStep": "Delete Step",
|
|
@@ -1144,6 +1152,8 @@
|
|
|
1144
1152
|
"workflows.visualEditor.clear": "Clear",
|
|
1145
1153
|
"workflows.visualEditor.clearDescription": "This will clear all metadata and the workflow canvas. This action cannot be undone.",
|
|
1146
1154
|
"workflows.visualEditor.clearTitle": "Clear Everything?",
|
|
1155
|
+
"workflows.visualEditor.clickToAdd": "Click a step type to add it to the canvas",
|
|
1156
|
+
"workflows.visualEditor.clickToAddFromPalette": "Click a step type from the palette to add it to the canvas",
|
|
1147
1157
|
"workflows.visualEditor.hideMetadata": "Hide Metadata",
|
|
1148
1158
|
"workflows.visualEditor.hint.addSteps": "Click step types to add them",
|
|
1149
1159
|
"workflows.visualEditor.hint.connectSteps": "Connect steps by dragging from handles",
|
|
@@ -1152,8 +1162,14 @@
|
|
|
1152
1162
|
"workflows.visualEditor.hint.validate": "Validate before saving",
|
|
1153
1163
|
"workflows.visualEditor.howToUse": "How to use:",
|
|
1154
1164
|
"workflows.visualEditor.loadExample": "Load Example",
|
|
1165
|
+
"workflows.visualEditor.loadExampleWorkflow": "Load an example workflow",
|
|
1166
|
+
"workflows.visualEditor.readOnly": "Read-only",
|
|
1155
1167
|
"workflows.visualEditor.runTest": "Run Test",
|
|
1156
1168
|
"workflows.visualEditor.showMetadata": "Show Metadata",
|
|
1169
|
+
"workflows.visualEditor.startBuilding": "Start Building Your Workflow",
|
|
1170
|
+
"workflows.visualEditor.stepPalette": "Step Palette",
|
|
1171
|
+
"workflows.visualEditor.tapToAdd": "Tap a step type to add it to the canvas",
|
|
1172
|
+
"workflows.visualEditor.tapToAddBelow": "Tap a step type below to add it to the canvas",
|
|
1157
1173
|
"workflows.visualEditor.validate": "Validate",
|
|
1158
1174
|
"workflows.visualEditor.workflowMetadata": "Workflow Metadata"
|
|
1159
1175
|
}
|
|
@@ -65,9 +65,12 @@
|
|
|
65
65
|
"workflows.actions.cancel": "Cancelar",
|
|
66
66
|
"workflows.actions.create": "Crear flujo de trabajo",
|
|
67
67
|
"workflows.actions.createVisual": "Crear flujo de trabajo (visual)",
|
|
68
|
+
"workflows.actions.customize": "Personalizar",
|
|
68
69
|
"workflows.actions.editStep": "Editar paso",
|
|
69
70
|
"workflows.actions.editVisually": "Editar visualmente",
|
|
70
71
|
"workflows.actions.openVisualEditor": "Abrir editor visual",
|
|
72
|
+
"workflows.actions.resetConfirm": "Esto descartará sus personalizaciones y restaurará la versión definida en código. ¿Continuar?",
|
|
73
|
+
"workflows.actions.resetToCode": "Restablecer a la versión de código",
|
|
71
74
|
"workflows.actions.saveChanges": "Guardar cambios",
|
|
72
75
|
"workflows.actions.toggleEnabled": "Clic para habilitar/deshabilitar",
|
|
73
76
|
"workflows.activities.activityId": "ID de actividad",
|
|
@@ -942,6 +945,11 @@
|
|
|
942
945
|
"workflows.signals.singular": "Senal",
|
|
943
946
|
"workflows.signals.timeout": "Tiempo limite de la senal",
|
|
944
947
|
"workflows.signals.title": "Senales",
|
|
948
|
+
"workflows.source.code": "Definido en código",
|
|
949
|
+
"workflows.source.code.readonlyBanner": "Este flujo de trabajo está definido en código. Personalícelo para realizar cambios.",
|
|
950
|
+
"workflows.source.code_override": "Personalizado",
|
|
951
|
+
"workflows.source.code_override.banner": "Este flujo de trabajo ha sido personalizado a partir de su versión definida en código.",
|
|
952
|
+
"workflows.source.user": "Creado por usuario",
|
|
945
953
|
"workflows.steps.addStep": "Agregar paso",
|
|
946
954
|
"workflows.steps.config": "Configuracion",
|
|
947
955
|
"workflows.steps.deleteStep": "Eliminar paso",
|
|
@@ -1144,6 +1152,8 @@
|
|
|
1144
1152
|
"workflows.visualEditor.clear": "Borrar",
|
|
1145
1153
|
"workflows.visualEditor.clearDescription": "Esto borrará todos los metadatos y el lienzo del flujo de trabajo. Esta acción no se puede deshacer.",
|
|
1146
1154
|
"workflows.visualEditor.clearTitle": "¿Borrar todo?",
|
|
1155
|
+
"workflows.visualEditor.clickToAdd": "Haz clic en un tipo de paso para añadirlo al lienzo",
|
|
1156
|
+
"workflows.visualEditor.clickToAddFromPalette": "Haz clic en un tipo de paso de la paleta para añadirlo al lienzo",
|
|
1147
1157
|
"workflows.visualEditor.hideMetadata": "Ocultar metadatos",
|
|
1148
1158
|
"workflows.visualEditor.hint.addSteps": "Haz clic en los tipos de pasos para agregarlos",
|
|
1149
1159
|
"workflows.visualEditor.hint.connectSteps": "Conecta pasos arrastrando desde los conectores",
|
|
@@ -1152,8 +1162,14 @@
|
|
|
1152
1162
|
"workflows.visualEditor.hint.validate": "Valida antes de guardar",
|
|
1153
1163
|
"workflows.visualEditor.howToUse": "Cómo usar:",
|
|
1154
1164
|
"workflows.visualEditor.loadExample": "Cargar ejemplo",
|
|
1165
|
+
"workflows.visualEditor.loadExampleWorkflow": "Cargar un flujo de trabajo de ejemplo",
|
|
1166
|
+
"workflows.visualEditor.readOnly": "Solo lectura",
|
|
1155
1167
|
"workflows.visualEditor.runTest": "Ejecutar prueba",
|
|
1156
1168
|
"workflows.visualEditor.showMetadata": "Mostrar metadatos",
|
|
1169
|
+
"workflows.visualEditor.startBuilding": "Empieza a construir tu flujo de trabajo",
|
|
1170
|
+
"workflows.visualEditor.stepPalette": "Paleta de pasos",
|
|
1171
|
+
"workflows.visualEditor.tapToAdd": "Toca un tipo de paso para añadirlo al lienzo",
|
|
1172
|
+
"workflows.visualEditor.tapToAddBelow": "Toca un tipo de paso debajo para añadirlo al lienzo",
|
|
1157
1173
|
"workflows.visualEditor.validate": "Validar",
|
|
1158
1174
|
"workflows.visualEditor.workflowMetadata": "Metadatos del flujo de trabajo"
|
|
1159
1175
|
}
|
|
@@ -65,9 +65,12 @@
|
|
|
65
65
|
"workflows.actions.cancel": "Anuluj",
|
|
66
66
|
"workflows.actions.create": "Utwórz Przepływ Pracy",
|
|
67
67
|
"workflows.actions.createVisual": "Utwórz Przepływ (Wizualnie)",
|
|
68
|
+
"workflows.actions.customize": "Dostosuj",
|
|
68
69
|
"workflows.actions.editStep": "Edytuj Krok",
|
|
69
70
|
"workflows.actions.editVisually": "Edytuj Wizualnie",
|
|
70
71
|
"workflows.actions.openVisualEditor": "Otwórz Edytor Wizualny",
|
|
72
|
+
"workflows.actions.resetConfirm": "Spowoduje to odrzucenie dostosowań i przywrócenie wersji zdefiniowanej w kodzie. Kontynuować?",
|
|
73
|
+
"workflows.actions.resetToCode": "Przywróć wersję z kodu",
|
|
71
74
|
"workflows.actions.saveChanges": "Zapisz Zmiany",
|
|
72
75
|
"workflows.actions.toggleEnabled": "Kliknij aby włączyć/wyłączyć",
|
|
73
76
|
"workflows.activities.activityId": "ID Działania",
|
|
@@ -942,6 +945,11 @@
|
|
|
942
945
|
"workflows.signals.singular": "Sygnał",
|
|
943
946
|
"workflows.signals.timeout": "Limit Czasu Sygnału",
|
|
944
947
|
"workflows.signals.title": "Sygnały",
|
|
948
|
+
"workflows.source.code": "Zdefiniowany w kodzie",
|
|
949
|
+
"workflows.source.code.readonlyBanner": "Ten przepływ pracy jest zdefiniowany w kodzie. Dostosuj go, aby wprowadzić zmiany.",
|
|
950
|
+
"workflows.source.code_override": "Dostosowany",
|
|
951
|
+
"workflows.source.code_override.banner": "Ten przepływ pracy został dostosowany względem wersji zdefiniowanej w kodzie.",
|
|
952
|
+
"workflows.source.user": "Utworzony przez użytkownika",
|
|
945
953
|
"workflows.steps.addStep": "Dodaj Krok",
|
|
946
954
|
"workflows.steps.config": "Konfiguracja",
|
|
947
955
|
"workflows.steps.deleteStep": "Usuń Krok",
|
|
@@ -1144,6 +1152,8 @@
|
|
|
1144
1152
|
"workflows.visualEditor.clear": "Wyczyść",
|
|
1145
1153
|
"workflows.visualEditor.clearDescription": "Spowoduje to wyczyszczenie wszystkich metadanych i obszaru roboczego przepływu pracy. Tej czynności nie można cofnąć.",
|
|
1146
1154
|
"workflows.visualEditor.clearTitle": "Wyczyścić wszystko?",
|
|
1155
|
+
"workflows.visualEditor.clickToAdd": "Kliknij typ kroku, aby dodać go do obszaru roboczego",
|
|
1156
|
+
"workflows.visualEditor.clickToAddFromPalette": "Kliknij typ kroku z palety, aby dodać go do obszaru roboczego",
|
|
1147
1157
|
"workflows.visualEditor.hideMetadata": "Ukryj metadane",
|
|
1148
1158
|
"workflows.visualEditor.hint.addSteps": "Kliknij typy kroków, aby je dodać",
|
|
1149
1159
|
"workflows.visualEditor.hint.connectSteps": "Łącz kroki, przeciągając z uchwytów",
|
|
@@ -1152,8 +1162,14 @@
|
|
|
1152
1162
|
"workflows.visualEditor.hint.validate": "Zwaliduj przed zapisaniem",
|
|
1153
1163
|
"workflows.visualEditor.howToUse": "Jak używać:",
|
|
1154
1164
|
"workflows.visualEditor.loadExample": "Załaduj przykład",
|
|
1165
|
+
"workflows.visualEditor.loadExampleWorkflow": "Załaduj przykładowy przepływ pracy",
|
|
1166
|
+
"workflows.visualEditor.readOnly": "Tylko do odczytu",
|
|
1155
1167
|
"workflows.visualEditor.runTest": "Uruchom test",
|
|
1156
1168
|
"workflows.visualEditor.showMetadata": "Pokaż metadane",
|
|
1169
|
+
"workflows.visualEditor.startBuilding": "Zacznij budować swój przepływ pracy",
|
|
1170
|
+
"workflows.visualEditor.stepPalette": "Paleta kroków",
|
|
1171
|
+
"workflows.visualEditor.tapToAdd": "Dotknij typu kroku, aby dodać go do obszaru roboczego",
|
|
1172
|
+
"workflows.visualEditor.tapToAddBelow": "Dotknij typu kroku poniżej, aby dodać go do obszaru roboczego",
|
|
1157
1173
|
"workflows.visualEditor.validate": "Waliduj",
|
|
1158
1174
|
"workflows.visualEditor.workflowMetadata": "Metadane przepływu pracy"
|
|
1159
1175
|
}
|