@open-mercato/core 0.4.2-canary-3b5064ce72 → 0.4.2-canary-15e78de280

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 (512) hide show
  1. package/dist/generated/entities/api_key/index.js +2 -0
  2. package/dist/generated/entities/api_key/index.js.map +2 -2
  3. package/dist/generated/entities.ids.generated.js +1 -5
  4. package/dist/generated/entities.ids.generated.js.map +2 -2
  5. package/dist/generated/entity-fields-registry.js +0 -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/api_keys/data/entities.js +3 -0
  12. package/dist/modules/api_keys/data/entities.js.map +2 -2
  13. package/dist/modules/api_keys/migrations/Migration20260125204102.js +13 -0
  14. package/dist/modules/api_keys/migrations/Migration20260125204102.js.map +7 -0
  15. package/dist/modules/api_keys/services/apiKeyService.js +41 -0
  16. package/dist/modules/api_keys/services/apiKeyService.js.map +3 -3
  17. package/dist/modules/attachments/components/AttachmentLibrary.js +0 -4
  18. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  19. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +0 -2
  20. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  21. package/dist/modules/auth/api/admin/nav.js +3 -4
  22. package/dist/modules/auth/api/admin/nav.js.map +2 -2
  23. package/dist/modules/auth/api/login.js +6 -25
  24. package/dist/modules/auth/api/login.js.map +2 -2
  25. package/dist/modules/auth/api/reset/confirm.js +2 -25
  26. package/dist/modules/auth/api/reset/confirm.js.map +2 -2
  27. package/dist/modules/auth/api/reset.js +0 -23
  28. package/dist/modules/auth/api/reset.js.map +2 -2
  29. package/dist/modules/auth/api/sidebar/preferences/route.js +9 -14
  30. package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
  31. package/dist/modules/auth/api/users/route.js +2 -4
  32. package/dist/modules/auth/api/users/route.js.map +2 -2
  33. package/dist/modules/auth/backend/roles/[id]/edit/page.js +1 -4
  34. package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
  35. package/dist/modules/auth/backend/roles/page.js +3 -3
  36. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  37. package/dist/modules/auth/backend/users/[id]/edit/page.js +3 -18
  38. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  39. package/dist/modules/auth/backend/users/create/page.js +2 -15
  40. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  41. package/dist/modules/auth/backend/users/page.js +3 -3
  42. package/dist/modules/auth/backend/users/page.js.map +2 -2
  43. package/dist/modules/auth/cli.js +11 -25
  44. package/dist/modules/auth/cli.js.map +2 -2
  45. package/dist/modules/auth/commands/users.js +2 -59
  46. package/dist/modules/auth/commands/users.js.map +2 -2
  47. package/dist/modules/auth/data/validators.js +3 -6
  48. package/dist/modules/auth/data/validators.js.map +2 -2
  49. package/dist/modules/auth/frontend/login.js +3 -112
  50. package/dist/modules/auth/frontend/login.js.map +2 -2
  51. package/dist/modules/auth/frontend/reset/[token]/page.js +10 -20
  52. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  53. package/dist/modules/auth/lib/setup-app.js +8 -42
  54. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  55. package/dist/modules/auth/services/authService.js +3 -24
  56. package/dist/modules/auth/services/authService.js.map +2 -2
  57. package/dist/modules/auth/services/rbacService.js.map +2 -2
  58. package/dist/modules/business_rules/api/execute/route.js +1 -7
  59. package/dist/modules/business_rules/api/execute/route.js.map +2 -2
  60. package/dist/modules/business_rules/backend/rules/page.js +0 -4
  61. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  62. package/dist/modules/business_rules/backend/sets/page.js +0 -3
  63. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  64. package/dist/modules/business_rules/cli.js +1 -2
  65. package/dist/modules/business_rules/cli.js.map +2 -2
  66. package/dist/modules/business_rules/lib/rule-engine.js +3 -33
  67. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  68. package/dist/modules/catalog/components/PriceKindSettings.js +0 -2
  69. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  70. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
  71. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  72. package/dist/modules/catalog/components/products/ProductsDataTable.js +0 -2
  73. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  74. package/dist/modules/configs/cli.js +0 -6
  75. package/dist/modules/configs/cli.js.map +2 -2
  76. package/dist/modules/configs/components/CachePanel.js +4 -4
  77. package/dist/modules/configs/components/CachePanel.js.map +2 -2
  78. package/dist/modules/configs/lib/system-status.js +1 -48
  79. package/dist/modules/configs/lib/system-status.js.map +2 -2
  80. package/dist/modules/configs/lib/upgrade-actions.js +0 -18
  81. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  82. package/dist/modules/currencies/backend/currencies/page.js +0 -3
  83. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  84. package/dist/modules/currencies/backend/exchange-rates/page.js +0 -2
  85. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  86. package/dist/modules/customers/backend/customers/companies/page.js +0 -3
  87. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  88. package/dist/modules/customers/backend/customers/deals/page.js +0 -3
  89. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  90. package/dist/modules/customers/backend/customers/people/page.js +0 -3
  91. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  92. package/dist/modules/customers/commands/deals.js +0 -31
  93. package/dist/modules/customers/commands/deals.js.map +2 -2
  94. package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
  95. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  96. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +1 -2
  97. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
  98. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +1 -2
  99. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
  100. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +1 -2
  101. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
  102. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +1 -2
  103. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
  104. package/dist/modules/dashboards/cli.js +5 -44
  105. package/dist/modules/dashboards/cli.js.map +2 -2
  106. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +11 -16
  107. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
  108. package/dist/modules/dashboards/services/widgetDataService.js +3 -139
  109. package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
  110. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +1 -2
  111. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
  112. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +1 -2
  113. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
  114. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +1 -2
  115. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
  116. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +1 -2
  117. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
  118. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +1 -2
  119. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
  120. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +1 -2
  121. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
  122. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +1 -2
  123. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
  124. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +1 -2
  125. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
  126. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +1 -2
  127. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
  128. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +1 -2
  129. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
  130. package/dist/modules/dictionaries/components/DictionaryTable.js +0 -2
  131. package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
  132. package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
  133. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  134. package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
  135. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  136. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
  137. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  138. package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
  139. package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
  140. package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
  141. package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
  142. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
  143. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  144. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
  145. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  146. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
  147. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  148. package/dist/modules/query_index/cli.js +7 -63
  149. package/dist/modules/query_index/cli.js.map +2 -2
  150. package/dist/modules/query_index/components/QueryIndexesTable.js +1 -7
  151. package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
  152. package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
  153. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  154. package/dist/modules/resources/backend/resources/resources/page.js +2 -2
  155. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  156. package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -2
  157. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  158. package/dist/modules/sales/backend/sales/channels/page.js +0 -2
  159. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  160. package/dist/modules/sales/commands/documents.js +0 -53
  161. package/dist/modules/sales/commands/documents.js.map +2 -2
  162. package/dist/modules/sales/commands/payments.js +0 -26
  163. package/dist/modules/sales/commands/payments.js.map +2 -2
  164. package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
  165. package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
  166. package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
  167. package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
  168. package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
  169. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
  170. package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
  171. package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
  172. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -2
  173. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  174. package/dist/modules/sales/components/documents/AdjustmentsSection.js +0 -2
  175. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  176. package/dist/modules/sales/components/documents/PaymentsSection.js +1 -2
  177. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  178. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +0 -2
  179. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  180. package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
  181. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  182. package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
  183. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  184. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
  185. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  186. package/dist/modules/staff/backend/staff/teams/page.js +2 -2
  187. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  188. package/dist/modules/staff/commands/leave-requests.js +0 -79
  189. package/dist/modules/staff/commands/leave-requests.js.map +2 -2
  190. package/dist/modules/workflows/backend/definitions/page.js +0 -5
  191. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  192. package/dist/modules/workflows/backend/instances/page.js +0 -3
  193. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  194. package/dist/modules/workflows/backend/tasks/page.js +0 -3
  195. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  196. package/dist/modules/workflows/cli.js +12 -12
  197. package/dist/modules/workflows/cli.js.map +2 -2
  198. package/dist/modules/workflows/lib/transition-handler.js +6 -14
  199. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  200. package/generated/entities/api_key/index.ts +1 -0
  201. package/generated/entities.ids.generated.ts +1 -5
  202. package/generated/entity-fields-registry.ts +0 -2
  203. package/package.json +2 -2
  204. package/src/modules/api_docs/frontend/docs/api/page.tsx +2 -3
  205. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
  206. package/src/modules/api_keys/data/entities.ts +4 -0
  207. package/src/modules/api_keys/migrations/.snapshot-open-mercato.json +9 -0
  208. package/src/modules/api_keys/migrations/Migration20260125204102.ts +13 -0
  209. package/src/modules/api_keys/services/apiKeyService.ts +85 -0
  210. package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -4
  211. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +0 -2
  212. package/src/modules/auth/README.md +1 -1
  213. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
  214. package/src/modules/auth/api/__tests__/login.test.ts +0 -2
  215. package/src/modules/auth/api/admin/nav.ts +6 -10
  216. package/src/modules/auth/api/login.ts +7 -26
  217. package/src/modules/auth/api/reset/confirm.ts +2 -25
  218. package/src/modules/auth/api/reset.ts +0 -23
  219. package/src/modules/auth/api/sidebar/preferences/route.ts +12 -21
  220. package/src/modules/auth/api/users/route.ts +2 -5
  221. package/src/modules/auth/backend/roles/[id]/edit/page.tsx +1 -4
  222. package/src/modules/auth/backend/roles/page.tsx +3 -3
  223. package/src/modules/auth/backend/users/[id]/edit/page.tsx +3 -22
  224. package/src/modules/auth/backend/users/create/page.tsx +2 -19
  225. package/src/modules/auth/backend/users/page.tsx +3 -3
  226. package/src/modules/auth/cli.ts +11 -38
  227. package/src/modules/auth/commands/users.ts +2 -73
  228. package/src/modules/auth/data/validators.ts +2 -6
  229. package/src/modules/auth/frontend/login.tsx +5 -134
  230. package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
  231. package/src/modules/auth/i18n/de.json +1 -48
  232. package/src/modules/auth/i18n/en.json +1 -48
  233. package/src/modules/auth/i18n/es.json +1 -48
  234. package/src/modules/auth/i18n/pl.json +1 -48
  235. package/src/modules/auth/lib/setup-app.ts +9 -58
  236. package/src/modules/auth/services/authService.ts +4 -27
  237. package/src/modules/auth/services/rbacService.ts +1 -1
  238. package/src/modules/business_rules/api/execute/route.ts +1 -8
  239. package/src/modules/business_rules/backend/rules/page.tsx +0 -4
  240. package/src/modules/business_rules/backend/sets/page.tsx +0 -3
  241. package/src/modules/business_rules/cli.ts +1 -2
  242. package/src/modules/business_rules/i18n/en.json +1 -3
  243. package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
  244. package/src/modules/business_rules/lib/rule-engine.ts +3 -57
  245. package/src/modules/catalog/components/PriceKindSettings.tsx +0 -2
  246. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
  247. package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -2
  248. package/src/modules/catalog/i18n/en.json +1 -3
  249. package/src/modules/configs/cli.ts +0 -6
  250. package/src/modules/configs/components/CachePanel.tsx +4 -4
  251. package/src/modules/configs/i18n/en.json +2 -12
  252. package/src/modules/configs/i18n/pl.json +2 -12
  253. package/src/modules/configs/lib/system-status.ts +1 -48
  254. package/src/modules/configs/lib/system-status.types.ts +0 -1
  255. package/src/modules/configs/lib/upgrade-actions.ts +0 -18
  256. package/src/modules/currencies/backend/currencies/page.tsx +0 -3
  257. package/src/modules/currencies/backend/exchange-rates/page.tsx +0 -2
  258. package/src/modules/customers/backend/customers/companies/page.tsx +0 -3
  259. package/src/modules/customers/backend/customers/deals/page.tsx +0 -3
  260. package/src/modules/customers/backend/customers/people/page.tsx +0 -3
  261. package/src/modules/customers/commands/deals.ts +0 -39
  262. package/src/modules/customers/components/CustomerTodosTable.tsx +0 -1
  263. package/src/modules/customers/i18n/en.json +1 -5
  264. package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
  265. package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
  266. package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
  267. package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
  268. package/src/modules/dashboards/cli.ts +5 -55
  269. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
  270. package/src/modules/dashboards/services/widgetDataService.ts +4 -164
  271. package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
  272. package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
  273. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
  274. package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
  275. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
  276. package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
  277. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
  278. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
  279. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
  280. package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
  281. package/src/modules/dictionaries/components/DictionaryTable.tsx +0 -2
  282. package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
  283. package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
  284. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
  285. package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
  286. package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
  287. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +4 -3
  288. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
  289. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
  290. package/src/modules/query_index/cli.ts +13 -82
  291. package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -8
  292. package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
  293. package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
  294. package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -2
  295. package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
  296. package/src/modules/sales/commands/documents.ts +0 -65
  297. package/src/modules/sales/commands/payments.ts +0 -33
  298. package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
  299. package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
  300. package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
  301. package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
  302. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -2
  303. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +0 -2
  304. package/src/modules/sales/components/documents/PaymentsSection.tsx +1 -2
  305. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +0 -2
  306. package/src/modules/sales/i18n/de.json +0 -20
  307. package/src/modules/sales/i18n/en.json +1 -25
  308. package/src/modules/sales/i18n/es.json +0 -20
  309. package/src/modules/sales/i18n/pl.json +0 -20
  310. package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
  311. package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
  312. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
  313. package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
  314. package/src/modules/staff/commands/leave-requests.ts +0 -94
  315. package/src/modules/staff/i18n/de.json +0 -4
  316. package/src/modules/staff/i18n/en.json +1 -9
  317. package/src/modules/staff/i18n/es.json +0 -4
  318. package/src/modules/staff/i18n/pl.json +0 -4
  319. package/src/modules/workflows/backend/definitions/page.tsx +0 -5
  320. package/src/modules/workflows/backend/instances/page.tsx +1 -4
  321. package/src/modules/workflows/backend/tasks/page.tsx +1 -4
  322. package/src/modules/workflows/cli.ts +12 -12
  323. package/src/modules/workflows/i18n/en.json +1 -3
  324. package/src/modules/workflows/lib/transition-handler.ts +6 -18
  325. package/dist/generated/entities/notification/index.js +0 -57
  326. package/dist/generated/entities/notification/index.js.map +0 -7
  327. package/dist/modules/auth/api/profile/route.js +0 -157
  328. package/dist/modules/auth/api/profile/route.js.map +0 -7
  329. package/dist/modules/auth/backend/auth/profile/page.js +0 -141
  330. package/dist/modules/auth/backend/auth/profile/page.js.map +0 -7
  331. package/dist/modules/auth/backend/auth/profile/page.meta.js +0 -13
  332. package/dist/modules/auth/backend/auth/profile/page.meta.js.map +0 -7
  333. package/dist/modules/auth/notifications.js +0 -112
  334. package/dist/modules/auth/notifications.js.map +0 -7
  335. package/dist/modules/business_rules/notifications.js +0 -28
  336. package/dist/modules/business_rules/notifications.js.map +0 -7
  337. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +0 -37
  338. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +0 -7
  339. package/dist/modules/catalog/notifications.js +0 -28
  340. package/dist/modules/catalog/notifications.js.map +0 -7
  341. package/dist/modules/catalog/subscribers/low-stock-notification.js +0 -38
  342. package/dist/modules/catalog/subscribers/low-stock-notification.js.map +0 -7
  343. package/dist/modules/customers/notifications.js +0 -48
  344. package/dist/modules/customers/notifications.js.map +0 -7
  345. package/dist/modules/dashboards/lib/role-widgets.js +0 -58
  346. package/dist/modules/dashboards/lib/role-widgets.js.map +0 -7
  347. package/dist/modules/directory/api/get/tenants/lookup.js +0 -70
  348. package/dist/modules/directory/api/get/tenants/lookup.js.map +0 -7
  349. package/dist/modules/notifications/acl.js +0 -11
  350. package/dist/modules/notifications/acl.js.map +0 -7
  351. package/dist/modules/notifications/api/[id]/action/route.js +0 -74
  352. package/dist/modules/notifications/api/[id]/action/route.js.map +0 -7
  353. package/dist/modules/notifications/api/[id]/dismiss/route.js +0 -15
  354. package/dist/modules/notifications/api/[id]/dismiss/route.js.map +0 -7
  355. package/dist/modules/notifications/api/[id]/read/route.js +0 -15
  356. package/dist/modules/notifications/api/[id]/read/route.js.map +0 -7
  357. package/dist/modules/notifications/api/[id]/restore/route.js +0 -53
  358. package/dist/modules/notifications/api/[id]/restore/route.js.map +0 -7
  359. package/dist/modules/notifications/api/batch/route.js +0 -17
  360. package/dist/modules/notifications/api/batch/route.js.map +0 -7
  361. package/dist/modules/notifications/api/feature/route.js +0 -17
  362. package/dist/modules/notifications/api/feature/route.js.map +0 -7
  363. package/dist/modules/notifications/api/mark-all-read/route.js +0 -35
  364. package/dist/modules/notifications/api/mark-all-read/route.js.map +0 -7
  365. package/dist/modules/notifications/api/openapi.js +0 -76
  366. package/dist/modules/notifications/api/openapi.js.map +0 -7
  367. package/dist/modules/notifications/api/role/route.js +0 -17
  368. package/dist/modules/notifications/api/role/route.js.map +0 -7
  369. package/dist/modules/notifications/api/route.js +0 -85
  370. package/dist/modules/notifications/api/route.js.map +0 -7
  371. package/dist/modules/notifications/api/settings/route.js +0 -155
  372. package/dist/modules/notifications/api/settings/route.js.map +0 -7
  373. package/dist/modules/notifications/api/unread-count/route.js +0 -38
  374. package/dist/modules/notifications/api/unread-count/route.js.map +0 -7
  375. package/dist/modules/notifications/backend/config/notifications/page.js +0 -10
  376. package/dist/modules/notifications/backend/config/notifications/page.js.map +0 -7
  377. package/dist/modules/notifications/backend/config/notifications/page.meta.js +0 -24
  378. package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +0 -7
  379. package/dist/modules/notifications/cli.js +0 -16
  380. package/dist/modules/notifications/cli.js.map +0 -7
  381. package/dist/modules/notifications/data/entities.js +0 -112
  382. package/dist/modules/notifications/data/entities.js.map +0 -7
  383. package/dist/modules/notifications/data/validators.js +0 -98
  384. package/dist/modules/notifications/data/validators.js.map +0 -7
  385. package/dist/modules/notifications/di.js +0 -13
  386. package/dist/modules/notifications/di.js.map +0 -7
  387. package/dist/modules/notifications/emails/NotificationEmail.js +0 -58
  388. package/dist/modules/notifications/emails/NotificationEmail.js.map +0 -7
  389. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +0 -44
  390. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +0 -7
  391. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +0 -220
  392. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +0 -7
  393. package/dist/modules/notifications/index.js +0 -14
  394. package/dist/modules/notifications/index.js.map +0 -7
  395. package/dist/modules/notifications/lib/deliveryConfig.js +0 -107
  396. package/dist/modules/notifications/lib/deliveryConfig.js.map +0 -7
  397. package/dist/modules/notifications/lib/deliveryStrategies.js +0 -14
  398. package/dist/modules/notifications/lib/deliveryStrategies.js.map +0 -7
  399. package/dist/modules/notifications/lib/events.js +0 -12
  400. package/dist/modules/notifications/lib/events.js.map +0 -7
  401. package/dist/modules/notifications/lib/notificationBuilder.js +0 -66
  402. package/dist/modules/notifications/lib/notificationBuilder.js.map +0 -7
  403. package/dist/modules/notifications/lib/notificationFactory.js +0 -54
  404. package/dist/modules/notifications/lib/notificationFactory.js.map +0 -7
  405. package/dist/modules/notifications/lib/notificationMapper.js +0 -34
  406. package/dist/modules/notifications/lib/notificationMapper.js.map +0 -7
  407. package/dist/modules/notifications/lib/notificationRecipients.js +0 -35
  408. package/dist/modules/notifications/lib/notificationRecipients.js.map +0 -7
  409. package/dist/modules/notifications/lib/notificationService.js +0 -279
  410. package/dist/modules/notifications/lib/notificationService.js.map +0 -7
  411. package/dist/modules/notifications/lib/routeHelpers.js +0 -101
  412. package/dist/modules/notifications/lib/routeHelpers.js.map +0 -7
  413. package/dist/modules/notifications/lib/safeHref.js +0 -24
  414. package/dist/modules/notifications/lib/safeHref.js.map +0 -7
  415. package/dist/modules/notifications/migrations/Migration20260123000001.js +0 -70
  416. package/dist/modules/notifications/migrations/Migration20260123000001.js.map +0 -7
  417. package/dist/modules/notifications/migrations/Migration20260126150000.js +0 -37
  418. package/dist/modules/notifications/migrations/Migration20260126150000.js.map +0 -7
  419. package/dist/modules/notifications/migrations/Migration20260129082610.js +0 -13
  420. package/dist/modules/notifications/migrations/Migration20260129082610.js.map +0 -7
  421. package/dist/modules/notifications/subscribers/deliver-notification.js +0 -165
  422. package/dist/modules/notifications/subscribers/deliver-notification.js.map +0 -7
  423. package/dist/modules/notifications/workers/create-notification.worker.js +0 -70
  424. package/dist/modules/notifications/workers/create-notification.worker.js.map +0 -7
  425. package/dist/modules/sales/notifications.client.js +0 -51
  426. package/dist/modules/sales/notifications.client.js.map +0 -7
  427. package/dist/modules/sales/notifications.js +0 -88
  428. package/dist/modules/sales/notifications.js.map +0 -7
  429. package/dist/modules/sales/subscribers/quote-expiring-notification.js +0 -38
  430. package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +0 -7
  431. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +0 -137
  432. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +0 -7
  433. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +0 -137
  434. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +0 -7
  435. package/dist/modules/sales/widgets/notifications/index.js +0 -7
  436. package/dist/modules/sales/widgets/notifications/index.js.map +0 -7
  437. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +0 -60
  438. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +0 -7
  439. package/dist/modules/staff/notifications.js +0 -75
  440. package/dist/modules/staff/notifications.js.map +0 -7
  441. package/dist/modules/workflows/notifications.js +0 -28
  442. package/dist/modules/workflows/notifications.js.map +0 -7
  443. package/dist/modules/workflows/subscribers/task-assigned-notification.js +0 -38
  444. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +0 -7
  445. package/generated/entities/notification/index.ts +0 -27
  446. package/src/modules/auth/api/profile/route.ts +0 -163
  447. package/src/modules/auth/backend/auth/profile/page.meta.ts +0 -9
  448. package/src/modules/auth/backend/auth/profile/page.tsx +0 -174
  449. package/src/modules/auth/notifications.ts +0 -109
  450. package/src/modules/business_rules/notifications.ts +0 -25
  451. package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +0 -50
  452. package/src/modules/catalog/notifications.ts +0 -25
  453. package/src/modules/catalog/subscribers/low-stock-notification.ts +0 -52
  454. package/src/modules/customers/notifications.ts +0 -44
  455. package/src/modules/dashboards/lib/role-widgets.ts +0 -80
  456. package/src/modules/directory/api/get/tenants/lookup.ts +0 -75
  457. package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -195
  458. package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
  459. package/src/modules/notifications/__tests__/notificationService.test.ts +0 -208
  460. package/src/modules/notifications/acl.ts +0 -7
  461. package/src/modules/notifications/api/[id]/action/route.ts +0 -75
  462. package/src/modules/notifications/api/[id]/dismiss/route.ts +0 -12
  463. package/src/modules/notifications/api/[id]/read/route.ts +0 -12
  464. package/src/modules/notifications/api/[id]/restore/route.ts +0 -53
  465. package/src/modules/notifications/api/batch/route.ts +0 -14
  466. package/src/modules/notifications/api/feature/route.ts +0 -14
  467. package/src/modules/notifications/api/mark-all-read/route.ts +0 -34
  468. package/src/modules/notifications/api/openapi.ts +0 -76
  469. package/src/modules/notifications/api/role/route.ts +0 -14
  470. package/src/modules/notifications/api/route.ts +0 -92
  471. package/src/modules/notifications/api/settings/route.ts +0 -157
  472. package/src/modules/notifications/api/unread-count/route.ts +0 -38
  473. package/src/modules/notifications/backend/config/notifications/page.meta.ts +0 -22
  474. package/src/modules/notifications/backend/config/notifications/page.tsx +0 -12
  475. package/src/modules/notifications/cli.ts +0 -18
  476. package/src/modules/notifications/data/entities.ts +0 -99
  477. package/src/modules/notifications/data/validators.ts +0 -115
  478. package/src/modules/notifications/di.ts +0 -11
  479. package/src/modules/notifications/emails/NotificationEmail.tsx +0 -98
  480. package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +0 -42
  481. package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +0 -233
  482. package/src/modules/notifications/i18n/de.json +0 -50
  483. package/src/modules/notifications/i18n/en.json +0 -50
  484. package/src/modules/notifications/i18n/es.json +0 -50
  485. package/src/modules/notifications/i18n/pl.json +0 -50
  486. package/src/modules/notifications/index.ts +0 -12
  487. package/src/modules/notifications/lib/deliveryConfig.ts +0 -153
  488. package/src/modules/notifications/lib/deliveryStrategies.ts +0 -50
  489. package/src/modules/notifications/lib/events.ts +0 -48
  490. package/src/modules/notifications/lib/notificationBuilder.ts +0 -121
  491. package/src/modules/notifications/lib/notificationFactory.ts +0 -76
  492. package/src/modules/notifications/lib/notificationMapper.ts +0 -33
  493. package/src/modules/notifications/lib/notificationRecipients.ts +0 -83
  494. package/src/modules/notifications/lib/notificationService.ts +0 -414
  495. package/src/modules/notifications/lib/routeHelpers.ts +0 -151
  496. package/src/modules/notifications/lib/safeHref.ts +0 -29
  497. package/src/modules/notifications/migrations/.snapshot-open-mercato.json +0 -336
  498. package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
  499. package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
  500. package/src/modules/notifications/migrations/Migration20260129082610.ts +0 -13
  501. package/src/modules/notifications/subscribers/deliver-notification.ts +0 -204
  502. package/src/modules/notifications/workers/create-notification.worker.ts +0 -122
  503. package/src/modules/sales/notifications.client.ts +0 -65
  504. package/src/modules/sales/notifications.ts +0 -82
  505. package/src/modules/sales/subscribers/quote-expiring-notification.ts +0 -53
  506. package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +0 -156
  507. package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +0 -156
  508. package/src/modules/sales/widgets/notifications/index.ts +0 -2
  509. package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +0 -81
  510. package/src/modules/staff/notifications.ts +0 -71
  511. package/src/modules/workflows/notifications.ts +0 -25
  512. package/src/modules/workflows/subscribers/task-assigned-notification.ts +0 -53
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import CustomerTodosWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateCustomerTodoSettings, type CustomerTodoWidgetSettings } from './config'
3
- const CustomerTodosWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<CustomerTodoWidgetSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import CustomerNewCustomersWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateNewCustomersSettings, type CustomerNewCustomersSettings } from './config'
3
- const CustomerNewCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<CustomerNewCustomersSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import CustomerNewDealsWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateNewDealsSettings, type CustomerNewDealsSettings } from './config'
3
- const CustomerNewDealsWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<CustomerNewDealsSettings> = {
6
6
  metadata: {
@@ -1,10 +1,10 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import CustomerNextInteractionsWidget from './widget.client'
2
3
  import {
3
4
  DEFAULT_SETTINGS,
4
5
  hydrateNextInteractionsSettings,
5
6
  type CustomerNextInteractionsSettings,
6
7
  } from './config'
7
- const CustomerNextInteractionsWidget = lazyDashboardWidget(() => import('./widget.client'))
8
8
 
9
9
  const widget: DashboardWidgetModule<CustomerNextInteractionsSettings> = {
10
10
  metadata: {
@@ -4,7 +4,6 @@ import type { EntityManager } from '@mikro-orm/postgresql'
4
4
  import { DashboardRoleWidgets } from '@open-mercato/core/modules/dashboards/data/entities'
5
5
  import { Role } from '@open-mercato/core/modules/auth/data/entities'
6
6
  import { loadAllWidgets } from '@open-mercato/core/modules/dashboards/lib/widgets'
7
- import { appendWidgetsToRoles, resolveAnalyticsWidgetIds } from '@open-mercato/core/modules/dashboards/lib/role-widgets'
8
7
  import { seedAnalyticsData } from './seed/analytics'
9
8
 
10
9
  type Args = Record<string, string>
@@ -42,25 +41,15 @@ export async function seedDashboardDefaultsForTenant(
42
41
  const widgetMap = new Map(widgets.map((widget) => [widget.metadata.id, widget]))
43
42
  const resolvedWidgetIds = widgetIds && widgetIds.length
44
43
  ? widgetIds.filter((id) => widgetMap.has(id))
45
- : null
46
- const defaultWidgetIds = widgets
47
- .filter((widget) => widget.metadata.defaultEnabled)
48
- .map((widget) => widget.metadata.id)
49
- const allWidgetIds = widgets.map((widget) => widget.metadata.id)
44
+ : widgets.filter((widget) => widget.metadata.defaultEnabled).map((widget) => widget.metadata.id)
50
45
 
51
- if (resolvedWidgetIds && resolvedWidgetIds.length === 0) {
46
+ if (!resolvedWidgetIds.length) {
52
47
  log('No widgets resolved for dashboard seeding.')
53
48
  return false
54
49
  }
55
50
 
56
51
  await em.transactional(async (tem) => {
57
52
  for (const roleName of roleNames) {
58
- const isAdminRole = roleName === 'admin' || roleName === 'superadmin'
59
- const roleWidgetIds = resolvedWidgetIds ?? (isAdminRole ? allWidgetIds : defaultWidgetIds)
60
- if (!roleWidgetIds.length) {
61
- log(`No widgets resolved for role "${roleName}".`)
62
- continue
63
- }
64
53
  const role = await tem.findOne(Role, { name: roleName })
65
54
  if (!role) {
66
55
  log(`Skipping role "${roleName}" (not found)`)
@@ -73,7 +62,7 @@ export async function seedDashboardDefaultsForTenant(
73
62
  deletedAt: null,
74
63
  })
75
64
  if (existing) {
76
- existing.widgetIdsJson = roleWidgetIds
65
+ existing.widgetIdsJson = resolvedWidgetIds
77
66
  tem.persist(existing)
78
67
  log(`Updated dashboard widgets for role "${roleName}"`)
79
68
  } else {
@@ -81,7 +70,7 @@ export async function seedDashboardDefaultsForTenant(
81
70
  roleId: String(role.id),
82
71
  tenantId,
83
72
  organizationId,
84
- widgetIdsJson: roleWidgetIds,
73
+ widgetIdsJson: resolvedWidgetIds,
85
74
  createdAt: new Date(),
86
75
  updatedAt: null,
87
76
  deletedAt: null,
@@ -131,45 +120,6 @@ const seedDefaults: ModuleCli = {
131
120
  },
132
121
  }
133
122
 
134
- const enableAnalyticsWidgets: ModuleCli = {
135
- command: 'enable-analytics-widgets',
136
- async run(rest) {
137
- const args = parseArgs(rest)
138
- const tenantId = args.tenant || args.tenantId || null
139
- const organizationId = args.organization || args.organizationId || args.org || null
140
- const roleCsv = args.roles || 'admin,employee'
141
- if (!tenantId) {
142
- console.error('Usage: mercato dashboards enable-analytics-widgets --tenant <tenantId> [--org <orgId>] [--roles admin,employee]')
143
- return
144
- }
145
-
146
- const roleNames = roleCsv
147
- .split(',')
148
- .map((name) => name.trim())
149
- .filter(Boolean)
150
-
151
- if (!roleNames.length) {
152
- console.log('No roles provided, nothing to update.')
153
- return
154
- }
155
-
156
- const { resolve } = await createRequestContainer()
157
- const em = resolve('em') as EntityManager
158
- const widgetIds = await resolveAnalyticsWidgetIds()
159
-
160
- const updated = await appendWidgetsToRoles(em, {
161
- tenantId,
162
- organizationId,
163
- roleNames,
164
- widgetIds,
165
- })
166
-
167
- if (!updated) {
168
- console.log('No dashboard role widgets updated.')
169
- }
170
- },
171
- }
172
-
173
123
  const seedAnalytics: ModuleCli = {
174
124
  command: 'seed-analytics',
175
125
  async run(rest) {
@@ -332,4 +282,4 @@ const debugAnalytics: ModuleCli = {
332
282
  },
333
283
  }
334
284
 
335
- export default [seedDefaults, enableAnalyticsWidgets, seedAnalytics, debugAnalytics]
285
+ export default [seedDefaults, seedAnalytics, debugAnalytics]
@@ -44,13 +44,9 @@ type UserProps = BaseProps & {
44
44
 
45
45
  type WidgetVisibilityEditorProps = RoleProps | UserProps
46
46
 
47
- export type WidgetVisibilityEditorHandle = {
48
- save: () => Promise<void>
49
- }
50
-
51
47
  const EMPTY: string[] = []
52
48
 
53
- export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHandle, WidgetVisibilityEditorProps>(function WidgetVisibilityEditor(props, ref) {
49
+ export function WidgetVisibilityEditor(props: WidgetVisibilityEditorProps) {
54
50
  const t = useT()
55
51
  const { kind, targetId, tenantId, organizationId } = props
56
52
  const [catalog, setCatalog] = React.useState<WidgetCatalogItem[]>([])
@@ -64,15 +60,6 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
64
60
  const [originalMode, setOriginalMode] = React.useState<'inherit' | 'override'>('inherit')
65
61
  const [effective, setEffective] = React.useState<string[]>(EMPTY)
66
62
 
67
- const dirty = React.useMemo(() => {
68
- if (kind === 'user') {
69
- if (mode !== originalMode) return true
70
- if (mode === 'override') return selected.join('|') !== original.join('|')
71
- return false
72
- }
73
- return selected.join('|') !== original.join('|')
74
- }, [kind, mode, original, originalMode, selected])
75
-
76
63
  const loadCatalog = React.useCallback(async () => {
77
64
  const data = await readApiResultOrThrow<{ items?: unknown[] }>(
78
65
  '/api/dashboards/widgets/catalog',
@@ -162,9 +149,6 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
162
149
  }, [original, originalMode])
163
150
 
164
151
  const save = React.useCallback(async () => {
165
- if (loading) return
166
- if (error && catalog.length === 0) return
167
- if (!dirty) return
168
152
  setSaving(true)
169
153
  setError(null)
170
154
  try {
@@ -218,9 +202,16 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
218
202
  } finally {
219
203
  setSaving(false)
220
204
  }
221
- }, [catalog.length, dirty, error, kind, loading, mode, organizationId, selected, t, targetId, tenantId])
205
+ }, [kind, mode, organizationId, selected, t, targetId, tenantId])
222
206
 
223
- React.useImperativeHandle(ref, () => ({ save }), [save])
207
+ const dirty = React.useMemo(() => {
208
+ if (kind === 'user') {
209
+ if (mode !== originalMode) return true
210
+ if (mode === 'override') return selected.join('|') !== original.join('|')
211
+ return false
212
+ }
213
+ return selected.join('|') !== original.join('|')
214
+ }, [kind, mode, original, originalMode, selected])
224
215
 
225
216
  if (loading) {
226
217
  return (
@@ -306,6 +297,4 @@ export const WidgetVisibilityEditor = React.forwardRef<WidgetVisibilityEditorHan
306
297
  </div>
307
298
  </div>
308
299
  )
309
- })
310
-
311
- WidgetVisibilityEditor.displayName = 'WidgetVisibilityEditor'
300
+ }
@@ -1,10 +1,6 @@
1
1
  import type { EntityManager } from '@mikro-orm/postgresql'
2
2
  import type { CacheStrategy } from '@open-mercato/cache'
3
3
  import { createHash } from 'node:crypto'
4
- import { decryptWithAesGcm } from '@open-mercato/shared/lib/encryption/aes'
5
- import { resolveTenantEncryptionService } from '@open-mercato/shared/lib/encryption/customFieldValues'
6
- import { resolveEntityIdFromMetadata } from '@open-mercato/shared/lib/encryption/entityIds'
7
- import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
8
4
  import {
9
5
  type DateRangePreset,
10
6
  resolveDateRange,
@@ -21,8 +17,6 @@ import {
21
17
  import type { AnalyticsRegistry } from './analyticsRegistry'
22
18
 
23
19
  const WIDGET_DATA_CACHE_TTL = 120_000
24
- const WIDGET_DATA_SEGMENT_TTL = 86_400_000
25
- const WIDGET_DATA_SEGMENT_KEY = 'widget-data:__segment__'
26
20
 
27
21
  const SAFE_IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/
28
22
 
@@ -174,11 +168,6 @@ export class WidgetDataService {
174
168
  const tags = this.getCacheTags(request.entityType)
175
169
  try {
176
170
  await this.cache.set(cacheKey, response, { ttl: WIDGET_DATA_CACHE_TTL, tags })
177
- await this.cache.set(
178
- WIDGET_DATA_SEGMENT_KEY,
179
- { updatedAt: response.metadata.fetchedAt },
180
- { ttl: WIDGET_DATA_SEGMENT_TTL, tags: ['widget-data'] },
181
- )
182
171
  } catch {
183
172
  }
184
173
  }
@@ -293,75 +282,6 @@ export class WidgetDataService {
293
282
  assertSafeIdentifier(config.idColumn, 'id column')
294
283
  assertSafeIdentifier(config.labelColumn, 'label column')
295
284
 
296
- const meta = this.resolveEntityMetadata(config.table)
297
- const idProp = meta ? this.resolveEntityPropertyName(meta, config.idColumn) : null
298
- const labelProp = meta ? this.resolveEntityPropertyName(meta, config.labelColumn) : null
299
- const tenantProp = meta
300
- ? (this.resolveEntityPropertyName(meta, 'tenant_id') ?? this.resolveEntityPropertyName(meta, 'tenantId'))
301
- : null
302
- const organizationProp = meta
303
- ? (this.resolveEntityPropertyName(meta, 'organization_id') ?? this.resolveEntityPropertyName(meta, 'organizationId'))
304
- : null
305
- const entityName = meta ? ((meta as any).class ?? meta.className ?? meta.name) : null
306
-
307
- if (meta && idProp && labelProp && tenantProp && entityName) {
308
- const where: Record<string, unknown> = {
309
- [idProp]: { $in: uniqueIds },
310
- [tenantProp]: this.scope.tenantId,
311
- }
312
- if (organizationProp && this.scope.organizationIds && this.scope.organizationIds.length > 0) {
313
- where[organizationProp] = { $in: this.scope.organizationIds }
314
- }
315
-
316
- try {
317
- const records = await findWithDecryption(
318
- this.em,
319
- entityName,
320
- where,
321
- { fields: [idProp, labelProp, tenantProp, organizationProp].filter(Boolean) },
322
- { tenantId: this.scope.tenantId, organizationId: this.resolveOrganizationId() },
323
- )
324
-
325
- const encryptionService = resolveTenantEncryptionService(this.em as any)
326
- const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
327
- let hasEncryptedLabels = false
328
- let hasDecryptedLabels = false
329
-
330
- const labelMap = new Map<string, string>()
331
- for (const record of records as Array<Record<string, unknown>>) {
332
- const id = record[idProp]
333
- let labelValue = record[labelProp]
334
- if (typeof labelValue === 'string' && this.isEncryptedPayload(labelValue)) {
335
- hasEncryptedLabels = true
336
- if (dek?.key) {
337
- const decrypted = this.decryptWithDek(labelValue, dek.key)
338
- if (decrypted !== null) {
339
- labelValue = decrypted
340
- hasDecryptedLabels = true
341
- }
342
- }
343
- } else if (labelValue != null && labelValue !== '') {
344
- hasDecryptedLabels = true
345
- }
346
-
347
- if (typeof id === 'string' && labelValue != null && labelValue !== '') {
348
- labelMap.set(id, String(labelValue))
349
- }
350
- }
351
-
352
- if (labelMap.size > 0 && (!hasEncryptedLabels || hasDecryptedLabels)) {
353
- return data.map((item) => ({
354
- ...item,
355
- groupLabel: typeof item.groupKey === 'string' && labelMap.has(item.groupKey)
356
- ? labelMap.get(item.groupKey)!
357
- : undefined,
358
- }))
359
- }
360
- } catch {
361
- // fall through to SQL resolution
362
- }
363
- }
364
-
365
285
  const clauses = [`"${config.idColumn}" = ANY(?::uuid[])`, 'tenant_id = ?']
366
286
  const params: unknown[] = [`{${uniqueIds.join(',')}}`, this.scope.tenantId]
367
287
 
@@ -370,43 +290,17 @@ export class WidgetDataService {
370
290
  params.push(`{${this.scope.organizationIds.join(',')}}`)
371
291
  }
372
292
 
373
- const sql = `SELECT "${config.idColumn}" as id, "${config.labelColumn}" as label, tenant_id, organization_id FROM "${config.table}" WHERE ${clauses.join(
293
+ const sql = `SELECT "${config.idColumn}" as id, "${config.labelColumn}" as label FROM "${config.table}" WHERE ${clauses.join(
374
294
  ' AND ',
375
295
  )}`
376
296
 
377
297
  try {
378
298
  const labelRows = await this.em.getConnection().execute(sql, params)
379
- const entityId = this.resolveEntityId(meta)
380
- const encryptionService = resolveTenantEncryptionService(this.em as any)
381
- const organizationId = this.resolveOrganizationId()
382
- const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
383
299
 
384
300
  const labelMap = new Map<string, string>()
385
- for (const row of labelRows as Array<{ id: string; label: string | null; tenant_id?: string | null; organization_id?: string | null }>) {
386
- let labelValue = row.label
387
- if (entityId && encryptionService?.isEnabled() && labelValue != null) {
388
- const rowOrgId = row.organization_id ?? organizationId ?? null
389
- const decrypted = await encryptionService.decryptEntityPayload(
390
- entityId,
391
- { [config.labelColumn]: labelValue },
392
- this.scope.tenantId,
393
- rowOrgId,
394
- )
395
- const resolved = decrypted[config.labelColumn]
396
- if (typeof resolved === 'string' || typeof resolved === 'number') {
397
- labelValue = String(resolved)
398
- }
399
- }
400
-
401
- if (labelValue && dek?.key && this.isEncryptedPayload(labelValue)) {
402
- const decrypted = this.decryptWithDek(labelValue, dek.key)
403
- if (decrypted !== null) {
404
- labelValue = decrypted
405
- }
406
- }
407
-
408
- if (row.id && labelValue != null && labelValue !== '') {
409
- labelMap.set(row.id, labelValue)
301
+ for (const row of labelRows as Array<{ id: string; label: string | null }>) {
302
+ if (row.id && row.label != null && row.label !== '') {
303
+ labelMap.set(row.id, row.label)
410
304
  }
411
305
  }
412
306
 
@@ -423,60 +317,6 @@ export class WidgetDataService {
423
317
  }))
424
318
  }
425
319
  }
426
-
427
- private resolveOrganizationId(): string | null {
428
- if (!this.scope.organizationIds || this.scope.organizationIds.length !== 1) return null
429
- return this.scope.organizationIds[0] ?? null
430
- }
431
-
432
- private resolveEntityMetadata(tableName: string): Record<string, any> | null {
433
- const registry = (this.em as any)?.getMetadata?.()
434
- if (!registry) return null
435
- const entries =
436
- (typeof registry.getAll === 'function' && registry.getAll()) ||
437
- (Array.isArray(registry.metadata) ? registry.metadata : Object.values(registry.metadata ?? {}))
438
- const metas = Array.isArray(entries) ? entries : Object.values(entries ?? {})
439
- const match = metas.find((meta: any) => {
440
- const table = meta?.tableName ?? meta?.collection
441
- if (typeof table !== 'string') return false
442
- if (table === tableName) return true
443
- return table.split('.').pop() === tableName
444
- })
445
- return match ?? null
446
- }
447
-
448
- private resolveEntityPropertyName(meta: Record<string, any>, columnName: string): string | null {
449
- const properties = meta?.properties ? Object.values(meta.properties) : []
450
- for (const prop of properties as Array<Record<string, any>>) {
451
- const fieldName = prop?.fieldName
452
- const fieldNames = prop?.fieldNames
453
- if (typeof fieldName === 'string' && fieldName === columnName) return prop?.name ?? null
454
- if (Array.isArray(fieldNames) && fieldNames.includes(columnName)) return prop?.name ?? null
455
- if (prop?.name === columnName) return prop?.name ?? null
456
- }
457
- return null
458
- }
459
-
460
- private resolveEntityId(meta: Record<string, any> | null): string | null {
461
- if (!meta) return null
462
- try {
463
- return resolveEntityIdFromMetadata(meta as any)
464
- } catch {
465
- return null
466
- }
467
- }
468
-
469
- private isEncryptedPayload(value: string): boolean {
470
- const parts = value.split(':')
471
- return parts.length === 4 && parts[3] === 'v1'
472
- }
473
-
474
- private decryptWithDek(value: string, dek: string): string | null {
475
- const first = decryptWithAesGcm(value, dek)
476
- if (first === null) return null
477
- if (!this.isEncryptedPayload(first)) return first
478
- return decryptWithAesGcm(first, dek) ?? first
479
- }
480
320
  }
481
321
 
482
322
  export function createWidgetDataService(
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import AovKpiWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type AovKpiSettings } from './config'
3
- const AovKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<AovKpiSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import NewCustomersKpiWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type NewCustomersKpiSettings } from './config'
3
- const NewCustomersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<NewCustomersKpiSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import OrdersByStatusWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type OrdersByStatusSettings } from './config'
3
- const OrdersByStatusWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<OrdersByStatusSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import OrdersKpiWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type OrdersKpiSettings } from './config'
3
- const OrdersKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<OrdersKpiSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import PipelineSummaryWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type PipelineSummarySettings } from './config'
3
- const PipelineSummaryWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<PipelineSummarySettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import RevenueKpiWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type RevenueKpiSettings } from './config'
3
- const RevenueKpiWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<RevenueKpiSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import RevenueTrendWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type RevenueTrendSettings } from './config'
3
- const RevenueTrendWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<RevenueTrendSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import SalesByRegionWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type SalesByRegionSettings } from './config'
3
- const SalesByRegionWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<SalesByRegionSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import TopCustomersWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type TopCustomersSettings } from './config'
3
- const TopCustomersWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<TopCustomersSettings> = {
6
6
  metadata: {
@@ -1,6 +1,6 @@
1
- import { lazyDashboardWidget, type DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
1
+ import type { DashboardWidgetModule } from '@open-mercato/shared/modules/dashboard/widgets'
2
+ import TopProductsWidget from './widget.client'
2
3
  import { DEFAULT_SETTINGS, hydrateSettings, type TopProductsSettings } from './config'
3
- const TopProductsWidget = lazyDashboardWidget(() => import('./widget.client'))
4
4
 
5
5
  const widget: DashboardWidgetModule<TopProductsSettings> = {
6
6
  metadata: {
@@ -171,14 +171,12 @@ export function DictionaryTable({
171
171
  const items: RowActionItem[] = []
172
172
  if (onEdit) {
173
173
  items.push({
174
- id: 'edit',
175
174
  label: translations.editLabel,
176
175
  onSelect: () => onEdit(entry),
177
176
  })
178
177
  }
179
178
  if (onDelete) {
180
179
  items.push({
181
- id: 'delete',
182
180
  label: translations.deleteLabel,
183
181
  onSelect: () => onDelete(entry),
184
182
  destructive: true,
@@ -235,8 +235,8 @@ export default function DirectoryOrganizationsPage() {
235
235
  canManage ? (
236
236
  <RowActions
237
237
  items={[
238
- { id: 'edit', label: t('directory.organizations.list.actions.edit', 'Edit'), href: `/backend/directory/organizations/${row.id}/edit` },
239
- { id: 'delete', label: t('directory.organizations.list.actions.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
238
+ { label: t('directory.organizations.list.actions.edit', 'Edit'), href: `/backend/directory/organizations/${row.id}/edit` },
239
+ { label: t('directory.organizations.list.actions.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
240
240
  ]}
241
241
  />
242
242
  ) : null
@@ -160,8 +160,8 @@ export default function DirectoryTenantsPage() {
160
160
  canManage ? (
161
161
  <RowActions
162
162
  items={[
163
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/directory/tenants/${row.id}/edit` },
164
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
163
+ { label: t('common.edit', 'Edit'), href: `/backend/directory/tenants/${row.id}/edit` },
164
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
165
165
  ]}
166
166
  />
167
167
  ) : null
@@ -338,8 +338,8 @@ export RECORD_ID="<record uuid>"`}</code></pre>
338
338
  rowActions={(row) => (
339
339
  <RowActions
340
340
  items={[
341
- { id: 'edit', label: 'Edit', href: `/backend/entities/user/${encodeURIComponent(entityId)}/records/${encodeURIComponent(String((row as any).id))}` },
342
- { id: 'delete', label: 'Delete', destructive: true, onSelect: async () => {
341
+ { label: 'Edit', href: `/backend/entities/user/${encodeURIComponent(entityId)}/records/${encodeURIComponent(String((row as any).id))}` },
342
+ { label: 'Delete', destructive: true, onSelect: async () => {
343
343
  try {
344
344
  if (typeof window !== 'undefined') {
345
345
  const ok = window.confirm('Delete this record?')
@@ -88,7 +88,7 @@ export default function SystemEntitiesTable() {
88
88
  rowActions={(row) => (
89
89
  <RowActions
90
90
  items={[
91
- { id: 'edit', label: 'Edit', href: `/backend/entities/system/${encodeURIComponent(row.entityId)}` },
91
+ { label: 'Edit', href: `/backend/entities/system/${encodeURIComponent(row.entityId)}` },
92
92
  ]}
93
93
  />
94
94
  )}
@@ -110,8 +110,8 @@ export default function UserEntitiesTable() {
110
110
  rowActions={(row) => (
111
111
  <RowActions
112
112
  items={[
113
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}` },
114
- { id: 'show-records', label: t('entities.user.table.actions.showRecords', 'Show records'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}/records` },
113
+ { label: t('common.edit', 'Edit'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}` },
114
+ { label: t('entities.user.table.actions.showRecords', 'Show records'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}/records` },
115
115
  ]}
116
116
  />
117
117
  )}
@@ -205,11 +205,12 @@ export function FeatureTogglesTable() {
205
205
  }}
206
206
  rowActions={(row) => (
207
207
  <RowActions items={[
208
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.id}/edit` },
209
- { id: 'view', label: t('common.view', 'Overrides'), href: `/backend/feature-toggles/global/${row.id}` },
210
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
208
+ { label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.id}/edit` },
209
+ { label: t('common.view', 'Overrides'), href: `/backend/feature-toggles/global/${row.id}` },
210
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
211
211
  ]} />
212
212
  )}
213
213
  />
214
214
  )
215
215
  }
216
+
@@ -161,7 +161,7 @@ export default function OverridesTable() {
161
161
  }}
162
162
  rowActions={(row) => (
163
163
  <RowActions items={[
164
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.toggleId}` },
164
+ { label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.toggleId}` },
165
165
  ]} />
166
166
  )}
167
167
  error={error ? error.message : undefined}
@@ -202,8 +202,8 @@ export default function PlannerAvailabilityRuleSetsPage() {
202
202
  rowActions={(row) => (
203
203
  <RowActions
204
204
  items={[
205
- { id: 'edit', label: labels.actions.edit, href: `/backend/planner/availability-rulesets/${row.id}` },
206
- { id: 'delete', label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
205
+ { label: labels.actions.edit, href: `/backend/planner/availability-rulesets/${row.id}` },
206
+ { label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
207
207
  ]}
208
208
  />
209
209
  )}