@acorex-platform/module-product-catalog-client 0.0.21
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/fesm2022/acorex-platform-module-product-catalog-client-contracts.mjs +110 -0
- package/fesm2022/acorex-platform-module-product-catalog-client-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-product-catalog-client-product-history-bar-chart.queries-CeqVivsl.mjs +40 -0
- package/fesm2022/acorex-platform-module-product-catalog-client-product-history-bar-chart.queries-CeqVivsl.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-product-catalog-client.mjs +447 -0
- package/fesm2022/acorex-platform-module-product-catalog-client.mjs.map +1 -0
- package/package.json +28 -0
- package/types/acorex-platform-module-product-catalog-client-contracts.d.ts +214 -0
- package/types/acorex-platform-module-product-catalog-client.d.ts +90 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
const AXPProductCatalogFeatureKeys = {};
|
|
2
|
+
|
|
3
|
+
const AXPProductCatalogMenuKeys = {
|
|
4
|
+
Root: 'ProductCatalog:Menu',
|
|
5
|
+
Products: 'ProductCatalog:Menu:Products',
|
|
6
|
+
Brands: 'ProductCatalog:Menu:Brands',
|
|
7
|
+
Divider1: 'ProductCatalog:Menu:Divider1',
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Sales & Customers capabilities used by this module.
|
|
12
|
+
* Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).
|
|
13
|
+
*/
|
|
14
|
+
const AXPSalesCustomersPermissionKeys = {
|
|
15
|
+
Access: 'SalesCustomers:Permission:Access',
|
|
16
|
+
MaintainCustomers: 'SalesCustomers:Permission:MaintainCustomers',
|
|
17
|
+
MaintainSales: 'SalesCustomers:Permission:MaintainSales',
|
|
18
|
+
MaintainProducts: 'SalesCustomers:Permission:MaintainProducts',
|
|
19
|
+
MaintainOrders: 'SalesCustomers:Permission:MaintainOrders',
|
|
20
|
+
MaintainSubscriptions: 'SalesCustomers:Permission:MaintainSubscriptions',
|
|
21
|
+
Setup: 'SalesCustomers:Permission:Setup',
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated Prefer {@link AXPSalesCustomersPermissionKeys}.
|
|
25
|
+
* Legacy nested shape kept so existing imports compile during migration.
|
|
26
|
+
*/
|
|
27
|
+
const AXPProductCatalogPermissionKeys = {
|
|
28
|
+
Products: {
|
|
29
|
+
Management: AXPSalesCustomersPermissionKeys.MaintainProducts,
|
|
30
|
+
View: AXPSalesCustomersPermissionKeys.MaintainProducts,
|
|
31
|
+
Create: AXPSalesCustomersPermissionKeys.MaintainProducts,
|
|
32
|
+
Edit: AXPSalesCustomersPermissionKeys.MaintainProducts,
|
|
33
|
+
Delete: AXPSalesCustomersPermissionKeys.MaintainProducts,
|
|
34
|
+
},
|
|
35
|
+
Brands: {
|
|
36
|
+
Management: AXPSalesCustomersPermissionKeys.Setup,
|
|
37
|
+
View: AXPSalesCustomersPermissionKeys.Setup,
|
|
38
|
+
Create: AXPSalesCustomersPermissionKeys.Setup,
|
|
39
|
+
Edit: AXPSalesCustomersPermissionKeys.Setup,
|
|
40
|
+
Delete: AXPSalesCustomersPermissionKeys.Setup,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const config = {
|
|
45
|
+
i18n: 'product-catalog',
|
|
46
|
+
module: 'ProductCatalog',
|
|
47
|
+
};
|
|
48
|
+
/** Builds extended dashboard widget type ids: `{module}:Widget:Dashboard:{Segment}`. */
|
|
49
|
+
const productDashboardWidgetId = (segment) => `${config.module}:Widget:Dashboard:${segment}`;
|
|
50
|
+
/** Builds dashboard query registry keys: `{module}:Query:Dashboard:{Segment}`. */
|
|
51
|
+
const productQueryId = (segment) => `${config.module}:Query:Dashboard:${segment}`;
|
|
52
|
+
const RootConfig = {
|
|
53
|
+
config,
|
|
54
|
+
module: {
|
|
55
|
+
route: 'product-catalog',
|
|
56
|
+
name: config.module,
|
|
57
|
+
title: '@product-catalog:module.title',
|
|
58
|
+
icon: 'fa-light fa-box-open',
|
|
59
|
+
},
|
|
60
|
+
entities: {
|
|
61
|
+
brand: {
|
|
62
|
+
name: 'Brand',
|
|
63
|
+
source: `${config.module}.Brand`,
|
|
64
|
+
title: '@product-catalog:brands.entities.brand.title',
|
|
65
|
+
titlePlural: '@product-catalog:brands.entities.brand.plural',
|
|
66
|
+
icon: 'fa-light fa-copyright',
|
|
67
|
+
},
|
|
68
|
+
productCategory: {
|
|
69
|
+
name: 'ProductCategory',
|
|
70
|
+
source: `${config.module}.ProductCategory`,
|
|
71
|
+
title: '@product-catalog:categories.entities.product-category.title',
|
|
72
|
+
titlePlural: '@product-catalog:categories.entities.product-category.plural',
|
|
73
|
+
icon: 'fa-light fa-folder-tree',
|
|
74
|
+
},
|
|
75
|
+
product: {
|
|
76
|
+
name: 'Product',
|
|
77
|
+
source: `${config.module}.Product`,
|
|
78
|
+
title: '@product-catalog:products.entities.product.title',
|
|
79
|
+
titlePlural: '@product-catalog:products.entities.product.plural',
|
|
80
|
+
icon: 'fa-light fa-box',
|
|
81
|
+
},
|
|
82
|
+
productSku: {
|
|
83
|
+
name: 'ProductSku',
|
|
84
|
+
source: `${config.module}.ProductSku`,
|
|
85
|
+
title: '@product-catalog:skus.entities.product-sku.title',
|
|
86
|
+
titlePlural: '@product-catalog:skus.entities.product-sku.plural',
|
|
87
|
+
icon: 'fa-light fa-barcode',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
queries: {
|
|
91
|
+
productHistoryBarChart: productQueryId('ProductHistoryBarChart'),
|
|
92
|
+
reports: {
|
|
93
|
+
getProductList: `${config.module}:Reports:GetProductList`,
|
|
94
|
+
getProductChartData: `${config.module}:Reports:GetProductChartData`,
|
|
95
|
+
getProductPdfData: `${config.module}:Reports:GetProductPdfData`,
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
widgets: {
|
|
99
|
+
productHistoryBar: productDashboardWidgetId('ProductHistoryBar'),
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
//#region ---- Contracts barrel ----
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Generated bundle index. Do not edit.
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
export { AXPProductCatalogFeatureKeys, AXPProductCatalogMenuKeys, AXPProductCatalogPermissionKeys, AXPSalesCustomersPermissionKeys, RootConfig };
|
|
110
|
+
//# sourceMappingURL=acorex-platform-module-product-catalog-client-contracts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-product-catalog-client-contracts.mjs","sources":["../../../../libs/modules/product-catalog/contracts/src/features.keys.ts","../../../../libs/modules/product-catalog/contracts/src/menu.keys.ts","../../../../libs/modules/product-catalog/contracts/src/permission.keys.ts","../../../../libs/modules/product-catalog/contracts/src/root-config.ts","../../../../libs/modules/product-catalog/contracts/src/index.ts","../../../../libs/modules/product-catalog/contracts/src/acorex-platform-module-product-catalog-client-contracts.ts"],"sourcesContent":["export const AXPProductCatalogFeatureKeys = {} as const;\n\n","export const AXPProductCatalogMenuKeys = {\n Root: 'ProductCatalog:Menu',\n Products: 'ProductCatalog:Menu:Products',\n Brands: 'ProductCatalog:Menu:Brands',\n Divider1: 'ProductCatalog:Menu:Divider1',\n} as const;\n\n","/**\n * Sales & Customers capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPSalesCustomersPermissionKeys = {\n Access: 'SalesCustomers:Permission:Access',\n MaintainCustomers: 'SalesCustomers:Permission:MaintainCustomers',\n MaintainSales: 'SalesCustomers:Permission:MaintainSales',\n MaintainProducts: 'SalesCustomers:Permission:MaintainProducts',\n MaintainOrders: 'SalesCustomers:Permission:MaintainOrders',\n MaintainSubscriptions: 'SalesCustomers:Permission:MaintainSubscriptions',\n Setup: 'SalesCustomers:Permission:Setup',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPSalesCustomersPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXPProductCatalogPermissionKeys = {\n Products: {\n Management: AXPSalesCustomersPermissionKeys.MaintainProducts,\n View: AXPSalesCustomersPermissionKeys.MaintainProducts,\n Create: AXPSalesCustomersPermissionKeys.MaintainProducts,\n Edit: AXPSalesCustomersPermissionKeys.MaintainProducts,\n Delete: AXPSalesCustomersPermissionKeys.MaintainProducts,\n },\n Brands: {\n Management: AXPSalesCustomersPermissionKeys.Setup,\n View: AXPSalesCustomersPermissionKeys.Setup,\n Create: AXPSalesCustomersPermissionKeys.Setup,\n Edit: AXPSalesCustomersPermissionKeys.Setup,\n Delete: AXPSalesCustomersPermissionKeys.Setup,\n },\n} as const;\n","const config = {\n i18n: 'product-catalog',\n module: 'ProductCatalog',\n};\n\n/** Builds extended dashboard widget type ids: `{module}:Widget:Dashboard:{Segment}`. */\nconst productDashboardWidgetId = (segment: string): string =>\n `${config.module}:Widget:Dashboard:${segment}`;\n\n/** Builds dashboard query registry keys: `{module}:Query:Dashboard:{Segment}`. */\nconst productQueryId = (segment: string): string => `${config.module}:Query:Dashboard:${segment}`;\n\nexport const RootConfig = {\n config,\n module: {\n route: 'product-catalog',\n name: config.module,\n title: '@product-catalog:module.title',\n icon: 'fa-light fa-box-open',\n },\n entities: {\n brand: {\n name: 'Brand',\n source: `${config.module}.Brand`,\n title: '@product-catalog:brands.entities.brand.title',\n titlePlural: '@product-catalog:brands.entities.brand.plural',\n icon: 'fa-light fa-copyright',\n },\n productCategory: {\n name: 'ProductCategory',\n source: `${config.module}.ProductCategory`,\n title: '@product-catalog:categories.entities.product-category.title',\n titlePlural: '@product-catalog:categories.entities.product-category.plural',\n icon: 'fa-light fa-folder-tree',\n },\n product: {\n name: 'Product',\n source: `${config.module}.Product`,\n title: '@product-catalog:products.entities.product.title',\n titlePlural: '@product-catalog:products.entities.product.plural',\n icon: 'fa-light fa-box',\n },\n productSku: {\n name: 'ProductSku',\n source: `${config.module}.ProductSku`,\n title: '@product-catalog:skus.entities.product-sku.title',\n titlePlural: '@product-catalog:skus.entities.product-sku.plural',\n icon: 'fa-light fa-barcode',\n },\n },\n queries: {\n productHistoryBarChart: productQueryId('ProductHistoryBarChart'),\n reports: {\n getProductList: `${config.module}:Reports:GetProductList`,\n getProductChartData: `${config.module}:Reports:GetProductChartData`,\n getProductPdfData: `${config.module}:Reports:GetProductPdfData`,\n },\n },\n widgets: {\n productHistoryBar: productDashboardWidgetId('ProductHistoryBar'),\n },\n} as const;\n","//#region ---- Contracts barrel ----\n\nexport * from './features.keys';\nexport * from './menu.keys';\nexport * from './permission.keys';\n\nexport * from './root-config';\n\n//#endregion\n\nexport * from './entities';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { runtimeQuerySuccessObject } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { Injectable } from '@angular/core';
|
|
4
|
+
|
|
5
|
+
//#region ----- Imports -----
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region ----- Product history (line) -----
|
|
8
|
+
/** Mock base-price history series for product entity dashboards. */
|
|
9
|
+
class AXMProductHistoryBarChartQuery {
|
|
10
|
+
async fetch(_input) {
|
|
11
|
+
return runtimeQuerySuccessObject({
|
|
12
|
+
series: [
|
|
13
|
+
{
|
|
14
|
+
id: 'base-price',
|
|
15
|
+
label: 'Base price',
|
|
16
|
+
lineColor: '#0ea5e9',
|
|
17
|
+
fillColor: '#0ea5e920',
|
|
18
|
+
data: [
|
|
19
|
+
{ x: '2025-01', y: 120 },
|
|
20
|
+
{ x: '2025-02', y: 118 },
|
|
21
|
+
{ x: '2025-03', y: 125 },
|
|
22
|
+
{ x: '2025-04', y: 130 },
|
|
23
|
+
{ x: '2025-05', y: 128 },
|
|
24
|
+
{ x: '2025-06', y: 135 },
|
|
25
|
+
{ x: '2025-07', y: 140 },
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductHistoryBarChartQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductHistoryBarChartQuery, providedIn: 'root' }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductHistoryBarChartQuery, decorators: [{
|
|
35
|
+
type: Injectable,
|
|
36
|
+
args: [{ providedIn: 'root' }]
|
|
37
|
+
}] });
|
|
38
|
+
|
|
39
|
+
export { AXMProductHistoryBarChartQuery };
|
|
40
|
+
//# sourceMappingURL=acorex-platform-module-product-catalog-client-product-history-bar-chart.queries-CeqVivsl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-product-catalog-client-product-history-bar-chart.queries-CeqVivsl.mjs","sources":["../../../../libs/modules/product-catalog/client/src/lib/features/dashboard/queries/product-history-bar-chart.queries.ts"],"sourcesContent":["//#region ----- Imports -----\n\nimport { runtimeQuerySuccessObject } from '@acorex-platform/framework-shared/core';\nimport {\n AXPQuery,\n type AXPQueryFetchResultPromise,\n} from '@acorex-platform/framework-shared/runtime';\nimport type { AXPLineChartQueryResult } from '@acorex-platform/module-dashboard-management-contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMProductHistoryBarChartQueryInput {\n productId?: string;\n}\n\n//#endregion\n\n//#region ----- Product history (line) -----\n\n/** Mock base-price history series for product entity dashboards. */\n@Injectable({ providedIn: 'root' })\nexport class AXMProductHistoryBarChartQuery\n implements AXPQuery<AXMProductHistoryBarChartQueryInput | void, AXPLineChartQueryResult>\n{\n async fetch(\n _input?: AXMProductHistoryBarChartQueryInput | void,\n ): AXPQueryFetchResultPromise<AXPLineChartQueryResult> {\n return runtimeQuerySuccessObject({\n series: [\n {\n id: 'base-price',\n label: 'Base price',\n lineColor: '#0ea5e9',\n fillColor: '#0ea5e920',\n data: [\n { x: '2025-01', y: 120 },\n { x: '2025-02', y: 118 },\n { x: '2025-03', y: 125 },\n { x: '2025-04', y: 130 },\n { x: '2025-05', y: 128 },\n { x: '2025-06', y: 135 },\n { x: '2025-07', y: 140 },\n ],\n },\n ],\n });\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;AAAA;AAmBA;AAEA;AAEA;MAEa,8BAA8B,CAAA;IAGzC,MAAM,KAAK,CACT,MAAmD,EAAA;AAEnD,QAAA,OAAO,yBAAyB,CAAC;AAC/B,YAAA,MAAM,EAAE;AACN,gBAAA;AACE,oBAAA,EAAE,EAAE,YAAY;AAChB,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,WAAW;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACxB,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACxB,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACxB,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACxB,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACxB,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACxB,wBAAA,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;AACzB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;8GAzBW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cADjB,MAAM,EAAA,CAAA,CAAA;;2FACnB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;;;"}
|
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, inject, NgModule } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';
|
|
5
|
+
import { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';
|
|
6
|
+
import { RootConfig, AXPSalesCustomersPermissionKeys, AXPProductCatalogMenuKeys } from '@acorex-platform/module-product-catalog-client/contracts';
|
|
7
|
+
import { AXPSearchCommandProvider, createEntityCommandOptions, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';
|
|
8
|
+
import { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';
|
|
9
|
+
import { AXPStatusProvider, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';
|
|
10
|
+
import { AXPCommonPermissionGroupKeys, AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';
|
|
11
|
+
import { AXMBusinessCoreMenuKeys } from '@acorex-platform/module-business-core-client/contracts';
|
|
12
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
13
|
+
import { AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';
|
|
14
|
+
import { AXPLineChartWidget } from '@acorex-platform/module-dashboard-management-client';
|
|
15
|
+
import { provideCommandSetups, provideQuerySetups, AXPCommandService } from '@acorex-platform/framework-client/runtime';
|
|
16
|
+
|
|
17
|
+
//#region ---- Imports ----
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region ---- Manifest Definition ----
|
|
20
|
+
/**
|
|
21
|
+
* Product Catalog Module Manifest.
|
|
22
|
+
* Defines module metadata, features, and provider references.
|
|
23
|
+
*/
|
|
24
|
+
const ProductCatalogManifest = {
|
|
25
|
+
name: RootConfig.module.name,
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
title: RootConfig.module.title,
|
|
28
|
+
icon: RootConfig.module.icon,
|
|
29
|
+
i18n: RootConfig.config.i18n,
|
|
30
|
+
type: 'domain',
|
|
31
|
+
domain: 'finance-commerce',
|
|
32
|
+
// Module dependencies
|
|
33
|
+
dependencies: [
|
|
34
|
+
'MeasurementCore',
|
|
35
|
+
'FinancialCore',
|
|
36
|
+
'BusinessCore',
|
|
37
|
+
'SupplierManagement',
|
|
38
|
+
'ProcurementManagement',
|
|
39
|
+
'DataManagement',
|
|
40
|
+
'DataManagement.MetaDataDefinitions',
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
//#endregion
|
|
44
|
+
|
|
45
|
+
//#region ---- Imports ----
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region ---- Product Status Provider ----
|
|
48
|
+
/**
|
|
49
|
+
* Product status provider defining lifecycle states: Draft, Review, Approved, Suspended, Discontinued.
|
|
50
|
+
* Used by the status plugin to manage product status transitions and metadata.
|
|
51
|
+
*/
|
|
52
|
+
class AXMProductStatusProvider extends AXPStatusProvider {
|
|
53
|
+
constructor() {
|
|
54
|
+
super(...arguments);
|
|
55
|
+
this.key = 'product-catalog.status.product';
|
|
56
|
+
this.defaultStatus = AXPSystemStatusType.Draft;
|
|
57
|
+
this.statuses = [
|
|
58
|
+
systemStatusToDefinition(AXPSystemStatusType.Draft, {
|
|
59
|
+
title: '@product-catalog:products.states.draft',
|
|
60
|
+
generateView: true,
|
|
61
|
+
}),
|
|
62
|
+
systemStatusToDefinition(AXPSystemStatusType.InReview, {
|
|
63
|
+
title: '@product-catalog:products.states.in-review',
|
|
64
|
+
generateView: true,
|
|
65
|
+
}),
|
|
66
|
+
systemStatusToDefinition(AXPSystemStatusType.Approved, {
|
|
67
|
+
title: '@product-catalog:products.states.approved',
|
|
68
|
+
generateView: true,
|
|
69
|
+
}),
|
|
70
|
+
systemStatusToDefinition(AXPSystemStatusType.Suspended, {
|
|
71
|
+
title: '@product-catalog:products.states.suspended',
|
|
72
|
+
generateView: true,
|
|
73
|
+
}),
|
|
74
|
+
systemStatusToDefinition(AXPSystemStatusType.Archived, {
|
|
75
|
+
title: '@product-catalog:products.states.archived',
|
|
76
|
+
generateView: true,
|
|
77
|
+
}),
|
|
78
|
+
];
|
|
79
|
+
this.transitions = [
|
|
80
|
+
{
|
|
81
|
+
from: AXPSystemStatusType.Draft,
|
|
82
|
+
to: AXPSystemStatusType.InReview,
|
|
83
|
+
title: '@general:statuses.transitions.submit',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
from: AXPSystemStatusType.InReview,
|
|
87
|
+
to: AXPSystemStatusType.Approved,
|
|
88
|
+
title: '@general:statuses.transitions.approve',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
from: AXPSystemStatusType.InReview,
|
|
92
|
+
to: AXPSystemStatusType.Draft,
|
|
93
|
+
title: '@general:statuses.transitions.reject',
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
from: AXPSystemStatusType.Approved,
|
|
97
|
+
to: AXPSystemStatusType.Suspended,
|
|
98
|
+
title: '@general:statuses.transitions.suspend',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
from: AXPSystemStatusType.Suspended,
|
|
102
|
+
to: AXPSystemStatusType.Approved,
|
|
103
|
+
title: '@general:statuses.transitions.activate',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
from: AXPSystemStatusType.Approved,
|
|
107
|
+
to: AXPSystemStatusType.Archived,
|
|
108
|
+
title: '@general:statuses.transitions.archive',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
from: AXPSystemStatusType.Suspended,
|
|
112
|
+
to: AXPSystemStatusType.Archived,
|
|
113
|
+
title: '@general:statuses.transitions.archive',
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//#endregion
|
|
119
|
+
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region ---- Permission Definition Provider ----
|
|
122
|
+
/**
|
|
123
|
+
* Registers product catalog capabilities under Sales & Customers → Products.
|
|
124
|
+
*/
|
|
125
|
+
class AXPProductCatalogPermissionDefinitionProvider {
|
|
126
|
+
async define(context) {
|
|
127
|
+
const keys = AXPSalesCustomersPermissionKeys;
|
|
128
|
+
const groups = AXPCommonPermissionGroupKeys;
|
|
129
|
+
const P = '@common:sales-customers.permissions';
|
|
130
|
+
const G = '@common:permission-groups';
|
|
131
|
+
context.addGroup(groups.SalesCustomers.Root, `${G}.sales-and-customers.title`, `${G}.sales-and-customers.description`, { order: 50 });
|
|
132
|
+
context
|
|
133
|
+
.addGroup(groups.SalesCustomers.Products, `${G}.sales-and-customers-products.title`, `${G}.sales-and-customers-products.description`, { parent: groups.SalesCustomers.Root, order: 20 })
|
|
134
|
+
.addPermission(keys.MaintainProducts, `${P}.maintain-products.title`, `${P}.maintain-products.description`)
|
|
135
|
+
.endPermission()
|
|
136
|
+
.endGroup();
|
|
137
|
+
}
|
|
138
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPProductCatalogPermissionDefinitionProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
139
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPProductCatalogPermissionDefinitionProvider }); }
|
|
140
|
+
}
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPProductCatalogPermissionDefinitionProvider, decorators: [{
|
|
142
|
+
type: Injectable
|
|
143
|
+
}] });
|
|
144
|
+
|
|
145
|
+
class AXMProductCatalogMenuProvider {
|
|
146
|
+
constructor() {
|
|
147
|
+
this.entityService = inject(AXPEntityService);
|
|
148
|
+
}
|
|
149
|
+
async provide(context) {
|
|
150
|
+
const module = RootConfig.module;
|
|
151
|
+
const keys = AXPSalesCustomersPermissionKeys;
|
|
152
|
+
context.find(AXPCommonMenuKeys.Commerce).addItems([
|
|
153
|
+
{
|
|
154
|
+
name: AXPProductCatalogMenuKeys.Products,
|
|
155
|
+
text: '@product-catalog:products.menus.products.title',
|
|
156
|
+
path: this.entityService.createPath(module.name, RootConfig.entities.product.name),
|
|
157
|
+
icon: RootConfig.entities.product.icon,
|
|
158
|
+
priority: 1,
|
|
159
|
+
policy: {
|
|
160
|
+
features: [module.name],
|
|
161
|
+
permissions: [keys.MaintainProducts],
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
{ name: AXPProductCatalogMenuKeys.Divider1, text: '', type: 'break', priority: 2 },
|
|
165
|
+
]);
|
|
166
|
+
context.find(AXMBusinessCoreMenuKeys.Root).addItems([
|
|
167
|
+
{ name: `${AXPProductCatalogMenuKeys.Root}:brands-divider`, text: '', type: 'break', priority: 10 },
|
|
168
|
+
{
|
|
169
|
+
name: AXPProductCatalogMenuKeys.Brands,
|
|
170
|
+
text: '@product-catalog:brands.menus.brands.title',
|
|
171
|
+
path: this.entityService.createPath(module.name, RootConfig.entities.brand.name),
|
|
172
|
+
icon: RootConfig.entities.brand.icon,
|
|
173
|
+
priority: 11,
|
|
174
|
+
policy: {
|
|
175
|
+
features: [module.name],
|
|
176
|
+
permissions: [keys.Setup],
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
]);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
//#region ---- Imports ----
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region ---- Feature Definition Provider ----
|
|
186
|
+
/**
|
|
187
|
+
* Product Catalog Feature Definition Provider.
|
|
188
|
+
* Provides feature definitions for the Product Catalog module.
|
|
189
|
+
*/
|
|
190
|
+
class AXPProductCatalogFeatureDefinitionProvider {
|
|
191
|
+
async provide(context) {
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//#endregion
|
|
195
|
+
|
|
196
|
+
class AXMProductCatalogSearchCommandProvider extends AXPSearchCommandProvider {
|
|
197
|
+
constructor() {
|
|
198
|
+
super(...arguments);
|
|
199
|
+
this.commands = [
|
|
200
|
+
{
|
|
201
|
+
id: 'create-product',
|
|
202
|
+
group: 'command',
|
|
203
|
+
title: '@product-catalog:products.search-commands.create-product.title',
|
|
204
|
+
icon: RootConfig.entities.product.icon,
|
|
205
|
+
description: '@product-catalog:products.search-commands.create-product.description',
|
|
206
|
+
command: {
|
|
207
|
+
name: 'Entity:Create',
|
|
208
|
+
options: createEntityCommandOptions(`${RootConfig.module.name}.${RootConfig.entities.product.name}`, {
|
|
209
|
+
name: RootConfig.entities.product.name,
|
|
210
|
+
module: RootConfig.module.name,
|
|
211
|
+
title: RootConfig.entities.product.title,
|
|
212
|
+
}),
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: 'create-brand',
|
|
217
|
+
group: 'command',
|
|
218
|
+
title: '@product-catalog:brands.search-commands.create-brand.title',
|
|
219
|
+
icon: RootConfig.entities.brand.icon,
|
|
220
|
+
description: '@product-catalog:brands.search-commands.create-brand.description',
|
|
221
|
+
command: {
|
|
222
|
+
name: 'Entity:Create',
|
|
223
|
+
options: createEntityCommandOptions(`${RootConfig.module.name}.${RootConfig.entities.brand.name}`, {
|
|
224
|
+
name: RootConfig.entities.brand.name,
|
|
225
|
+
module: RootConfig.module.name,
|
|
226
|
+
title: RootConfig.entities.brand.title,
|
|
227
|
+
}),
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** Widget picker category for product catalog dashboard widgets. */
|
|
235
|
+
const AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY = {
|
|
236
|
+
name: 'product-catalog',
|
|
237
|
+
order: 4,
|
|
238
|
+
title: '@product-catalog:dashboard-widgets.widget-picker-category.product-catalog',
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
/** Default line chart options for the product base price history widget (shared with mock dashboards). */
|
|
242
|
+
const AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS = {
|
|
243
|
+
title: '@product-catalog:dashboard-widgets.product-history-bar.chart-title',
|
|
244
|
+
xAxisLabel: '@product-catalog:dashboard-widgets.product-history-bar.x-axis-label',
|
|
245
|
+
yAxisLabel: '@product-catalog:dashboard-widgets.product-history-bar.y-axis-label',
|
|
246
|
+
query: RootConfig.queries.productHistoryBarChart,
|
|
247
|
+
queryInput: {
|
|
248
|
+
productId: '{{ context.eval("id") }}',
|
|
249
|
+
},
|
|
250
|
+
showXAxis: true,
|
|
251
|
+
showYAxis: true,
|
|
252
|
+
yAxisStartsAtZero: false,
|
|
253
|
+
showGrid: true,
|
|
254
|
+
showVerticalGrid: true,
|
|
255
|
+
smoothLine: true,
|
|
256
|
+
showPoints: true,
|
|
257
|
+
showTooltip: true,
|
|
258
|
+
showCrosshair: true,
|
|
259
|
+
fillArea: true,
|
|
260
|
+
fillOpacity: 20,
|
|
261
|
+
};
|
|
262
|
+
const AXMProductHistoryBarChartAXPExtendedWidget = {
|
|
263
|
+
parentName: AXPLineChartWidget.name,
|
|
264
|
+
widget: {
|
|
265
|
+
...AXPLineChartWidget,
|
|
266
|
+
name: RootConfig.widgets.productHistoryBar,
|
|
267
|
+
title: '@product-catalog:dashboard-widgets.product-history-bar.widget-title',
|
|
268
|
+
description: '@product-catalog:dashboard-widgets.product-history-bar.widget-description',
|
|
269
|
+
groups: [AXPWidgetGroupEnum.DashboardWidget],
|
|
270
|
+
categories: [AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY],
|
|
271
|
+
options: {
|
|
272
|
+
...AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS,
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
const PRODUCT_CATALOG_DASHBOARD_EXTENDED_WIDGETS = [
|
|
278
|
+
AXMProductHistoryBarChartAXPExtendedWidget,
|
|
279
|
+
];
|
|
280
|
+
/** Registers product catalog dashboard extended widgets. */
|
|
281
|
+
class AXMProductCatalogDashboardWidgetsProvider {
|
|
282
|
+
getWidgets() {
|
|
283
|
+
return [];
|
|
284
|
+
}
|
|
285
|
+
getExtendedWidgets() {
|
|
286
|
+
return PRODUCT_CATALOG_DASHBOARD_EXTENDED_WIDGETS;
|
|
287
|
+
}
|
|
288
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogDashboardWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
289
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogDashboardWidgetsProvider }); }
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogDashboardWidgetsProvider, decorators: [{
|
|
292
|
+
type: Injectable
|
|
293
|
+
}] });
|
|
294
|
+
|
|
295
|
+
class AXMProductCatalogModule {
|
|
296
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
297
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogModule, imports: [CommonModule] }); }
|
|
298
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogModule, providers: [
|
|
299
|
+
// Module-specific providers (not part of manifest system)
|
|
300
|
+
{
|
|
301
|
+
provide: AXP_STATUS_PROVIDERS,
|
|
302
|
+
useClass: AXMProductStatusProvider,
|
|
303
|
+
multi: true,
|
|
304
|
+
},
|
|
305
|
+
// Module Manifest Provider
|
|
306
|
+
{
|
|
307
|
+
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
308
|
+
useValue: ProductCatalogManifest,
|
|
309
|
+
multi: true,
|
|
310
|
+
},
|
|
311
|
+
// Provider references (now using tokens)
|
|
312
|
+
{
|
|
313
|
+
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
314
|
+
useClass: AXPProductCatalogPermissionDefinitionProvider,
|
|
315
|
+
multi: true,
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
provide: AXP_MENU_PROVIDER,
|
|
319
|
+
useClass: AXMProductCatalogMenuProvider,
|
|
320
|
+
multi: true,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
provide: AXP_FEATURE_DEFINITION_PROVIDER,
|
|
324
|
+
useClass: AXPProductCatalogFeatureDefinitionProvider,
|
|
325
|
+
multi: true,
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
provide: AXP_SEARCH_PROVIDER,
|
|
329
|
+
useClass: AXMProductCatalogSearchCommandProvider,
|
|
330
|
+
multi: true,
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
provide: AXP_WIDGET_DEFINITION_PROVIDER,
|
|
334
|
+
useClass: AXMProductCatalogDashboardWidgetsProvider,
|
|
335
|
+
multi: true,
|
|
336
|
+
},
|
|
337
|
+
provideCommandSetups([
|
|
338
|
+
{
|
|
339
|
+
key: 'product.create_via_search_command',
|
|
340
|
+
command: () => Promise.resolve().then(function () { return aiTools; }).then((c) => c.ProductCreateViaSearchCommand),
|
|
341
|
+
},
|
|
342
|
+
]),
|
|
343
|
+
provideQuerySetups([
|
|
344
|
+
{
|
|
345
|
+
key: RootConfig.queries.productHistoryBarChart,
|
|
346
|
+
loader: () => import('./acorex-platform-module-product-catalog-client-product-history-bar-chart.queries-CeqVivsl.mjs').then((c) => c.AXMProductHistoryBarChartQuery),
|
|
347
|
+
},
|
|
348
|
+
]),
|
|
349
|
+
], imports: [CommonModule] }); }
|
|
350
|
+
}
|
|
351
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMProductCatalogModule, decorators: [{
|
|
352
|
+
type: NgModule,
|
|
353
|
+
args: [{
|
|
354
|
+
imports: [
|
|
355
|
+
CommonModule,
|
|
356
|
+
],
|
|
357
|
+
providers: [
|
|
358
|
+
// Module-specific providers (not part of manifest system)
|
|
359
|
+
{
|
|
360
|
+
provide: AXP_STATUS_PROVIDERS,
|
|
361
|
+
useClass: AXMProductStatusProvider,
|
|
362
|
+
multi: true,
|
|
363
|
+
},
|
|
364
|
+
// Module Manifest Provider
|
|
365
|
+
{
|
|
366
|
+
provide: AXP_MODULE_MANIFEST_PROVIDER,
|
|
367
|
+
useValue: ProductCatalogManifest,
|
|
368
|
+
multi: true,
|
|
369
|
+
},
|
|
370
|
+
// Provider references (now using tokens)
|
|
371
|
+
{
|
|
372
|
+
provide: AXP_PERMISSION_DEFINITION_PROVIDER,
|
|
373
|
+
useClass: AXPProductCatalogPermissionDefinitionProvider,
|
|
374
|
+
multi: true,
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
provide: AXP_MENU_PROVIDER,
|
|
378
|
+
useClass: AXMProductCatalogMenuProvider,
|
|
379
|
+
multi: true,
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
provide: AXP_FEATURE_DEFINITION_PROVIDER,
|
|
383
|
+
useClass: AXPProductCatalogFeatureDefinitionProvider,
|
|
384
|
+
multi: true,
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
provide: AXP_SEARCH_PROVIDER,
|
|
388
|
+
useClass: AXMProductCatalogSearchCommandProvider,
|
|
389
|
+
multi: true,
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
provide: AXP_WIDGET_DEFINITION_PROVIDER,
|
|
393
|
+
useClass: AXMProductCatalogDashboardWidgetsProvider,
|
|
394
|
+
multi: true,
|
|
395
|
+
},
|
|
396
|
+
provideCommandSetups([
|
|
397
|
+
{
|
|
398
|
+
key: 'product.create_via_search_command',
|
|
399
|
+
command: () => Promise.resolve().then(function () { return aiTools; }).then((c) => c.ProductCreateViaSearchCommand),
|
|
400
|
+
},
|
|
401
|
+
]),
|
|
402
|
+
provideQuerySetups([
|
|
403
|
+
{
|
|
404
|
+
key: RootConfig.queries.productHistoryBarChart,
|
|
405
|
+
loader: () => import('./acorex-platform-module-product-catalog-client-product-history-bar-chart.queries-CeqVivsl.mjs').then((c) => c.AXMProductHistoryBarChartQuery),
|
|
406
|
+
},
|
|
407
|
+
]),
|
|
408
|
+
],
|
|
409
|
+
}]
|
|
410
|
+
}] });
|
|
411
|
+
|
|
412
|
+
class ProductCreateViaSearchCommand {
|
|
413
|
+
constructor() {
|
|
414
|
+
//#region ---- Services & Dependencies ----
|
|
415
|
+
this.commandService = inject(AXPCommandService);
|
|
416
|
+
}
|
|
417
|
+
//#endregion
|
|
418
|
+
//#region ---- Command Implementation ----
|
|
419
|
+
async execute() {
|
|
420
|
+
const options = createEntityCommandOptions(`${RootConfig.module.name}.${RootConfig.entities.product.name}`, {
|
|
421
|
+
name: RootConfig.entities.product.name,
|
|
422
|
+
module: RootConfig.module.name,
|
|
423
|
+
title: RootConfig.entities.product.title,
|
|
424
|
+
});
|
|
425
|
+
await this.commandService.execute('Entity:Create', options);
|
|
426
|
+
return { success: true, kind: 'object',
|
|
427
|
+
data: null,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ProductCreateViaSearchCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
431
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ProductCreateViaSearchCommand }); }
|
|
432
|
+
}
|
|
433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ProductCreateViaSearchCommand, decorators: [{
|
|
434
|
+
type: Injectable
|
|
435
|
+
}] });
|
|
436
|
+
|
|
437
|
+
var aiTools = /*#__PURE__*/Object.freeze({
|
|
438
|
+
__proto__: null,
|
|
439
|
+
ProductCreateViaSearchCommand: ProductCreateViaSearchCommand
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Generated bundle index. Do not edit.
|
|
444
|
+
*/
|
|
445
|
+
|
|
446
|
+
export { AXMProductCatalogDashboardWidgetsProvider, AXMProductCatalogMenuProvider, AXMProductCatalogModule, AXMProductCatalogSearchCommandProvider, AXMProductHistoryBarChartAXPExtendedWidget, AXMProductStatusProvider, AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS, AXPProductCatalogPermissionDefinitionProvider, AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY, ProductCreateViaSearchCommand };
|
|
447
|
+
//# sourceMappingURL=acorex-platform-module-product-catalog-client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-product-catalog-client.mjs","sources":["../../../../libs/modules/product-catalog/client/src/lib/manifest.ts","../../../../libs/modules/product-catalog/client/src/lib/features/product-status.provider.ts","../../../../libs/modules/product-catalog/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/product-catalog/client/src/lib/menu.provider.ts","../../../../libs/modules/product-catalog/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/product-catalog/client/src/lib/search-command.provider.ts","../../../../libs/modules/product-catalog/client/src/lib/features/dashboard/widgets/product-dashboard-widget-category.ts","../../../../libs/modules/product-catalog/client/src/lib/features/dashboard/widgets/product-history-bar-widget.config.ts","../../../../libs/modules/product-catalog/client/src/lib/features/dashboard/widgets/product-dashboard-widgets.provider.ts","../../../../libs/modules/product-catalog/client/src/lib/product-catalog.module.ts","../../../../libs/modules/product-catalog/client/src/lib/ai-tools.ts","../../../../libs/modules/product-catalog/client/src/acorex-platform-module-product-catalog-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-product-catalog-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Product Catalog Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const ProductCatalogManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n type: 'domain',\n domain: 'finance-commerce',\n // Module dependencies\n dependencies: [\n 'MeasurementCore',\n 'FinancialCore',\n 'BusinessCore',\n 'SupplierManagement',\n 'ProcurementManagement',\n 'DataManagement',\n 'DataManagement.MetaDataDefinitions',\n ],\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType, systemStatusToDefinition } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Product Status Provider ----\n\n/**\n * Product status provider defining lifecycle states: Draft, Review, Approved, Suspended, Discontinued.\n * Used by the status plugin to manage product status transitions and metadata.\n */\nexport class AXMProductStatusProvider extends AXPStatusProvider {\n readonly key = 'product-catalog.status.product';\n\n readonly defaultStatus = AXPSystemStatusType.Draft;\n\n readonly statuses = [\n systemStatusToDefinition(AXPSystemStatusType.Draft, {\n title: '@product-catalog:products.states.draft',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.InReview, {\n title: '@product-catalog:products.states.in-review',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Approved, {\n title: '@product-catalog:products.states.approved',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Suspended, {\n title: '@product-catalog:products.states.suspended',\n generateView: true,\n }),\n systemStatusToDefinition(AXPSystemStatusType.Archived, {\n title: '@product-catalog:products.states.archived',\n generateView: true,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.Draft,\n to: AXPSystemStatusType.InReview,\n title: '@general:statuses.transitions.submit',\n },\n {\n from: AXPSystemStatusType.InReview,\n to: AXPSystemStatusType.Approved,\n title: '@general:statuses.transitions.approve',\n },\n {\n from: AXPSystemStatusType.InReview,\n to: AXPSystemStatusType.Draft,\n title: '@general:statuses.transitions.reject',\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXPSystemStatusType.Suspended,\n title: '@general:statuses.transitions.suspend',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Approved,\n title: '@general:statuses.transitions.activate',\n },\n {\n from: AXPSystemStatusType.Approved,\n to: AXPSystemStatusType.Archived,\n title: '@general:statuses.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Archived,\n title: '@general:statuses.transitions.archive',\n },\n ];\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport { AXPCommonPermissionGroupKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPSalesCustomersPermissionKeys } from '@acorex-platform/module-product-catalog-client/contracts';\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers product catalog capabilities under Sales & Customers → Products.\n */\n@Injectable()\nexport class AXPProductCatalogPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPSalesCustomersPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:sales-customers.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(\n groups.SalesCustomers.Root,\n `${G}.sales-and-customers.title`,\n `${G}.sales-and-customers.description`,\n { order: 50 },\n );\n\n context\n .addGroup(\n groups.SalesCustomers.Products,\n `${G}.sales-and-customers-products.title`,\n `${G}.sales-and-customers-products.description`,\n { parent: groups.SalesCustomers.Root, order: 20 },\n )\n .addPermission(keys.MaintainProducts, `${P}.maintain-products.title`, `${P}.maintain-products.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXMBusinessCoreMenuKeys } from '@acorex-platform/module-business-core-client/contracts';\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport {\n RootConfig,\n AXPSalesCustomersPermissionKeys\n} from '@acorex-platform/module-product-catalog-client/contracts';\nimport { AXPProductCatalogMenuKeys } from '@acorex-platform/module-product-catalog-client/contracts';\n\nexport class AXMProductCatalogMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n const keys = AXPSalesCustomersPermissionKeys;\n\n context.find(AXPCommonMenuKeys.Commerce).addItems([\n {\n name: AXPProductCatalogMenuKeys.Products,\n text: '@product-catalog:products.menus.products.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.product.name),\n icon: RootConfig.entities.product.icon,\n priority: 1,\n policy: {\n features: [module.name],\n permissions: [keys.MaintainProducts],\n },\n },\n { name: AXPProductCatalogMenuKeys.Divider1, text: '', type: 'break', priority: 2 },\n ]);\n\n context.find(AXMBusinessCoreMenuKeys.Root).addItems([\n { name: `${AXPProductCatalogMenuKeys.Root}:brands-divider`, text: '', type: 'break', priority: 10 },\n {\n name: AXPProductCatalogMenuKeys.Brands,\n text: '@product-catalog:brands.menus.brands.title',\n path: this.entityService.createPath(module.name, RootConfig.entities.brand.name),\n icon: RootConfig.entities.brand.icon,\n priority: 11,\n policy: {\n features: [module.name],\n permissions: [keys.Setup],\n },\n },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Product Catalog Feature Definition Provider.\n * Provides feature definitions for the Product Catalog module.\n */\nexport class AXPProductCatalogFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n\n }\n}\n\n//#endregion\n\n","import { AXPSearchCommandProvider, AXPSearchResult, createEntityCommandOptions } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-product-catalog-client/contracts';\n\nexport class AXMProductCatalogSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [\n {\n id: 'create-product',\n group: 'command',\n title: '@product-catalog:products.search-commands.create-product.title',\n icon: RootConfig.entities.product.icon,\n description: '@product-catalog:products.search-commands.create-product.description',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.product.name}`,\n {\n name: RootConfig.entities.product.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.product.title,\n }\n ),\n },\n },\n {\n id: 'create-brand',\n group: 'command',\n title: '@product-catalog:brands.search-commands.create-brand.title',\n icon: RootConfig.entities.brand.icon,\n description: '@product-catalog:brands.search-commands.create-brand.description',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.brand.name}`,\n {\n name: RootConfig.entities.brand.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.brand.title,\n }\n ),\n },\n },\n ];\n}\n\n","import { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\n/** Widget picker category for product catalog dashboard widgets. */\nexport const AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY: AXPDefinitionCategory = {\n name: 'product-catalog',\n order: 4,\n title: '@product-catalog:dashboard-widgets.widget-picker-category.product-catalog',\n};\n","import { type AXPExtendedWidget, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPLineChartWidget } from '@acorex-platform/module-dashboard-management-client';\n\nimport { RootConfig as ProductCatalogRootConfig } from '@acorex-platform/module-product-catalog-client/contracts';\nimport { AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY } from './product-dashboard-widget-category';\n\n/** Default line chart options for the product base price history widget (shared with mock dashboards). */\nexport const AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS = {\n title: '@product-catalog:dashboard-widgets.product-history-bar.chart-title',\n xAxisLabel: '@product-catalog:dashboard-widgets.product-history-bar.x-axis-label',\n yAxisLabel: '@product-catalog:dashboard-widgets.product-history-bar.y-axis-label',\n query: ProductCatalogRootConfig.queries.productHistoryBarChart,\n queryInput: {\n productId: '{{ context.eval(\"id\") }}',\n },\n showXAxis: true,\n showYAxis: true,\n yAxisStartsAtZero: false,\n showGrid: true,\n showVerticalGrid: true,\n smoothLine: true,\n showPoints: true,\n showTooltip: true,\n showCrosshair: true,\n fillArea: true,\n fillOpacity: 20,\n} as const;\n\nexport const AXMProductHistoryBarChartAXPExtendedWidget: AXPExtendedWidget = {\n parentName: AXPLineChartWidget.name,\n widget: {\n ...AXPLineChartWidget,\n name: ProductCatalogRootConfig.widgets.productHistoryBar,\n title: '@product-catalog:dashboard-widgets.product-history-bar.widget-title',\n description: '@product-catalog:dashboard-widgets.product-history-bar.widget-description',\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n categories: [AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY],\n options: {\n ...AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS,\n },\n },\n};\n","import type { AXPExtendedWidget } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { Injectable } from '@angular/core';\n\nimport { AXMProductHistoryBarChartAXPExtendedWidget } from './product-history-bar-widget.config';\n\nconst PRODUCT_CATALOG_DASHBOARD_EXTENDED_WIDGETS: AXPExtendedWidget[] = [\n AXMProductHistoryBarChartAXPExtendedWidget,\n];\n\n/** Registers product catalog dashboard extended widgets. */\n@Injectable()\nexport class AXMProductCatalogDashboardWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [];\n }\n\n getExtendedWidgets() {\n return PRODUCT_CATALOG_DASHBOARD_EXTENDED_WIDGETS;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ProductCatalogManifest } from './manifest';\nimport { AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\n\nimport { AXMProductStatusProvider } from './features/product-status.provider';\nimport { AXPProductCatalogPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMProductCatalogMenuProvider } from './menu.provider';\nimport { AXPProductCatalogFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMProductCatalogSearchCommandProvider } from './search-command.provider';\nimport { AXMProductCatalogDashboardWidgetsProvider } from './features/dashboard/widgets/product-dashboard-widgets.provider';\nimport { provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { RootConfig } from '@acorex-platform/module-product-catalog-client/contracts';\n\n@NgModule({\n imports: [\n CommonModule,\n ],\n providers: [\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMProductStatusProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: ProductCatalogManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXPProductCatalogPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMProductCatalogMenuProvider,\n multi: true,\n },\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPProductCatalogFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMProductCatalogSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMProductCatalogDashboardWidgetsProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: 'product.create_via_search_command',\n command: () => import('./ai-tools').then((c) => c.ProductCreateViaSearchCommand),\n },\n ]),\n provideQuerySetups([\n {\n key: RootConfig.queries.productHistoryBarChart,\n loader: () =>\n import('./features/dashboard/queries/product-history-bar-chart.queries').then(\n (c) => c.AXMProductHistoryBarChartQuery,\n ),\n },\n ]),\n ],\n})\nexport class AXMProductCatalogModule { }\n\n","//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { createEntityCommandOptions } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-product-catalog-client/contracts';\n\n//#endregion\n\n//#region ---- Command: product.create_via_search_command ----\n\nexport interface ProductCreateViaSearchInput {\n // Currently no explicit inputs; kept for future extensibility.\n}\n\n@Injectable()\nexport class ProductCreateViaSearchCommand\n implements AXPCommand<ProductCreateViaSearchInput, null>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(): AXPCommandExecuteResultPromise<null> {\n const options = createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.product.name}`,\n {\n name: RootConfig.entities.product.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.product.title,\n }\n );\n\n await this.commandService.execute('Entity:Create', options);\n\n return { success: true, kind: 'object',\n data: null,\n };\n }\n\n //#endregion\n}\n\n//#endregion\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ProductCatalogRootConfig"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@acorex-platform/module-product-catalog-client",
|
|
3
|
+
"version": "0.0.21",
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"peerDependencies": {
|
|
6
|
+
"@angular/common": "^21.0.0",
|
|
7
|
+
"@angular/core": "^21.0.0"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"tslib": "^2.3.0"
|
|
11
|
+
},
|
|
12
|
+
"module": "fesm2022/acorex-platform-module-product-catalog-client.mjs",
|
|
13
|
+
"typings": "types/acorex-platform-module-product-catalog-client.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./types/acorex-platform-module-product-catalog-client.d.ts",
|
|
20
|
+
"default": "./fesm2022/acorex-platform-module-product-catalog-client.mjs"
|
|
21
|
+
},
|
|
22
|
+
"./contracts": {
|
|
23
|
+
"types": "./types/acorex-platform-module-product-catalog-client-contracts.d.ts",
|
|
24
|
+
"default": "./fesm2022/acorex-platform-module-product-catalog-client-contracts.mjs"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"type": "module"
|
|
28
|
+
}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { AXPCategoryListItem, AXPMultiLanguageString, AXPSystemStatuses } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';
|
|
3
|
+
|
|
4
|
+
declare const AXPProductCatalogFeatureKeys: {};
|
|
5
|
+
|
|
6
|
+
declare const AXPProductCatalogMenuKeys: {
|
|
7
|
+
readonly Root: "ProductCatalog:Menu";
|
|
8
|
+
readonly Products: "ProductCatalog:Menu:Products";
|
|
9
|
+
readonly Brands: "ProductCatalog:Menu:Brands";
|
|
10
|
+
readonly Divider1: "ProductCatalog:Menu:Divider1";
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Sales & Customers capabilities used by this module.
|
|
15
|
+
* Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).
|
|
16
|
+
*/
|
|
17
|
+
declare const AXPSalesCustomersPermissionKeys: {
|
|
18
|
+
readonly Access: "SalesCustomers:Permission:Access";
|
|
19
|
+
readonly MaintainCustomers: "SalesCustomers:Permission:MaintainCustomers";
|
|
20
|
+
readonly MaintainSales: "SalesCustomers:Permission:MaintainSales";
|
|
21
|
+
readonly MaintainProducts: "SalesCustomers:Permission:MaintainProducts";
|
|
22
|
+
readonly MaintainOrders: "SalesCustomers:Permission:MaintainOrders";
|
|
23
|
+
readonly MaintainSubscriptions: "SalesCustomers:Permission:MaintainSubscriptions";
|
|
24
|
+
readonly Setup: "SalesCustomers:Permission:Setup";
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Prefer {@link AXPSalesCustomersPermissionKeys}.
|
|
28
|
+
* Legacy nested shape kept so existing imports compile during migration.
|
|
29
|
+
*/
|
|
30
|
+
declare const AXPProductCatalogPermissionKeys: {
|
|
31
|
+
readonly Products: {
|
|
32
|
+
readonly Management: "SalesCustomers:Permission:MaintainProducts";
|
|
33
|
+
readonly View: "SalesCustomers:Permission:MaintainProducts";
|
|
34
|
+
readonly Create: "SalesCustomers:Permission:MaintainProducts";
|
|
35
|
+
readonly Edit: "SalesCustomers:Permission:MaintainProducts";
|
|
36
|
+
readonly Delete: "SalesCustomers:Permission:MaintainProducts";
|
|
37
|
+
};
|
|
38
|
+
readonly Brands: {
|
|
39
|
+
readonly Management: "SalesCustomers:Permission:Setup";
|
|
40
|
+
readonly View: "SalesCustomers:Permission:Setup";
|
|
41
|
+
readonly Create: "SalesCustomers:Permission:Setup";
|
|
42
|
+
readonly Edit: "SalesCustomers:Permission:Setup";
|
|
43
|
+
readonly Delete: "SalesCustomers:Permission:Setup";
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
declare const RootConfig: {
|
|
48
|
+
readonly config: {
|
|
49
|
+
i18n: string;
|
|
50
|
+
module: string;
|
|
51
|
+
};
|
|
52
|
+
readonly module: {
|
|
53
|
+
readonly route: "product-catalog";
|
|
54
|
+
readonly name: string;
|
|
55
|
+
readonly title: "@product-catalog:module.title";
|
|
56
|
+
readonly icon: "fa-light fa-box-open";
|
|
57
|
+
};
|
|
58
|
+
readonly entities: {
|
|
59
|
+
readonly brand: {
|
|
60
|
+
readonly name: "Brand";
|
|
61
|
+
readonly source: `${string}.Brand`;
|
|
62
|
+
readonly title: "@product-catalog:brands.entities.brand.title";
|
|
63
|
+
readonly titlePlural: "@product-catalog:brands.entities.brand.plural";
|
|
64
|
+
readonly icon: "fa-light fa-copyright";
|
|
65
|
+
};
|
|
66
|
+
readonly productCategory: {
|
|
67
|
+
readonly name: "ProductCategory";
|
|
68
|
+
readonly source: `${string}.ProductCategory`;
|
|
69
|
+
readonly title: "@product-catalog:categories.entities.product-category.title";
|
|
70
|
+
readonly titlePlural: "@product-catalog:categories.entities.product-category.plural";
|
|
71
|
+
readonly icon: "fa-light fa-folder-tree";
|
|
72
|
+
};
|
|
73
|
+
readonly product: {
|
|
74
|
+
readonly name: "Product";
|
|
75
|
+
readonly source: `${string}.Product`;
|
|
76
|
+
readonly title: "@product-catalog:products.entities.product.title";
|
|
77
|
+
readonly titlePlural: "@product-catalog:products.entities.product.plural";
|
|
78
|
+
readonly icon: "fa-light fa-box";
|
|
79
|
+
};
|
|
80
|
+
readonly productSku: {
|
|
81
|
+
readonly name: "ProductSku";
|
|
82
|
+
readonly source: `${string}.ProductSku`;
|
|
83
|
+
readonly title: "@product-catalog:skus.entities.product-sku.title";
|
|
84
|
+
readonly titlePlural: "@product-catalog:skus.entities.product-sku.plural";
|
|
85
|
+
readonly icon: "fa-light fa-barcode";
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
readonly queries: {
|
|
89
|
+
readonly productHistoryBarChart: string;
|
|
90
|
+
readonly reports: {
|
|
91
|
+
readonly getProductList: `${string}:Reports:GetProductList`;
|
|
92
|
+
readonly getProductChartData: `${string}:Reports:GetProductChartData`;
|
|
93
|
+
readonly getProductPdfData: `${string}:Reports:GetProductPdfData`;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
readonly widgets: {
|
|
97
|
+
readonly productHistoryBar: string;
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
interface AXMProductCatalogBrandEntityModel extends AXPEntityModel<string> {
|
|
102
|
+
code?: string;
|
|
103
|
+
title: string;
|
|
104
|
+
description?: string;
|
|
105
|
+
logo?: string;
|
|
106
|
+
manufacturerId?: string;
|
|
107
|
+
manufacturer?: {
|
|
108
|
+
id: string;
|
|
109
|
+
title: string;
|
|
110
|
+
};
|
|
111
|
+
countryOfOrigin?: string;
|
|
112
|
+
website?: string;
|
|
113
|
+
isDisabled?: boolean;
|
|
114
|
+
categoryIds?: string[];
|
|
115
|
+
categories?: AXPCategoryListItem[];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
type AXMProductCatalogProductStatus = typeof AXPSystemStatuses.Draft.name | typeof AXPSystemStatuses.InReview.name | typeof AXPSystemStatuses.Approved.name | typeof AXPSystemStatuses.Suspended.name | typeof AXPSystemStatuses.Archived.name;
|
|
119
|
+
interface AXMProductCatalogProductEntityModel extends AXPEntityModel<string> {
|
|
120
|
+
code?: string;
|
|
121
|
+
title: string;
|
|
122
|
+
shortName?: string;
|
|
123
|
+
description?: string;
|
|
124
|
+
brandId?: string;
|
|
125
|
+
brand?: {
|
|
126
|
+
id: string;
|
|
127
|
+
title: string;
|
|
128
|
+
};
|
|
129
|
+
categoryIds?: string[];
|
|
130
|
+
categories?: AXPCategoryListItem[];
|
|
131
|
+
taxClassId?: string;
|
|
132
|
+
taxClass?: {
|
|
133
|
+
id: string;
|
|
134
|
+
title: string;
|
|
135
|
+
};
|
|
136
|
+
baseCurrencyId?: string;
|
|
137
|
+
baseCurrency?: {
|
|
138
|
+
id: string;
|
|
139
|
+
code: string;
|
|
140
|
+
symbol: string;
|
|
141
|
+
};
|
|
142
|
+
basePrice?: number;
|
|
143
|
+
baseUnitOfMeasureId?: string;
|
|
144
|
+
baseUnitOfMeasure?: {
|
|
145
|
+
id: string;
|
|
146
|
+
code: string;
|
|
147
|
+
title: string;
|
|
148
|
+
};
|
|
149
|
+
weight?: number;
|
|
150
|
+
weightUnitId?: string;
|
|
151
|
+
weightUnit?: {
|
|
152
|
+
id: string;
|
|
153
|
+
code: string;
|
|
154
|
+
};
|
|
155
|
+
length?: number;
|
|
156
|
+
width?: number;
|
|
157
|
+
height?: number;
|
|
158
|
+
dimensionUnitId?: string;
|
|
159
|
+
dimensionUnit?: {
|
|
160
|
+
id: string;
|
|
161
|
+
code: string;
|
|
162
|
+
};
|
|
163
|
+
manufacturerId?: string;
|
|
164
|
+
manufacturer?: {
|
|
165
|
+
id: string;
|
|
166
|
+
title: AXPMultiLanguageString;
|
|
167
|
+
};
|
|
168
|
+
images?: string[];
|
|
169
|
+
documents?: string[];
|
|
170
|
+
statusId?: string;
|
|
171
|
+
notes?: string;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
interface AXMProductCatalogProductSkuEntityModel extends AXPEntityModel<string> {
|
|
175
|
+
sku?: string;
|
|
176
|
+
productId: string;
|
|
177
|
+
product?: {
|
|
178
|
+
id: string;
|
|
179
|
+
title: string;
|
|
180
|
+
code: string;
|
|
181
|
+
};
|
|
182
|
+
variantName?: string;
|
|
183
|
+
description?: string;
|
|
184
|
+
barcode?: string;
|
|
185
|
+
qrCode?: string;
|
|
186
|
+
ean?: string;
|
|
187
|
+
upc?: string;
|
|
188
|
+
price?: number;
|
|
189
|
+
compareAtPrice?: number;
|
|
190
|
+
costPrice?: number;
|
|
191
|
+
weight?: number;
|
|
192
|
+
weightUnitId?: string;
|
|
193
|
+
weightUnit?: {
|
|
194
|
+
id: string;
|
|
195
|
+
code: string;
|
|
196
|
+
};
|
|
197
|
+
length?: number;
|
|
198
|
+
width?: number;
|
|
199
|
+
height?: number;
|
|
200
|
+
dimensionUnitId?: string;
|
|
201
|
+
dimensionUnit?: {
|
|
202
|
+
id: string;
|
|
203
|
+
code: string;
|
|
204
|
+
};
|
|
205
|
+
categoryIds?: string[];
|
|
206
|
+
categories?: AXPCategoryListItem[];
|
|
207
|
+
isDisabled?: boolean;
|
|
208
|
+
isDefault?: boolean;
|
|
209
|
+
images?: string[];
|
|
210
|
+
notes?: string;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export { AXPProductCatalogFeatureKeys, AXPProductCatalogMenuKeys, AXPProductCatalogPermissionKeys, AXPSalesCustomersPermissionKeys, RootConfig };
|
|
214
|
+
export type { AXMProductCatalogBrandEntityModel, AXMProductCatalogProductEntityModel, AXMProductCatalogProductSkuEntityModel, AXMProductCatalogProductStatus };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import * as i1 from '@angular/common';
|
|
3
|
+
import { AXPMenuProvider, AXPMenuProviderContext, AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';
|
|
4
|
+
import { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex-platform/framework-client/auth';
|
|
5
|
+
import * as _acorex_platform_framework_shared_core from '@acorex-platform/framework-shared/core';
|
|
6
|
+
import { AXPStatusProvider, AXPSystemStatusType, AXPStatusTransition, AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';
|
|
7
|
+
import { AXPExtendedWidget } from '@acorex-platform/framework-shared/widget-core';
|
|
8
|
+
import { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';
|
|
9
|
+
import { AXPCommand, AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';
|
|
10
|
+
|
|
11
|
+
declare class AXMProductCatalogModule {
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXMProductCatalogModule, never>;
|
|
13
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<AXMProductCatalogModule, never, [typeof i1.CommonModule], never>;
|
|
14
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<AXMProductCatalogModule>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare class AXMProductCatalogMenuProvider implements AXPMenuProvider {
|
|
18
|
+
private entityService;
|
|
19
|
+
provide(context: AXPMenuProviderContext): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare class AXMProductCatalogSearchCommandProvider extends AXPSearchCommandProvider {
|
|
23
|
+
commands: AXPSearchResult[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Registers product catalog capabilities under Sales & Customers → Products.
|
|
28
|
+
*/
|
|
29
|
+
declare class AXPProductCatalogPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {
|
|
30
|
+
define(context: AXPPermissionDefinitionProviderContext): Promise<void>;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXPProductCatalogPermissionDefinitionProvider, never>;
|
|
32
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXPProductCatalogPermissionDefinitionProvider>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Product status provider defining lifecycle states: Draft, Review, Approved, Suspended, Discontinued.
|
|
37
|
+
* Used by the status plugin to manage product status transitions and metadata.
|
|
38
|
+
*/
|
|
39
|
+
declare class AXMProductStatusProvider extends AXPStatusProvider {
|
|
40
|
+
readonly key = "product-catalog.status.product";
|
|
41
|
+
readonly defaultStatus = AXPSystemStatusType.Draft;
|
|
42
|
+
readonly statuses: _acorex_platform_framework_shared_core.AXPStatusDefinition[];
|
|
43
|
+
readonly transitions: AXPStatusTransition[];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Default line chart options for the product base price history widget (shared with mock dashboards). */
|
|
47
|
+
declare const AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS: {
|
|
48
|
+
readonly title: "@product-catalog:dashboard-widgets.product-history-bar.chart-title";
|
|
49
|
+
readonly xAxisLabel: "@product-catalog:dashboard-widgets.product-history-bar.x-axis-label";
|
|
50
|
+
readonly yAxisLabel: "@product-catalog:dashboard-widgets.product-history-bar.y-axis-label";
|
|
51
|
+
readonly query: string;
|
|
52
|
+
readonly queryInput: {
|
|
53
|
+
readonly productId: "{{ context.eval(\"id\") }}";
|
|
54
|
+
};
|
|
55
|
+
readonly showXAxis: true;
|
|
56
|
+
readonly showYAxis: true;
|
|
57
|
+
readonly yAxisStartsAtZero: false;
|
|
58
|
+
readonly showGrid: true;
|
|
59
|
+
readonly showVerticalGrid: true;
|
|
60
|
+
readonly smoothLine: true;
|
|
61
|
+
readonly showPoints: true;
|
|
62
|
+
readonly showTooltip: true;
|
|
63
|
+
readonly showCrosshair: true;
|
|
64
|
+
readonly fillArea: true;
|
|
65
|
+
readonly fillOpacity: 20;
|
|
66
|
+
};
|
|
67
|
+
declare const AXMProductHistoryBarChartAXPExtendedWidget: AXPExtendedWidget;
|
|
68
|
+
|
|
69
|
+
/** Widget picker category for product catalog dashboard widgets. */
|
|
70
|
+
declare const AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY: AXPDefinitionCategory;
|
|
71
|
+
|
|
72
|
+
/** Registers product catalog dashboard extended widgets. */
|
|
73
|
+
declare class AXMProductCatalogDashboardWidgetsProvider implements AXPWidgetDefinitionProvider {
|
|
74
|
+
getWidgets(): never[];
|
|
75
|
+
getExtendedWidgets(): AXPExtendedWidget[];
|
|
76
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXMProductCatalogDashboardWidgetsProvider, never>;
|
|
77
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXMProductCatalogDashboardWidgetsProvider>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
interface ProductCreateViaSearchInput {
|
|
81
|
+
}
|
|
82
|
+
declare class ProductCreateViaSearchCommand implements AXPCommand<ProductCreateViaSearchInput, null> {
|
|
83
|
+
private readonly commandService;
|
|
84
|
+
execute(): AXPCommandExecuteResultPromise<null>;
|
|
85
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ProductCreateViaSearchCommand, never>;
|
|
86
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ProductCreateViaSearchCommand>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export { AXMProductCatalogDashboardWidgetsProvider, AXMProductCatalogMenuProvider, AXMProductCatalogModule, AXMProductCatalogSearchCommandProvider, AXMProductHistoryBarChartAXPExtendedWidget, AXMProductStatusProvider, AXM_PRODUCT_HISTORY_BAR_CHART_WIDGET_OPTIONS, AXPProductCatalogPermissionDefinitionProvider, AXP_PRODUCT_CATALOG_DASHBOARD_WIDGET_CATEGORY, ProductCreateViaSearchCommand };
|
|
90
|
+
export type { ProductCreateViaSearchInput };
|