@endora-commerce/mod-catalog 0.100.0

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 (443) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
  4. package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
  5. package/dist/admin/components/PackagingUnitsEditor.js +99 -0
  6. package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
  7. package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
  8. package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
  9. package/dist/admin/components/ProductAttributesTab.js +140 -0
  10. package/dist/admin/components/ProductAttributesTab.js.map +1 -0
  11. package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
  12. package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
  13. package/dist/admin/components/ProductInventoryTab.js +284 -0
  14. package/dist/admin/components/ProductInventoryTab.js.map +1 -0
  15. package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
  16. package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
  17. package/dist/admin/components/ProductScopeEditor.js +395 -0
  18. package/dist/admin/components/ProductScopeEditor.js.map +1 -0
  19. package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
  20. package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
  21. package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
  22. package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
  23. package/dist/admin/index.d.ts +45 -0
  24. package/dist/admin/index.d.ts.map +1 -0
  25. package/dist/admin/index.js +184 -0
  26. package/dist/admin/index.js.map +1 -0
  27. package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
  28. package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
  29. package/dist/admin/lib/resolve-product-selection.js +25 -0
  30. package/dist/admin/lib/resolve-product-selection.js.map +1 -0
  31. package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
  32. package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
  33. package/dist/admin/pages/AttachmentTypesPage.js +92 -0
  34. package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
  35. package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
  36. package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
  37. package/dist/admin/pages/AttributeSetsPage.js +158 -0
  38. package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
  39. package/dist/admin/pages/AttributesManager.d.ts +9 -0
  40. package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
  41. package/dist/admin/pages/AttributesManager.js +305 -0
  42. package/dist/admin/pages/AttributesManager.js.map +1 -0
  43. package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
  44. package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
  45. package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
  46. package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
  47. package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
  48. package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
  49. package/dist/admin/pages/BulkOperationsPage.js +98 -0
  50. package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
  51. package/dist/admin/pages/CategoriesTree.d.ts +9 -0
  52. package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
  53. package/dist/admin/pages/CategoriesTree.js +176 -0
  54. package/dist/admin/pages/CategoriesTree.js.map +1 -0
  55. package/dist/admin/pages/ProductEditor.d.ts +13 -0
  56. package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
  57. package/dist/admin/pages/ProductEditor.js +1050 -0
  58. package/dist/admin/pages/ProductEditor.js.map +1 -0
  59. package/dist/admin/pages/ProductsList.d.ts +9 -0
  60. package/dist/admin/pages/ProductsList.d.ts.map +1 -0
  61. package/dist/admin/pages/ProductsList.js +399 -0
  62. package/dist/admin/pages/ProductsList.js.map +1 -0
  63. package/dist/backend/commands/attribute-commands.d.ts +111 -0
  64. package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
  65. package/dist/backend/commands/attribute-commands.js +482 -0
  66. package/dist/backend/commands/attribute-commands.js.map +1 -0
  67. package/dist/backend/demo/reset.d.ts +23 -0
  68. package/dist/backend/demo/reset.d.ts.map +1 -0
  69. package/dist/backend/demo/reset.js +41 -0
  70. package/dist/backend/demo/reset.js.map +1 -0
  71. package/dist/backend/demo/rows.d.ts +103 -0
  72. package/dist/backend/demo/rows.d.ts.map +1 -0
  73. package/dist/backend/demo/rows.js +162 -0
  74. package/dist/backend/demo/rows.js.map +1 -0
  75. package/dist/backend/demo/seed.d.ts +35 -0
  76. package/dist/backend/demo/seed.d.ts.map +1 -0
  77. package/dist/backend/demo/seed.js +177 -0
  78. package/dist/backend/demo/seed.js.map +1 -0
  79. package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
  80. package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
  81. package/dist/backend/entities/attachment-type.entity.js +57 -0
  82. package/dist/backend/entities/attachment-type.entity.js.map +1 -0
  83. package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
  84. package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
  85. package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
  86. package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
  87. package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
  88. package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
  89. package/dist/backend/entities/attribute-set.entity.js +67 -0
  90. package/dist/backend/entities/attribute-set.entity.js.map +1 -0
  91. package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
  92. package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
  93. package/dist/backend/entities/bulk-operation.entity.js +138 -0
  94. package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
  95. package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
  96. package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
  97. package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
  98. package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
  99. package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
  100. package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
  101. package/dist/backend/entities/bundle-slot.entity.js +74 -0
  102. package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
  103. package/dist/backend/entities/category.entity.d.ts +26 -0
  104. package/dist/backend/entities/category.entity.d.ts.map +1 -0
  105. package/dist/backend/entities/category.entity.js +119 -0
  106. package/dist/backend/entities/category.entity.js.map +1 -0
  107. package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
  108. package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
  109. package/dist/backend/entities/gallery-item-label.entity.js +50 -0
  110. package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
  111. package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
  112. package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
  113. package/dist/backend/entities/gallery-item.entity.js +58 -0
  114. package/dist/backend/entities/gallery-item.entity.js.map +1 -0
  115. package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
  116. package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
  117. package/dist/backend/entities/grouped-item.entity.js +68 -0
  118. package/dist/backend/entities/grouped-item.entity.js.map +1 -0
  119. package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
  120. package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
  121. package/dist/backend/entities/product-attachment.entity.js +77 -0
  122. package/dist/backend/entities/product-attachment.entity.js.map +1 -0
  123. package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
  124. package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
  125. package/dist/backend/entities/product-attribute.entity.js +161 -0
  126. package/dist/backend/entities/product-attribute.entity.js.map +1 -0
  127. package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
  128. package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
  129. package/dist/backend/entities/product-editor-preference.entity.js +63 -0
  130. package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
  131. package/dist/backend/entities/product-link.entity.d.ts +25 -0
  132. package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
  133. package/dist/backend/entities/product-link.entity.js +70 -0
  134. package/dist/backend/entities/product-link.entity.js.map +1 -0
  135. package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
  136. package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
  137. package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
  138. package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
  139. package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
  140. package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
  141. package/dist/backend/entities/product-value-override.entity.js +90 -0
  142. package/dist/backend/entities/product-value-override.entity.js.map +1 -0
  143. package/dist/backend/entities/product-variant.entity.d.ts +18 -0
  144. package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
  145. package/dist/backend/entities/product-variant.entity.js +68 -0
  146. package/dist/backend/entities/product-variant.entity.js.map +1 -0
  147. package/dist/backend/entities/product.entity.d.ts +108 -0
  148. package/dist/backend/entities/product.entity.d.ts.map +1 -0
  149. package/dist/backend/entities/product.entity.js +230 -0
  150. package/dist/backend/entities/product.entity.js.map +1 -0
  151. package/dist/backend/index.d.ts +262 -0
  152. package/dist/backend/index.d.ts.map +1 -0
  153. package/dist/backend/index.js +642 -0
  154. package/dist/backend/index.js.map +1 -0
  155. package/dist/backend/plugin.d.ts +216 -0
  156. package/dist/backend/plugin.d.ts.map +1 -0
  157. package/dist/backend/plugin.js +223 -0
  158. package/dist/backend/plugin.js.map +1 -0
  159. package/dist/backend/prompt-tools.d.ts +47 -0
  160. package/dist/backend/prompt-tools.d.ts.map +1 -0
  161. package/dist/backend/prompt-tools.js +284 -0
  162. package/dist/backend/prompt-tools.js.map +1 -0
  163. package/dist/backend/routes.admin.d.ts +105 -0
  164. package/dist/backend/routes.admin.d.ts.map +1 -0
  165. package/dist/backend/routes.admin.js +1162 -0
  166. package/dist/backend/routes.admin.js.map +1 -0
  167. package/dist/backend/routes.api-key.d.ts +33 -0
  168. package/dist/backend/routes.api-key.d.ts.map +1 -0
  169. package/dist/backend/routes.api-key.js +43 -0
  170. package/dist/backend/routes.api-key.js.map +1 -0
  171. package/dist/backend/routes.external.d.ts +32 -0
  172. package/dist/backend/routes.external.d.ts.map +1 -0
  173. package/dist/backend/routes.external.js +115 -0
  174. package/dist/backend/routes.external.js.map +1 -0
  175. package/dist/backend/routes.public.d.ts +46 -0
  176. package/dist/backend/routes.public.d.ts.map +1 -0
  177. package/dist/backend/routes.public.js +318 -0
  178. package/dist/backend/routes.public.js.map +1 -0
  179. package/dist/backend/services/asset-references.d.ts +4 -0
  180. package/dist/backend/services/asset-references.d.ts.map +1 -0
  181. package/dist/backend/services/asset-references.js +104 -0
  182. package/dist/backend/services/asset-references.js.map +1 -0
  183. package/dist/backend/services/attachment.service.d.ts +45 -0
  184. package/dist/backend/services/attachment.service.d.ts.map +1 -0
  185. package/dist/backend/services/attachment.service.js +268 -0
  186. package/dist/backend/services/attachment.service.js.map +1 -0
  187. package/dist/backend/services/attribute-option-validator.d.ts +47 -0
  188. package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
  189. package/dist/backend/services/attribute-option-validator.js +69 -0
  190. package/dist/backend/services/attribute-option-validator.js.map +1 -0
  191. package/dist/backend/services/attribute-set-validations.d.ts +65 -0
  192. package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
  193. package/dist/backend/services/attribute-set-validations.js +89 -0
  194. package/dist/backend/services/attribute-set-validations.js.map +1 -0
  195. package/dist/backend/services/attribute-set.service.d.ts +50 -0
  196. package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
  197. package/dist/backend/services/attribute-set.service.js +401 -0
  198. package/dist/backend/services/attribute-set.service.js.map +1 -0
  199. package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
  200. package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
  201. package/dist/backend/services/attribute-type-mapping.js +121 -0
  202. package/dist/backend/services/attribute-type-mapping.js.map +1 -0
  203. package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
  204. package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
  205. package/dist/backend/services/attribute-value-key.service.js +118 -0
  206. package/dist/backend/services/attribute-value-key.service.js.map +1 -0
  207. package/dist/backend/services/audit-references.d.ts +13 -0
  208. package/dist/backend/services/audit-references.d.ts.map +1 -0
  209. package/dist/backend/services/audit-references.js +51 -0
  210. package/dist/backend/services/audit-references.js.map +1 -0
  211. package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
  212. package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
  213. package/dist/backend/services/bulk-operation-queue.js +34 -0
  214. package/dist/backend/services/bulk-operation-queue.js.map +1 -0
  215. package/dist/backend/services/bulk-operation.service.d.ts +195 -0
  216. package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
  217. package/dist/backend/services/bulk-operation.service.js +510 -0
  218. package/dist/backend/services/bulk-operation.service.js.map +1 -0
  219. package/dist/backend/services/bundle.service.d.ts +87 -0
  220. package/dist/backend/services/bundle.service.d.ts.map +1 -0
  221. package/dist/backend/services/bundle.service.js +286 -0
  222. package/dist/backend/services/bundle.service.js.map +1 -0
  223. package/dist/backend/services/catalog-admin.service.d.ts +398 -0
  224. package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
  225. package/dist/backend/services/catalog-admin.service.js +1516 -0
  226. package/dist/backend/services/catalog-admin.service.js.map +1 -0
  227. package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
  228. package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
  229. package/dist/backend/services/catalog-attribute-read.service.js +216 -0
  230. package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
  231. package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
  232. package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
  233. package/dist/backend/services/catalog-bulk-import.service.js +136 -0
  234. package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
  235. package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
  236. package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
  237. package/dist/backend/services/catalog-bulk-update.service.js +330 -0
  238. package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
  239. package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
  240. package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
  241. package/dist/backend/services/catalog-category-read.service.js +248 -0
  242. package/dist/backend/services/catalog-category-read.service.js.map +1 -0
  243. package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
  244. package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
  245. package/dist/backend/services/catalog-org-price-decorator.js +184 -0
  246. package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
  247. package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
  248. package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
  249. package/dist/backend/services/catalog-product-filter.service.js +275 -0
  250. package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
  251. package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
  252. package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
  253. package/dist/backend/services/catalog-product-read.service.js +197 -0
  254. package/dist/backend/services/catalog-product-read.service.js.map +1 -0
  255. package/dist/backend/services/catalog-query.service.d.ts +444 -0
  256. package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
  257. package/dist/backend/services/catalog-query.service.js +1633 -0
  258. package/dist/backend/services/catalog-query.service.js.map +1 -0
  259. package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
  260. package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
  261. package/dist/backend/services/catalog-quick-search.service.js +159 -0
  262. package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
  263. package/dist/backend/services/catalog-write-ports.d.ts +25 -0
  264. package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
  265. package/dist/backend/services/catalog-write-ports.js +63 -0
  266. package/dist/backend/services/catalog-write-ports.js.map +1 -0
  267. package/dist/backend/services/category-admin.service.d.ts +102 -0
  268. package/dist/backend/services/category-admin.service.d.ts.map +1 -0
  269. package/dist/backend/services/category-admin.service.js +271 -0
  270. package/dist/backend/services/category-admin.service.js.map +1 -0
  271. package/dist/backend/services/gallery.service.d.ts +85 -0
  272. package/dist/backend/services/gallery.service.d.ts.map +1 -0
  273. package/dist/backend/services/gallery.service.js +326 -0
  274. package/dist/backend/services/gallery.service.js.map +1 -0
  275. package/dist/backend/services/grouped.service.d.ts +39 -0
  276. package/dist/backend/services/grouped.service.d.ts.map +1 -0
  277. package/dist/backend/services/grouped.service.js +136 -0
  278. package/dist/backend/services/grouped.service.js.map +1 -0
  279. package/dist/backend/services/label-resolver.d.ts +16 -0
  280. package/dist/backend/services/label-resolver.d.ts.map +1 -0
  281. package/dist/backend/services/label-resolver.js +43 -0
  282. package/dist/backend/services/label-resolver.js.map +1 -0
  283. package/dist/backend/services/packaging-unit.service.d.ts +28 -0
  284. package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
  285. package/dist/backend/services/packaging-unit.service.js +197 -0
  286. package/dist/backend/services/packaging-unit.service.js.map +1 -0
  287. package/dist/backend/services/primary-asset-url.d.ts +4 -0
  288. package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
  289. package/dist/backend/services/primary-asset-url.js +55 -0
  290. package/dist/backend/services/primary-asset-url.js.map +1 -0
  291. package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
  292. package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
  293. package/dist/backend/services/product-editor-preferences.service.js +44 -0
  294. package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
  295. package/dist/backend/services/product-link.service.d.ts +169 -0
  296. package/dist/backend/services/product-link.service.d.ts.map +1 -0
  297. package/dist/backend/services/product-link.service.js +297 -0
  298. package/dist/backend/services/product-link.service.js.map +1 -0
  299. package/dist/backend/services/product-overrides.service.d.ts +77 -0
  300. package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
  301. package/dist/backend/services/product-overrides.service.js +204 -0
  302. package/dist/backend/services/product-overrides.service.js.map +1 -0
  303. package/dist/backend/services/product-scope-context.service.d.ts +36 -0
  304. package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
  305. package/dist/backend/services/product-scope-context.service.js +106 -0
  306. package/dist/backend/services/product-scope-context.service.js.map +1 -0
  307. package/dist/backend/services/product-type-validations.d.ts +42 -0
  308. package/dist/backend/services/product-type-validations.d.ts.map +1 -0
  309. package/dist/backend/services/product-type-validations.js +55 -0
  310. package/dist/backend/services/product-type-validations.js.map +1 -0
  311. package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
  312. package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
  313. package/dist/backend/services/product-value-resolver.service.js +111 -0
  314. package/dist/backend/services/product-value-resolver.service.js.map +1 -0
  315. package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
  316. package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
  317. package/dist/backend/services/system-attribute-scopes.js +18 -0
  318. package/dist/backend/services/system-attribute-scopes.js.map +1 -0
  319. package/dist/backend/services/viewer-organization.d.ts +25 -0
  320. package/dist/backend/services/viewer-organization.d.ts.map +1 -0
  321. package/dist/backend/services/viewer-organization.js +31 -0
  322. package/dist/backend/services/viewer-organization.js.map +1 -0
  323. package/dist/manifest.d.ts +204 -0
  324. package/dist/manifest.d.ts.map +1 -0
  325. package/dist/manifest.js +686 -0
  326. package/dist/manifest.js.map +1 -0
  327. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
  328. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
  329. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
  330. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
  331. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
  332. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
  333. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
  334. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
  335. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
  336. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
  337. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
  338. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
  339. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
  340. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
  341. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
  342. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
  343. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
  344. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
  345. package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
  346. package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
  347. package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
  348. package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
  349. package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
  350. package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
  351. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
  352. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
  353. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
  354. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
  355. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
  356. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
  357. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
  358. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
  359. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
  360. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
  361. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
  362. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
  363. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
  364. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
  365. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
  366. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
  367. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
  368. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
  369. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
  370. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
  371. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
  372. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
  373. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
  374. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
  375. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
  376. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
  377. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
  378. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
  379. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
  380. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
  381. package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
  382. package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
  383. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
  384. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
  385. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
  386. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
  387. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
  388. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
  389. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
  390. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
  391. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
  392. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
  393. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
  394. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
  395. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
  396. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
  397. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
  398. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
  399. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
  400. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
  401. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
  402. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
  403. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
  404. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
  405. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
  406. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
  407. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
  408. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
  409. package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
  410. package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
  411. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
  412. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
  413. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
  414. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
  415. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
  416. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
  417. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
  418. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
  419. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
  420. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
  421. package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
  422. package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
  423. package/dist/migrations/index.d.ts +55 -0
  424. package/dist/migrations/index.d.ts.map +1 -0
  425. package/dist/migrations/index.js +80 -0
  426. package/dist/migrations/index.js.map +1 -0
  427. package/dist/ports/index.d.ts +96 -0
  428. package/dist/ports/index.d.ts.map +1 -0
  429. package/dist/ports/index.js +2 -0
  430. package/dist/ports/index.js.map +1 -0
  431. package/docs/catalog/attachments.md +69 -0
  432. package/docs/catalog/attribute-sets.md +63 -0
  433. package/docs/catalog/attributes.md +244 -0
  434. package/docs/catalog/composite-products.md +115 -0
  435. package/docs/catalog/gallery-and-labels.md +73 -0
  436. package/docs/catalog/packaging-units.md +67 -0
  437. package/docs/catalog/per-channel-per-language-overrides.md +234 -0
  438. package/docs/catalog/product-links.md +79 -0
  439. package/docs/catalog.md +207 -0
  440. package/i18n/en.json +649 -0
  441. package/i18n/pl.json +649 -0
  442. package/package.json +109 -0
  443. package/tailwind.css +14 -0
@@ -0,0 +1,305 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from 'react';
3
+ import { Pencil } from 'lucide-react';
4
+ import { ApiError, apiClient } from '@endora-commerce/admin-kit/lib';
5
+ import { Alert, AlertDescription, Button, Card, CardContent, CardHeader, CardTitle, Checkbox, Input, Label, PageHeader, Select, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@endora-commerce/admin-kit/ui';
6
+ import { useTranslation } from '@endora-commerce/admin-kit/i18n';
7
+ // Feature 002 (T035) — DB-level value types. Foundation 001 had
8
+ // the original 5 (string, number, boolean, enum, date); 002 adds
9
+ // `multiselect` and `price`. The presentation hint
10
+ // `displayAsSlider` is honored only when valueType ∈ (number, price).
11
+ const VALUE_TYPES = ['string', 'number', 'boolean', 'enum', 'multiselect', 'price'];
12
+ // Boolean flags surfaced as togglable checkbox columns in the list.
13
+ const FLAG_KEYS = [
14
+ 'isSearchable',
15
+ 'isFilterable',
16
+ 'isVariantAxis',
17
+ 'isComparable',
18
+ 'massEditable',
19
+ 'quickSearchable',
20
+ 'isPromoRule',
21
+ ];
22
+ function flagsOf(a) {
23
+ return {
24
+ isSearchable: a.isSearchable,
25
+ isFilterable: a.isFilterable,
26
+ isVariantAxis: a.isVariantAxis,
27
+ isComparable: a.isComparable,
28
+ massEditable: a.massEditable,
29
+ quickSearchable: a.quickSearchable,
30
+ isPromoRule: a.isPromoRule,
31
+ };
32
+ }
33
+ function flagsEqual(a, b) {
34
+ return FLAG_KEYS.every((k) => a[k] === b[k]);
35
+ }
36
+ export function AttributesManager() {
37
+ const t = useTranslation('catalog');
38
+ const [attrs, setAttrs] = useState([]);
39
+ const [loading, setLoading] = useState(true);
40
+ const [error, setError] = useState(null);
41
+ const [info, setInfo] = useState(null);
42
+ // Per-attribute local flag drafts; only flushed to the API on Save.
43
+ const [flagDrafts, setFlagDrafts] = useState({});
44
+ const [saving, setSaving] = useState(false);
45
+ const [editingId, setEditingId] = useState(null);
46
+ const refresh = useCallback(async () => {
47
+ setLoading(true);
48
+ setError(null);
49
+ try {
50
+ const res = await apiClient.get('/api/v1/admin/catalog/attributes');
51
+ setAttrs(res.data);
52
+ setFlagDrafts(Object.fromEntries(res.data.map((a) => [a.id, flagsOf(a)])));
53
+ }
54
+ catch (err) {
55
+ setError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.load'));
56
+ }
57
+ finally {
58
+ setLoading(false);
59
+ }
60
+ }, [t]);
61
+ useEffect(() => {
62
+ void refresh();
63
+ }, [refresh]);
64
+ const editingAttr = useMemo(() => attrs.find((a) => a.id === editingId) ?? null, [attrs, editingId]);
65
+ // Attributes whose checkbox draft differs from the persisted flags.
66
+ const dirtyIds = useMemo(() => attrs.filter((a) => flagDrafts[a.id] && !flagsEqual(flagDrafts[a.id], flagsOf(a))).map((a) => a.id), [attrs, flagDrafts]);
67
+ const toggleFlag = useCallback((id, key, value) => {
68
+ setFlagDrafts((prev) => ({ ...prev, [id]: { ...prev[id], [key]: value } }));
69
+ }, []);
70
+ const buildAttributePayload = (input) => {
71
+ const label = {};
72
+ if (input.labelEn)
73
+ label['en-US'] = input.labelEn;
74
+ if (input.labelPl)
75
+ label['pl-PL'] = input.labelPl;
76
+ return {
77
+ label,
78
+ isSearchable: input.isSearchable,
79
+ isFilterable: input.isFilterable,
80
+ isVariantAxis: input.isVariantAxis,
81
+ isComparable: input.isComparable,
82
+ massEditable: input.massEditable,
83
+ quickSearchable: input.quickSearchable,
84
+ isPromoRule: input.isPromoRule,
85
+ ...(input.valueType === 'number' || input.valueType === 'price'
86
+ ? { displayAsSlider: input.displayAsSlider }
87
+ : {}),
88
+ };
89
+ };
90
+ const handleCreate = useCallback(async (input) => {
91
+ // enumValues required for both `enum` (single-select) and `multiselect`.
92
+ const enumValues = input.valueType === 'enum' || input.valueType === 'multiselect'
93
+ ? input.enumValues
94
+ .split(',')
95
+ .map((s) => s.trim())
96
+ .filter(Boolean)
97
+ : undefined;
98
+ try {
99
+ await apiClient.post('/api/v1/admin/catalog/attributes', {
100
+ key: input.key,
101
+ valueType: input.valueType,
102
+ ...buildAttributePayload(input),
103
+ ...(enumValues !== undefined ? { enumValues } : {}),
104
+ });
105
+ setInfo(t('attributes.success.create', { key: input.key }));
106
+ await refresh();
107
+ }
108
+ catch (err) {
109
+ setError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.create'));
110
+ }
111
+ }, [refresh, t]);
112
+ const handleEditSave = useCallback(async (attr, input) => {
113
+ try {
114
+ await apiClient.patch(`/api/v1/admin/catalog/attributes/${attr.key}`, buildAttributePayload(input));
115
+ setInfo(t('attributes.success.update', { key: attr.key }));
116
+ setEditingId(null);
117
+ await refresh();
118
+ }
119
+ catch (err) {
120
+ setError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.update'));
121
+ }
122
+ }, [refresh, t]);
123
+ // Flush every dirty row's flags in one batch, then refresh once.
124
+ const saveFlags = useCallback(async () => {
125
+ if (dirtyIds.length === 0)
126
+ return;
127
+ setSaving(true);
128
+ setError(null);
129
+ try {
130
+ for (const id of dirtyIds) {
131
+ const attr = attrs.find((a) => a.id === id);
132
+ if (!attr)
133
+ continue;
134
+ await apiClient.patch(`/api/v1/admin/catalog/attributes/${attr.key}`, flagDrafts[id]);
135
+ }
136
+ setInfo(t('attributes.success.flagsSaved', { count: dirtyIds.length }));
137
+ await refresh();
138
+ }
139
+ catch (err) {
140
+ setError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.update'));
141
+ }
142
+ finally {
143
+ setSaving(false);
144
+ }
145
+ }, [attrs, dirtyIds, flagDrafts, refresh, t]);
146
+ const resetFlags = useCallback(() => {
147
+ setFlagDrafts(Object.fromEntries(attrs.map((a) => [a.id, flagsOf(a)])));
148
+ }, [attrs]);
149
+ return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: t('attributes.page.title'), description: t('attributes.page.description') }), error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: error }) })) : null, info ? (_jsx(Alert, { variant: "success", className: "mb-4", children: _jsx(AlertDescription, { children: info }) })) : null, editingAttr ? (_jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('attributes.edit.title', { key: editingAttr.key }) }) }), _jsxs(CardContent, { className: "space-y-6", children: [_jsx(AttributeForm, { mode: "edit", attribute: editingAttr, onSubmit: (input) => handleEditSave(editingAttr, input), onCancel: () => setEditingId(null) }), editingAttr.valueType === 'enum' || editingAttr.valueType === 'multiselect' ? (_jsx(AttributeOptionsEditor, { attribute: editingAttr, onError: setError, onChanged: () => void refresh() })) : null] })] })) : (_jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('attributes.create.title') }) }), _jsx(CardContent, { children: _jsx(AttributeForm, { mode: "create", onSubmit: handleCreate }) })] })), dirtyIds.length > 0 ? (_jsx(Card, { className: "mb-4", children: _jsxs(CardContent, { className: "flex flex-wrap items-center gap-3 pt-6", children: [_jsx("span", { className: "text-sm text-muted-foreground", children: t('attributes.batch.unsaved', { count: dirtyIds.length }) }), _jsx(Button, { size: "sm", disabled: saving, onClick: () => void saveFlags(), children: t('attributes.action.save') }), _jsx(Button, { size: "sm", variant: "ghost", disabled: saving, onClick: resetFlags, children: t('attributes.action.cancel') })] }) })) : null, _jsx(Card, { children: _jsx(CardContent, { className: "pt-6", children: loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('attributes.loading') })) : attrs.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('attributes.empty') })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: t('attributes.column.key') }), _jsx(TableHead, { children: t('attributes.column.label') }), _jsx(TableHead, { children: t('attributes.column.type') }), _jsx(TableHead, { children: t('attributes.column.enumValues') }), _jsx(TableHead, { children: t('attributes.column.searchable') }), _jsx(TableHead, { children: t('attributes.column.filterable') }), _jsx(TableHead, { children: t('attributes.column.variantAxis') }), _jsx(TableHead, { children: t('attributes.column.comparable') }), _jsx(TableHead, { children: t('attributes.column.massEditable') }), _jsx(TableHead, { children: t('attributes.column.quickSearchable') }), _jsx(TableHead, { children: t('attributes.column.promoRule') }), _jsx(TableHead, { className: "text-right", children: t('attributes.column.actions') })] }) }), _jsx(TableBody, { children: attrs.map((a) => {
150
+ const draft = flagDrafts[a.id] ?? flagsOf(a);
151
+ return (_jsxs(TableRow, { children: [_jsx(TableCell, { children: _jsx("code", { className: "font-mono text-xs", children: a.key }) }), _jsx(TableCell, { children: a.label['en-US'] ?? Object.values(a.label)[0] ?? '' }), _jsx(TableCell, { children: a.valueType }), _jsx(TableCell, { className: "text-muted-foreground", children: a.enumValues && a.enumValues.length ? a.enumValues.join(', ') : '—' }), FLAG_KEYS.map((key) => (_jsx(TableCell, { children: _jsx(Checkbox, { checked: draft[key], "aria-label": `${a.key}-${key}`, onChange: (e) => toggleFlag(a.id, key, e.target.checked) }) }, key))), _jsx(TableCell, { className: "text-right", children: _jsxs(Button, { variant: "outline", size: "sm", onClick: () => {
152
+ setEditingId(a.id);
153
+ setInfo(null);
154
+ }, children: [_jsx(Pencil, {}), t('attributes.action.edit')] }) })] }, a.id));
155
+ }) })] })) }) })] }));
156
+ }
157
+ /**
158
+ * Shared create/edit form. In `edit` mode the `key` and `valueType` are locked
159
+ * (immutable server-side) while the label and flags stay editable; enum /
160
+ * multiselect options are managed by the separate {@link AttributeOptionsEditor}.
161
+ */
162
+ function AttributeForm({ mode, attribute, onSubmit, onCancel }) {
163
+ const t = useTranslation('catalog');
164
+ const isEdit = mode === 'edit';
165
+ const [key, setKey] = useState(attribute?.key ?? '');
166
+ // Pre-fill from the stored label, tolerating older rows whose locale keys are
167
+ // `en`/`pl` (or only `labelDefault`) rather than the canonical `en-US`/`pl-PL`.
168
+ const [labelEn, setLabelEn] = useState(attribute?.label['en-US'] ?? attribute?.label['en'] ?? attribute?.labelDefault ?? '');
169
+ const [labelPl, setLabelPl] = useState(attribute?.label['pl-PL'] ?? attribute?.label['pl'] ?? '');
170
+ const [valueType, setValueType] = useState(attribute?.valueType ?? 'string');
171
+ const [enumValues, setEnumValues] = useState('');
172
+ const [isSearchable, setIsSearchable] = useState(attribute?.isSearchable ?? false);
173
+ const [isFilterable, setIsFilterable] = useState(attribute?.isFilterable ?? false);
174
+ const [isVariantAxis, setIsVariantAxis] = useState(attribute?.isVariantAxis ?? false);
175
+ const [displayAsSlider, setDisplayAsSlider] = useState(attribute?.displayAsSlider ?? false);
176
+ const [isComparable, setIsComparable] = useState(attribute?.isComparable ?? false);
177
+ const [massEditable, setMassEditable] = useState(attribute?.massEditable ?? false);
178
+ const [quickSearchable, setQuickSearchable] = useState(attribute?.quickSearchable ?? false);
179
+ const [isPromoRule, setIsPromoRule] = useState(attribute?.isPromoRule ?? false);
180
+ const [busy, setBusy] = useState(false);
181
+ const isNumeric = valueType === 'number' || valueType === 'price';
182
+ const collect = () => ({
183
+ key,
184
+ labelEn,
185
+ labelPl,
186
+ valueType,
187
+ enumValues,
188
+ isSearchable,
189
+ isFilterable,
190
+ isVariantAxis,
191
+ displayAsSlider,
192
+ isComparable,
193
+ massEditable,
194
+ quickSearchable,
195
+ isPromoRule,
196
+ });
197
+ const reset = () => {
198
+ setKey('');
199
+ setLabelEn('');
200
+ setLabelPl('');
201
+ setEnumValues('');
202
+ setIsSearchable(false);
203
+ setIsFilterable(false);
204
+ setIsVariantAxis(false);
205
+ setDisplayAsSlider(false);
206
+ setIsComparable(false);
207
+ setMassEditable(false);
208
+ setQuickSearchable(false);
209
+ setIsPromoRule(false);
210
+ };
211
+ return (_jsxs("form", { className: "space-y-4", onSubmit: (e) => {
212
+ e.preventDefault();
213
+ setBusy(true);
214
+ void onSubmit(collect())
215
+ .then(() => {
216
+ if (!isEdit)
217
+ reset();
218
+ })
219
+ .finally(() => setBusy(false));
220
+ }, children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "akey", children: t('attributes.field.key') }), _jsx(Input, { id: "akey", value: key, onChange: (e) => setKey(e.target.value), pattern: "[a-z][a-z0-9_]*", required: true, maxLength: 64, disabled: isEdit })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "atype", children: t('attributes.field.type') }), _jsx(Select, { id: "atype", value: valueType, onChange: (e) => setValueType(e.target.value), disabled: isEdit, children: VALUE_TYPES.map((v) => (_jsx("option", { value: v, children: v }, v))) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "alen", children: t('attributes.field.labelEn') }), _jsx(Input, { id: "alen", value: labelEn, onChange: (e) => setLabelEn(e.target.value) })] }), _jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "alpl", children: t('attributes.field.labelPl') }), _jsx(Input, { id: "alpl", value: labelPl, onChange: (e) => setLabelPl(e.target.value) })] })] }), isEdit ? (_jsx("p", { className: "text-xs text-muted-foreground", children: t('attributes.edit.lockedHint') })) : null, isEdit && attribute?.customFieldDefinitionId ? (_jsxs("p", { className: "text-xs text-muted-foreground", children: [t('attributes.edit.customFieldDefinitionId'), ' ', _jsx("span", { className: "font-mono", children: attribute.customFieldDefinitionId })] })) : null, !isEdit && (valueType === 'enum' || valueType === 'multiselect') ? (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { htmlFor: "aenum", children: t('attributes.field.enumValues') }), _jsx(Input, { id: "aenum", value: enumValues, onChange: (e) => setEnumValues(e.target.value), placeholder: t('attributes.field.enumValuesPlaceholder'), required: true }), _jsx("p", { className: "text-xs text-muted-foreground", children: valueType === 'multiselect'
221
+ ? t('attributes.field.enumValues.help.multiselect')
222
+ : t('attributes.field.enumValues.help.enum') })] })) : null, isNumeric ? (_jsx("div", { children: _jsxs("label", { className: "inline-flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: displayAsSlider, onChange: (e) => setDisplayAsSlider(e.target.checked) }), t('attributes.flag.displayAsSlider')] }) })) : null, _jsxs("div", { className: "space-y-2", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: isSearchable, onChange: (e) => setIsSearchable(e.target.checked) }), t('attributes.flag.searchable')] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: isFilterable, onChange: (e) => setIsFilterable(e.target.checked) }), t('attributes.flag.filterable')] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: isVariantAxis, onChange: (e) => setIsVariantAxis(e.target.checked) }), t('attributes.flag.variantAxis')] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: isComparable, onChange: (e) => setIsComparable(e.target.checked) }), t('attributes.flag.comparable')] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: massEditable, onChange: (e) => setMassEditable(e.target.checked) }), t('attributes.flag.massEditable')] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: quickSearchable, onChange: (e) => setQuickSearchable(e.target.checked) }), t('attributes.column.quickSearchable')] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { checked: isPromoRule, onChange: (e) => setIsPromoRule(e.target.checked) }), t('attributes.flag.promoRule')] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { type: "submit", disabled: busy, children: isEdit ? t('attributes.action.saveEdit') : t('attributes.action.create') }), onCancel ? (_jsx(Button, { type: "button", variant: "ghost", disabled: busy, onClick: onCancel, children: t('attributes.action.cancel') })) : null] })] }));
223
+ }
224
+ /**
225
+ * Add / rename / remove the selectable options of an enum or multiselect
226
+ * attribute. Each mutation hits the per-option endpoints and reloads the local
227
+ * list; `onChanged` lets the parent refresh the attribute's `enumValues` cell.
228
+ */
229
+ function AttributeOptionsEditor({ attribute, onError, onChanged }) {
230
+ const t = useTranslation('catalog');
231
+ const [options, setOptions] = useState([]);
232
+ const [newValue, setNewValue] = useState('');
233
+ const [newLabel, setNewLabel] = useState('');
234
+ const [busy, setBusy] = useState(false);
235
+ const base = `/api/v1/admin/catalog/attributes/${attribute.id}/options`;
236
+ const load = useCallback(async () => {
237
+ try {
238
+ const res = await apiClient.get(base);
239
+ setOptions(res.data.items);
240
+ }
241
+ catch (err) {
242
+ onError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.load'));
243
+ }
244
+ }, [base, onError, t]);
245
+ useEffect(() => {
246
+ void load();
247
+ }, [load]);
248
+ const add = async () => {
249
+ if (!newValue.trim())
250
+ return;
251
+ setBusy(true);
252
+ try {
253
+ await apiClient.post(base, {
254
+ value: newValue.trim(),
255
+ labelDefault: newLabel.trim() || newValue.trim(),
256
+ });
257
+ setNewValue('');
258
+ setNewLabel('');
259
+ await load();
260
+ onChanged();
261
+ }
262
+ catch (err) {
263
+ onError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.update'));
264
+ }
265
+ finally {
266
+ setBusy(false);
267
+ }
268
+ };
269
+ const rename = async (opt, labelDefault) => {
270
+ try {
271
+ await apiClient.patch(`${base}/${opt.id}`, { labelDefault });
272
+ await load();
273
+ onChanged();
274
+ }
275
+ catch (err) {
276
+ onError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.update'));
277
+ }
278
+ };
279
+ const remove = async (opt) => {
280
+ setBusy(true);
281
+ try {
282
+ await apiClient.delete(`${base}/${opt.id}`);
283
+ await load();
284
+ onChanged();
285
+ }
286
+ catch (err) {
287
+ onError(err instanceof ApiError ? err.envelope.error.message : t('attributes.error.update'));
288
+ }
289
+ finally {
290
+ setBusy(false);
291
+ }
292
+ };
293
+ return (_jsxs("div", { className: "space-y-3 border-t pt-4", children: [_jsx("h3", { className: "text-sm font-semibold", children: t('attributes.options.title') }), options.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('attributes.options.empty') })) : (_jsx("div", { className: "space-y-2", children: options.map((opt) => (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("code", { className: "w-40 shrink-0 font-mono text-xs", children: opt.value }), _jsx(Input, { defaultValue: opt.labelDefault, "aria-label": `option-label-${opt.value}`, onBlur: (e) => {
294
+ const next = e.target.value.trim();
295
+ if (next && next !== opt.labelDefault)
296
+ void rename(opt, next);
297
+ } }), _jsx(Button, { type: "button", variant: "ghost", size: "sm", disabled: busy, onClick: () => void remove(opt), children: t('attributes.options.remove') })] }, opt.id))) })), _jsxs("div", { className: "flex items-end gap-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "opt-value", children: t('attributes.options.value') }), _jsx(Input, { id: "opt-value", value: newValue, onChange: (e) => setNewValue(e.target.value), pattern: "[a-z0-9_-]+", placeholder: t('attributes.options.valuePlaceholder') })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "opt-label", children: t('attributes.options.labelDefault') }), _jsx(Input, { id: "opt-label", value: newLabel, onChange: (e) => setNewLabel(e.target.value) })] }), _jsx(Button, { type: "button", disabled: busy || !newValue.trim(), onClick: () => void add(), children: t('attributes.options.add') })] })] }));
298
+ }
299
+ /**
300
+ * The default export a route declaration's dynamic-import factory resolves
301
+ * (feature 091, R6). The named export stays: it is the spelling this module's
302
+ * own siblings and tests use.
303
+ */
304
+ export default AttributesManager;
305
+ //# sourceMappingURL=AttributesManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttributesManager.js","sourceRoot":"","sources":["../../../src/admin/pages/AttributesManager.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare function BulkOperationDetailPage(): ReactNode;
3
+ /**
4
+ * The default export a route declaration's dynamic-import factory resolves
5
+ * (feature 091, R6). The named export stays: it is the spelling this module's
6
+ * own siblings and tests use.
7
+ */
8
+ export default BulkOperationDetailPage;
9
+ //# sourceMappingURL=BulkOperationDetailPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkOperationDetailPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/BulkOperationDetailPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAqE1F,wBAAgB,uBAAuB,IAAI,SAAS,CA0UnD;AAWD;;;;GAIG;AACH,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,187 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
3
+ import { Link, useParams } from 'react-router-dom';
4
+ import { BULK_OPERATION_TYPES, } from '@endora-commerce/contracts';
5
+ import { ApiError, apiClient, formatDateTime } from '@endora-commerce/admin-kit/lib';
6
+ import { Alert, AlertDescription, Badge, Card, CardContent, CardHeader, CardTitle, PageHeader, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@endora-commerce/admin-kit/ui';
7
+ import { useTranslation } from '@endora-commerce/admin-kit/i18n';
8
+ /**
9
+ * Bulk operation detail view — feature: bulk-operations detail.
10
+ *
11
+ * Reached by clicking a row on the "Bulk actions" list. Shows the full
12
+ * processing summary, the operation's lifecycle log trail, and the per-element
13
+ * outcome of the operation. Polls while the operation is still pending /
14
+ * running so progress, logs, and results update live.
15
+ */
16
+ const ACTIVE_STATUSES = ['pending', 'running'];
17
+ const POLL_INTERVAL_MS = 4000;
18
+ const STATUS_BADGE = {
19
+ pending: 'warning',
20
+ running: 'secondary',
21
+ completed: 'success',
22
+ failed: 'destructive',
23
+ };
24
+ const OUTCOME_BADGE = {
25
+ succeeded: 'success',
26
+ skipped: 'warning',
27
+ failed: 'destructive',
28
+ };
29
+ const LOG_LEVEL_CLASS = {
30
+ info: 'text-foreground',
31
+ warn: 'text-amber-600 dark:text-amber-500',
32
+ error: 'text-destructive',
33
+ };
34
+ const ELEMENT_FILTERS = ['all', 'succeeded', 'skipped', 'failed'];
35
+ const KNOWN_OPERATION_TYPES = new Set([
36
+ BULK_OPERATION_TYPES.PRODUCT_BULK_UPDATE,
37
+ BULK_OPERATION_TYPES.SEARCH_REINDEX,
38
+ ]);
39
+ /** Pick a display name from the multilingual product `name` record. */
40
+ function resolveProductName(name) {
41
+ return name['en-US'] ?? name['en'] ?? Object.values(name)[0] ?? '';
42
+ }
43
+ export function BulkOperationDetailPage() {
44
+ const t = useTranslation('catalog');
45
+ const { id = '' } = useParams();
46
+ const [op, setOp] = useState(null);
47
+ const [loading, setLoading] = useState(true);
48
+ const [notFound, setNotFound] = useState(false);
49
+ const [error, setError] = useState(null);
50
+ const [elementFilter, setElementFilter] = useState('all');
51
+ const [productInfo, setProductInfo] = useState({});
52
+ const [undoing, setUndoing] = useState(false);
53
+ const [undoResult, setUndoResult] = useState(null);
54
+ const refresh = useCallback(async () => {
55
+ setError(null);
56
+ try {
57
+ const res = await apiClient.get(`/api/v1/admin/catalog/bulk-operations/${id}`);
58
+ setOp(res.data);
59
+ setNotFound(false);
60
+ }
61
+ catch (err) {
62
+ if (err instanceof ApiError && err.envelope.error.code === 'NOT_FOUND') {
63
+ setNotFound(true);
64
+ }
65
+ else {
66
+ setError(err instanceof ApiError ? err.envelope.error.message : t('bulkOperations.error.load'));
67
+ }
68
+ }
69
+ finally {
70
+ setLoading(false);
71
+ }
72
+ }, [id, t]);
73
+ useEffect(() => {
74
+ setLoading(true);
75
+ void refresh();
76
+ }, [refresh]);
77
+ // Poll while the operation is still in flight.
78
+ const isActive = op ? ACTIVE_STATUSES.includes(op.status) : false;
79
+ const refreshRef = useRef(refresh);
80
+ refreshRef.current = refresh;
81
+ useEffect(() => {
82
+ if (!isActive)
83
+ return undefined;
84
+ const handle = window.setInterval(() => {
85
+ void refreshRef.current();
86
+ }, POLL_INTERVAL_MS);
87
+ return () => window.clearInterval(handle);
88
+ }, [isActive]);
89
+ // Stable key over the distinct product ids in the result set so the lookup
90
+ // below doesn't refetch on every poll when the id set is unchanged.
91
+ const productIdsKey = useMemo(() => Array.from(new Set((op?.results ?? []).map((r) => r.productId))).join('|'), [op?.results]);
92
+ // Resolve product name + SKU for the Product column (results only carry the
93
+ // product id). Batched in chunks via the admin batch-by-id endpoint.
94
+ useEffect(() => {
95
+ const ids = productIdsKey ? productIdsKey.split('|') : [];
96
+ if (ids.length === 0) {
97
+ setProductInfo({});
98
+ return undefined;
99
+ }
100
+ let cancelled = false;
101
+ void (async () => {
102
+ const map = {};
103
+ const CHUNK = 500;
104
+ for (let i = 0; i < ids.length; i += CHUNK) {
105
+ const chunk = ids.slice(i, i + CHUNK);
106
+ try {
107
+ const res = await apiClient.post('/api/v1/admin/catalog/products/batch-by-id', { ids: chunk, pageSize: CHUNK });
108
+ for (const p of res.data) {
109
+ map[p.id] = { name: resolveProductName(p.name), sku: p.sku };
110
+ }
111
+ }
112
+ catch {
113
+ /* fall back to the raw id for this chunk */
114
+ }
115
+ }
116
+ if (!cancelled)
117
+ setProductInfo(map);
118
+ })();
119
+ return () => {
120
+ cancelled = true;
121
+ };
122
+ }, [productIdsKey]);
123
+ const typeLabel = op
124
+ ? KNOWN_OPERATION_TYPES.has(op.type)
125
+ ? t(`bulkOperations.type.${op.type}`)
126
+ : op.type
127
+ : '';
128
+ const filteredResults = useMemo(() => {
129
+ const results = op?.results ?? [];
130
+ if (elementFilter === 'all')
131
+ return results;
132
+ return results.filter((r) => r.status === elementFilter);
133
+ }, [op?.results, elementFilter]);
134
+ // Feature 054 — undo a reversible bulk edit. Restores every affected product
135
+ // whose current state still matches the operation; conflicts are reported.
136
+ const canUndo = !!op && op.status === 'completed' && op.reversible && op.undoStatus !== 'reverted';
137
+ const handleUndo = useCallback(async () => {
138
+ if (!op)
139
+ return;
140
+ if (!confirm(t('bulkOperations.undo.confirm', { count: op.succeeded })))
141
+ return;
142
+ setUndoing(true);
143
+ setError(null);
144
+ setUndoResult(null);
145
+ try {
146
+ const res = await apiClient.post(`/api/v1/admin/catalog/bulk-operations/${op.id}/undo`, {});
147
+ setUndoResult(res.data);
148
+ await refresh();
149
+ }
150
+ catch (err) {
151
+ setError(err instanceof ApiError ? err.envelope.error.message : t('bulkOperations.undo.error'));
152
+ }
153
+ finally {
154
+ setUndoing(false);
155
+ }
156
+ }, [op, refresh, t]);
157
+ const back = { label: t('bulkOperations.detail.back'), to: '/catalog/bulk-operations' };
158
+ if (loading && !op) {
159
+ return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: t('bulkOperations.detail.title'), back: back }), _jsx("p", { className: "text-sm text-muted-foreground", children: t('bulkOperations.loading') })] }));
160
+ }
161
+ if (notFound || !op) {
162
+ return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: t('bulkOperations.detail.title'), back: back }), _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t('bulkOperations.detail.notFound') }) })] }));
163
+ }
164
+ const pct = op.total > 0 ? Math.round((op.processed / op.total) * 100) : 0;
165
+ return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: _jsxs("span", { className: "flex items-center gap-2.5", children: [typeLabel, _jsx(Badge, { variant: STATUS_BADGE[op.status], children: t(`bulkOperations.status.${op.status}`) })] }), description: t('bulkOperations.detail.title'), back: back }), error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: error }) })) : null, op.error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: op.error }) })) : null, undoResult ? (_jsx(Alert, { variant: undoResult.conflicts.length > 0 ? 'warning' : 'success', className: "mb-4", children: _jsx(AlertDescription, { children: t('bulkOperations.undo.result', {
166
+ reverted: undoResult.reverted,
167
+ conflicts: undoResult.conflicts.length,
168
+ }) }) })) : null, op.undoStatus === 'reverted' && !undoResult ? (_jsx(Alert, { variant: "success", className: "mb-4", children: _jsx(AlertDescription, { children: t('bulkOperations.undo.alreadyReverted') }) })) : null, _jsxs(Card, { className: "mb-4", children: [_jsxs(CardHeader, { className: "flex flex-row flex-wrap items-center justify-between gap-3", children: [_jsx(CardTitle, { children: t('bulkOperations.detail.summary') }), canUndo ? (_jsx("button", { type: "button", className: "b2b-btn b2b-btn--sm b2b-btn--primary", disabled: undoing, onClick: () => void handleUndo(), children: undoing ? t('bulkOperations.undo.running') : t('bulkOperations.undo.action') })) : null] }), _jsx(CardContent, { children: _jsxs("dl", { className: "grid grid-cols-1 gap-x-8 gap-y-3 sm:grid-cols-2 lg:grid-cols-3", children: [_jsx(Field, { label: t('bulkOperations.detail.field.id'), children: _jsx("span", { className: "font-mono text-xs", children: op.id }) }), _jsx(Field, { label: t('bulkOperations.column.type'), children: typeLabel }), _jsxs(Field, { label: t('bulkOperations.column.progress'), children: [_jsxs("span", { className: "font-mono", children: [op.processed, "/", op.total] }), ' ', _jsxs("span", { className: "text-muted-foreground", children: ["(", pct, "%)"] })] }), _jsx(Field, { label: t('bulkOperations.column.succeeded'), children: op.succeeded }), _jsx(Field, { label: t('bulkOperations.column.skipped'), children: op.skipped }), _jsx(Field, { label: t('bulkOperations.column.failed'), children: op.failed }), _jsx(Field, { label: t('bulkOperations.detail.field.requestedBy'), children: _jsx("span", { className: "font-mono text-xs", children: op.requestedByAdminUserId }) }), _jsx(Field, { label: t('bulkOperations.column.created'), children: formatDateTime(op.createdAt) }), _jsx(Field, { label: t('bulkOperations.detail.field.started'), children: op.startedAt ? formatDateTime(op.startedAt) : '—' }), _jsx(Field, { label: t('bulkOperations.detail.field.finished'), children: op.finishedAt ? formatDateTime(op.finishedAt) : '—' }), _jsx(Field, { label: t('bulkOperations.detail.changedFields'), children: op.touchedFields.length > 0 ? op.touchedFields.join(', ') : '—' })] }) })] }), _jsxs(Card, { className: "mb-4", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t('bulkOperations.detail.logs') }) }), _jsx(CardContent, { children: op.logs && op.logs.length > 0 ? (_jsx("ul", { className: "space-y-1 font-mono text-xs", children: op.logs.map((entry, idx) => (_jsxs("li", { className: "flex flex-wrap gap-2", children: [_jsx("span", { className: "text-muted-foreground", children: formatDateTime(entry.ts) }), _jsx("span", { className: `uppercase ${LOG_LEVEL_CLASS[entry.level]}`, children: entry.level }), _jsx("span", { className: LOG_LEVEL_CLASS[entry.level], children: entry.message })] }, idx))) })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: t('bulkOperations.detail.noLogs') })) })] }), _jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row flex-wrap items-center justify-between gap-3", children: [_jsx(CardTitle, { children: t('bulkOperations.detail.elements') }), _jsx("div", { className: "flex flex-wrap gap-1", children: ELEMENT_FILTERS.map((f) => (_jsx("button", { type: "button", className: `b2b-btn b2b-btn--sm ${elementFilter === f ? 'b2b-btn--primary' : 'b2b-btn--ghost'}`, onClick: () => setElementFilter(f), children: f === 'all' ? t('bulkOperations.filter.all') : t(`bulkOperations.outcome.${f}`) }, f))) })] }), _jsx(CardContent, { children: !op.results || op.results.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('bulkOperations.detail.noResults') })) : filteredResults.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('bulkOperations.detail.noElementsForFilter') })) : (_jsx("div", { className: "max-h-[32rem] overflow-auto rounded-md border", children: _jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: t('bulkOperations.detail.product') }), _jsx(TableHead, { children: t('bulkOperations.detail.outcome') }), _jsx(TableHead, { children: t('bulkOperations.detail.reason') }), _jsx(TableHead, { children: t('bulkOperations.detail.changedFields') })] }) }), _jsx(TableBody, { children: filteredResults.slice(0, 1000).map((r) => (_jsxs(TableRow, { children: [_jsx(TableCell, { children: (() => {
169
+ const info = productInfo[r.productId];
170
+ if (!info) {
171
+ return _jsx("span", { className: "font-mono text-xs", children: r.productId });
172
+ }
173
+ return (_jsxs(Link, { to: `/catalog/products/${r.productId}`, className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: info.name || r.productId }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [t('productsList.column.sku'), ": ", info.sku] })] }));
174
+ })() }), _jsx(TableCell, { children: _jsx(Badge, { variant: OUTCOME_BADGE[r.status], children: t(`bulkOperations.outcome.${r.status}`) }) }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: r.reason ?? r.details?.message ?? '—' }), _jsx(TableCell, { className: "text-sm text-muted-foreground", children: r.changedFields && r.changedFields.length > 0
175
+ ? r.changedFields.join(', ')
176
+ : '—' })] }, r.productId))) })] }) })) })] })] }));
177
+ }
178
+ function Field({ label, children }) {
179
+ return (_jsxs("div", { children: [_jsx("dt", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: label }), _jsx("dd", { className: "mt-0.5 text-sm", children: children })] }));
180
+ }
181
+ /**
182
+ * The default export a route declaration's dynamic-import factory resolves
183
+ * (feature 091, R6). The named export stays: it is the spelling this module's
184
+ * own siblings and tests use.
185
+ */
186
+ export default BulkOperationDetailPage;
187
+ //# sourceMappingURL=BulkOperationDetailPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkOperationDetailPage.js","sourceRoot":"","sources":["../../../src/admin/pages/BulkOperationDetailPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare function BulkOperationsPage(): ReactNode;
3
+ /**
4
+ * The default export a route declaration's dynamic-import factory resolves
5
+ * (feature 091, R6). The named export stays: it is the spelling this module's
6
+ * own siblings and tests use.
7
+ */
8
+ export default BulkOperationsPage;
9
+ //# sourceMappingURL=BulkOperationsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkOperationsPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/BulkOperationsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAyDjF,wBAAgB,kBAAkB,IAAI,SAAS,CAmI9C;AAED;;;;GAIG;AACH,eAAe,kBAAkB,CAAC"}