@open-mercato/core 0.6.7-develop.6758.1.697eade236 → 0.6.7-develop.6768.1.9d2c4efc43
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/.turbo/turbo-build.log +1 -1
- package/dist/modules/api_keys/backend/api-keys/page.js +2 -1
- package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
- package/dist/modules/api_keys/extension-points.js +16 -0
- package/dist/modules/api_keys/extension-points.js.map +7 -0
- package/dist/modules/audit_logs/components/AccessLogsTable.js +2 -1
- package/dist/modules/audit_logs/components/AccessLogsTable.js.map +2 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js +2 -1
- package/dist/modules/audit_logs/components/AuditLogsActions.js.map +2 -2
- package/dist/modules/audit_logs/extension-points.js +14 -0
- package/dist/modules/audit_logs/extension-points.js.map +7 -0
- package/dist/modules/auth/backend/roles/page.js +2 -1
- package/dist/modules/auth/backend/roles/page.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +2 -1
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/extension-points.js +21 -0
- package/dist/modules/auth/extension-points.js.map +7 -0
- package/dist/modules/auth/frontend/login.js +5 -1
- package/dist/modules/auth/frontend/login.js.map +2 -2
- package/dist/modules/business_rules/backend/rules/page.js +2 -1
- package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
- package/dist/modules/business_rules/events.js +13 -0
- package/dist/modules/business_rules/events.js.map +7 -0
- package/dist/modules/business_rules/extension-points.js +13 -0
- package/dist/modules/business_rules/extension-points.js.map +7 -0
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js +2 -1
- package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
- package/dist/modules/catalog/backend/catalog/products/create/page.js +2 -1
- package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -1
- package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js +3 -2
- package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
- package/dist/modules/catalog/events.js +1 -0
- package/dist/modules/catalog/events.js.map +2 -2
- package/dist/modules/catalog/extension-points.js +27 -0
- package/dist/modules/catalog/extension-points.js.map +7 -0
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +2 -1
- package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.js +3 -2
- package/dist/modules/communication_channels/backend/profile/communication-channels/page.js.map +2 -2
- package/dist/modules/communication_channels/extension-points.js +20 -0
- package/dist/modules/communication_channels/extension-points.js.map +7 -0
- package/dist/modules/configs/backend/config/system-status/page.js +2 -1
- package/dist/modules/configs/backend/config/system-status/page.js.map +2 -2
- package/dist/modules/configs/extension-points.js +18 -0
- package/dist/modules/configs/extension-points.js.map +7 -0
- package/dist/modules/currencies/backend/currencies/page.js +2 -1
- package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
- package/dist/modules/currencies/backend/exchange-rates/page.js +2 -1
- package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
- package/dist/modules/currencies/extension-points.js +14 -0
- package/dist/modules/currencies/extension-points.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +2 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +2 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
- package/dist/modules/customer_accounts/extension-points.js +14 -0
- package/dist/modules/customer_accounts/extension-points.js.map +7 -0
- package/dist/modules/customers/api/deals/summary/route.js +9 -115
- package/dist/modules/customers/api/deals/summary/route.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies/page.js +2 -1
- package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +5 -4
- package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +5 -4
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/deals/page.js +2 -1
- package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/[id]/page.js +2 -1
- package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people/page.js +2 -1
- package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +5 -4
- package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
- package/dist/modules/customers/components/CustomerTodosTable.js +2 -1
- package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
- package/dist/modules/customers/extension-points.js +42 -0
- package/dist/modules/customers/extension-points.js.map +7 -0
- package/dist/modules/customers/lib/calendar/format.js +8 -4
- package/dist/modules/customers/lib/calendar/format.js.map +2 -2
- package/dist/modules/customers/lib/dealsSummaryQueries.js +144 -0
- package/dist/modules/customers/lib/dealsSummaryQueries.js.map +7 -0
- package/dist/modules/data_sync/backend/data-sync/page.js +2 -1
- package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
- package/dist/modules/data_sync/extension-points.js +13 -0
- package/dist/modules/data_sync/extension-points.js.map +7 -0
- package/dist/modules/directory/backend/directory/organizations/page.js +2 -1
- package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
- package/dist/modules/directory/backend/directory/tenants/page.js +2 -1
- package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
- package/dist/modules/directory/extension-points.js +14 -0
- package/dist/modules/directory/extension-points.js.map +7 -0
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +5 -1
- package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
- package/dist/modules/entities/components/SystemEntitiesTable.js +2 -1
- package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
- package/dist/modules/entities/components/UserEntitiesTable.js +2 -1
- package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
- package/dist/modules/entities/extension-points.js +21 -0
- package/dist/modules/entities/extension-points.js.map +7 -0
- package/dist/modules/integrations/backend/integrations/[id]/page.js +2 -4
- package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
- package/dist/modules/integrations/extension-points.js +30 -0
- package/dist/modules/integrations/extension-points.js.map +7 -0
- package/dist/modules/messages/components/ComposeMessagePageClient.js +2 -1
- package/dist/modules/messages/components/ComposeMessagePageClient.js.map +2 -2
- package/dist/modules/messages/components/MessageDetailPageClient.js +3 -2
- package/dist/modules/messages/components/MessageDetailPageClient.js.map +2 -2
- package/dist/modules/messages/components/MessagesInboxPageClient.js +2 -1
- package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
- package/dist/modules/messages/extension-points.js +16 -0
- package/dist/modules/messages/extension-points.js.map +7 -0
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js +3 -2
- package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
- package/dist/modules/payment_gateways/extension-points.js +19 -0
- package/dist/modules/payment_gateways/extension-points.js.map +7 -0
- package/dist/modules/portal/extension-points.js +32 -0
- package/dist/modules/portal/extension-points.js.map +7 -0
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/dashboard/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/login/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/profile/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/reset-password/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/reset-password/page.js.map +2 -2
- package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js +3 -3
- package/dist/modules/portal/frontend/[orgSlug]/portal/signup/page.js.map +2 -2
- package/dist/modules/query_index/components/QueryIndexesTable.js +2 -1
- package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
- package/dist/modules/query_index/events.js +20 -0
- package/dist/modules/query_index/events.js.map +7 -0
- package/dist/modules/query_index/extension-points.js +13 -0
- package/dist/modules/query_index/extension-points.js.map +7 -0
- package/dist/modules/resources/backend/resources/resource-types/page.js +2 -1
- package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
- package/dist/modules/resources/backend/resources/resources/page.js +2 -1
- package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
- package/dist/modules/resources/extension-points.js +14 -0
- package/dist/modules/resources/extension-points.js.map +7 -0
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +11 -3
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/components/documents/ItemsSection.js +2 -1
- package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js +4 -1
- package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
- package/dist/modules/sales/events.js +1 -0
- package/dist/modules/sales/events.js.map +2 -2
- package/dist/modules/sales/extension-points.js +36 -0
- package/dist/modules/sales/extension-points.js.map +7 -0
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js +5 -4
- package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +4 -3
- package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +3 -2
- package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js +3 -2
- package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsLotsListPage.js +2 -1
- package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +3 -2
- package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
- package/dist/modules/wms/extension-points.js +26 -0
- package/dist/modules/wms/extension-points.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/page.js +2 -1
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.js +2 -1
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +2 -1
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/events.js +1 -0
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/extension-points.js +15 -0
- package/dist/modules/workflows/extension-points.js.map +7 -0
- package/package.json +7 -7
- package/src/modules/api_keys/backend/api-keys/page.tsx +2 -1
- package/src/modules/api_keys/extension-points.ts +13 -0
- package/src/modules/audit_logs/components/AccessLogsTable.tsx +2 -1
- package/src/modules/audit_logs/components/AuditLogsActions.tsx +2 -1
- package/src/modules/audit_logs/extension-points.ts +11 -0
- package/src/modules/auth/backend/roles/page.tsx +2 -1
- package/src/modules/auth/backend/users/page.tsx +2 -1
- package/src/modules/auth/extension-points.ts +18 -0
- package/src/modules/auth/frontend/login.tsx +5 -1
- package/src/modules/business_rules/backend/rules/page.tsx +2 -1
- package/src/modules/business_rules/events.ts +10 -0
- package/src/modules/business_rules/extension-points.ts +10 -0
- package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +2 -1
- package/src/modules/catalog/backend/catalog/products/create/page.tsx +2 -1
- package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -1
- package/src/modules/catalog/components/products/ProductsDataTable.tsx +3 -2
- package/src/modules/catalog/events.ts +1 -0
- package/src/modules/catalog/extension-points.ts +24 -0
- package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +2 -1
- package/src/modules/communication_channels/backend/profile/communication-channels/page.tsx +3 -2
- package/src/modules/communication_channels/extension-points.ts +17 -0
- package/src/modules/configs/backend/config/system-status/page.tsx +2 -1
- package/src/modules/configs/extension-points.ts +15 -0
- package/src/modules/currencies/backend/currencies/page.tsx +2 -1
- package/src/modules/currencies/backend/exchange-rates/page.tsx +2 -1
- package/src/modules/currencies/extension-points.ts +11 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +2 -1
- package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +2 -1
- package/src/modules/customer_accounts/extension-points.ts +11 -0
- package/src/modules/customers/api/deals/summary/route.ts +10 -158
- package/src/modules/customers/backend/customers/companies/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/companies/page.tsx +2 -1
- package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +5 -4
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +5 -4
- package/src/modules/customers/backend/customers/deals/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people/[id]/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people/page.tsx +2 -1
- package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +5 -4
- package/src/modules/customers/components/CustomerTodosTable.tsx +2 -1
- package/src/modules/customers/extension-points.ts +40 -0
- package/src/modules/customers/lib/calendar/format.ts +10 -4
- package/src/modules/customers/lib/dealsSummaryQueries.ts +211 -0
- package/src/modules/data_sync/backend/data-sync/page.tsx +2 -1
- package/src/modules/data_sync/extension-points.ts +10 -0
- package/src/modules/directory/backend/directory/organizations/page.tsx +2 -1
- package/src/modules/directory/backend/directory/tenants/page.tsx +2 -1
- package/src/modules/directory/extension-points.ts +11 -0
- package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +5 -1
- package/src/modules/entities/components/SystemEntitiesTable.tsx +2 -1
- package/src/modules/entities/components/UserEntitiesTable.tsx +2 -1
- package/src/modules/entities/extension-points.ts +18 -0
- package/src/modules/integrations/backend/integrations/[id]/page.tsx +2 -2
- package/src/modules/integrations/extension-points.ts +27 -0
- package/src/modules/messages/components/ComposeMessagePageClient.tsx +2 -1
- package/src/modules/messages/components/MessageDetailPageClient.tsx +3 -2
- package/src/modules/messages/components/MessagesInboxPageClient.tsx +2 -1
- package/src/modules/messages/extension-points.ts +13 -0
- package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +3 -2
- package/src/modules/payment_gateways/extension-points.ts +16 -0
- package/src/modules/portal/extension-points.ts +30 -0
- package/src/modules/portal/frontend/[orgSlug]/portal/dashboard/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/login/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/profile/page.tsx +3 -3
- package/src/modules/portal/frontend/[orgSlug]/portal/reset-password/page.tsx +4 -4
- package/src/modules/portal/frontend/[orgSlug]/portal/signup/page.tsx +3 -3
- package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -1
- package/src/modules/query_index/events.ts +17 -0
- package/src/modules/query_index/extension-points.ts +10 -0
- package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -1
- package/src/modules/resources/backend/resources/resources/page.tsx +2 -1
- package/src/modules/resources/extension-points.ts +11 -0
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +11 -3
- package/src/modules/sales/components/documents/ItemsSection.tsx +2 -1
- package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +6 -1
- package/src/modules/sales/events.ts +1 -0
- package/src/modules/sales/extension-points.ts +33 -0
- package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +5 -4
- package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +4 -3
- package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +3 -2
- package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +3 -2
- package/src/modules/wms/components/backend/WmsLotsListPage.tsx +2 -1
- package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +3 -2
- package/src/modules/wms/extension-points.ts +23 -0
- package/src/modules/workflows/backend/definitions/page.tsx +2 -1
- package/src/modules/workflows/backend/instances/page.tsx +2 -1
- package/src/modules/workflows/backend/tasks/page.tsx +2 -1
- package/src/modules/workflows/events.ts +1 -0
- package/src/modules/workflows/extension-points.ts +12 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { dataTableExtensionHost, defineModuleExtensionPoints, injectionExtensionHost } from '@open-mercato/shared/modules/widgets/extension-points'
|
|
2
|
+
|
|
3
|
+
export const extensionPoints = defineModuleExtensionPoints({
|
|
4
|
+
moduleId: 'payment_gateways',
|
|
5
|
+
hosts: {
|
|
6
|
+
transactionsTable: dataTableExtensionHost({ tableId: 'payment_gateways.transactions.list', source: 'backend/payment-gateways/page.tsx' }),
|
|
7
|
+
transactionsAfter: injectionExtensionHost({
|
|
8
|
+
family: 'detail',
|
|
9
|
+
spotId: 'admin.page:payment-gateways/transactions:after',
|
|
10
|
+
supported: ['render-widget'],
|
|
11
|
+
source: 'backend/payment-gateways/page.tsx',
|
|
12
|
+
}),
|
|
13
|
+
},
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
export default extensionPoints
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineModuleExtensionPoints, injectionExtensionHost } from '@open-mercato/shared/modules/widgets/extension-points'
|
|
2
|
+
|
|
3
|
+
const portalPageHost = (spotId: string, source: string) => injectionExtensionHost({
|
|
4
|
+
family: 'portal-page',
|
|
5
|
+
spotId,
|
|
6
|
+
supported: ['render-widget'],
|
|
7
|
+
contextContract: 'portal.page.v1',
|
|
8
|
+
scopeContract: 'tenant.organization.customer-session',
|
|
9
|
+
source,
|
|
10
|
+
})
|
|
11
|
+
|
|
12
|
+
export const extensionPoints = defineModuleExtensionPoints({
|
|
13
|
+
moduleId: 'portal',
|
|
14
|
+
hosts: {
|
|
15
|
+
dashboardBefore: portalPageHost('portal:dashboard:before', 'frontend/[orgSlug]/portal/dashboard/page.tsx'),
|
|
16
|
+
dashboardAfter: portalPageHost('portal:dashboard:after', 'frontend/[orgSlug]/portal/dashboard/page.tsx'),
|
|
17
|
+
loginBefore: portalPageHost('portal:login:before', 'frontend/[orgSlug]/portal/login/page.tsx'),
|
|
18
|
+
loginAfter: portalPageHost('portal:login:after', 'frontend/[orgSlug]/portal/login/page.tsx'),
|
|
19
|
+
homeBefore: portalPageHost('portal:home:before', 'frontend/[orgSlug]/portal/page.tsx'),
|
|
20
|
+
homeAfter: portalPageHost('portal:home:after', 'frontend/[orgSlug]/portal/page.tsx'),
|
|
21
|
+
profileBefore: portalPageHost('portal:profile:before', 'frontend/[orgSlug]/portal/profile/page.tsx'),
|
|
22
|
+
profileAfter: portalPageHost('portal:profile:after', 'frontend/[orgSlug]/portal/profile/page.tsx'),
|
|
23
|
+
resetPasswordBefore: portalPageHost('portal:reset-password:before', 'frontend/[orgSlug]/portal/reset-password/page.tsx'),
|
|
24
|
+
resetPasswordAfter: portalPageHost('portal:reset-password:after', 'frontend/[orgSlug]/portal/reset-password/page.tsx'),
|
|
25
|
+
signupBefore: portalPageHost('portal:signup:before', 'frontend/[orgSlug]/portal/signup/page.tsx'),
|
|
26
|
+
signupAfter: portalPageHost('portal:signup:after', 'frontend/[orgSlug]/portal/signup/page.tsx'),
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
export default extensionPoints
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import React, { useEffect, useMemo, useState, useCallback } from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/portal/extension-points'
|
|
3
4
|
import { useRouter } from 'next/navigation'
|
|
4
5
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
5
6
|
import { Button } from '@open-mercato/ui/primitives/button'
|
|
@@ -10,7 +11,6 @@ import { PortalCard, PortalCardHeader } from '@open-mercato/ui/portal/components
|
|
|
10
11
|
import { PortalEmptyState } from '@open-mercato/ui/portal/components/PortalEmptyState'
|
|
11
12
|
import { usePortalDashboardWidgets } from '@open-mercato/ui/portal/hooks/usePortalDashboardWidgets'
|
|
12
13
|
import { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'
|
|
13
|
-
import { PortalInjectionSpots } from '@open-mercato/ui/backend/injection/spotIds'
|
|
14
14
|
import {
|
|
15
15
|
loadHiddenWidgets,
|
|
16
16
|
saveHiddenWidgets,
|
|
@@ -107,7 +107,7 @@ export default function PortalDashboardPage({ params }: Props) {
|
|
|
107
107
|
}
|
|
108
108
|
/>
|
|
109
109
|
|
|
110
|
-
<InjectionSpot spotId={
|
|
110
|
+
<InjectionSpot spotId={extensionPoints.hosts.dashboardBefore.spotId} context={injectionContext} />
|
|
111
111
|
|
|
112
112
|
{editing && dashboardWidgets.length > 0 ? (
|
|
113
113
|
<PortalCard>
|
|
@@ -151,7 +151,7 @@ export default function PortalDashboardPage({ params }: Props) {
|
|
|
151
151
|
/>
|
|
152
152
|
) : null}
|
|
153
153
|
|
|
154
|
-
<InjectionSpot spotId={
|
|
154
|
+
<InjectionSpot spotId={extensionPoints.hosts.dashboardAfter.spotId} context={injectionContext} />
|
|
155
155
|
</div>
|
|
156
156
|
)
|
|
157
157
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import { useCallback, useMemo, useState } from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/portal/extension-points'
|
|
3
4
|
import Link from 'next/link'
|
|
4
5
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
5
6
|
import { EmailInput } from '@open-mercato/ui/primitives/email-input'
|
|
@@ -13,7 +14,6 @@ import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
|
13
14
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
14
15
|
import { usePortalContext } from '@open-mercato/ui/portal/PortalContext'
|
|
15
16
|
import { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'
|
|
16
|
-
import { PortalInjectionSpots } from '@open-mercato/ui/backend/injection/spotIds'
|
|
17
17
|
|
|
18
18
|
type Props = { params: { orgSlug: string } }
|
|
19
19
|
|
|
@@ -97,7 +97,7 @@ export default function PortalLoginPage({ params }: Props) {
|
|
|
97
97
|
<p className="mt-1.5 text-sm text-muted-foreground">{t('portal.login.description', 'Enter your credentials to access the portal.')}</p>
|
|
98
98
|
</div>
|
|
99
99
|
|
|
100
|
-
<InjectionSpot spotId={
|
|
100
|
+
<InjectionSpot spotId={extensionPoints.hosts.loginBefore.spotId} context={injectionContext} />
|
|
101
101
|
|
|
102
102
|
<form onSubmit={handleSubmit} className="flex flex-col gap-4">
|
|
103
103
|
{error ? (
|
|
@@ -128,7 +128,7 @@ export default function PortalLoginPage({ params }: Props) {
|
|
|
128
128
|
</p>
|
|
129
129
|
</form>
|
|
130
130
|
|
|
131
|
-
<InjectionSpot spotId={
|
|
131
|
+
<InjectionSpot spotId={extensionPoints.hosts.loginAfter.spotId} context={injectionContext} />
|
|
132
132
|
</div>
|
|
133
133
|
)
|
|
134
134
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import { useEffect, useMemo } from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/portal/extension-points'
|
|
3
4
|
import Link from 'next/link'
|
|
4
5
|
import { useRouter } from 'next/navigation'
|
|
5
6
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
@@ -10,7 +11,6 @@ import { SearchX, ShoppingBag, User, Shield } from 'lucide-react'
|
|
|
10
11
|
import { usePortalContext } from '@open-mercato/ui/portal/PortalContext'
|
|
11
12
|
import { PortalFeatureCard } from '@open-mercato/ui/portal/components/PortalFeatureCard'
|
|
12
13
|
import { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'
|
|
13
|
-
import { PortalInjectionSpots } from '@open-mercato/ui/backend/injection/spotIds'
|
|
14
14
|
|
|
15
15
|
type Props = { params: { orgSlug: string } }
|
|
16
16
|
|
|
@@ -54,7 +54,7 @@ export default function PortalLandingPage({ params }: Props) {
|
|
|
54
54
|
|
|
55
55
|
return (
|
|
56
56
|
<>
|
|
57
|
-
<InjectionSpot spotId={
|
|
57
|
+
<InjectionSpot spotId={extensionPoints.hosts.homeBefore.spotId} context={injectionContext} />
|
|
58
58
|
|
|
59
59
|
<section className="flex flex-col items-center gap-5 py-8 text-center sm:py-16">
|
|
60
60
|
<p className="text-overline font-semibold uppercase tracking-widest text-muted-foreground/60">
|
|
@@ -94,7 +94,7 @@ export default function PortalLandingPage({ params }: Props) {
|
|
|
94
94
|
/>
|
|
95
95
|
</section>
|
|
96
96
|
|
|
97
|
-
<InjectionSpot spotId={
|
|
97
|
+
<InjectionSpot spotId={extensionPoints.hosts.homeAfter.spotId} context={injectionContext} />
|
|
98
98
|
</>
|
|
99
99
|
)
|
|
100
100
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import { useEffect, useMemo } from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/portal/extension-points'
|
|
3
4
|
import { useRouter } from 'next/navigation'
|
|
4
5
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
5
6
|
import { Badge } from '@open-mercato/ui/primitives/badge'
|
|
@@ -8,7 +9,6 @@ import { usePortalContext } from '@open-mercato/ui/portal/PortalContext'
|
|
|
8
9
|
import { PortalPageHeader } from '@open-mercato/ui/portal/components/PortalPageHeader'
|
|
9
10
|
import { PortalCard, PortalCardHeader, PortalStatRow, PortalCardDivider } from '@open-mercato/ui/portal/components/PortalCard'
|
|
10
11
|
import { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'
|
|
11
|
-
import { PortalInjectionSpots } from '@open-mercato/ui/backend/injection/spotIds'
|
|
12
12
|
|
|
13
13
|
type Props = { params: { orgSlug: string } }
|
|
14
14
|
|
|
@@ -49,7 +49,7 @@ export default function PortalProfilePage({ params }: Props) {
|
|
|
49
49
|
title={t('portal.profile.title', 'Profile')}
|
|
50
50
|
/>
|
|
51
51
|
|
|
52
|
-
<InjectionSpot spotId={
|
|
52
|
+
<InjectionSpot spotId={extensionPoints.hosts.profileBefore.spotId} context={injectionContext} />
|
|
53
53
|
|
|
54
54
|
<div className="grid gap-5 md:grid-cols-2">
|
|
55
55
|
<PortalCard>
|
|
@@ -106,7 +106,7 @@ export default function PortalProfilePage({ params }: Props) {
|
|
|
106
106
|
</PortalCard>
|
|
107
107
|
</div>
|
|
108
108
|
|
|
109
|
-
<InjectionSpot spotId={
|
|
109
|
+
<InjectionSpot spotId={extensionPoints.hosts.profileAfter.spotId} context={injectionContext} />
|
|
110
110
|
</div>
|
|
111
111
|
)
|
|
112
112
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import { useCallback, useMemo, useState, useEffect } from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/portal/extension-points'
|
|
3
4
|
import { useSearchParams } from 'next/navigation'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
@@ -13,7 +14,6 @@ import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
|
13
14
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
14
15
|
import { usePortalContext } from '@open-mercato/ui/portal/PortalContext'
|
|
15
16
|
import { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'
|
|
16
|
-
import { PortalInjectionSpots } from '@open-mercato/ui/backend/injection/spotIds'
|
|
17
17
|
|
|
18
18
|
type Props = { params: { orgSlug: string } }
|
|
19
19
|
|
|
@@ -136,7 +136,7 @@ export default function PortalResetPasswordPage({ params }: Props) {
|
|
|
136
136
|
<p className="mt-1.5 text-sm text-muted-foreground">{t('portal.resetPassword.description', 'Enter your new password below.')}</p>
|
|
137
137
|
</div>
|
|
138
138
|
|
|
139
|
-
<InjectionSpot spotId={
|
|
139
|
+
<InjectionSpot spotId={extensionPoints.hosts.resetPasswordBefore.spotId} context={injectionContext} />
|
|
140
140
|
|
|
141
141
|
<form onSubmit={handleSubmit} className="flex flex-col gap-4">
|
|
142
142
|
{error ? (
|
|
@@ -167,7 +167,7 @@ export default function PortalResetPasswordPage({ params }: Props) {
|
|
|
167
167
|
</p>
|
|
168
168
|
</form>
|
|
169
169
|
|
|
170
|
-
<InjectionSpot spotId={
|
|
170
|
+
<InjectionSpot spotId={extensionPoints.hosts.resetPasswordAfter.spotId} context={injectionContext} />
|
|
171
171
|
</div>
|
|
172
172
|
)
|
|
173
|
-
}
|
|
173
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import { useCallback, useMemo, useState } from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/portal/extension-points'
|
|
3
4
|
import Link from 'next/link'
|
|
4
5
|
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
5
6
|
import { Input } from '@open-mercato/ui/primitives/input'
|
|
@@ -14,7 +15,6 @@ import { Spinner } from '@open-mercato/ui/primitives/spinner'
|
|
|
14
15
|
import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
|
|
15
16
|
import { usePortalContext } from '@open-mercato/ui/portal/PortalContext'
|
|
16
17
|
import { InjectionSpot } from '@open-mercato/ui/backend/injection/InjectionSpot'
|
|
17
|
-
import { PortalInjectionSpots } from '@open-mercato/ui/backend/injection/spotIds'
|
|
18
18
|
|
|
19
19
|
type Props = { params: { orgSlug: string } }
|
|
20
20
|
type SignupResponse = { ok: boolean; error?: string; details?: Record<string, string[]> }
|
|
@@ -134,7 +134,7 @@ export default function PortalSignupPage({ params }: Props) {
|
|
|
134
134
|
<p className="mt-1.5 text-sm text-muted-foreground">{t('portal.signup.description', 'Sign up for a portal account.')}</p>
|
|
135
135
|
</div>
|
|
136
136
|
|
|
137
|
-
<InjectionSpot spotId={
|
|
137
|
+
<InjectionSpot spotId={extensionPoints.hosts.signupBefore.spotId} context={injectionContext} />
|
|
138
138
|
|
|
139
139
|
<form onSubmit={handleSubmit} className="flex flex-col gap-4">
|
|
140
140
|
{error ? (
|
|
@@ -173,7 +173,7 @@ export default function PortalSignupPage({ params }: Props) {
|
|
|
173
173
|
</p>
|
|
174
174
|
</form>
|
|
175
175
|
|
|
176
|
-
<InjectionSpot spotId={
|
|
176
|
+
<InjectionSpot spotId={extensionPoints.hosts.signupAfter.spotId} context={injectionContext} />
|
|
177
177
|
</div>
|
|
178
178
|
)
|
|
179
179
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
import * as React from 'react'
|
|
3
|
+
import { extensionPoints } from '@open-mercato/core/modules/query_index/extension-points'
|
|
3
4
|
import { useQuery, useQueryClient } from '@tanstack/react-query'
|
|
4
5
|
import type { ColumnDef, SortingState } from '@tanstack/react-table'
|
|
5
6
|
import { DataTable } from '@open-mercato/ui/backend/DataTable'
|
|
@@ -563,7 +564,7 @@ export default function QueryIndexesTable() {
|
|
|
563
564
|
setSorting(next)
|
|
564
565
|
setPage(1)
|
|
565
566
|
}}
|
|
566
|
-
perspective={{ tableId:
|
|
567
|
+
perspective={{ tableId: extensionPoints.hosts.statusTable.tableId }}
|
|
567
568
|
rowActions={(row) => {
|
|
568
569
|
const items: Array<{ id: string; label: string; onSelect: () => void; destructive?: boolean }> = [
|
|
569
570
|
{ id: 'reindex', label: t('query_index.table.actions.reindex'), onSelect: () => void trigger('reindex', row.entityId) },
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createModuleEvents } from '@open-mercato/shared/modules/events'
|
|
2
|
+
|
|
3
|
+
const events = [
|
|
4
|
+
{ id: 'query_index.coverage.refresh', label: 'Coverage Refresh', category: 'lifecycle' },
|
|
5
|
+
{ id: 'query_index.coverage.warmup', label: 'Coverage Warmup', category: 'lifecycle' },
|
|
6
|
+
{ id: 'query_index.delete_one', label: 'Delete One', category: 'lifecycle' },
|
|
7
|
+
{ id: 'query_index.purge', label: 'Purge', category: 'lifecycle' },
|
|
8
|
+
{ id: 'query_index.reindex', label: 'Reindex', category: 'lifecycle' },
|
|
9
|
+
{ id: 'query_index.upsert_one', label: 'Upsert One', category: 'lifecycle' },
|
|
10
|
+
{ id: 'query_index.vectorize_one', label: 'Vectorize One', category: 'lifecycle' },
|
|
11
|
+
{ id: 'query_index.vectorize_purge', label: 'Vectorize Purge', category: 'lifecycle' },
|
|
12
|
+
] as const
|
|
13
|
+
|
|
14
|
+
export const eventsConfig = createModuleEvents({ moduleId: 'query_index', events })
|
|
15
|
+
export const emitQueryIndexEvent = eventsConfig.emit
|
|
16
|
+
export type QueryIndexEventId = typeof events[number]['id']
|
|
17
|
+
export default eventsConfig
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { dataTableExtensionHost, defineModuleExtensionPoints } from '@open-mercato/shared/modules/widgets/extension-points'
|
|
2
|
+
|
|
3
|
+
export const extensionPoints = defineModuleExtensionPoints({
|
|
4
|
+
moduleId: 'query_index',
|
|
5
|
+
hosts: {
|
|
6
|
+
statusTable: dataTableExtensionHost({ tableId: 'query_index.status.list', source: 'components/QueryIndexesTable.tsx' }),
|
|
7
|
+
},
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
export default extensionPoints
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/resources/extension-points'
|
|
4
5
|
import { useRouter } from 'next/navigation'
|
|
5
6
|
import Link from 'next/link'
|
|
6
7
|
import type { ColumnDef, SortingState } from '@tanstack/react-table'
|
|
@@ -318,7 +319,7 @@ export default function ResourcesResourceTypesPage() {
|
|
|
318
319
|
/>
|
|
319
320
|
)}
|
|
320
321
|
onRowClick={(row) => router.push(`/backend/resources/resource-types/${row.id}/edit`)}
|
|
321
|
-
perspective={{ tableId:
|
|
322
|
+
perspective={{ tableId: extensionPoints.hosts.resourceTypesTable.tableId }}
|
|
322
323
|
/>
|
|
323
324
|
</PageBody>
|
|
324
325
|
{ConfirmDialogElement}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/resources/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { usePathname, useRouter, useSearchParams } from 'next/navigation'
|
|
6
7
|
import type { ColumnDef } from '@tanstack/react-table'
|
|
@@ -524,7 +525,7 @@ export default function ResourcesResourcesPage() {
|
|
|
524
525
|
filterValues={filterValues}
|
|
525
526
|
onFiltersApply={handleFiltersApply}
|
|
526
527
|
onFiltersClear={handleFiltersClear}
|
|
527
|
-
perspective={{ tableId:
|
|
528
|
+
perspective={{ tableId: extensionPoints.hosts.resourcesTable.tableId }}
|
|
528
529
|
rowActions={(row) => {
|
|
529
530
|
if (!canManage || row.rowKind !== 'resource') return null
|
|
530
531
|
return (
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { dataTableExtensionHost, defineModuleExtensionPoints } from '@open-mercato/shared/modules/widgets/extension-points'
|
|
2
|
+
|
|
3
|
+
export const extensionPoints = defineModuleExtensionPoints({
|
|
4
|
+
moduleId: 'resources',
|
|
5
|
+
hosts: {
|
|
6
|
+
resourcesTable: dataTableExtensionHost({ tableId: 'resources.resources.list', source: 'backend/resources/resources/page.tsx' }),
|
|
7
|
+
resourceTypesTable: dataTableExtensionHost({ tableId: 'resources.resource-types.list', source: 'backend/resources/resource-types/page.tsx' }),
|
|
8
|
+
},
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
export default extensionPoints
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
"use client"
|
|
4
4
|
|
|
5
5
|
import * as React from 'react'
|
|
6
|
+
import { extensionPoints } from '@open-mercato/core/modules/sales/extension-points'
|
|
7
|
+
import { resolveExtensionPointPattern } from '@open-mercato/shared/modules/widgets/extension-points'
|
|
6
8
|
import { useSearchParams, useRouter, usePathname } from 'next/navigation'
|
|
7
9
|
import { Page, PageBody } from '@open-mercato/ui/backend/Page'
|
|
8
10
|
import {
|
|
@@ -1949,7 +1951,10 @@ export default function SalesDocumentDetailPage({
|
|
|
1949
1951
|
() => (record?.id ? `sales-document:${kind}:${record.id}` : `sales-document:${kind}:pending`),
|
|
1950
1952
|
[kind, record?.id],
|
|
1951
1953
|
)
|
|
1952
|
-
const detailsInjectionSpotId = React.useMemo(
|
|
1954
|
+
const detailsInjectionSpotId = React.useMemo(
|
|
1955
|
+
() => resolveExtensionPointPattern(extensionPoints.hosts.documentDetail.pattern, { kind, surface: 'details' }),
|
|
1956
|
+
[kind],
|
|
1957
|
+
)
|
|
1953
1958
|
const { runMutation, retryLastMutation } = useGuardedMutation<{
|
|
1954
1959
|
kind: SalesDocumentKind
|
|
1955
1960
|
record: DocumentRecord | null
|
|
@@ -3988,7 +3993,10 @@ export default function SalesDocumentDetailPage({
|
|
|
3988
3993
|
const { payload: backendChromePayload, isReady: backendChromeReady } = useBackendChrome()
|
|
3989
3994
|
const canComposeMessages = backendChromeReady && hasFeature(backendChromePayload?.grantedFeatures, 'messages.compose')
|
|
3990
3995
|
|
|
3991
|
-
const tabInjectionSpotId = React.useMemo(
|
|
3996
|
+
const tabInjectionSpotId = React.useMemo(
|
|
3997
|
+
() => resolveExtensionPointPattern(extensionPoints.hosts.documentDetail.pattern, { kind, surface: 'tabs' }),
|
|
3998
|
+
[kind],
|
|
3999
|
+
)
|
|
3992
4000
|
const { widgets: injectedTabWidgets } = useInjectionWidgets(tabInjectionSpotId, {
|
|
3993
4001
|
context: detailInjectionContext,
|
|
3994
4002
|
triggerOnLoad: true,
|
|
@@ -4263,7 +4271,7 @@ export default function SalesDocumentDetailPage({
|
|
|
4263
4271
|
onAddComment={appendShipmentComment}
|
|
4264
4272
|
/>
|
|
4265
4273
|
<InjectionSpot
|
|
4266
|
-
spotId=
|
|
4274
|
+
spotId={extensionPoints.hosts.orderShipping.spotId}
|
|
4267
4275
|
context={detailInjectionContext}
|
|
4268
4276
|
data={record}
|
|
4269
4277
|
onDataChange={(next) => setRecord(next as unknown as DocumentRecord)}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import * as React from "react";
|
|
4
|
+
import { extensionPoints } from "@open-mercato/core/modules/sales/extension-points";
|
|
4
5
|
import { apiCall, withScopedApiRequestHeaders } from "@open-mercato/ui/backend/utils/apiCall";
|
|
5
6
|
import { buildOptimisticLockHeader } from "@open-mercato/ui/backend/utils/optimisticLock";
|
|
6
7
|
import { deleteCrud } from "@open-mercato/ui/backend/utils/crud";
|
|
@@ -165,7 +166,7 @@ export function SalesDocumentItemsSection({
|
|
|
165
166
|
);
|
|
166
167
|
|
|
167
168
|
const { widgets: allColumnWidgets } = useInjectionDataWidgets(
|
|
168
|
-
|
|
169
|
+
extensionPoints.hosts.orderItemColumns.spotId,
|
|
169
170
|
);
|
|
170
171
|
const columnWidgets = kind === "order" ? allColumnWidgets : [];
|
|
171
172
|
const injectedColumns = React.useMemo<InjectionColumnDefinition[]>(() => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/sales/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { useRouter } from 'next/navigation'
|
|
6
7
|
import type { ColumnDef, SortingState } from '@tanstack/react-table'
|
|
@@ -738,7 +739,11 @@ export function SalesDocumentsTable({ kind }: { kind: SalesDocumentKind }) {
|
|
|
738
739
|
]}
|
|
739
740
|
/>
|
|
740
741
|
)}
|
|
741
|
-
perspective={{
|
|
742
|
+
perspective={{
|
|
743
|
+
tableId: kind === 'order'
|
|
744
|
+
? extensionPoints.hosts.ordersTable.tableId
|
|
745
|
+
: extensionPoints.hosts.quotesTable.tableId,
|
|
746
|
+
}}
|
|
742
747
|
onRowClick={handleRowClick}
|
|
743
748
|
emptyState={
|
|
744
749
|
<div className="py-10 text-center text-sm text-muted-foreground">
|
|
@@ -17,6 +17,7 @@ const events = [
|
|
|
17
17
|
{ id: 'sales.quote.created', label: 'Quote Created', entity: 'quote', category: 'crud' },
|
|
18
18
|
{ id: 'sales.quote.updated', label: 'Quote Updated', entity: 'quote', category: 'crud' },
|
|
19
19
|
{ id: 'sales.quote.deleted', label: 'Quote Deleted', entity: 'quote', category: 'crud' },
|
|
20
|
+
{ id: 'sales.quote.expiring', label: 'Quote Expiring', entity: 'quote', category: 'lifecycle' },
|
|
20
21
|
|
|
21
22
|
// Invoices
|
|
22
23
|
{ id: 'sales.invoice.created', label: 'Invoice Created', entity: 'invoice', category: 'crud' },
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { dataTableExtensionHost, defineModuleExtensionPoints, injectionExtensionHost } from '@open-mercato/shared/modules/widgets/extension-points'
|
|
2
|
+
|
|
3
|
+
export const extensionPoints = defineModuleExtensionPoints({
|
|
4
|
+
moduleId: 'sales',
|
|
5
|
+
hosts: {
|
|
6
|
+
ordersTable: dataTableExtensionHost({ tableId: 'sales.orders', source: 'components/documents/SalesDocumentsTable.tsx' }),
|
|
7
|
+
quotesTable: dataTableExtensionHost({ tableId: 'sales.quotes', source: 'components/documents/SalesDocumentsTable.tsx' }),
|
|
8
|
+
orderItemColumns: injectionExtensionHost({
|
|
9
|
+
family: 'detail',
|
|
10
|
+
spotId: 'data-table:sales.order.items:columns',
|
|
11
|
+
supported: ['column-widget'],
|
|
12
|
+
source: 'components/documents/ItemsSection.tsx',
|
|
13
|
+
}),
|
|
14
|
+
orderShipping: injectionExtensionHost({
|
|
15
|
+
family: 'detail',
|
|
16
|
+
spotId: 'detail:sales.order:shipping',
|
|
17
|
+
supported: ['render-widget'],
|
|
18
|
+
source: 'backend/sales/documents/[id]/page.tsx',
|
|
19
|
+
}),
|
|
20
|
+
documentDetail: injectionExtensionHost({
|
|
21
|
+
family: 'detail',
|
|
22
|
+
pattern: 'sales.document.detail.{kind}:{surface}',
|
|
23
|
+
parameters: {
|
|
24
|
+
kind: { source: 'SalesDocumentKind', pattern: '^(order|quote)$' },
|
|
25
|
+
surface: { source: 'host declaration', pattern: '^(tabs|details)$' },
|
|
26
|
+
},
|
|
27
|
+
supported: ['render-widget'],
|
|
28
|
+
source: 'backend/sales/documents/[id]/page.tsx',
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export default extensionPoints
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/wms/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { useRouter } from 'next/navigation'
|
|
6
7
|
import { z } from 'zod'
|
|
@@ -515,7 +516,7 @@ export function WarehouseSection({ viewAllHref }: ConfigSectionOptions = {}) {
|
|
|
515
516
|
totalPages: query.data?.totalPages ?? 1,
|
|
516
517
|
onPageChange: setPage,
|
|
517
518
|
}}
|
|
518
|
-
perspective={{ tableId:
|
|
519
|
+
perspective={{ tableId: extensionPoints.hosts.warehousesTable.tableId }}
|
|
519
520
|
emptyState={(
|
|
520
521
|
<EmptyState
|
|
521
522
|
title={t('wms.backend.config.warehouses.empty.title', 'No warehouses')}
|
|
@@ -775,7 +776,7 @@ export function ZoneSection({ viewAllHref }: ConfigSectionOptions = {}) {
|
|
|
775
776
|
totalPages: query.data?.totalPages ?? 1,
|
|
776
777
|
onPageChange: setPage,
|
|
777
778
|
}}
|
|
778
|
-
perspective={{ tableId:
|
|
779
|
+
perspective={{ tableId: extensionPoints.hosts.zonesTable.tableId }}
|
|
779
780
|
emptyState={(
|
|
780
781
|
<EmptyState
|
|
781
782
|
title={t('wms.backend.config.zones.empty.title', 'No zones')}
|
|
@@ -982,7 +983,7 @@ export function LocationSection({ viewAllHref }: ConfigSectionOptions = {}) {
|
|
|
982
983
|
totalPages: query.data?.totalPages ?? 1,
|
|
983
984
|
onPageChange: setPage,
|
|
984
985
|
}}
|
|
985
|
-
perspective={{ tableId:
|
|
986
|
+
perspective={{ tableId: extensionPoints.hosts.locationsTable.tableId }}
|
|
986
987
|
emptyState={(
|
|
987
988
|
<EmptyState
|
|
988
989
|
title={t('wms.backend.config.locations.empty.title', 'No locations')}
|
|
@@ -1276,7 +1277,7 @@ export function InventoryProfilesSection() {
|
|
|
1276
1277
|
totalPages: query.data?.totalPages ?? 1,
|
|
1277
1278
|
onPageChange: setPage,
|
|
1278
1279
|
}}
|
|
1279
|
-
perspective={{ tableId:
|
|
1280
|
+
perspective={{ tableId: extensionPoints.hosts.inventoryProfilesTable.tableId }}
|
|
1280
1281
|
emptyState={(
|
|
1281
1282
|
<EmptyState
|
|
1282
1283
|
title={t('wms.backend.config.profiles.empty.title', 'No inventory profiles')}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/wms/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import type { ColumnDef, SortingState } from '@tanstack/react-table'
|
|
6
7
|
import { useQuery } from '@tanstack/react-query'
|
|
@@ -665,7 +666,7 @@ export function InventoryBalancesSection({
|
|
|
665
666
|
emptyTitleFallback="No balance buckets"
|
|
666
667
|
emptyDescriptionKey="wms.backend.inventory.balances.empty.description"
|
|
667
668
|
emptyDescriptionFallback="Balances appear after receipts, adjustments, or moves create inventory buckets."
|
|
668
|
-
tableId=
|
|
669
|
+
tableId={extensionPoints.hosts.balancesTable.tableId}
|
|
669
670
|
entityId={E.wms.inventory_balance}
|
|
670
671
|
icon={<Boxes className="size-5" />}
|
|
671
672
|
columns={columns}
|
|
@@ -896,7 +897,7 @@ export function InventoryReservationsSection({
|
|
|
896
897
|
emptyTitleFallback="No reservations"
|
|
897
898
|
emptyDescriptionKey="wms.backend.inventory.reservations.empty.description"
|
|
898
899
|
emptyDescriptionFallback="Reservations show stock committed to orders, transfers, or manual holds."
|
|
899
|
-
tableId=
|
|
900
|
+
tableId={extensionPoints.hosts.reservationsTable.tableId}
|
|
900
901
|
entityId={E.wms.inventory_reservation}
|
|
901
902
|
icon={<ShieldCheck className="size-5" />}
|
|
902
903
|
columns={columns}
|
|
@@ -1058,7 +1059,7 @@ export function InventoryMovementsSection({
|
|
|
1058
1059
|
emptyTitleFallback="No inventory movements"
|
|
1059
1060
|
emptyDescriptionKey="wms.backend.inventory.movements.empty.description"
|
|
1060
1061
|
emptyDescriptionFallback="Movement rows are created by receipts, reservations, moves, and reconciliation actions."
|
|
1061
|
-
tableId=
|
|
1062
|
+
tableId={extensionPoints.hosts.movementsTable.tableId}
|
|
1062
1063
|
entityId={E.wms.inventory_movement}
|
|
1063
1064
|
icon={<Route className="size-5" />}
|
|
1064
1065
|
columns={columns}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/wms/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { useRouter } from 'next/navigation'
|
|
6
7
|
import { z } from 'zod'
|
|
@@ -1158,7 +1159,7 @@ export default function WmsLocationDetailPage({ locationId }: WmsLocationDetailP
|
|
|
1158
1159
|
data={pagedBalances}
|
|
1159
1160
|
disableRowClick
|
|
1160
1161
|
entityId={E.wms.inventory_balance}
|
|
1161
|
-
perspective={{ tableId:
|
|
1162
|
+
perspective={{ tableId: extensionPoints.hosts.locationItemsTable.tableId }}
|
|
1162
1163
|
pagination={{
|
|
1163
1164
|
page: itemsPage,
|
|
1164
1165
|
pageSize: itemsPageSize,
|
|
@@ -1201,7 +1202,7 @@ export default function WmsLocationDetailPage({ locationId }: WmsLocationDetailP
|
|
|
1201
1202
|
data={movementsQuery.data ?? []}
|
|
1202
1203
|
disableRowClick
|
|
1203
1204
|
entityId={E.wms.inventory_movement}
|
|
1204
|
-
perspective={{ tableId:
|
|
1205
|
+
perspective={{ tableId: extensionPoints.hosts.locationActivityTable.tableId }}
|
|
1205
1206
|
emptyState={t('wms.backend.location.activity.empty', 'No recent movements for this location.')}
|
|
1206
1207
|
actions={(
|
|
1207
1208
|
<Button asChild type="button" variant="ghost" size="sm">
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/wms/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { useRouter } from 'next/navigation'
|
|
6
7
|
import { z } from 'zod'
|
|
@@ -1209,7 +1210,7 @@ export default function WmsLotDetailPage({ lotId }: WmsLotDetailPageProps) {
|
|
|
1209
1210
|
data={pagedBalances}
|
|
1210
1211
|
disableRowClick
|
|
1211
1212
|
entityId={E.wms.inventory_balance}
|
|
1212
|
-
perspective={{ tableId:
|
|
1213
|
+
perspective={{ tableId: extensionPoints.hosts.lotDistributionTable.tableId }}
|
|
1213
1214
|
pagination={{
|
|
1214
1215
|
page: distributionPage,
|
|
1215
1216
|
pageSize: distributionPageSize,
|
|
@@ -1250,7 +1251,7 @@ export default function WmsLotDetailPage({ lotId }: WmsLotDetailPageProps) {
|
|
|
1250
1251
|
data={movementsQuery.data ?? []}
|
|
1251
1252
|
disableRowClick
|
|
1252
1253
|
entityId={E.wms.inventory_movement}
|
|
1253
|
-
perspective={{ tableId:
|
|
1254
|
+
perspective={{ tableId: extensionPoints.hosts.lotActivityTable.tableId }}
|
|
1254
1255
|
emptyState={t('wms.backend.lot.activity.empty', 'No recent movements for this lot.')}
|
|
1255
1256
|
actions={(
|
|
1256
1257
|
<Button asChild type="button" variant="ghost" size="sm">
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
import * as React from 'react'
|
|
4
|
+
import { extensionPoints } from '@open-mercato/core/modules/wms/extension-points'
|
|
4
5
|
import Link from 'next/link'
|
|
5
6
|
import { useSearchParams } from 'next/navigation'
|
|
6
7
|
import type { ColumnDef, SortingState } from '@tanstack/react-table'
|
|
@@ -280,7 +281,7 @@ export default function WmsLotsListPage() {
|
|
|
280
281
|
totalPages: lotsQuery.data.totalPages,
|
|
281
282
|
onPageChange: setPage,
|
|
282
283
|
}}
|
|
283
|
-
perspective={{ tableId:
|
|
284
|
+
perspective={{ tableId: extensionPoints.hosts.lotsTable.tableId }}
|
|
284
285
|
emptyState={
|
|
285
286
|
<EmptyState
|
|
286
287
|
title={t('wms.backend.lots.empty.title', 'No lots found')}
|