@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.
- package/LICENSE +21 -0
- package/README.md +63 -0
- package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
- package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
- package/dist/admin/components/PackagingUnitsEditor.js +99 -0
- package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
- package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
- package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
- package/dist/admin/components/ProductAttributesTab.js +140 -0
- package/dist/admin/components/ProductAttributesTab.js.map +1 -0
- package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
- package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
- package/dist/admin/components/ProductInventoryTab.js +284 -0
- package/dist/admin/components/ProductInventoryTab.js.map +1 -0
- package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
- package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
- package/dist/admin/components/ProductScopeEditor.js +395 -0
- package/dist/admin/components/ProductScopeEditor.js.map +1 -0
- package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
- package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
- package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
- package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
- package/dist/admin/index.d.ts +45 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +184 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
- package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
- package/dist/admin/lib/resolve-product-selection.js +25 -0
- package/dist/admin/lib/resolve-product-selection.js.map +1 -0
- package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
- package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
- package/dist/admin/pages/AttachmentTypesPage.js +92 -0
- package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
- package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
- package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
- package/dist/admin/pages/AttributeSetsPage.js +158 -0
- package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
- package/dist/admin/pages/AttributesManager.d.ts +9 -0
- package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
- package/dist/admin/pages/AttributesManager.js +305 -0
- package/dist/admin/pages/AttributesManager.js.map +1 -0
- package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
- package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
- package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
- package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
- package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
- package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
- package/dist/admin/pages/BulkOperationsPage.js +98 -0
- package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
- package/dist/admin/pages/CategoriesTree.d.ts +9 -0
- package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
- package/dist/admin/pages/CategoriesTree.js +176 -0
- package/dist/admin/pages/CategoriesTree.js.map +1 -0
- package/dist/admin/pages/ProductEditor.d.ts +13 -0
- package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
- package/dist/admin/pages/ProductEditor.js +1050 -0
- package/dist/admin/pages/ProductEditor.js.map +1 -0
- package/dist/admin/pages/ProductsList.d.ts +9 -0
- package/dist/admin/pages/ProductsList.d.ts.map +1 -0
- package/dist/admin/pages/ProductsList.js +399 -0
- package/dist/admin/pages/ProductsList.js.map +1 -0
- package/dist/backend/commands/attribute-commands.d.ts +111 -0
- package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
- package/dist/backend/commands/attribute-commands.js +482 -0
- package/dist/backend/commands/attribute-commands.js.map +1 -0
- package/dist/backend/demo/reset.d.ts +23 -0
- package/dist/backend/demo/reset.d.ts.map +1 -0
- package/dist/backend/demo/reset.js +41 -0
- package/dist/backend/demo/reset.js.map +1 -0
- package/dist/backend/demo/rows.d.ts +103 -0
- package/dist/backend/demo/rows.d.ts.map +1 -0
- package/dist/backend/demo/rows.js +162 -0
- package/dist/backend/demo/rows.js.map +1 -0
- package/dist/backend/demo/seed.d.ts +35 -0
- package/dist/backend/demo/seed.d.ts.map +1 -0
- package/dist/backend/demo/seed.js +177 -0
- package/dist/backend/demo/seed.js.map +1 -0
- package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
- package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
- package/dist/backend/entities/attachment-type.entity.js +57 -0
- package/dist/backend/entities/attachment-type.entity.js.map +1 -0
- package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
- package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
- package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
- package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
- package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
- package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
- package/dist/backend/entities/attribute-set.entity.js +67 -0
- package/dist/backend/entities/attribute-set.entity.js.map +1 -0
- package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
- package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
- package/dist/backend/entities/bulk-operation.entity.js +138 -0
- package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
- package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
- package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
- package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
- package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
- package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
- package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
- package/dist/backend/entities/bundle-slot.entity.js +74 -0
- package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
- package/dist/backend/entities/category.entity.d.ts +26 -0
- package/dist/backend/entities/category.entity.d.ts.map +1 -0
- package/dist/backend/entities/category.entity.js +119 -0
- package/dist/backend/entities/category.entity.js.map +1 -0
- package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
- package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
- package/dist/backend/entities/gallery-item-label.entity.js +50 -0
- package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
- package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
- package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/gallery-item.entity.js +58 -0
- package/dist/backend/entities/gallery-item.entity.js.map +1 -0
- package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
- package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
- package/dist/backend/entities/grouped-item.entity.js +68 -0
- package/dist/backend/entities/grouped-item.entity.js.map +1 -0
- package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
- package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-attachment.entity.js +77 -0
- package/dist/backend/entities/product-attachment.entity.js.map +1 -0
- package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
- package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-attribute.entity.js +161 -0
- package/dist/backend/entities/product-attribute.entity.js.map +1 -0
- package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
- package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-editor-preference.entity.js +63 -0
- package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
- package/dist/backend/entities/product-link.entity.d.ts +25 -0
- package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-link.entity.js +70 -0
- package/dist/backend/entities/product-link.entity.js.map +1 -0
- package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
- package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
- package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
- package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
- package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-value-override.entity.js +90 -0
- package/dist/backend/entities/product-value-override.entity.js.map +1 -0
- package/dist/backend/entities/product-variant.entity.d.ts +18 -0
- package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
- package/dist/backend/entities/product-variant.entity.js +68 -0
- package/dist/backend/entities/product-variant.entity.js.map +1 -0
- package/dist/backend/entities/product.entity.d.ts +108 -0
- package/dist/backend/entities/product.entity.d.ts.map +1 -0
- package/dist/backend/entities/product.entity.js +230 -0
- package/dist/backend/entities/product.entity.js.map +1 -0
- package/dist/backend/index.d.ts +262 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +642 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/plugin.d.ts +216 -0
- package/dist/backend/plugin.d.ts.map +1 -0
- package/dist/backend/plugin.js +223 -0
- package/dist/backend/plugin.js.map +1 -0
- package/dist/backend/prompt-tools.d.ts +47 -0
- package/dist/backend/prompt-tools.d.ts.map +1 -0
- package/dist/backend/prompt-tools.js +284 -0
- package/dist/backend/prompt-tools.js.map +1 -0
- package/dist/backend/routes.admin.d.ts +105 -0
- package/dist/backend/routes.admin.d.ts.map +1 -0
- package/dist/backend/routes.admin.js +1162 -0
- package/dist/backend/routes.admin.js.map +1 -0
- package/dist/backend/routes.api-key.d.ts +33 -0
- package/dist/backend/routes.api-key.d.ts.map +1 -0
- package/dist/backend/routes.api-key.js +43 -0
- package/dist/backend/routes.api-key.js.map +1 -0
- package/dist/backend/routes.external.d.ts +32 -0
- package/dist/backend/routes.external.d.ts.map +1 -0
- package/dist/backend/routes.external.js +115 -0
- package/dist/backend/routes.external.js.map +1 -0
- package/dist/backend/routes.public.d.ts +46 -0
- package/dist/backend/routes.public.d.ts.map +1 -0
- package/dist/backend/routes.public.js +318 -0
- package/dist/backend/routes.public.js.map +1 -0
- package/dist/backend/services/asset-references.d.ts +4 -0
- package/dist/backend/services/asset-references.d.ts.map +1 -0
- package/dist/backend/services/asset-references.js +104 -0
- package/dist/backend/services/asset-references.js.map +1 -0
- package/dist/backend/services/attachment.service.d.ts +45 -0
- package/dist/backend/services/attachment.service.d.ts.map +1 -0
- package/dist/backend/services/attachment.service.js +268 -0
- package/dist/backend/services/attachment.service.js.map +1 -0
- package/dist/backend/services/attribute-option-validator.d.ts +47 -0
- package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
- package/dist/backend/services/attribute-option-validator.js +69 -0
- package/dist/backend/services/attribute-option-validator.js.map +1 -0
- package/dist/backend/services/attribute-set-validations.d.ts +65 -0
- package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
- package/dist/backend/services/attribute-set-validations.js +89 -0
- package/dist/backend/services/attribute-set-validations.js.map +1 -0
- package/dist/backend/services/attribute-set.service.d.ts +50 -0
- package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
- package/dist/backend/services/attribute-set.service.js +401 -0
- package/dist/backend/services/attribute-set.service.js.map +1 -0
- package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
- package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
- package/dist/backend/services/attribute-type-mapping.js +121 -0
- package/dist/backend/services/attribute-type-mapping.js.map +1 -0
- package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
- package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
- package/dist/backend/services/attribute-value-key.service.js +118 -0
- package/dist/backend/services/attribute-value-key.service.js.map +1 -0
- package/dist/backend/services/audit-references.d.ts +13 -0
- package/dist/backend/services/audit-references.d.ts.map +1 -0
- package/dist/backend/services/audit-references.js +51 -0
- package/dist/backend/services/audit-references.js.map +1 -0
- package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
- package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
- package/dist/backend/services/bulk-operation-queue.js +34 -0
- package/dist/backend/services/bulk-operation-queue.js.map +1 -0
- package/dist/backend/services/bulk-operation.service.d.ts +195 -0
- package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
- package/dist/backend/services/bulk-operation.service.js +510 -0
- package/dist/backend/services/bulk-operation.service.js.map +1 -0
- package/dist/backend/services/bundle.service.d.ts +87 -0
- package/dist/backend/services/bundle.service.d.ts.map +1 -0
- package/dist/backend/services/bundle.service.js +286 -0
- package/dist/backend/services/bundle.service.js.map +1 -0
- package/dist/backend/services/catalog-admin.service.d.ts +398 -0
- package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-admin.service.js +1516 -0
- package/dist/backend/services/catalog-admin.service.js.map +1 -0
- package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
- package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-attribute-read.service.js +216 -0
- package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
- package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
- package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-bulk-import.service.js +136 -0
- package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
- package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
- package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-bulk-update.service.js +330 -0
- package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
- package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
- package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-category-read.service.js +248 -0
- package/dist/backend/services/catalog-category-read.service.js.map +1 -0
- package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
- package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
- package/dist/backend/services/catalog-org-price-decorator.js +184 -0
- package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
- package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
- package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-product-filter.service.js +275 -0
- package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
- package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
- package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-product-read.service.js +197 -0
- package/dist/backend/services/catalog-product-read.service.js.map +1 -0
- package/dist/backend/services/catalog-query.service.d.ts +444 -0
- package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-query.service.js +1633 -0
- package/dist/backend/services/catalog-query.service.js.map +1 -0
- package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
- package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
- package/dist/backend/services/catalog-quick-search.service.js +159 -0
- package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
- package/dist/backend/services/catalog-write-ports.d.ts +25 -0
- package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
- package/dist/backend/services/catalog-write-ports.js +63 -0
- package/dist/backend/services/catalog-write-ports.js.map +1 -0
- package/dist/backend/services/category-admin.service.d.ts +102 -0
- package/dist/backend/services/category-admin.service.d.ts.map +1 -0
- package/dist/backend/services/category-admin.service.js +271 -0
- package/dist/backend/services/category-admin.service.js.map +1 -0
- package/dist/backend/services/gallery.service.d.ts +85 -0
- package/dist/backend/services/gallery.service.d.ts.map +1 -0
- package/dist/backend/services/gallery.service.js +326 -0
- package/dist/backend/services/gallery.service.js.map +1 -0
- package/dist/backend/services/grouped.service.d.ts +39 -0
- package/dist/backend/services/grouped.service.d.ts.map +1 -0
- package/dist/backend/services/grouped.service.js +136 -0
- package/dist/backend/services/grouped.service.js.map +1 -0
- package/dist/backend/services/label-resolver.d.ts +16 -0
- package/dist/backend/services/label-resolver.d.ts.map +1 -0
- package/dist/backend/services/label-resolver.js +43 -0
- package/dist/backend/services/label-resolver.js.map +1 -0
- package/dist/backend/services/packaging-unit.service.d.ts +28 -0
- package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
- package/dist/backend/services/packaging-unit.service.js +197 -0
- package/dist/backend/services/packaging-unit.service.js.map +1 -0
- package/dist/backend/services/primary-asset-url.d.ts +4 -0
- package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
- package/dist/backend/services/primary-asset-url.js +55 -0
- package/dist/backend/services/primary-asset-url.js.map +1 -0
- package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
- package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
- package/dist/backend/services/product-editor-preferences.service.js +44 -0
- package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
- package/dist/backend/services/product-link.service.d.ts +169 -0
- package/dist/backend/services/product-link.service.d.ts.map +1 -0
- package/dist/backend/services/product-link.service.js +297 -0
- package/dist/backend/services/product-link.service.js.map +1 -0
- package/dist/backend/services/product-overrides.service.d.ts +77 -0
- package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
- package/dist/backend/services/product-overrides.service.js +204 -0
- package/dist/backend/services/product-overrides.service.js.map +1 -0
- package/dist/backend/services/product-scope-context.service.d.ts +36 -0
- package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
- package/dist/backend/services/product-scope-context.service.js +106 -0
- package/dist/backend/services/product-scope-context.service.js.map +1 -0
- package/dist/backend/services/product-type-validations.d.ts +42 -0
- package/dist/backend/services/product-type-validations.d.ts.map +1 -0
- package/dist/backend/services/product-type-validations.js +55 -0
- package/dist/backend/services/product-type-validations.js.map +1 -0
- package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
- package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
- package/dist/backend/services/product-value-resolver.service.js +111 -0
- package/dist/backend/services/product-value-resolver.service.js.map +1 -0
- package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
- package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
- package/dist/backend/services/system-attribute-scopes.js +18 -0
- package/dist/backend/services/system-attribute-scopes.js.map +1 -0
- package/dist/backend/services/viewer-organization.d.ts +25 -0
- package/dist/backend/services/viewer-organization.d.ts.map +1 -0
- package/dist/backend/services/viewer-organization.js +31 -0
- package/dist/backend/services/viewer-organization.js.map +1 -0
- package/dist/manifest.d.ts +204 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +686 -0
- package/dist/manifest.js.map +1 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
- package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
- package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
- package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
- package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
- package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
- package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
- package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
- package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
- package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
- package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
- package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
- package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
- package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
- package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
- package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
- package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
- package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
- package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
- package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
- package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
- package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
- package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
- package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
- package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
- package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
- package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
- package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
- package/dist/migrations/index.d.ts +55 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +80 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/ports/index.d.ts +96 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +2 -0
- package/dist/ports/index.js.map +1 -0
- package/docs/catalog/attachments.md +69 -0
- package/docs/catalog/attribute-sets.md +63 -0
- package/docs/catalog/attributes.md +244 -0
- package/docs/catalog/composite-products.md +115 -0
- package/docs/catalog/gallery-and-labels.md +73 -0
- package/docs/catalog/packaging-units.md +67 -0
- package/docs/catalog/per-channel-per-language-overrides.md +234 -0
- package/docs/catalog/product-links.md +79 -0
- package/docs/catalog.md +207 -0
- package/i18n/en.json +649 -0
- package/i18n/pl.json +649 -0
- package/package.json +109 -0
- package/tailwind.css +14 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState, } from 'react';
|
|
3
|
+
import { Link } from 'react-router-dom';
|
|
4
|
+
import { X } from 'lucide-react';
|
|
5
|
+
import { ApiError, apiClient } from '@endora-commerce/admin-kit/lib';
|
|
6
|
+
import { CategoryTreePicker } from '@endora-commerce/admin-kit/components';
|
|
7
|
+
import { useTranslation } from '@endora-commerce/admin-kit/i18n';
|
|
8
|
+
function isQueued(data) {
|
|
9
|
+
return 'queued' in data && data.queued === true;
|
|
10
|
+
}
|
|
11
|
+
const OVERLAY_STYLE = {
|
|
12
|
+
position: 'fixed',
|
|
13
|
+
inset: 0,
|
|
14
|
+
background: 'rgba(0, 0, 0, 0.4)',
|
|
15
|
+
zIndex: 50,
|
|
16
|
+
display: 'flex',
|
|
17
|
+
alignItems: 'center',
|
|
18
|
+
justifyContent: 'center',
|
|
19
|
+
};
|
|
20
|
+
const PANEL_STYLE = {
|
|
21
|
+
background: 'var(--bg-surface, #fff)',
|
|
22
|
+
borderRadius: 8,
|
|
23
|
+
width: 640,
|
|
24
|
+
maxWidth: '90vw',
|
|
25
|
+
maxHeight: '90vh',
|
|
26
|
+
overflow: 'auto',
|
|
27
|
+
boxShadow: '0 20px 50px rgba(0,0,0,0.3)',
|
|
28
|
+
padding: 0,
|
|
29
|
+
};
|
|
30
|
+
export function ProductsBulkEditDialog(props) {
|
|
31
|
+
const t = useTranslation('catalog');
|
|
32
|
+
const { productIds, selectionScope, onClose, onApplied } = props;
|
|
33
|
+
// Touched flags — a field is sent to the backend only when its touched
|
|
34
|
+
// flag is true. Default values are placeholders that are NOT sent.
|
|
35
|
+
const [touchStatus, setTouchStatus] = useState(false);
|
|
36
|
+
const [status, setStatus] = useState('active');
|
|
37
|
+
const [touchVisibility, setTouchVisibility] = useState(false);
|
|
38
|
+
const [visibility, setVisibility] = useState('public');
|
|
39
|
+
const [touchChannels, setTouchChannels] = useState(false);
|
|
40
|
+
const [channelsMode, setChannelsMode] = useState('add');
|
|
41
|
+
const [channelIds, setChannelIds] = useState([]);
|
|
42
|
+
const [touchCategories, setTouchCategories] = useState(false);
|
|
43
|
+
const [categoriesMode, setCategoriesMode] = useState('add');
|
|
44
|
+
const [categoryIds, setCategoryIds] = useState([]);
|
|
45
|
+
const [touchAttributeSet, setTouchAttributeSet] = useState(false);
|
|
46
|
+
// '' represents "no attribute set" (cleared); a uuid assigns that set.
|
|
47
|
+
const [attributeSetId, setAttributeSetId] = useState('');
|
|
48
|
+
const [attributeValues, setAttributeValues] = useState({});
|
|
49
|
+
const [touchedAttrs, setTouchedAttrs] = useState(new Set());
|
|
50
|
+
// Catalog metadata fetched on open.
|
|
51
|
+
const [attrs, setAttrs] = useState([]);
|
|
52
|
+
const [channels, setChannels] = useState([]);
|
|
53
|
+
const [categories, setCategories] = useState([]);
|
|
54
|
+
const [attributeSets, setAttributeSets] = useState([]);
|
|
55
|
+
const [submitting, setSubmitting] = useState(false);
|
|
56
|
+
const [error, setError] = useState(null);
|
|
57
|
+
const [result, setResult] = useState(null);
|
|
58
|
+
const [queued, setQueued] = useState(null);
|
|
59
|
+
// Load mass-editable attributes + channel / category metadata on mount.
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
let cancelled = false;
|
|
62
|
+
(async () => {
|
|
63
|
+
try {
|
|
64
|
+
const [attrRes, chRes, catRes, setRes] = await Promise.all([
|
|
65
|
+
apiClient.get('/api/v1/admin/catalog/attributes/by-flag?flag=isMassEditable'),
|
|
66
|
+
// The sales-channels list endpoint returns `{ items }` (not `{ data }`);
|
|
67
|
+
// accept either shape so an unexpected envelope can never leave the
|
|
68
|
+
// state holding `undefined` (which would crash the render at
|
|
69
|
+
// `channels.map`).
|
|
70
|
+
apiClient
|
|
71
|
+
.get('/api/v1/admin/sales-channels')
|
|
72
|
+
.catch(() => ({ items: [] })),
|
|
73
|
+
apiClient
|
|
74
|
+
.get('/api/v1/admin/catalog/categories')
|
|
75
|
+
.catch(() => ({ data: [] })),
|
|
76
|
+
apiClient
|
|
77
|
+
.get('/api/v1/admin/catalog/attribute-sets')
|
|
78
|
+
.catch(() => ({ data: [] })),
|
|
79
|
+
]);
|
|
80
|
+
if (cancelled)
|
|
81
|
+
return;
|
|
82
|
+
setAttrs(attrRes.data?.items ?? []);
|
|
83
|
+
setChannels(chRes.items ?? chRes.data ?? []);
|
|
84
|
+
setCategories(catRes.data ?? []);
|
|
85
|
+
setAttributeSets(setRes.data ?? []);
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
if (!cancelled) {
|
|
89
|
+
setError(e instanceof ApiError ? e.envelope.error.message : String(e));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
})();
|
|
93
|
+
return () => {
|
|
94
|
+
cancelled = true;
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
97
|
+
const anyTouched = useMemo(() => touchStatus ||
|
|
98
|
+
touchVisibility ||
|
|
99
|
+
touchChannels ||
|
|
100
|
+
touchCategories ||
|
|
101
|
+
touchAttributeSet ||
|
|
102
|
+
touchedAttrs.size > 0, [touchStatus, touchVisibility, touchChannels, touchCategories, touchAttributeSet, touchedAttrs]);
|
|
103
|
+
const submit = useCallback(async () => {
|
|
104
|
+
if (!anyTouched) {
|
|
105
|
+
setError(t('productsList.bulkEdit.empty'));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
setSubmitting(true);
|
|
109
|
+
setError(null);
|
|
110
|
+
try {
|
|
111
|
+
const fields = {};
|
|
112
|
+
if (touchStatus)
|
|
113
|
+
fields.status = status;
|
|
114
|
+
if (touchVisibility)
|
|
115
|
+
fields.visibility = visibility;
|
|
116
|
+
if (touchChannels) {
|
|
117
|
+
fields.salesChannels = { mode: channelsMode, channelIds };
|
|
118
|
+
}
|
|
119
|
+
if (touchCategories) {
|
|
120
|
+
fields.categories = { mode: categoriesMode, categoryIds };
|
|
121
|
+
}
|
|
122
|
+
if (touchAttributeSet) {
|
|
123
|
+
// '' clears the set (null); a uuid assigns it.
|
|
124
|
+
fields.attributeSetId = attributeSetId === '' ? null : attributeSetId;
|
|
125
|
+
}
|
|
126
|
+
if (touchedAttrs.size > 0) {
|
|
127
|
+
const av = {};
|
|
128
|
+
for (const k of touchedAttrs)
|
|
129
|
+
av[k] = attributeValues[k];
|
|
130
|
+
fields.attributeValues = av;
|
|
131
|
+
}
|
|
132
|
+
const res = await apiClient.post('/api/v1/admin/catalog/products/bulk-update', { productIds, fields });
|
|
133
|
+
if (isQueued(res.data)) {
|
|
134
|
+
setQueued(res.data);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
setResult(res.data);
|
|
138
|
+
}
|
|
139
|
+
onApplied?.();
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
if (e instanceof ApiError) {
|
|
143
|
+
const code = e.envelope.error.code;
|
|
144
|
+
if (code === 'ATTRIBUTE_NOT_MASS_EDITABLE') {
|
|
145
|
+
const details = e.envelope.error.details;
|
|
146
|
+
setError(t('productsList.bulkEdit.error.attribute_not_mass_editable', {
|
|
147
|
+
attribute: details?.attribute ?? '?',
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
else if (code === 'BULK_TOO_LARGE') {
|
|
151
|
+
const details = e.envelope.error.details;
|
|
152
|
+
setError(t('productsList.bulkEdit.error.bulk_too_large', {
|
|
153
|
+
total: productIds.length,
|
|
154
|
+
maxBatchSize: details?.maxBatchSize ?? 200,
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
setError(e.envelope.error.message);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
setError(String(e));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
setSubmitting(false);
|
|
167
|
+
}
|
|
168
|
+
}, [
|
|
169
|
+
anyTouched,
|
|
170
|
+
touchStatus,
|
|
171
|
+
status,
|
|
172
|
+
touchVisibility,
|
|
173
|
+
visibility,
|
|
174
|
+
touchChannels,
|
|
175
|
+
channelsMode,
|
|
176
|
+
channelIds,
|
|
177
|
+
touchCategories,
|
|
178
|
+
categoriesMode,
|
|
179
|
+
categoryIds,
|
|
180
|
+
touchAttributeSet,
|
|
181
|
+
attributeSetId,
|
|
182
|
+
touchedAttrs,
|
|
183
|
+
attributeValues,
|
|
184
|
+
productIds,
|
|
185
|
+
onApplied,
|
|
186
|
+
t,
|
|
187
|
+
]);
|
|
188
|
+
return (_jsx("div", { style: OVERLAY_STYLE, role: "dialog", "aria-modal": "true", children: _jsxs("div", { style: PANEL_STYLE, children: [_jsxs("div", { style: {
|
|
189
|
+
display: 'flex',
|
|
190
|
+
alignItems: 'center',
|
|
191
|
+
justifyContent: 'space-between',
|
|
192
|
+
padding: '14px 18px',
|
|
193
|
+
borderBottom: '1px solid var(--border, #e5e7eb)',
|
|
194
|
+
}, children: [_jsxs("div", { children: [_jsx("div", { style: { fontSize: 15, fontWeight: 600 }, children: t('productsList.bulkEdit.title', { count: productIds.length }) }), selectionScope ? (_jsx("div", { className: "b2b-muted", style: { fontSize: 12, marginTop: 2 }, children: selectionScope === 'collection'
|
|
195
|
+
? t('productsList.selection.scopeCollection')
|
|
196
|
+
: t('productsList.selection.scopePage') })) : null] }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--ghost b2b-btn--icon b2b-btn--sm", onClick: onClose, "aria-label": "close", children: _jsx(X, { size: 14 }) })] }), error ? (_jsx("div", { style: {
|
|
197
|
+
margin: '12px 18px 0',
|
|
198
|
+
padding: '10px 12px',
|
|
199
|
+
background: 'var(--danger-soft, #fee2e2)',
|
|
200
|
+
color: 'var(--danger-soft-fg, #991b1b)',
|
|
201
|
+
borderRadius: 6,
|
|
202
|
+
fontSize: 13,
|
|
203
|
+
}, children: error })) : null, queued ? (_jsx(BulkEditQueuedAck, { queued: queued, onClose: onClose, t: t })) : result ? (_jsx(BulkEditSummary, { result: result, onClose: onClose, t: t })) : (_jsxs("div", { style: { padding: 18, display: 'flex', flexDirection: 'column', gap: 18 }, children: [_jsx(FieldGroup, { label: t('productsList.bulkEdit.section.status'), touched: touchStatus, onToggle: setTouchStatus, t: t, children: _jsxs("select", { className: "b2b-field", disabled: !touchStatus, value: status, onChange: (e) => setStatus(e.target.value), children: [_jsx("option", { value: "draft", children: "draft" }), _jsx("option", { value: "active", children: "active" }), _jsx("option", { value: "inactive", children: "inactive" })] }) }), _jsx(FieldGroup, { label: t('productsList.bulkEdit.section.visibility'), touched: touchVisibility, onToggle: setTouchVisibility, t: t, children: _jsxs("select", { className: "b2b-field", disabled: !touchVisibility, value: visibility, onChange: (e) => setVisibility(e.target.value), children: [_jsx("option", { value: "public", children: "public" }), _jsx("option", { value: "logged_in_only", children: "logged_in_only" }), _jsx("option", { value: "organization_restricted", children: "organization_restricted" })] }) }), _jsxs(FieldGroup, { label: t('productsList.bulkEdit.section.salesChannels'), touched: touchChannels, onToggle: setTouchChannels, t: t, children: [_jsx(ModePicker, { mode: channelsMode, onChange: setChannelsMode, disabled: !touchChannels, t: t }), _jsx(MultiSelect, { options: channels.map((c) => ({
|
|
204
|
+
id: c.id,
|
|
205
|
+
label: typeof c.name === 'string'
|
|
206
|
+
? c.name
|
|
207
|
+
: c.name['en-US'] ?? c.name['pl-PL'] ?? c.code,
|
|
208
|
+
})), selected: channelIds, onChange: setChannelIds, disabled: !touchChannels })] }), _jsxs(FieldGroup, { label: t('productsList.bulkEdit.section.categories'), touched: touchCategories, onToggle: setTouchCategories, t: t, children: [_jsx(ModePicker, { mode: categoriesMode, onChange: setCategoriesMode, disabled: !touchCategories, t: t }), _jsx(CategoryTreePicker, { categories: categories, selectedIds: categoryIds, onChange: setCategoryIds, disabled: !touchCategories })] }), _jsx(FieldGroup, { label: t('productsList.bulkEdit.section.attributeSet'), touched: touchAttributeSet, onToggle: setTouchAttributeSet, t: t, children: _jsxs("select", { className: "b2b-field", disabled: !touchAttributeSet, value: attributeSetId, onChange: (e) => setAttributeSetId(e.target.value), children: [_jsx("option", { value: "", children: t('productsList.bulkEdit.attributeSet.none') }), attributeSets.map((s) => (_jsx("option", { value: s.id, children: s.name['en-US'] ?? s.name['pl-PL'] ?? Object.values(s.name)[0] ?? s.code }, s.id)))] }) }), attrs.length > 0 ? (_jsxs("div", { children: [_jsx("div", { style: { fontSize: 13, fontWeight: 600, marginBottom: 8 }, children: t('productsList.bulkEdit.section.attributes') }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: attrs.map((a) => {
|
|
209
|
+
const touched = touchedAttrs.has(a.key);
|
|
210
|
+
return (_jsxs("div", { style: {
|
|
211
|
+
display: 'flex',
|
|
212
|
+
alignItems: 'center',
|
|
213
|
+
gap: 10,
|
|
214
|
+
padding: 10,
|
|
215
|
+
background: 'var(--bg-muted, #f8fafc)',
|
|
216
|
+
borderRadius: 6,
|
|
217
|
+
}, children: [_jsx("input", { type: "checkbox", className: "b2b-cbx", checked: touched, onChange: () => {
|
|
218
|
+
setTouchedAttrs((prev) => {
|
|
219
|
+
const next = new Set(prev);
|
|
220
|
+
if (next.has(a.key)) {
|
|
221
|
+
next.delete(a.key);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
next.add(a.key);
|
|
225
|
+
}
|
|
226
|
+
return next;
|
|
227
|
+
});
|
|
228
|
+
} }), _jsx("div", { style: { minWidth: 140, fontSize: 13 }, children: a.label['en-US'] ?? a.labelDefault }), _jsx("input", { type: "text", className: "b2b-field", disabled: !touched, style: { flex: 1 }, value: attributeValues[a.key] ?? '', onChange: (e) => setAttributeValues((prev) => ({ ...prev, [a.key]: e.target.value })), placeholder: a.valueType })] }, a.id));
|
|
229
|
+
}) })] })) : null] })), !result && !queued ? (_jsxs("div", { style: {
|
|
230
|
+
display: 'flex',
|
|
231
|
+
justifyContent: 'flex-end',
|
|
232
|
+
gap: 8,
|
|
233
|
+
padding: 14,
|
|
234
|
+
borderTop: '1px solid var(--border, #e5e7eb)',
|
|
235
|
+
}, children: [_jsx("button", { type: "button", className: "b2b-btn", onClick: onClose, disabled: submitting, children: t('productsList.bulkEdit.action.cancel') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: () => {
|
|
236
|
+
void submit();
|
|
237
|
+
}, disabled: submitting || !anyTouched, children: t('productsList.bulkEdit.action.apply') })] })) : null] }) }));
|
|
238
|
+
}
|
|
239
|
+
function FieldGroup(props) {
|
|
240
|
+
return (_jsxs("div", { children: [_jsxs("label", { style: {
|
|
241
|
+
display: 'flex',
|
|
242
|
+
alignItems: 'center',
|
|
243
|
+
gap: 8,
|
|
244
|
+
fontSize: 13,
|
|
245
|
+
fontWeight: 600,
|
|
246
|
+
marginBottom: 6,
|
|
247
|
+
cursor: 'pointer',
|
|
248
|
+
}, children: [_jsx("input", { type: "checkbox", className: "b2b-cbx", checked: props.touched, onChange: (e) => props.onToggle(e.target.checked) }), props.label, !props.touched ? (_jsx("span", { style: { fontWeight: 400, color: 'var(--fg-muted, #64748b)', fontSize: 12 }, children: props.t('productsList.bulkEdit.untouched') })) : null] }), _jsx("div", { style: { paddingLeft: 26, display: 'flex', flexDirection: 'column', gap: 6 }, children: props.children })] }));
|
|
249
|
+
}
|
|
250
|
+
function ModePicker(props) {
|
|
251
|
+
return (_jsx("div", { style: { display: 'flex', gap: 6 }, children: ['add', 'replace'].map((m) => (_jsx("button", { type: "button", className: `b2b-btn b2b-btn--sm${props.mode === m ? ' b2b-btn--primary' : ''}`, disabled: props.disabled, onClick: () => props.onChange(m), children: props.t(`productsList.bulkEdit.mode.${m}`) }, m))) }));
|
|
252
|
+
}
|
|
253
|
+
function MultiSelect(props) {
|
|
254
|
+
return (_jsx("div", { style: {
|
|
255
|
+
display: 'flex',
|
|
256
|
+
flexWrap: 'wrap',
|
|
257
|
+
gap: 6,
|
|
258
|
+
opacity: props.disabled ? 0.5 : 1,
|
|
259
|
+
pointerEvents: props.disabled ? 'none' : 'auto',
|
|
260
|
+
}, children: props.options.map((o) => {
|
|
261
|
+
const active = props.selected.includes(o.id);
|
|
262
|
+
return (_jsx("button", { type: "button", className: `b2b-btn b2b-btn--sm${active ? ' b2b-btn--primary' : ''}`, onClick: () => {
|
|
263
|
+
if (active) {
|
|
264
|
+
props.onChange(props.selected.filter((x) => x !== o.id));
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
props.onChange([...props.selected, o.id]);
|
|
268
|
+
}
|
|
269
|
+
}, children: o.label }, o.id));
|
|
270
|
+
}) }));
|
|
271
|
+
}
|
|
272
|
+
function BulkEditQueuedAck(props) {
|
|
273
|
+
return (_jsxs("div", { style: { padding: 18, display: 'flex', flexDirection: 'column', gap: 14 }, children: [_jsxs("div", { style: {
|
|
274
|
+
padding: 14,
|
|
275
|
+
borderRadius: 8,
|
|
276
|
+
background: 'var(--info-bg, #eff6ff)',
|
|
277
|
+
border: '1px solid var(--info-border, #bfdbfe)',
|
|
278
|
+
fontSize: 14,
|
|
279
|
+
lineHeight: 1.5,
|
|
280
|
+
}, children: [_jsx("strong", { children: props.t('productsList.bulkEdit.queued.title') }), _jsx("div", { style: { marginTop: 4 }, children: props.t('productsList.bulkEdit.queued.body', { total: props.queued.total }) })] }), _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', gap: 8 }, children: [_jsx(Link, { to: "/catalog/bulk-operations", className: "b2b-btn", onClick: props.onClose, style: { textDecoration: 'none' }, children: props.t('productsList.bulkEdit.queued.viewAll') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: props.onClose, children: props.t('productsList.bulkEdit.action.close') })] })] }));
|
|
281
|
+
}
|
|
282
|
+
function BulkEditSummary(props) {
|
|
283
|
+
const { summary, results } = props.result;
|
|
284
|
+
return (_jsxs("div", { style: { padding: 18, display: 'flex', flexDirection: 'column', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', gap: 12 }, children: [_jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.succeeded'), count: summary.succeeded, color: "#16a34a" }), _jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.skipped'), count: summary.skipped, color: "#ca8a04" }), _jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.failed'), count: summary.failed, color: "#dc2626" }), _jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.total'), count: summary.total, color: "#475569" })] }), results.some((r) => r.status !== 'succeeded') ? (_jsx("div", { style: {
|
|
285
|
+
maxHeight: 260,
|
|
286
|
+
overflow: 'auto',
|
|
287
|
+
border: '1px solid var(--border, #e5e7eb)',
|
|
288
|
+
borderRadius: 6,
|
|
289
|
+
}, children: _jsxs("table", { className: "b2b-tbl", style: { width: '100%' }, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Product" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Reason" })] }) }), _jsx("tbody", { children: results
|
|
290
|
+
.filter((r) => r.status !== 'succeeded')
|
|
291
|
+
.map((r) => (_jsxs("tr", { children: [_jsx("td", { children: _jsxs("a", { href: `/catalog/products/${r.productId}`, style: { color: 'var(--primary-color, #2563eb)' }, children: [r.productId.slice(0, 8), "\u2026"] }) }), _jsx("td", { children: r.status }), _jsxs("td", { children: [r.reason
|
|
292
|
+
? props.t(`productsList.bulkEdit.reason.${r.reason}`)
|
|
293
|
+
: '', r.details?.attribute ? ` (${r.details.attribute})` : ''] })] }, r.productId))) })] }) })) : null, _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end' }, children: _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: props.onClose, children: props.t('productsList.bulkEdit.action.cancel') }) })] }));
|
|
294
|
+
}
|
|
295
|
+
function SummaryBadge(props) {
|
|
296
|
+
return (_jsxs("div", { style: {
|
|
297
|
+
flex: 1,
|
|
298
|
+
padding: '10px 12px',
|
|
299
|
+
borderRadius: 6,
|
|
300
|
+
background: 'var(--bg-muted, #f8fafc)',
|
|
301
|
+
borderLeft: `4px solid ${props.color}`,
|
|
302
|
+
}, children: [_jsx("div", { style: { fontSize: 11, color: 'var(--fg-muted, #64748b)' }, children: props.label }), _jsx("div", { style: { fontSize: 20, fontWeight: 600, color: props.color }, children: props.count })] }));
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=ProductsBulkEditDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProductsBulkEditDialog.js","sourceRoot":"","sources":["../../../src/admin/components/ProductsBulkEditDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `catalog`'s admin surface — nine routes and six sidebar entries (feature
|
|
3
|
+
* 091, Phase 4 batch 15; the ninth route arrives with D-221).
|
|
4
|
+
*
|
|
5
|
+
* **The largest surface in the drain, and a zone *host* six members over.**
|
|
6
|
+
* `ProductEditor.tsx` mounts `product.editor.details.before`,
|
|
7
|
+
* `product.editor.field.after` (five times, once per editable core field),
|
|
8
|
+
* `product.editor.pricing.before`, `product.editor.pricing.after` and
|
|
9
|
+
* `product.editor.channels`; `ProductAttributesTab.tsx` mounts a sixth
|
|
10
|
+
* `product.editor.field.after`; and `CategoriesTree.tsx` mounts
|
|
11
|
+
* `category.editor.after`. P4b and P7a published those members and the
|
|
12
|
+
* contributors were scheduled against them in batch 13 — this is the host
|
|
13
|
+
* arriving, which `check:admin-registrations` allows in either order because a
|
|
14
|
+
* zone is neither a route nor a nav entry.
|
|
15
|
+
*
|
|
16
|
+
* **What it drains: nothing, and the zero is measured rather than assumed.**
|
|
17
|
+
* Before anything moved on this branch, this module's
|
|
18
|
+
* `backend/scripts/ledgers/cross-module-imports/catalog.ts` shard held three
|
|
19
|
+
* keys and every one of them is a **backend** SQL join —
|
|
20
|
+
* `carts/cart_items`, `orders/order_items` and the kernel's
|
|
21
|
+
* `sales_channel_products` — features 077 and 080's debt, in files this batch
|
|
22
|
+
* does not open. Nothing names this module as an admin target, `admin-surface.ts`
|
|
23
|
+
* is empty and `foreign-module-ids.ts` names it nowhere.
|
|
24
|
+
* `check:module-boundary` reads
|
|
25
|
+
* `cross-module reaches=7 (imports=3 sql=4) ledger-size=7 shards=4` on both
|
|
26
|
+
* sides of the move, and that agreement is the measurement rather than a
|
|
27
|
+
* silence.
|
|
28
|
+
*
|
|
29
|
+
* **The product create form is a route of its own** (D-221, R17). It was not,
|
|
30
|
+
* and the header that stood here argued it should not be: the create form was
|
|
31
|
+
* `/catalog/products/:id` with the id `new`, served on `catalog:read`, while
|
|
32
|
+
* `new-product` advertised the same URL on `catalog:write`. Since feature 091
|
|
33
|
+
* the admin *enforces* the pairing — `ModuleRoute` renders the not-found
|
|
34
|
+
* treatment for a route the operator's codes do not satisfy — so an advertised
|
|
35
|
+
* holder of the write code and not the read code reached a page that says
|
|
36
|
+
* nothing about permissions, which is Principle XVI item 2's prohibition one
|
|
37
|
+
* page worse than the 403 it names. The route below is that URL's own
|
|
38
|
+
* declaration, on the code its own purpose needs.
|
|
39
|
+
*
|
|
40
|
+
* **This entry exports data and nothing else** (R2); every component is a
|
|
41
|
+
* dynamic-import factory (R6).
|
|
42
|
+
*/
|
|
43
|
+
import type { AdminContributions } from '@endora-commerce/admin-kit/contributions';
|
|
44
|
+
export declare const contributions: AdminContributions;
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AA0CnF,eAAO,MAAM,aAAa,EAAE,kBAiJ3B,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The code that opens every screen below except the create form.
|
|
3
|
+
*
|
|
4
|
+
* `packages/modules/catalog/src/backend/routes.admin.ts` gates the product
|
|
5
|
+
* roster, one product, the category tree, the attribute and attribute-set
|
|
6
|
+
* registries, the attachment types and the bulk-operation history with
|
|
7
|
+
* `catalog:read`; every save, bulk edit and delete enforces `catalog:write` on
|
|
8
|
+
* the API and gates its own control on the screen. The read code is what opens
|
|
9
|
+
* the screen, which is issue #232's rule and the code all six hand-written
|
|
10
|
+
* sidebar rows carried.
|
|
11
|
+
*/
|
|
12
|
+
const READ_PERMISSION = 'catalog:read';
|
|
13
|
+
/**
|
|
14
|
+
* The code that opens the create form, and only that.
|
|
15
|
+
*
|
|
16
|
+
* A screen whose one purpose is a write opens on the write code — batch 10's
|
|
17
|
+
* `/credentials/new`, batch 14's `/sales-channels/new`, batch 15's
|
|
18
|
+
* `/orders/new`, and now this. The alternative, `catalog:read`, would advertise
|
|
19
|
+
* to every read-only operator a form whose save refuses, which moves the 403
|
|
20
|
+
* from the router to the end of the work.
|
|
21
|
+
*
|
|
22
|
+
* **The form needs `catalog:read` as well, and that is why the manifest
|
|
23
|
+
* declares `requires`** (D-221; R17's third clause). `ProductEditor`'s loader
|
|
24
|
+
* fetches `/catalog/categories` and `/catalog/attribute-sets` unconditionally,
|
|
25
|
+
* before any `isNew` branch, and the create path *uses* the second to select
|
|
26
|
+
* the new product's default attribute set; both are `requireAdmin('catalog:read')`.
|
|
27
|
+
* So this is a two-code screen and one `requiredPermission` field cannot say
|
|
28
|
+
* both. `blog`'s and `sales_channels`' create branches return from their loader
|
|
29
|
+
* before fetching anything, which is why the write code alone is complete for
|
|
30
|
+
* them and not here. The second code is declared as `requires` on
|
|
31
|
+
* `catalog:write` in this module's manifest, where the role editor renders it
|
|
32
|
+
* as a one-click shortfall — advisory, so the incomplete role is visible where
|
|
33
|
+
* it is created rather than refused at the gate.
|
|
34
|
+
*/
|
|
35
|
+
const WRITE_PERMISSION = 'catalog:write';
|
|
36
|
+
/** The module's landing route: the product roster. */
|
|
37
|
+
const ROUTE_PATH = '/catalog/products';
|
|
38
|
+
export const contributions = {
|
|
39
|
+
routes: [
|
|
40
|
+
{
|
|
41
|
+
path: ROUTE_PATH,
|
|
42
|
+
component: () => import('./pages/ProductsList.js'),
|
|
43
|
+
requiredPermission: READ_PERMISSION,
|
|
44
|
+
index: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
// **The create form, declared** (D-221). It is the same component — the
|
|
48
|
+
// id `new` is what `ProductEditor`'s own `params.id === 'new'` reads —
|
|
49
|
+
// and it is a route of its own so that the URL `new-product` advertises
|
|
50
|
+
// is answered by a declaration carrying the code `new-product` names.
|
|
51
|
+
// `<Routes>` ranks a static segment above a parametric one, so the order
|
|
52
|
+
// here is documentation rather than mechanism; it is written first
|
|
53
|
+
// anyway, because a reader comparing this list to the palette should
|
|
54
|
+
// meet the specific declaration before the general one.
|
|
55
|
+
path: `${ROUTE_PATH}/new`,
|
|
56
|
+
component: () => import('./pages/ProductEditor.js'),
|
|
57
|
+
requiredPermission: WRITE_PERMISSION,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
// The edit form keeps the read code: opening one product is a read, and
|
|
61
|
+
// every control on it that writes gates itself. Nothing about D-221
|
|
62
|
+
// touches this route — the tightening is the create URL's alone, and
|
|
63
|
+
// saying so here is what stops the next reader from applying the write
|
|
64
|
+
// code to both.
|
|
65
|
+
path: `${ROUTE_PATH}/:id`,
|
|
66
|
+
component: () => import('./pages/ProductEditor.js'),
|
|
67
|
+
requiredPermission: READ_PERMISSION,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
path: '/catalog/categories',
|
|
71
|
+
component: () => import('./pages/CategoriesTree.js'),
|
|
72
|
+
requiredPermission: READ_PERMISSION,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
path: '/catalog/attributes',
|
|
76
|
+
component: () => import('./pages/AttributesManager.js'),
|
|
77
|
+
requiredPermission: READ_PERMISSION,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
path: '/catalog/attribute-sets',
|
|
81
|
+
component: () => import('./pages/AttributeSetsPage.js'),
|
|
82
|
+
requiredPermission: READ_PERMISSION,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
path: '/catalog/attachment-types',
|
|
86
|
+
component: () => import('./pages/AttachmentTypesPage.js'),
|
|
87
|
+
requiredPermission: READ_PERMISSION,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
path: '/catalog/bulk-operations',
|
|
91
|
+
component: () => import('./pages/BulkOperationsPage.js'),
|
|
92
|
+
requiredPermission: READ_PERMISSION,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
path: '/catalog/bulk-operations/:id',
|
|
96
|
+
component: () => import('./pages/BulkOperationDetailPage.js'),
|
|
97
|
+
requiredPermission: READ_PERMISSION,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
nav: [
|
|
101
|
+
{
|
|
102
|
+
to: ROUTE_PATH,
|
|
103
|
+
// Module-relative (R8), resolved in this module's own namespace out of
|
|
104
|
+
// `packages/modules/catalog/i18n/`. It was `appShell.nav.products` in the
|
|
105
|
+
// shared `_i18n` bundle, one of the four shared files a module author had
|
|
106
|
+
// to edit.
|
|
107
|
+
labelKey: 'nav.products.label',
|
|
108
|
+
// The glyph `AppShell.tsx` rendered by hand, already on
|
|
109
|
+
// `KnownIconNameSchema`.
|
|
110
|
+
icon: 'Package',
|
|
111
|
+
section: 'catalog',
|
|
112
|
+
// **Ten times the position, not a hundred**, and this is the one batch
|
|
113
|
+
// where the convention had to bend. *Catalog* already holds three
|
|
114
|
+
// contributed rows — `assets_library` at 200, `pim_ergonode` at 250,
|
|
115
|
+
// `pim_pimcore` at 300 — and every one of them sits **below** these five
|
|
116
|
+
// in the sidebar an operator has today. Position times a hundred would
|
|
117
|
+
// tie `/catalog/categories` with `assets_library`' 200, where the tie
|
|
118
|
+
// breaks on module id and puts a picture library above the second
|
|
119
|
+
// catalogue row. A decade that is entirely this module's keeps the order
|
|
120
|
+
// the hand-written table had and the order the operator sees.
|
|
121
|
+
weight: 10,
|
|
122
|
+
requiredPermission: READ_PERMISSION,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
to: '/catalog/categories',
|
|
126
|
+
labelKey: 'nav.categories.label',
|
|
127
|
+
icon: 'Boxes',
|
|
128
|
+
section: 'catalog',
|
|
129
|
+
weight: 20,
|
|
130
|
+
requiredPermission: READ_PERMISSION,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
to: '/catalog/attributes',
|
|
134
|
+
labelKey: 'nav.attributes.label',
|
|
135
|
+
icon: 'Tag',
|
|
136
|
+
section: 'catalog',
|
|
137
|
+
weight: 30,
|
|
138
|
+
requiredPermission: READ_PERMISSION,
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
to: '/catalog/attribute-sets',
|
|
142
|
+
labelKey: 'nav.attributeSets.label',
|
|
143
|
+
icon: 'Tag',
|
|
144
|
+
section: 'catalog',
|
|
145
|
+
weight: 40,
|
|
146
|
+
requiredPermission: READ_PERMISSION,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
to: '/catalog/attachment-types',
|
|
150
|
+
labelKey: 'nav.attachmentTypes.label',
|
|
151
|
+
icon: 'FileText',
|
|
152
|
+
section: 'catalog',
|
|
153
|
+
weight: 50,
|
|
154
|
+
requiredPermission: READ_PERMISSION,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
to: '/catalog/bulk-operations',
|
|
158
|
+
labelKey: 'nav.bulkOperations.label',
|
|
159
|
+
// The glyph `AppShell.tsx` rendered by hand. It joins
|
|
160
|
+
// `KnownIconNameSchema` and the kit's `icon-map.ts` in this merge request
|
|
161
|
+
// rather than the entry silently degrading to a name that happens to be
|
|
162
|
+
// on the allowlist already.
|
|
163
|
+
icon: 'ListChecks',
|
|
164
|
+
// **A second section, and this module is the first to declare one.** The
|
|
165
|
+
// hand-written table's reason travels with the row: bulk operations may
|
|
166
|
+
// span many domains rather than only products, so the entry lives under
|
|
167
|
+
// *System* while the URL stays `/catalog/bulk-operations` to keep
|
|
168
|
+
// existing deep links — the bulk-edit "queued" acknowledgement among them
|
|
169
|
+
// — valid.
|
|
170
|
+
section: 'system',
|
|
171
|
+
// Batch four's convention, unbent here because *System* has room for it:
|
|
172
|
+
// this row was **fourth** of that section's hand-written thirteen, behind
|
|
173
|
+
// `/platform/modules`, `/admin-users` (200) and `/admin-roles` (300) and
|
|
174
|
+
// ahead of `/custom-fields` (500). Today an operator sees it second,
|
|
175
|
+
// because `composeNav` puts every host row above every contributed one
|
|
176
|
+
// and this was the section's only host row besides `/platform/modules`.
|
|
177
|
+
// So the row moves from second to fourth, which is where the table it was
|
|
178
|
+
// written in put it.
|
|
179
|
+
weight: 400,
|
|
180
|
+
requiredPermission: READ_PERMISSION,
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface ListFilterSnapshot {
|
|
2
|
+
status: 'all' | 'active' | 'draft' | 'inactive';
|
|
3
|
+
type: 'all' | 'simple' | 'configurable' | 'grouped' | 'bundle' | 'virtual';
|
|
4
|
+
q: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Feature 033 — resolve all product ids for the frozen list filter snapshot.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveProductSelection(snapshot: ListFilterSnapshot): Promise<{
|
|
10
|
+
productIds: string[];
|
|
11
|
+
total: number;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const BULK_EDIT_MAX_BATCH_SIZE = 200;
|
|
14
|
+
/**
|
|
15
|
+
* Hard client-side ceiling on a single bulk-edit selection, matching the
|
|
16
|
+
* contract's `bulkUpdateProductsRequestSchema` upper bound. Selections
|
|
17
|
+
* between the synchronous threshold and this limit are accepted and
|
|
18
|
+
* processed as a background bulk operation.
|
|
19
|
+
*/
|
|
20
|
+
export declare const BULK_EDIT_HARD_MAX = 10000;
|
|
21
|
+
//# sourceMappingURL=resolve-product-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-product-selection.d.ts","sourceRoot":"","sources":["../../../src/admin/lib/resolve-product-selection.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3E,CAAC,EAAE,MAAM,CAAC;CACX;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAYlD;AAED,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAS,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { apiClient } from '@endora-commerce/admin-kit/lib';
|
|
2
|
+
/**
|
|
3
|
+
* Feature 033 — resolve all product ids for the frozen list filter snapshot.
|
|
4
|
+
*/
|
|
5
|
+
export async function resolveProductSelection(snapshot) {
|
|
6
|
+
const body = { includeArchived: true };
|
|
7
|
+
if (snapshot.status !== 'all')
|
|
8
|
+
body['status'] = snapshot.status;
|
|
9
|
+
if (snapshot.type !== 'all')
|
|
10
|
+
body['type'] = snapshot.type;
|
|
11
|
+
const trimmed = snapshot.q.trim();
|
|
12
|
+
if (trimmed)
|
|
13
|
+
body['q'] = trimmed;
|
|
14
|
+
const res = await apiClient.post('/api/v1/admin/catalog/products/resolve-ids', body);
|
|
15
|
+
return res.data;
|
|
16
|
+
}
|
|
17
|
+
export const BULK_EDIT_MAX_BATCH_SIZE = 200;
|
|
18
|
+
/**
|
|
19
|
+
* Hard client-side ceiling on a single bulk-edit selection, matching the
|
|
20
|
+
* contract's `bulkUpdateProductsRequestSchema` upper bound. Selections
|
|
21
|
+
* between the synchronous threshold and this limit are accepted and
|
|
22
|
+
* processed as a background bulk operation.
|
|
23
|
+
*/
|
|
24
|
+
export const BULK_EDIT_HARD_MAX = 10_000;
|
|
25
|
+
//# sourceMappingURL=resolve-product-selection.js.map
|