@open-mercato/core 0.4.2-canary-968c919ed2 → 0.4.2-canary-f821f89ef6

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.
Files changed (632) hide show
  1. package/dist/generated/entities/workflow_event_trigger/index.js +33 -0
  2. package/dist/generated/entities/workflow_event_trigger/index.js.map +7 -0
  3. package/dist/generated/entities.ids.generated.js +2 -5
  4. package/dist/generated/entities.ids.generated.js.map +2 -2
  5. package/dist/generated/entity-fields-registry.js +2 -2
  6. package/dist/generated/entity-fields-registry.js.map +2 -2
  7. package/dist/modules/api_docs/frontend/docs/api/page.js +2 -3
  8. package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
  9. package/dist/modules/api_keys/backend/api-keys/page.js +1 -1
  10. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  11. package/dist/modules/attachments/components/AttachmentLibrary.js +0 -4
  12. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  13. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +0 -2
  14. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  15. package/dist/modules/auth/api/admin/nav.js +3 -4
  16. package/dist/modules/auth/api/admin/nav.js.map +2 -2
  17. package/dist/modules/auth/api/login.js +6 -25
  18. package/dist/modules/auth/api/login.js.map +2 -2
  19. package/dist/modules/auth/api/reset/confirm.js +2 -25
  20. package/dist/modules/auth/api/reset/confirm.js.map +2 -2
  21. package/dist/modules/auth/api/reset.js +0 -23
  22. package/dist/modules/auth/api/reset.js.map +2 -2
  23. package/dist/modules/auth/api/sidebar/preferences/route.js +9 -14
  24. package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
  25. package/dist/modules/auth/api/users/route.js +2 -4
  26. package/dist/modules/auth/api/users/route.js.map +2 -2
  27. package/dist/modules/auth/backend/roles/[id]/edit/page.js +1 -4
  28. package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
  29. package/dist/modules/auth/backend/roles/page.js +3 -3
  30. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  31. package/dist/modules/auth/backend/users/[id]/edit/page.js +3 -18
  32. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  33. package/dist/modules/auth/backend/users/create/page.js +2 -15
  34. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  35. package/dist/modules/auth/backend/users/page.js +3 -3
  36. package/dist/modules/auth/backend/users/page.js.map +2 -2
  37. package/dist/modules/auth/cli.js +11 -25
  38. package/dist/modules/auth/cli.js.map +2 -2
  39. package/dist/modules/auth/commands/users.js +2 -59
  40. package/dist/modules/auth/commands/users.js.map +2 -2
  41. package/dist/modules/auth/data/validators.js +3 -6
  42. package/dist/modules/auth/data/validators.js.map +2 -2
  43. package/dist/modules/auth/events.js +30 -0
  44. package/dist/modules/auth/events.js.map +7 -0
  45. package/dist/modules/auth/frontend/login.js +3 -105
  46. package/dist/modules/auth/frontend/login.js.map +2 -2
  47. package/dist/modules/auth/frontend/reset/[token]/page.js +10 -20
  48. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  49. package/dist/modules/auth/lib/setup-app.js +8 -42
  50. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  51. package/dist/modules/auth/services/authService.js +3 -24
  52. package/dist/modules/auth/services/authService.js.map +2 -2
  53. package/dist/modules/business_rules/api/execute/[ruleId]/route.js +145 -0
  54. package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +7 -0
  55. package/dist/modules/business_rules/api/execute/route.js +1 -7
  56. package/dist/modules/business_rules/api/execute/route.js.map +2 -2
  57. package/dist/modules/business_rules/backend/rules/page.js +0 -4
  58. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  59. package/dist/modules/business_rules/backend/sets/page.js +0 -3
  60. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  61. package/dist/modules/business_rules/cli.js +1 -2
  62. package/dist/modules/business_rules/cli.js.map +2 -2
  63. package/dist/modules/business_rules/data/validators.js +34 -0
  64. package/dist/modules/business_rules/data/validators.js.map +2 -2
  65. package/dist/modules/business_rules/index.js +21 -1
  66. package/dist/modules/business_rules/index.js.map +2 -2
  67. package/dist/modules/business_rules/lib/rule-engine.js +185 -34
  68. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  69. package/dist/modules/catalog/components/PriceKindSettings.js +0 -2
  70. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  71. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
  72. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  73. package/dist/modules/catalog/components/products/ProductsDataTable.js +0 -2
  74. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  75. package/dist/modules/catalog/events.js +34 -0
  76. package/dist/modules/catalog/events.js.map +7 -0
  77. package/dist/modules/configs/cli.js +0 -6
  78. package/dist/modules/configs/cli.js.map +2 -2
  79. package/dist/modules/configs/components/CachePanel.js +4 -4
  80. package/dist/modules/configs/components/CachePanel.js.map +2 -2
  81. package/dist/modules/configs/lib/system-status.js +1 -48
  82. package/dist/modules/configs/lib/system-status.js.map +2 -2
  83. package/dist/modules/configs/lib/upgrade-actions.js +0 -18
  84. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  85. package/dist/modules/currencies/backend/currencies/page.js +0 -3
  86. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  87. package/dist/modules/currencies/backend/exchange-rates/page.js +0 -2
  88. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  89. package/dist/modules/customers/backend/customers/companies/page.js +0 -3
  90. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  91. package/dist/modules/customers/backend/customers/deals/page.js +0 -3
  92. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  93. package/dist/modules/customers/backend/customers/people/page.js +0 -3
  94. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  95. package/dist/modules/customers/commands/deals.js +0 -31
  96. package/dist/modules/customers/commands/deals.js.map +2 -2
  97. package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
  98. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  99. package/dist/modules/customers/events.js +49 -0
  100. package/dist/modules/customers/events.js.map +7 -0
  101. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +1 -2
  102. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
  103. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +1 -2
  104. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
  105. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +1 -2
  106. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
  107. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +1 -2
  108. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
  109. package/dist/modules/dashboards/cli.js +5 -44
  110. package/dist/modules/dashboards/cli.js.map +2 -2
  111. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +11 -16
  112. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
  113. package/dist/modules/dashboards/services/widgetDataService.js +3 -139
  114. package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
  115. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +1 -2
  116. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
  117. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +1 -2
  118. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
  119. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +1 -2
  120. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
  121. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +1 -2
  122. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
  123. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +1 -2
  124. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
  125. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +1 -2
  126. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
  127. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +1 -2
  128. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
  129. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +1 -2
  130. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
  131. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +1 -2
  132. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
  133. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +1 -2
  134. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
  135. package/dist/modules/dictionaries/components/DictionaryTable.js +0 -2
  136. package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
  137. package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
  138. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  139. package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
  140. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  141. package/dist/modules/directory/events.js +23 -0
  142. package/dist/modules/directory/events.js.map +7 -0
  143. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
  144. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  145. package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
  146. package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
  147. package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
  148. package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
  149. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
  150. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  151. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
  152. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  153. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
  154. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  155. package/dist/modules/query_index/cli.js +7 -63
  156. package/dist/modules/query_index/cli.js.map +2 -2
  157. package/dist/modules/query_index/components/QueryIndexesTable.js +1 -7
  158. package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
  159. package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
  160. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  161. package/dist/modules/resources/backend/resources/resources/page.js +2 -2
  162. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  163. package/dist/modules/sales/acl.js +1 -0
  164. package/dist/modules/sales/acl.js.map +2 -2
  165. package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -2
  166. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  167. package/dist/modules/sales/backend/sales/channels/page.js +0 -2
  168. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  169. package/dist/modules/sales/backend/sales/documents/[id]/page.js +12 -0
  170. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  171. package/dist/modules/sales/commands/documents.js +62 -53
  172. package/dist/modules/sales/commands/documents.js.map +2 -2
  173. package/dist/modules/sales/commands/payments.js +0 -26
  174. package/dist/modules/sales/commands/payments.js.map +2 -2
  175. package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
  176. package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
  177. package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
  178. package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
  179. package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
  180. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
  181. package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
  182. package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
  183. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -2
  184. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  185. package/dist/modules/sales/components/documents/AdjustmentsSection.js +0 -2
  186. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  187. package/dist/modules/sales/components/documents/PaymentsSection.js +1 -2
  188. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  189. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +0 -2
  190. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  191. package/dist/modules/sales/events.js +63 -0
  192. package/dist/modules/sales/events.js.map +7 -0
  193. package/dist/modules/sales/lib/dictionaries.js +3 -0
  194. package/dist/modules/sales/lib/dictionaries.js.map +2 -2
  195. package/dist/modules/sales/lib/frontend/documentDataEvents.js +25 -0
  196. package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +7 -0
  197. package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
  198. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  199. package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
  200. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  201. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
  202. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  203. package/dist/modules/staff/backend/staff/teams/page.js +2 -2
  204. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  205. package/dist/modules/staff/commands/leave-requests.js +0 -79
  206. package/dist/modules/staff/commands/leave-requests.js.map +2 -2
  207. package/dist/modules/workflows/acl.js +2 -0
  208. package/dist/modules/workflows/acl.js.map +2 -2
  209. package/dist/modules/workflows/api/instances/route.js +18 -6
  210. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  211. package/dist/modules/workflows/api/tasks/route.js +6 -1
  212. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  213. package/dist/modules/workflows/backend/definitions/[id]/page.js +9 -1
  214. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  215. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
  216. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
  217. package/dist/modules/workflows/backend/definitions/create/page.js +24 -15
  218. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  219. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  220. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  221. package/dist/modules/workflows/backend/definitions/page.js +0 -5
  222. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  223. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +150 -132
  224. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  225. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
  226. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
  227. package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
  228. package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
  229. package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
  230. package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
  231. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
  232. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
  233. package/dist/modules/workflows/backend/instances/page.js +0 -3
  234. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  235. package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
  236. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  237. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
  238. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
  239. package/dist/modules/workflows/backend/tasks/page.js +5 -9
  240. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  241. package/dist/modules/workflows/cli.js +93 -15
  242. package/dist/modules/workflows/cli.js.map +3 -3
  243. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +481 -0
  244. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +7 -0
  245. package/dist/modules/workflows/components/EventTriggersEditor.js +553 -0
  246. package/dist/modules/workflows/components/EventTriggersEditor.js.map +7 -0
  247. package/dist/modules/workflows/data/entities.js +64 -1
  248. package/dist/modules/workflows/data/entities.js.map +2 -2
  249. package/dist/modules/workflows/data/validators.js +115 -0
  250. package/dist/modules/workflows/data/validators.js.map +2 -2
  251. package/dist/modules/workflows/events.js +38 -0
  252. package/dist/modules/workflows/events.js.map +7 -0
  253. package/dist/modules/workflows/examples/checkout-demo-definition.json +1 -5
  254. package/dist/modules/workflows/examples/order-approval-definition.json +257 -0
  255. package/dist/modules/workflows/examples/order-approval-guard-rules.json +32 -0
  256. package/dist/modules/workflows/lib/activity-executor.js +75 -13
  257. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  258. package/dist/modules/workflows/lib/event-trigger-service.js +308 -0
  259. package/dist/modules/workflows/lib/event-trigger-service.js.map +7 -0
  260. package/dist/modules/workflows/lib/graph-utils.js +71 -2
  261. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  262. package/dist/modules/workflows/lib/seeds.js +22 -5
  263. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  264. package/dist/modules/workflows/lib/start-validator.js +33 -23
  265. package/dist/modules/workflows/lib/start-validator.js.map +2 -2
  266. package/dist/modules/workflows/lib/transition-handler.js +161 -57
  267. package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
  268. package/dist/modules/workflows/migrations/Migration20260123143500.js +36 -0
  269. package/dist/modules/workflows/migrations/Migration20260123143500.js.map +7 -0
  270. package/dist/modules/workflows/subscribers/event-trigger.js +78 -0
  271. package/dist/modules/workflows/subscribers/event-trigger.js.map +7 -0
  272. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +323 -0
  273. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +7 -0
  274. package/dist/modules/workflows/widgets/injection/order-approval/widget.js +17 -0
  275. package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +7 -0
  276. package/dist/modules/workflows/widgets/injection-table.js +19 -0
  277. package/dist/modules/workflows/widgets/injection-table.js.map +7 -0
  278. package/generated/entities/workflow_event_trigger/index.ts +15 -0
  279. package/generated/entities.ids.generated.ts +2 -5
  280. package/generated/entity-fields-registry.ts +2 -2
  281. package/package.json +2 -2
  282. package/src/modules/api_docs/frontend/docs/api/page.tsx +2 -3
  283. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
  284. package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -4
  285. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +0 -2
  286. package/src/modules/auth/README.md +1 -1
  287. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
  288. package/src/modules/auth/api/__tests__/login.test.ts +0 -2
  289. package/src/modules/auth/api/admin/nav.ts +6 -10
  290. package/src/modules/auth/api/login.ts +7 -26
  291. package/src/modules/auth/api/reset/confirm.ts +2 -25
  292. package/src/modules/auth/api/reset.ts +0 -23
  293. package/src/modules/auth/api/sidebar/preferences/route.ts +12 -21
  294. package/src/modules/auth/api/users/route.ts +2 -5
  295. package/src/modules/auth/backend/roles/[id]/edit/page.tsx +1 -4
  296. package/src/modules/auth/backend/roles/page.tsx +3 -3
  297. package/src/modules/auth/backend/users/[id]/edit/page.tsx +3 -22
  298. package/src/modules/auth/backend/users/create/page.tsx +2 -19
  299. package/src/modules/auth/backend/users/page.tsx +3 -3
  300. package/src/modules/auth/cli.ts +11 -38
  301. package/src/modules/auth/commands/users.ts +2 -73
  302. package/src/modules/auth/data/validators.ts +2 -6
  303. package/src/modules/auth/events.ts +39 -0
  304. package/src/modules/auth/frontend/login.tsx +5 -131
  305. package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
  306. package/src/modules/auth/i18n/de.json +1 -48
  307. package/src/modules/auth/i18n/en.json +1 -48
  308. package/src/modules/auth/i18n/es.json +1 -48
  309. package/src/modules/auth/i18n/pl.json +1 -48
  310. package/src/modules/auth/lib/setup-app.ts +9 -58
  311. package/src/modules/auth/services/authService.ts +4 -27
  312. package/src/modules/business_rules/api/execute/[ruleId]/route.ts +163 -0
  313. package/src/modules/business_rules/api/execute/route.ts +1 -8
  314. package/src/modules/business_rules/backend/rules/page.tsx +0 -4
  315. package/src/modules/business_rules/backend/sets/page.tsx +0 -3
  316. package/src/modules/business_rules/cli.ts +1 -2
  317. package/src/modules/business_rules/data/validators.ts +40 -0
  318. package/src/modules/business_rules/i18n/en.json +1 -3
  319. package/src/modules/business_rules/index.ts +25 -0
  320. package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
  321. package/src/modules/business_rules/lib/rule-engine.ts +277 -51
  322. package/src/modules/catalog/components/PriceKindSettings.tsx +0 -2
  323. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
  324. package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -2
  325. package/src/modules/catalog/events.ts +45 -0
  326. package/src/modules/catalog/i18n/en.json +1 -3
  327. package/src/modules/configs/cli.ts +0 -6
  328. package/src/modules/configs/components/CachePanel.tsx +4 -4
  329. package/src/modules/configs/i18n/en.json +2 -12
  330. package/src/modules/configs/i18n/pl.json +2 -12
  331. package/src/modules/configs/lib/system-status.ts +1 -48
  332. package/src/modules/configs/lib/system-status.types.ts +0 -1
  333. package/src/modules/configs/lib/upgrade-actions.ts +0 -18
  334. package/src/modules/currencies/backend/currencies/page.tsx +0 -3
  335. package/src/modules/currencies/backend/exchange-rates/page.tsx +0 -2
  336. package/src/modules/customers/backend/customers/companies/page.tsx +0 -3
  337. package/src/modules/customers/backend/customers/deals/page.tsx +0 -3
  338. package/src/modules/customers/backend/customers/people/page.tsx +0 -3
  339. package/src/modules/customers/commands/deals.ts +0 -39
  340. package/src/modules/customers/components/CustomerTodosTable.tsx +0 -1
  341. package/src/modules/customers/events.ts +63 -0
  342. package/src/modules/customers/i18n/en.json +1 -5
  343. package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
  344. package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
  345. package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
  346. package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
  347. package/src/modules/dashboards/cli.ts +5 -55
  348. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
  349. package/src/modules/dashboards/services/widgetDataService.ts +4 -164
  350. package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
  351. package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
  352. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
  353. package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
  354. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
  355. package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
  356. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
  357. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
  358. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
  359. package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
  360. package/src/modules/dictionaries/components/DictionaryTable.tsx +0 -2
  361. package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
  362. package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
  363. package/src/modules/directory/events.ts +31 -0
  364. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
  365. package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
  366. package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
  367. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +4 -3
  368. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
  369. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
  370. package/src/modules/query_index/cli.ts +13 -82
  371. package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -8
  372. package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
  373. package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
  374. package/src/modules/sales/acl.ts +1 -0
  375. package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -2
  376. package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
  377. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +16 -0
  378. package/src/modules/sales/commands/documents.ts +70 -62
  379. package/src/modules/sales/commands/payments.ts +0 -33
  380. package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
  381. package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
  382. package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
  383. package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
  384. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -2
  385. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +0 -2
  386. package/src/modules/sales/components/documents/PaymentsSection.tsx +1 -2
  387. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +0 -2
  388. package/src/modules/sales/events.ts +82 -0
  389. package/src/modules/sales/i18n/de.json +0 -20
  390. package/src/modules/sales/i18n/en.json +1 -25
  391. package/src/modules/sales/i18n/es.json +0 -20
  392. package/src/modules/sales/i18n/pl.json +0 -20
  393. package/src/modules/sales/lib/dictionaries.ts +3 -0
  394. package/src/modules/sales/lib/frontend/documentDataEvents.ts +28 -0
  395. package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
  396. package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
  397. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
  398. package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
  399. package/src/modules/staff/commands/leave-requests.ts +0 -94
  400. package/src/modules/staff/i18n/de.json +0 -4
  401. package/src/modules/staff/i18n/en.json +1 -9
  402. package/src/modules/staff/i18n/es.json +0 -4
  403. package/src/modules/staff/i18n/pl.json +0 -4
  404. package/src/modules/workflows/acl.ts +2 -0
  405. package/src/modules/workflows/api/__tests__/instances.route.test.ts +5 -2
  406. package/src/modules/workflows/api/instances/route.ts +21 -7
  407. package/src/modules/workflows/api/tasks/route.ts +7 -1
  408. package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
  409. package/src/modules/workflows/backend/definitions/[id]/page.tsx +9 -0
  410. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  411. package/src/modules/workflows/backend/definitions/create/page.tsx +9 -0
  412. package/src/modules/workflows/backend/definitions/page.tsx +0 -5
  413. package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
  414. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +21 -3
  415. package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
  416. package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
  417. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
  418. package/src/modules/workflows/backend/instances/page.tsx +1 -4
  419. package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
  420. package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
  421. package/src/modules/workflows/backend/tasks/page.tsx +6 -10
  422. package/src/modules/workflows/cli.ts +123 -12
  423. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +581 -0
  424. package/src/modules/workflows/components/EventTriggersEditor.tsx +664 -0
  425. package/src/modules/workflows/data/entities.ts +124 -0
  426. package/src/modules/workflows/data/validators.ts +138 -0
  427. package/src/modules/workflows/events.ts +49 -0
  428. package/src/modules/workflows/examples/checkout-demo-definition.json +1 -5
  429. package/src/modules/workflows/examples/order-approval-definition.json +257 -0
  430. package/src/modules/workflows/examples/order-approval-guard-rules.json +32 -0
  431. package/src/modules/workflows/i18n/en.json +72 -3
  432. package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +43 -36
  433. package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +170 -90
  434. package/src/modules/workflows/lib/activity-executor.ts +129 -16
  435. package/src/modules/workflows/lib/event-trigger-service.ts +557 -0
  436. package/src/modules/workflows/lib/graph-utils.ts +117 -2
  437. package/src/modules/workflows/lib/seeds.ts +34 -8
  438. package/src/modules/workflows/lib/start-validator.ts +38 -28
  439. package/src/modules/workflows/lib/transition-handler.ts +212 -71
  440. package/src/modules/workflows/migrations/Migration20260123143500.ts +38 -0
  441. package/src/modules/workflows/subscribers/event-trigger.ts +109 -0
  442. package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +446 -0
  443. package/src/modules/workflows/widgets/injection/order-approval/widget.ts +16 -0
  444. package/src/modules/workflows/widgets/injection-table.ts +21 -0
  445. package/dist/generated/entities/notification/index.js +0 -57
  446. package/dist/generated/entities/notification/index.js.map +0 -7
  447. package/dist/modules/auth/api/profile/route.js +0 -157
  448. package/dist/modules/auth/api/profile/route.js.map +0 -7
  449. package/dist/modules/auth/backend/auth/profile/page.js +0 -141
  450. package/dist/modules/auth/backend/auth/profile/page.js.map +0 -7
  451. package/dist/modules/auth/backend/auth/profile/page.meta.js +0 -13
  452. package/dist/modules/auth/backend/auth/profile/page.meta.js.map +0 -7
  453. package/dist/modules/auth/notifications.js +0 -112
  454. package/dist/modules/auth/notifications.js.map +0 -7
  455. package/dist/modules/business_rules/notifications.js +0 -28
  456. package/dist/modules/business_rules/notifications.js.map +0 -7
  457. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +0 -37
  458. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +0 -7
  459. package/dist/modules/catalog/notifications.js +0 -28
  460. package/dist/modules/catalog/notifications.js.map +0 -7
  461. package/dist/modules/catalog/subscribers/low-stock-notification.js +0 -38
  462. package/dist/modules/catalog/subscribers/low-stock-notification.js.map +0 -7
  463. package/dist/modules/customers/notifications.js +0 -48
  464. package/dist/modules/customers/notifications.js.map +0 -7
  465. package/dist/modules/dashboards/lib/role-widgets.js +0 -58
  466. package/dist/modules/dashboards/lib/role-widgets.js.map +0 -7
  467. package/dist/modules/directory/api/get/tenants/lookup.js +0 -70
  468. package/dist/modules/directory/api/get/tenants/lookup.js.map +0 -7
  469. package/dist/modules/notifications/acl.js +0 -11
  470. package/dist/modules/notifications/acl.js.map +0 -7
  471. package/dist/modules/notifications/api/[id]/action/route.js +0 -74
  472. package/dist/modules/notifications/api/[id]/action/route.js.map +0 -7
  473. package/dist/modules/notifications/api/[id]/dismiss/route.js +0 -15
  474. package/dist/modules/notifications/api/[id]/dismiss/route.js.map +0 -7
  475. package/dist/modules/notifications/api/[id]/read/route.js +0 -15
  476. package/dist/modules/notifications/api/[id]/read/route.js.map +0 -7
  477. package/dist/modules/notifications/api/[id]/restore/route.js +0 -53
  478. package/dist/modules/notifications/api/[id]/restore/route.js.map +0 -7
  479. package/dist/modules/notifications/api/batch/route.js +0 -17
  480. package/dist/modules/notifications/api/batch/route.js.map +0 -7
  481. package/dist/modules/notifications/api/feature/route.js +0 -17
  482. package/dist/modules/notifications/api/feature/route.js.map +0 -7
  483. package/dist/modules/notifications/api/mark-all-read/route.js +0 -35
  484. package/dist/modules/notifications/api/mark-all-read/route.js.map +0 -7
  485. package/dist/modules/notifications/api/openapi.js +0 -76
  486. package/dist/modules/notifications/api/openapi.js.map +0 -7
  487. package/dist/modules/notifications/api/role/route.js +0 -17
  488. package/dist/modules/notifications/api/role/route.js.map +0 -7
  489. package/dist/modules/notifications/api/route.js +0 -85
  490. package/dist/modules/notifications/api/route.js.map +0 -7
  491. package/dist/modules/notifications/api/settings/route.js +0 -155
  492. package/dist/modules/notifications/api/settings/route.js.map +0 -7
  493. package/dist/modules/notifications/api/unread-count/route.js +0 -38
  494. package/dist/modules/notifications/api/unread-count/route.js.map +0 -7
  495. package/dist/modules/notifications/backend/config/notifications/page.js +0 -10
  496. package/dist/modules/notifications/backend/config/notifications/page.js.map +0 -7
  497. package/dist/modules/notifications/backend/config/notifications/page.meta.js +0 -24
  498. package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +0 -7
  499. package/dist/modules/notifications/cli.js +0 -16
  500. package/dist/modules/notifications/cli.js.map +0 -7
  501. package/dist/modules/notifications/data/entities.js +0 -112
  502. package/dist/modules/notifications/data/entities.js.map +0 -7
  503. package/dist/modules/notifications/data/validators.js +0 -98
  504. package/dist/modules/notifications/data/validators.js.map +0 -7
  505. package/dist/modules/notifications/di.js +0 -13
  506. package/dist/modules/notifications/di.js.map +0 -7
  507. package/dist/modules/notifications/emails/NotificationEmail.js +0 -58
  508. package/dist/modules/notifications/emails/NotificationEmail.js.map +0 -7
  509. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +0 -44
  510. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +0 -7
  511. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +0 -220
  512. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +0 -7
  513. package/dist/modules/notifications/index.js +0 -14
  514. package/dist/modules/notifications/index.js.map +0 -7
  515. package/dist/modules/notifications/lib/deliveryConfig.js +0 -107
  516. package/dist/modules/notifications/lib/deliveryConfig.js.map +0 -7
  517. package/dist/modules/notifications/lib/deliveryStrategies.js +0 -14
  518. package/dist/modules/notifications/lib/deliveryStrategies.js.map +0 -7
  519. package/dist/modules/notifications/lib/events.js +0 -12
  520. package/dist/modules/notifications/lib/events.js.map +0 -7
  521. package/dist/modules/notifications/lib/notificationBuilder.js +0 -66
  522. package/dist/modules/notifications/lib/notificationBuilder.js.map +0 -7
  523. package/dist/modules/notifications/lib/notificationFactory.js +0 -54
  524. package/dist/modules/notifications/lib/notificationFactory.js.map +0 -7
  525. package/dist/modules/notifications/lib/notificationMapper.js +0 -34
  526. package/dist/modules/notifications/lib/notificationMapper.js.map +0 -7
  527. package/dist/modules/notifications/lib/notificationRecipients.js +0 -35
  528. package/dist/modules/notifications/lib/notificationRecipients.js.map +0 -7
  529. package/dist/modules/notifications/lib/notificationService.js +0 -279
  530. package/dist/modules/notifications/lib/notificationService.js.map +0 -7
  531. package/dist/modules/notifications/lib/routeHelpers.js +0 -101
  532. package/dist/modules/notifications/lib/routeHelpers.js.map +0 -7
  533. package/dist/modules/notifications/lib/safeHref.js +0 -24
  534. package/dist/modules/notifications/lib/safeHref.js.map +0 -7
  535. package/dist/modules/notifications/migrations/Migration20260123000001.js +0 -70
  536. package/dist/modules/notifications/migrations/Migration20260123000001.js.map +0 -7
  537. package/dist/modules/notifications/migrations/Migration20260126150000.js +0 -37
  538. package/dist/modules/notifications/migrations/Migration20260126150000.js.map +0 -7
  539. package/dist/modules/notifications/migrations/Migration20260129082610.js +0 -13
  540. package/dist/modules/notifications/migrations/Migration20260129082610.js.map +0 -7
  541. package/dist/modules/notifications/subscribers/deliver-notification.js +0 -165
  542. package/dist/modules/notifications/subscribers/deliver-notification.js.map +0 -7
  543. package/dist/modules/notifications/workers/create-notification.worker.js +0 -70
  544. package/dist/modules/notifications/workers/create-notification.worker.js.map +0 -7
  545. package/dist/modules/sales/notifications.client.js +0 -51
  546. package/dist/modules/sales/notifications.client.js.map +0 -7
  547. package/dist/modules/sales/notifications.js +0 -88
  548. package/dist/modules/sales/notifications.js.map +0 -7
  549. package/dist/modules/sales/subscribers/quote-expiring-notification.js +0 -38
  550. package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +0 -7
  551. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +0 -137
  552. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +0 -7
  553. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +0 -137
  554. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +0 -7
  555. package/dist/modules/sales/widgets/notifications/index.js +0 -7
  556. package/dist/modules/sales/widgets/notifications/index.js.map +0 -7
  557. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +0 -60
  558. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +0 -7
  559. package/dist/modules/staff/notifications.js +0 -75
  560. package/dist/modules/staff/notifications.js.map +0 -7
  561. package/dist/modules/workflows/notifications.js +0 -28
  562. package/dist/modules/workflows/notifications.js.map +0 -7
  563. package/dist/modules/workflows/subscribers/task-assigned-notification.js +0 -38
  564. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +0 -7
  565. package/generated/entities/notification/index.ts +0 -27
  566. package/src/modules/auth/api/profile/route.ts +0 -163
  567. package/src/modules/auth/backend/auth/profile/page.meta.ts +0 -9
  568. package/src/modules/auth/backend/auth/profile/page.tsx +0 -174
  569. package/src/modules/auth/notifications.ts +0 -109
  570. package/src/modules/business_rules/notifications.ts +0 -25
  571. package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +0 -50
  572. package/src/modules/catalog/notifications.ts +0 -25
  573. package/src/modules/catalog/subscribers/low-stock-notification.ts +0 -52
  574. package/src/modules/customers/notifications.ts +0 -44
  575. package/src/modules/dashboards/lib/role-widgets.ts +0 -80
  576. package/src/modules/directory/api/get/tenants/lookup.ts +0 -75
  577. package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -195
  578. package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
  579. package/src/modules/notifications/__tests__/notificationService.test.ts +0 -208
  580. package/src/modules/notifications/acl.ts +0 -7
  581. package/src/modules/notifications/api/[id]/action/route.ts +0 -75
  582. package/src/modules/notifications/api/[id]/dismiss/route.ts +0 -12
  583. package/src/modules/notifications/api/[id]/read/route.ts +0 -12
  584. package/src/modules/notifications/api/[id]/restore/route.ts +0 -53
  585. package/src/modules/notifications/api/batch/route.ts +0 -14
  586. package/src/modules/notifications/api/feature/route.ts +0 -14
  587. package/src/modules/notifications/api/mark-all-read/route.ts +0 -34
  588. package/src/modules/notifications/api/openapi.ts +0 -76
  589. package/src/modules/notifications/api/role/route.ts +0 -14
  590. package/src/modules/notifications/api/route.ts +0 -92
  591. package/src/modules/notifications/api/settings/route.ts +0 -157
  592. package/src/modules/notifications/api/unread-count/route.ts +0 -38
  593. package/src/modules/notifications/backend/config/notifications/page.meta.ts +0 -22
  594. package/src/modules/notifications/backend/config/notifications/page.tsx +0 -12
  595. package/src/modules/notifications/cli.ts +0 -18
  596. package/src/modules/notifications/data/entities.ts +0 -99
  597. package/src/modules/notifications/data/validators.ts +0 -115
  598. package/src/modules/notifications/di.ts +0 -11
  599. package/src/modules/notifications/emails/NotificationEmail.tsx +0 -98
  600. package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +0 -42
  601. package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +0 -233
  602. package/src/modules/notifications/i18n/de.json +0 -50
  603. package/src/modules/notifications/i18n/en.json +0 -50
  604. package/src/modules/notifications/i18n/es.json +0 -50
  605. package/src/modules/notifications/i18n/pl.json +0 -50
  606. package/src/modules/notifications/index.ts +0 -12
  607. package/src/modules/notifications/lib/deliveryConfig.ts +0 -153
  608. package/src/modules/notifications/lib/deliveryStrategies.ts +0 -50
  609. package/src/modules/notifications/lib/events.ts +0 -48
  610. package/src/modules/notifications/lib/notificationBuilder.ts +0 -121
  611. package/src/modules/notifications/lib/notificationFactory.ts +0 -76
  612. package/src/modules/notifications/lib/notificationMapper.ts +0 -33
  613. package/src/modules/notifications/lib/notificationRecipients.ts +0 -83
  614. package/src/modules/notifications/lib/notificationService.ts +0 -414
  615. package/src/modules/notifications/lib/routeHelpers.ts +0 -151
  616. package/src/modules/notifications/lib/safeHref.ts +0 -29
  617. package/src/modules/notifications/migrations/.snapshot-open-mercato.json +0 -336
  618. package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
  619. package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
  620. package/src/modules/notifications/migrations/Migration20260129082610.ts +0 -13
  621. package/src/modules/notifications/subscribers/deliver-notification.ts +0 -204
  622. package/src/modules/notifications/workers/create-notification.worker.ts +0 -122
  623. package/src/modules/sales/notifications.client.ts +0 -65
  624. package/src/modules/sales/notifications.ts +0 -82
  625. package/src/modules/sales/subscribers/quote-expiring-notification.ts +0 -53
  626. package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +0 -156
  627. package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +0 -156
  628. package/src/modules/sales/widgets/notifications/index.ts +0 -2
  629. package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +0 -81
  630. package/src/modules/staff/notifications.ts +0 -71
  631. package/src/modules/workflows/notifications.ts +0 -25
  632. package/src/modules/workflows/subscribers/task-assigned-notification.ts +0 -53
@@ -9,26 +9,6 @@
9
9
  "title": "Sprzedaż",
10
10
  "description": "Oferty, zamówienia, realizacja, fakturowanie i płatności powiązane z katalogiem produktów."
11
11
  },
12
- "notifications": {
13
- "order": {
14
- "created": {
15
- "title": "Nowe zamówienie",
16
- "body": "Zamówienie {orderNumber} zostało utworzone{total}"
17
- }
18
- },
19
- "quote": {
20
- "created": {
21
- "title": "Nowa oferta",
22
- "body": "Oferta {quoteNumber} została utworzona{total}"
23
- }
24
- },
25
- "renderer": {
26
- "viewOrder": "Zobacz zamówienie",
27
- "viewQuote": "Zobacz ofertę",
28
- "assignedToYou": "Przypisane do Ciebie",
29
- "pendingReview": "Oczekuje na przegląd"
30
- }
31
- },
32
12
  "quotes": {
33
13
  "send": {
34
14
  "action": "Wyślij do klienta",
@@ -125,6 +125,9 @@ type SeedScope = { tenantId: string; organizationId: string }
125
125
 
126
126
  const ORDER_STATUS_DEFAULTS: SalesDictionarySeed[] = [
127
127
  { value: 'draft', label: 'Draft', color: '#94a3b8', icon: 'lucide:file-pen-line' },
128
+ { value: 'pending_approval', label: 'Pending Approval', color: '#f59e0b', icon: 'lucide:hourglass' },
129
+ { value: 'approved', label: 'Approved', color: '#16a34a', icon: 'lucide:check-circle' },
130
+ { value: 'rejected', label: 'Rejected', color: '#ef4444', icon: 'lucide:x-circle' },
128
131
  { value: 'sent', label: 'Sent', color: '#0ea5e9', icon: 'lucide:send' },
129
132
  { value: 'confirmed', label: 'Confirmed', color: '#2563eb', icon: 'lucide:badge-check' },
130
133
  { value: 'in_fulfillment', label: 'In fulfillment', color: '#f59e0b', icon: 'lucide:loader-2' },
@@ -0,0 +1,28 @@
1
+ "use client"
2
+
3
+ export const SALES_DOCUMENT_DATA_REFRESH_EVENT = 'sales:document:data:refresh'
4
+
5
+ export type SalesDocumentDataRefreshDetail = {
6
+ documentId: string
7
+ kind?: 'order' | 'quote'
8
+ }
9
+
10
+ export function emitSalesDocumentDataRefresh(detail: SalesDocumentDataRefreshDetail): void {
11
+ if (typeof window === 'undefined' || typeof CustomEvent === 'undefined') return
12
+ window.dispatchEvent(
13
+ new CustomEvent<SalesDocumentDataRefreshDetail>(SALES_DOCUMENT_DATA_REFRESH_EVENT, { detail }),
14
+ )
15
+ }
16
+
17
+ export function subscribeSalesDocumentDataRefresh(
18
+ handler: (detail: SalesDocumentDataRefreshDetail) => void,
19
+ ): () => void {
20
+ if (typeof window === 'undefined') return () => {}
21
+ const listener = (event: Event) => {
22
+ const detail = (event as CustomEvent<SalesDocumentDataRefreshDetail>).detail
23
+ if (!detail) return
24
+ handler(detail)
25
+ }
26
+ window.addEventListener(SALES_DOCUMENT_DATA_REFRESH_EVENT, listener as EventListener)
27
+ return () => window.removeEventListener(SALES_DOCUMENT_DATA_REFRESH_EVENT, listener as EventListener)
28
+ }
@@ -434,7 +434,7 @@ export default function StaffTeamMembersPage() {
434
434
  <RowActions
435
435
  items={[
436
436
  { id: 'edit', label: labels.actions.edit, onSelect: () => { router.push(`/backend/staff/team-members/${row.id}`) } },
437
- { id: 'delete', label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
437
+ { label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
438
438
  ]}
439
439
  />
440
440
  ) : null}
@@ -345,8 +345,8 @@ export default function StaffTeamRolesPage() {
345
345
  rowActions={(row) => row.kind === 'role' ? (
346
346
  <RowActions
347
347
  items={[
348
- { id: 'edit', label: labels.actions.edit, onSelect: () => { router.push(`/backend/staff/team-roles/${row.id}/edit`) } },
349
- { id: 'delete', label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
348
+ { label: labels.actions.edit, onSelect: () => { router.push(`/backend/staff/team-roles/${row.id}/edit`) } },
349
+ { label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
350
350
  ]}
351
351
  />
352
352
  ) : null}
@@ -369,8 +369,8 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
369
369
  rowActions={(row) => (
370
370
  <RowActions
371
371
  items={[
372
- { id: 'edit', label: memberLabels.actions.edit, onSelect: () => { router.push(`/backend/staff/team-members/${row.id}`) } },
373
- { id: 'unassign', label: memberLabels.actions.unassign, onSelect: () => { void handleUnassignMember(row) } },
372
+ { label: memberLabels.actions.edit, onSelect: () => { router.push(`/backend/staff/team-members/${row.id}`) } },
373
+ { label: memberLabels.actions.unassign, onSelect: () => { void handleUnassignMember(row) } },
374
374
  ]}
375
375
  />
376
376
  )}
@@ -275,10 +275,10 @@ export default function StaffTeamsPage() {
275
275
  rowActions={(row) => (
276
276
  <RowActions
277
277
  items={[
278
- { id: 'edit', label: labels.actions.edit, href: `/backend/staff/teams/${row.id}/edit` },
278
+ { label: labels.actions.edit, href: `/backend/staff/teams/${row.id}/edit` },
279
279
  ...(row.memberCount > 0
280
280
  ? []
281
- : [{ id: 'delete', label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } }]),
281
+ : [{ label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } }]),
282
282
  ]}
283
283
  />
284
284
  )}
@@ -21,9 +21,6 @@ import {
21
21
  } from '../data/validators'
22
22
  import { ensureOrganizationScope, ensureTenantScope, extractUndoPayload, requireTeamMember } from './shared'
23
23
  import { E } from '#generated/entities.ids.generated'
24
- import { resolveNotificationService } from '../../notifications/lib/notificationService'
25
- import { buildFeatureNotificationFromType, buildNotificationFromType } from '../../notifications/lib/notificationBuilder'
26
- import { notificationTypes } from '../notifications'
27
24
 
28
25
  const leaveRequestCrudIndexer: CrudIndexerConfig<StaffLeaveRequest> = {
29
26
  entityType: E.staff.staff_leave_request,
@@ -261,36 +258,6 @@ const createLeaveRequestCommand: CommandHandler<StaffLeaveRequestCreateInput, {
261
258
  indexer: leaveRequestCrudIndexer,
262
259
  })
263
260
 
264
- // Create notification for users who can approve/reject leave requests
265
- try {
266
- const notificationService = resolveNotificationService(ctx.container)
267
- const typeDef = notificationTypes.find((type) => type.type === 'staff.leave_request.pending')
268
- if (typeDef) {
269
- const memberName = member.displayName || 'Team member'
270
- const startDateStr = request.startDate.toLocaleDateString()
271
- const endDateStr = request.endDate.toLocaleDateString()
272
-
273
- const notificationInput = buildFeatureNotificationFromType(typeDef, {
274
- requiredFeature: 'staff.leave_requests.manage',
275
- bodyVariables: {
276
- memberName,
277
- startDate: startDateStr,
278
- endDate: endDateStr,
279
- },
280
- sourceEntityType: 'staff:leave_request',
281
- sourceEntityId: request.id,
282
- linkHref: `/backend/staff/leave-requests/${request.id}`,
283
- })
284
-
285
- await notificationService.createForFeature(notificationInput, {
286
- tenantId: request.tenantId,
287
- organizationId: request.organizationId,
288
- })
289
- }
290
- } catch {
291
- // Notification creation is non-critical, don't fail the command
292
- }
293
-
294
261
  return { requestId: request.id }
295
262
  },
296
263
  captureAfter: async (_input, result, ctx) => {
@@ -608,36 +575,6 @@ const acceptLeaveRequestCommand: CommandHandler<StaffLeaveRequestDecisionInput,
608
575
  ruleIds: createdRuleIds,
609
576
  })
610
577
 
611
- // Send notification to the requester
612
- if (request.submittedByUserId) {
613
- try {
614
- const notificationService = resolveNotificationService(ctx.container)
615
- const typeDef = notificationTypes.find((type) => type.type === 'staff.leave_request.approved')
616
- if (typeDef) {
617
- const startDateStr = request.startDate.toLocaleDateString()
618
- const endDateStr = request.endDate.toLocaleDateString()
619
-
620
- const notificationInput = buildNotificationFromType(typeDef, {
621
- recipientUserId: request.submittedByUserId,
622
- bodyVariables: {
623
- startDate: startDateStr,
624
- endDate: endDateStr,
625
- },
626
- sourceEntityType: 'staff:leave_request',
627
- sourceEntityId: request.id,
628
- linkHref: `/backend/staff/leave-requests/${request.id}`,
629
- })
630
-
631
- await notificationService.create(notificationInput, {
632
- tenantId: request.tenantId,
633
- organizationId: request.organizationId,
634
- })
635
- }
636
- } catch {
637
- // Notification creation is non-critical, don't fail the command
638
- }
639
- }
640
-
641
578
  return { requestId: request.id, ruleIds: createdRuleIds }
642
579
  },
643
580
  buildLog: async ({ result, ctx, snapshots }) => {
@@ -759,37 +696,6 @@ const rejectLeaveRequestCommand: CommandHandler<StaffLeaveRequestDecisionInput,
759
696
  indexer: leaveRequestCrudIndexer,
760
697
  })
761
698
 
762
- // Send notification to the requester
763
- if (request.submittedByUserId) {
764
- try {
765
- const notificationService = resolveNotificationService(ctx.container)
766
- const typeDef = notificationTypes.find((type) => type.type === 'staff.leave_request.rejected')
767
- if (typeDef) {
768
- const startDateStr = request.startDate.toLocaleDateString()
769
- const endDateStr = request.endDate.toLocaleDateString()
770
-
771
- const notificationInput = buildNotificationFromType(typeDef, {
772
- recipientUserId: request.submittedByUserId,
773
- bodyVariables: {
774
- startDate: startDateStr,
775
- endDate: endDateStr,
776
- reason: request.decisionComment ?? '',
777
- },
778
- sourceEntityType: 'staff:leave_request',
779
- sourceEntityId: request.id,
780
- linkHref: `/backend/staff/leave-requests/${request.id}`,
781
- })
782
-
783
- await notificationService.create(notificationInput, {
784
- tenantId: request.tenantId,
785
- organizationId: request.organizationId,
786
- })
787
- }
788
- } catch {
789
- // Notification creation is non-critical, don't fail the command
790
- }
791
- }
792
-
793
699
  return { requestId: request.id }
794
700
  },
795
701
  async prepare(rawInput, ctx) {
@@ -797,10 +797,6 @@
797
797
  "staff.teams.tabs.details": "Details",
798
798
  "staff.teams.tabs.label": "Teamabschnitte",
799
799
  "staff.teams.tabs.members": "Teammitglieder",
800
- "staff.notifications.leaveRequest.pending.title": "Urlaubsantrag ausstehend",
801
- "staff.notifications.leaveRequest.pending.body": "{memberName} hat Urlaub vom {startDate} bis {endDate} beantragt",
802
- "staff.notifications.leaveRequest.actions.approve": "Genehmigen",
803
- "staff.notifications.leaveRequest.actions.reject": "Ablehnen",
804
800
  "staff.leaveRequests.page.title": "Urlaubsantr\u00e4ge",
805
801
  "staff.leaveRequests.page.description": "Urlaubsantr\u00e4ge des Teams pr\u00fcfen.",
806
802
  "staff.leaveRequests.my.title": "Meine Urlaubsantr\u00e4ge",
@@ -797,10 +797,6 @@
797
797
  "staff.teams.tabs.details": "Details",
798
798
  "staff.teams.tabs.label": "Team sections",
799
799
  "staff.teams.tabs.members": "Team members",
800
- "staff.notifications.leaveRequest.pending.title": "Leave Request Pending",
801
- "staff.notifications.leaveRequest.pending.body": "{memberName} has requested leave from {startDate} to {endDate}",
802
- "staff.notifications.leaveRequest.actions.approve": "Approve",
803
- "staff.notifications.leaveRequest.actions.reject": "Reject",
804
800
  "staff.leaveRequests.page.title": "Leave requests",
805
801
  "staff.leaveRequests.page.description": "Review leave requests from your team.",
806
802
  "staff.leaveRequests.my.title": "My leave requests",
@@ -878,9 +874,5 @@
878
874
  "staff.myAvailability.readOnly.body": "Use leave requests to request changes.",
879
875
  "staff.teamMembers.self.createTitle": "Create my profile",
880
876
  "staff.teamMembers.self.created": "Profile created.",
881
- "staff.teamMembers.self.exists": "Team member profile already exists.",
882
- "staff.notifications.leaveRequest.approved.title": "Leave Request Approved",
883
- "staff.notifications.leaveRequest.approved.body": "Your leave request from {startDate} to {endDate} has been approved",
884
- "staff.notifications.leaveRequest.rejected.title": "Leave Request Rejected",
885
- "staff.notifications.leaveRequest.rejected.body": "Your leave request from {startDate} to {endDate} has been rejected{reason, select, other { - {reason}}}"
877
+ "staff.teamMembers.self.exists": "Team member profile already exists."
886
878
  }
@@ -797,10 +797,6 @@
797
797
  "staff.teams.tabs.details": "Detalles",
798
798
  "staff.teams.tabs.label": "Secciones del equipo",
799
799
  "staff.teams.tabs.members": "Miembros del equipo",
800
- "staff.notifications.leaveRequest.pending.title": "Solicitud de ausencia pendiente",
801
- "staff.notifications.leaveRequest.pending.body": "{memberName} ha solicitado ausencia del {startDate} al {endDate}",
802
- "staff.notifications.leaveRequest.actions.approve": "Aprobar",
803
- "staff.notifications.leaveRequest.actions.reject": "Rechazar",
804
800
  "staff.leaveRequests.page.title": "Solicitudes de ausencia",
805
801
  "staff.leaveRequests.page.description": "Revisa las solicitudes de ausencia del equipo.",
806
802
  "staff.leaveRequests.my.title": "Mis solicitudes de ausencia",
@@ -797,10 +797,6 @@
797
797
  "staff.teams.tabs.details": "Szczeg\u00f3\u0142y",
798
798
  "staff.teams.tabs.label": "Sekcje zespo\u0142u",
799
799
  "staff.teams.tabs.members": "Cz\u0142onkowie zespo\u0142u",
800
- "staff.notifications.leaveRequest.pending.title": "Wniosek urlopowy oczekuje",
801
- "staff.notifications.leaveRequest.pending.body": "{memberName} zło\u017cył wniosek o urlop od {startDate} do {endDate}",
802
- "staff.notifications.leaveRequest.actions.approve": "Zatwierd\u017a",
803
- "staff.notifications.leaveRequest.actions.reject": "Odrzu\u0107",
804
800
  "staff.leaveRequests.page.title": "Wnioski urlopowe",
805
801
  "staff.leaveRequests.page.description": "Przegl\u0105daj wnioski urlopowe zespo\u0142u.",
806
802
  "staff.leaveRequests.my.title": "Moje wnioski urlopowe",
@@ -19,6 +19,8 @@ export const features = [
19
19
  { id: 'workflows.tasks.complete', title: 'Complete workflow tasks', module: moduleId },
20
20
  { id: 'workflows.signals.send', title: 'Send workflow signals', module: moduleId },
21
21
  { id: 'workflows.events.view', title: 'View workflow events', module: moduleId },
22
+ // Note: Event triggers are now embedded in workflow definitions.
23
+ // Trigger management permissions are covered by workflows.definitions.edit
22
24
  ]
23
25
 
24
26
  export default features
@@ -194,11 +194,14 @@ describe('Workflow Instances API', () => {
194
194
  const request = new NextRequest('http://localhost/api/workflows/instances?entityType=order&entityId=order-123')
195
195
  await listInstances(request)
196
196
 
197
+ // The implementation uses JSONB $contains queries for metadata filtering
197
198
  expect(mockEm.findAndCount).toHaveBeenCalledWith(
198
199
  WorkflowInstance,
199
200
  expect.objectContaining({
200
- 'metadata.entityType': 'order',
201
- 'metadata.entityId': 'order-123',
201
+ $and: expect.arrayContaining([
202
+ { metadata: { $contains: { entityType: 'order' } } },
203
+ { metadata: { $contains: { entityId: 'order-123' } } },
204
+ ]),
202
205
  }),
203
206
  expect.any(Object)
204
207
  )
@@ -70,19 +70,33 @@ export async function GET(request: NextRequest) {
70
70
  }
71
71
 
72
72
  if (status) {
73
- where.status = status
73
+ // Support comma-separated status values (e.g., "RUNNING,PAUSED,WAITING_FOR_ACTIVITIES")
74
+ const statuses = status.split(',').map(s => s.trim()).filter(Boolean)
75
+ if (statuses.length === 1) {
76
+ where.status = statuses[0]
77
+ } else if (statuses.length > 1) {
78
+ where.status = { $in: statuses }
79
+ }
74
80
  }
75
81
 
76
82
  if (correlationKey) {
77
83
  where.correlationKey = correlationKey
78
84
  }
79
85
 
80
- if (entityType) {
81
- where['metadata.entityType'] = entityType
82
- }
83
-
84
- if (entityId) {
85
- where['metadata.entityId'] = entityId
86
+ // For JSONB metadata filtering, use $contains with explicit key-value pairs
87
+ // MikroORM's dot notation creates table joins, not JSON access
88
+ if (entityType || entityId) {
89
+ where.$and = where.$and || []
90
+ if (entityType) {
91
+ where.$and.push({
92
+ metadata: { $contains: { entityType: entityType } }
93
+ })
94
+ }
95
+ if (entityId) {
96
+ where.$and.push({
97
+ metadata: { $contains: { entityId: entityId } }
98
+ })
99
+ }
86
100
  }
87
101
 
88
102
  const [instances, total] = await em.findAndCount(
@@ -67,7 +67,13 @@ export async function GET(request: NextRequest) {
67
67
  }
68
68
 
69
69
  if (status) {
70
- where.status = status
70
+ // Handle comma-separated status values
71
+ const statusValues = status.split(',').map(s => s.trim()).filter(Boolean)
72
+ if (statusValues.length === 1) {
73
+ where.status = statusValues[0]
74
+ } else if (statusValues.length > 1) {
75
+ where.status = { $in: statusValues }
76
+ }
71
77
  }
72
78
 
73
79
  if (assignedTo) {
@@ -4,7 +4,7 @@ export const metadata = {
4
4
  pageTitle: 'Edit Workflow Definition',
5
5
  pageTitleKey: 'workflows.edit.title',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
8
  { label: 'Edit', labelKey: 'workflows.common.edit' },
9
9
  ],
10
10
  }
@@ -19,6 +19,7 @@ import {
19
19
  } from '../../../components/formConfig'
20
20
  import { StepsEditor } from '../../../components/StepsEditor'
21
21
  import { TransitionsEditor } from '../../../components/TransitionsEditor'
22
+ import { EventTriggersEditor } from '../../../components/EventTriggersEditor'
22
23
 
23
24
  export default function EditWorkflowDefinitionPage() {
24
25
  const router = useRouter()
@@ -145,6 +146,14 @@ export default function EditWorkflowDefinitionPage() {
145
146
  groups={formGroups}
146
147
  submitLabel={t('workflows.form.update')}
147
148
  />
149
+
150
+ {/* Event Triggers Section */}
151
+ <div className="mt-8">
152
+ <EventTriggersEditor
153
+ workflowDefinitionId={definitionId!}
154
+ workflowId={definition?.workflowId}
155
+ />
156
+ </div>
148
157
  </PageBody>
149
158
  </Page>
150
159
  )
@@ -20,7 +20,7 @@ export const metadata = {
20
20
  pageOrder: 100,
21
21
  icon: createIcon,
22
22
  breadcrumb: [
23
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
23
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
24
24
  { label: 'Create', labelKey: 'workflows.common.create' },
25
25
  ],
26
26
  }
@@ -16,6 +16,8 @@ import {
16
16
  } from '../../../components/formConfig'
17
17
  import { StepsEditor } from '../../../components/StepsEditor'
18
18
  import { TransitionsEditor } from '../../../components/TransitionsEditor'
19
+ import { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'
20
+ import { Zap } from 'lucide-react'
19
21
 
20
22
  export default function CreateWorkflowDefinitionPage() {
21
23
  const router = useRouter()
@@ -50,6 +52,13 @@ export default function CreateWorkflowDefinitionPage() {
50
52
  return (
51
53
  <Page>
52
54
  <PageBody>
55
+ <Alert variant="info" className="mb-6">
56
+ <Zap className="w-4 h-4" />
57
+ <AlertTitle>Event Triggers</AlertTitle>
58
+ <AlertDescription>
59
+ After creating this workflow definition, you can configure event triggers to automatically start the workflow when specific events occur in the system.
60
+ </AlertDescription>
61
+ </Alert>
53
62
  <CrudForm
54
63
  title={t('workflows.create.title')}
55
64
  backHref="/backend/definitions"
@@ -274,27 +274,22 @@ export default function WorkflowDefinitionsListPage() {
274
274
  <RowActions
275
275
  items={[
276
276
  {
277
- id: 'edit',
278
277
  label: t('common.edit'),
279
278
  href: `/backend/definitions/${row.original.id}`,
280
279
  },
281
280
  {
282
- id: 'edit-visual',
283
281
  label: t('workflows.actions.editVisually'),
284
282
  href: `/backend/definitions/visual-editor?id=${row.original.id}`,
285
283
  },
286
284
  {
287
- id: row.original.enabled ? 'disable' : 'enable',
288
285
  label: row.original.enabled ? t('common.disable') : t('common.enable'),
289
286
  onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),
290
287
  },
291
288
  {
292
- id: 'duplicate',
293
289
  label: t('common.duplicate'),
294
290
  onSelect: () => handleDuplicate(row.original),
295
291
  },
296
292
  {
297
- id: 'delete',
298
293
  label: t('common.delete'),
299
294
  onSelect: () => handleDelete(row.original.id, row.original.workflowName),
300
295
  destructive: true,
@@ -19,7 +19,7 @@ export const metadata = {
19
19
  pageOrder: 150,
20
20
  icon: visualEditorIcon,
21
21
  breadcrumb: [
22
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
22
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
23
23
  { label: 'Visual Editor', labelKey: 'workflows.backend.definitions.visual_editor.title' },
24
24
  ],
25
25
  }
@@ -34,6 +34,8 @@ import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
34
34
  import { flash } from '@open-mercato/ui/backend/FlashMessages'
35
35
  import {CircleQuestionMark, Info, PanelTopClose, PanelTopOpen, Play, Save, Trash2} from 'lucide-react'
36
36
  import { NODE_TYPE_ICONS, NODE_TYPE_COLORS, NODE_TYPE_LABELS } from '../../../lib/node-type-icons'
37
+ import { DefinitionTriggersEditor } from '../../../components/DefinitionTriggersEditor'
38
+ import type { WorkflowDefinitionTrigger } from '../../../data/entities'
37
39
  import * as React from "react";
38
40
 
39
41
  /**
@@ -76,6 +78,7 @@ export default function VisualEditorPage() {
76
78
  const [icon, setIcon] = useState('')
77
79
  const [effectiveFrom, setEffectiveFrom] = useState('')
78
80
  const [effectiveTo, setEffectiveTo] = useState('')
81
+ const [triggers, setTriggers] = useState<WorkflowDefinitionTrigger[]>([])
79
82
 
80
83
  // Load existing definition if ID is provided
81
84
  useEffect(() => {
@@ -113,6 +116,9 @@ export default function VisualEditorPage() {
113
116
  setNodes(graph.nodes)
114
117
  setEdges(graph.edges)
115
118
 
119
+ // Load embedded triggers from definition
120
+ setTriggers(definition.definition?.triggers || [])
121
+
116
122
  flash('Workflow loaded successfully', 'success')
117
123
  } catch (error) {
118
124
  console.error('Error loading workflow definition:', error)
@@ -284,8 +290,12 @@ export default function VisualEditorPage() {
284
290
  return
285
291
  }
286
292
 
287
- // Generate definition data
288
- const definitionData = graphToDefinition(nodes, edges, { includePositions: true })
293
+ // Generate definition data and include triggers
294
+ const graphDefinition = graphToDefinition(nodes, edges, { includePositions: true })
295
+ const definitionData = {
296
+ ...graphDefinition,
297
+ triggers: triggers.length > 0 ? triggers : undefined,
298
+ }
289
299
 
290
300
  // Run Zod schema validation before saving
291
301
  const schemaResult = workflowDefinitionDataSchema.safeParse(definitionData)
@@ -357,7 +367,7 @@ export default function VisualEditorPage() {
357
367
  } finally {
358
368
  setIsSaving(false)
359
369
  }
360
- }, [nodes, edges, workflowId, workflowName, description, version, enabled, category, tags, definitionId, router])
370
+ }, [nodes, edges, workflowId, workflowName, description, version, enabled, category, tags, triggers, definitionId, router])
361
371
 
362
372
  // Test workflow
363
373
  const handleTest = useCallback(() => {
@@ -475,6 +485,7 @@ export default function VisualEditorPage() {
475
485
  setIcon('')
476
486
  setEffectiveFrom('')
477
487
  setEffectiveTo('')
488
+ setTriggers([])
478
489
  setShowClearConfirm(false)
479
490
  flash('Canvas cleared', 'success')
480
491
  }, [])
@@ -709,6 +720,13 @@ export default function VisualEditorPage() {
709
720
  </div>
710
721
  </div>
711
722
  </div>
723
+
724
+ {/* Event Triggers - Always visible, managed as part of definition */}
725
+ <DefinitionTriggersEditor
726
+ value={triggers}
727
+ onChange={setTriggers}
728
+ className="mt-4"
729
+ />
712
730
  </div>
713
731
  )}
714
732
 
@@ -4,8 +4,8 @@ export const metadata = {
4
4
  pageTitle: 'Event Details',
5
5
  pageTitleKey: 'workflows.events.detail.title',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
- { label: 'Events', labelKey: 'workflows.events.plural', href: '/backend/workflows/events' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
+ { label: 'Events', labelKey: 'workflows.events.plural', href: '/backend/events' },
9
9
  { label: 'Details', labelKey: 'common.details' },
10
10
  ],
11
11
  }
@@ -212,7 +212,7 @@ export default function WorkflowEventDetailPage() {
212
212
  </dt>
213
213
  <dd className="mt-1">
214
214
  <Link
215
- href={`/backend/workflows/instances/${event.workflowInstance.id}`}
215
+ href={`/backend/instances/${event.workflowInstance.id}`}
216
216
  className="text-sm text-primary hover:underline font-mono"
217
217
  >
218
218
  {event.workflowInstance.id}
@@ -4,8 +4,8 @@ export const metadata = {
4
4
  pageTitle: 'Workflow Instance Details',
5
5
  pageTitleKey: 'workflows.instances.singular',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
- { label: 'Instances', labelKey: 'workflows.instances.plural', href: '/backend/workflows/instances' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
+ { label: 'Instances', labelKey: 'workflows.instances.plural', href: '/backend/instances' },
9
9
  { label: 'Details', labelKey: 'common.details' },
10
10
  ],
11
11
  }
@@ -266,9 +266,8 @@ export default function WorkflowInstancesListPage() {
266
266
  id: 'actions',
267
267
  header: '',
268
268
  cell: ({ row }) => {
269
- const items: Array<{ id: string; label: string; href?: string; onSelect?: () => void }> = [
269
+ const items: Array<{label: string; href?: string; onSelect?: () => void}> = [
270
270
  {
271
- id: 'view',
272
271
  label: t('workflows.instances.actions.viewDetails'),
273
272
  href: `/backend/instances/${row.original.id}`,
274
273
  },
@@ -276,7 +275,6 @@ export default function WorkflowInstancesListPage() {
276
275
 
277
276
  if (row.original.status === 'RUNNING' || row.original.status === 'PAUSED') {
278
277
  items.push({
279
- id: 'cancel',
280
278
  label: t('workflows.instances.actions.cancel'),
281
279
  onSelect: () => handleCancel(row.original.id, row.original.workflowId),
282
280
  })
@@ -284,7 +282,6 @@ export default function WorkflowInstancesListPage() {
284
282
 
285
283
  if (row.original.status === 'FAILED') {
286
284
  items.push({
287
- id: 'retry',
288
285
  label: t('workflows.instances.actions.retry'),
289
286
  onSelect: () => handleRetry(row.original.id, row.original.workflowId),
290
287
  })
@@ -4,8 +4,8 @@ export const metadata = {
4
4
  pageTitle: 'Task Details',
5
5
  pageTitleKey: 'workflows.tasks.singular',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
- { label: 'Tasks', labelKey: 'workflows.tasks.plural', href: '/backend/workflows/tasks' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
+ { label: 'Tasks', labelKey: 'workflows.tasks.plural', href: '/backend/tasks' },
9
9
  { label: 'Details', labelKey: 'common.details' },
10
10
  ],
11
11
  }
@@ -381,7 +381,7 @@ export default function UserTaskDetailPage({ params }: { params: { id: string }
381
381
  task.status
382
382
  )}`}
383
383
  >
384
- {t(`workflows.tasks.status.${task.status}`)}
384
+ {t(`workflows.tasks.statuses.${task.status}`)}
385
385
  </span>
386
386
  </div>
387
387