@open-mercato/core 0.6.8-develop.6918.1.7b3f32b0c8 → 0.6.8-develop.6925.1.cefa200fa4
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/bootstrap.js +2 -1
- package/dist/bootstrap.js.map +2 -2
- package/dist/generated/entities/role/index.js +2 -0
- package/dist/generated/entities/role/index.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +1 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/api.js +4 -0
- package/dist/helpers/integration/api.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js +5 -0
- package/dist/modules/audit_logs/api/audit-logs/actions/redo/route.js.map +2 -2
- package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js +5 -0
- package/dist/modules/audit_logs/api/audit-logs/actions/undo/route.js.map +2 -2
- package/dist/modules/audit_logs/backend/audit-logs/page.js +4 -4
- package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js +9 -2
- package/dist/modules/audit_logs/components/AuditLogsActions.js.map +2 -2
- package/dist/modules/auth/api/login.js +5 -2
- package/dist/modules/auth/api/login.js.map +2 -2
- package/dist/modules/auth/api/users/route.js +8 -5
- package/dist/modules/auth/api/users/route.js.map +2 -2
- package/dist/modules/auth/backend/users/[id]/edit/page.js +15 -1
- package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
- package/dist/modules/auth/backend/users/page.js +7 -1
- package/dist/modules/auth/backend/users/page.js.map +2 -2
- package/dist/modules/auth/commands/users.js +175 -76
- package/dist/modules/auth/commands/users.js.map +2 -2
- package/dist/modules/auth/data/entities.js +4 -0
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/lib/sessionIntegrity.js +1 -1
- package/dist/modules/auth/lib/sessionIntegrity.js.map +2 -2
- package/dist/modules/auth/lib/setup-app.js +1 -1
- package/dist/modules/auth/lib/setup-app.js.map +2 -2
- package/dist/modules/auth/migrations/Migration20260728134212_auth.js +14 -0
- package/dist/modules/auth/migrations/Migration20260728134212_auth.js.map +7 -0
- package/dist/modules/catalog/search.js +8 -0
- package/dist/modules/catalog/search.js.map +2 -2
- package/dist/modules/customer_accounts/search.js +2 -0
- package/dist/modules/customer_accounts/search.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +55 -8
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/detail/create/dealCustomFieldControl.js +1 -1
- package/dist/modules/customers/components/detail/create/dealCustomFieldControl.js.map +2 -2
- package/dist/modules/customers/components/formConfig.js +2 -0
- package/dist/modules/customers/components/formConfig.js.map +2 -2
- package/dist/modules/inbox_ops/search.js +1 -0
- package/dist/modules/inbox_ops/search.js.map +2 -2
- package/dist/modules/messages/search.js +2 -1
- package/dist/modules/messages/search.js.map +2 -2
- package/dist/modules/planner/search.js +1 -0
- package/dist/modules/planner/search.js.map +2 -2
- package/dist/modules/resources/search.js +2 -0
- package/dist/modules/resources/search.js.map +2 -2
- package/dist/modules/sales/search.js +24 -2
- package/dist/modules/sales/search.js.map +2 -2
- package/dist/modules/staff/search.js +4 -0
- package/dist/modules/staff/search.js.map +2 -2
- package/dist/modules/wms/search.js +4 -0
- package/dist/modules/wms/search.js.map +2 -2
- package/generated/entities/role/index.ts +1 -0
- package/generated/entity-fields-registry.ts +1 -0
- package/package.json +7 -7
- package/src/bootstrap.ts +9 -2
- package/src/helpers/integration/api.ts +13 -0
- package/src/modules/audit_logs/api/audit-logs/actions/redo/route.ts +7 -0
- package/src/modules/audit_logs/api/audit-logs/actions/undo/route.ts +9 -0
- package/src/modules/audit_logs/backend/audit-logs/page.tsx +4 -4
- package/src/modules/audit_logs/components/AuditLogsActions.tsx +20 -4
- package/src/modules/auth/api/login.ts +9 -2
- package/src/modules/auth/api/users/route.ts +8 -4
- package/src/modules/auth/backend/users/[id]/edit/page.tsx +17 -1
- package/src/modules/auth/backend/users/page.tsx +11 -0
- package/src/modules/auth/commands/users.ts +251 -85
- package/src/modules/auth/data/entities.ts +3 -0
- package/src/modules/auth/i18n/de.json +6 -0
- package/src/modules/auth/i18n/en.json +6 -0
- package/src/modules/auth/i18n/es.json +6 -0
- package/src/modules/auth/i18n/ko.json +6 -0
- package/src/modules/auth/i18n/pl.json +6 -0
- package/src/modules/auth/lib/sessionIntegrity.ts +1 -1
- package/src/modules/auth/lib/setup-app.ts +1 -1
- package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
- package/src/modules/auth/migrations/Migration20260728134212_auth.ts +14 -0
- package/src/modules/catalog/search.ts +8 -0
- package/src/modules/customer_accounts/search.ts +2 -0
- package/src/modules/customers/commands/deals.ts +86 -14
- package/src/modules/customers/components/detail/create/dealCustomFieldControl.tsx +1 -1
- package/src/modules/customers/components/formConfig.tsx +2 -0
- package/src/modules/inbox_ops/search.ts +1 -0
- package/src/modules/messages/search.ts +2 -1
- package/src/modules/planner/search.ts +1 -0
- package/src/modules/resources/search.ts +2 -0
- package/src/modules/sales/search.ts +24 -2
- package/src/modules/staff/search.ts +4 -0
- package/src/modules/wms/search.ts +4 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/sales/search.ts"],
|
|
4
|
-
"sourcesContent": ["import type { SearchBuildContext, SearchIndexSource, SearchModuleConfig, SearchResultPresenter } from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\ntype SalesDocumentKind = 'order' | 'quote' | 'invoice' | 'credit_memo'\n\nconst SALES_CONFIG_URL = '/backend/config/sales'\nconst SALES_CHANNELS_URL = '/backend/sales/channels'\nconst SALES_ORDERS_URL = '/backend/sales/orders'\nconst SALES_QUOTES_URL = '/backend/sales/quotes'\n\nfunction normalizeText(value: unknown): string | null {\n if (value === null || value === undefined) return null\n if (typeof value === 'string') {\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : null\n }\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return null\n}\n\nfunction pickText(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n const text = normalizeText(candidate)\n if (text) return text\n }\n return null\n}\n\nfunction readRecordText(record: Record<string, unknown>, ...keys: string[]): string | null {\n for (const key of keys) {\n const text = normalizeText(record[key])\n if (text) return text\n }\n return null\n}\n\nfunction readObjectText(source: unknown, ...keys: string[]): string | null {\n if (!source || typeof source !== 'object') return null\n const record = source as Record<string, unknown>\n return readRecordText(record, ...keys)\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const text = parts\n .map((part) => normalizeText(part))\n .filter((value): value is string => Boolean(value))\n if (!text.length) return undefined\n return text.join(' \u00B7 ')\n}\n\nfunction snippet(value: unknown, maxLength = 140): string | undefined {\n const text = normalizeText(value)\n if (!text) return undefined\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength - 3)}...`\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => normalizeText(item)).filter(Boolean).join(', ')\n : typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction friendlyLabel(input: string): string {\n return input\n .replace(/^cf:/, '')\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, (_match, firstChar, secondChar) => `${firstChar} ${secondChar}`)\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n}\n\nfunction appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {\n for (const [key, value] of Object.entries(customFields)) {\n if (value === null || value === undefined) continue\n appendLine(lines, friendlyLabel(key), value)\n }\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n appendCustomFieldLines(lines, ctx.customFields)\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nfunction buildOrderUrl(orderId: string | null): string | null {\n if (!orderId) return null\n return `${SALES_ORDERS_URL}/${encodeURIComponent(orderId)}`\n}\n\nfunction buildQuoteUrl(quoteId: string | null): string | null {\n if (!quoteId) return null\n return `${SALES_QUOTES_URL}/${encodeURIComponent(quoteId)}`\n}\n\nfunction resolveDocumentKind(record: Record<string, unknown>): SalesDocumentKind | null {\n const kind = readRecordText(record, 'document_kind', 'documentKind', 'context_type', 'contextType', 'kind')\n if (!kind) return null\n if (kind === 'order' || kind === 'quote' || kind === 'invoice' || kind === 'credit_memo') return kind\n return null\n}\n\nfunction resolveDocumentId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'document_id', 'documentId', 'context_id', 'contextId')\n}\n\nfunction resolveOrderId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'order_id', 'orderId')\n}\n\nfunction resolveQuoteId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'quote_id', 'quoteId')\n}\n\nfunction resolveDocumentUrl(kind: SalesDocumentKind | null, documentId: string | null): string | null {\n if (!documentId) return null\n if (kind === 'quote') return buildQuoteUrl(documentId)\n if (kind === 'order') return buildOrderUrl(documentId)\n return null\n}\n\nfunction resolveCustomerName(record: Record<string, unknown>): string | null {\n const snapshot = record.customer_snapshot ?? record.customerSnapshot\n const snapshotName = readObjectText(\n snapshot,\n 'display_name',\n 'displayName',\n 'company_name',\n 'companyName',\n 'legal_name',\n 'legalName',\n 'name',\n )\n if (snapshotName) return snapshotName\n const firstName = readObjectText(snapshot, 'first_name', 'firstName')\n const lastName = readObjectText(snapshot, 'last_name', 'lastName')\n if (firstName || lastName) return `${firstName ?? ''} ${lastName ?? ''}`.trim()\n return readRecordText(record, 'customer_name', 'customerName')\n}\n\nfunction formatAmount(amount: unknown, currency: unknown): string | null {\n const amountText = normalizeText(amount)\n if (!amountText) return null\n const currencyText = normalizeText(currency)\n return currencyText ? `${amountText} ${currencyText}` : amountText\n}\n\nfunction buildDocumentTitle(label: string, number: string | null, fallbackId: string | null): string {\n if (number) return `${label} ${number}`\n if (fallbackId) return `${label} ${fallbackId}`\n return label\n}\n\nfunction buildOrderPresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.order', 'Order')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'order_number', 'orderNumber') ?? readRecordText(customFields, 'order_number', 'orderNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'fulfillment_status', 'fulfillmentStatus'),\n readRecordText(record, 'payment_status', 'paymentStatus'),\n )\n return { title, subtitle, icon: 'shopping-cart', badge: label }\n}\n\nfunction buildQuotePresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.quote', 'Quote')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'quote_number', 'quoteNumber') ?? readRecordText(customFields, 'quote_number', 'quoteNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'valid_until', 'validUntil'),\n )\n return { title, subtitle, icon: 'file-text', badge: label }\n}\n\nfunction buildInvoicePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoice', 'Invoice')\n const title = buildDocumentTitle(label, readRecordText(record, 'invoice_number', 'invoiceNumber'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n readRecordText(record, 'due_date', 'dueDate'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'receipt', badge: label }\n}\n\nfunction buildCreditMemoPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemo', 'Credit memo')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'credit_memo_number', 'creditMemoNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'file-minus', badge: label }\n}\n\nfunction buildShipmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipment', 'Shipment')\n const title = buildDocumentTitle(label, readRecordText(record, 'shipment_number', 'shipmentNumber'), readRecordText(record, 'id'))\n const tracking = record.tracking_numbers ?? record.trackingNumbers\n const subtitle = formatSubtitle(readRecordText(record, 'status'), Array.isArray(tracking) ? tracking.join(', ') : tracking)\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildPaymentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.payment', 'Payment')\n const title = buildDocumentTitle(label, readRecordText(record, 'payment_reference', 'paymentReference'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildPaymentAllocationPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentAllocation', 'Payment allocation')\n const title = buildDocumentTitle(label, null, readRecordText(record, 'id'))\n const subtitle = formatSubtitle(formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode))\n return { title, subtitle, icon: 'layers', badge: label }\n}\n\nfunction buildDocumentAddressPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.address', 'Address')\n const title = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'company_name', 'companyName'),\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'city'),\n readRecordText(record, 'region'),\n readRecordText(record, 'country'),\n )\n return { title: title ?? label, subtitle, icon: 'map-pin', badge: label }\n}\n\nfunction buildNotePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.note', 'Note')\n const title = snippet(readRecordText(record, 'body'), 120) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'author_user_id', 'authorUserId'))\n return { title, subtitle, icon: 'sticky-note', badge: label }\n}\n\nfunction buildOrderLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderLine', 'Order line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildQuoteLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteLine', 'Quote line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildInvoiceLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoiceLine', 'Invoice line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildCreditMemoLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemoLine', 'Credit memo line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildShipmentItemPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipmentItem', 'Shipment item')\n const subtitle = formatSubtitle(readRecordText(record, 'quantity'))\n return { title: label, subtitle, icon: 'package', badge: label }\n}\n\nfunction buildOrderAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderAdjustment', 'Order adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildQuoteAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteAdjustment', 'Quote adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildChannelPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.channel', 'Channel')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'code'), readRecordText(record, 'status'))\n return { title, subtitle, icon: 'store', badge: label }\n}\n\nfunction buildShippingMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shippingMethod', 'Shipping method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'carrier_code', 'carrierCode'), readRecordText(record, 'service_level', 'serviceLevel'))\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildDeliveryWindowPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.deliveryWindow', 'Delivery window')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'lead_time_days', 'leadTimeDays'), readRecordText(record, 'timezone'))\n return { title, subtitle, icon: 'clock', badge: label }\n}\n\nfunction buildPaymentMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentMethod', 'Payment method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'provider_key', 'providerKey'))\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildTaxRatePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.taxRate', 'Tax rate')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'rate'), readRecordText(record, 'country_code', 'countryCode'))\n return { title, subtitle, icon: 'percent', badge: label }\n}\n\nfunction buildDocumentTagPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.documentTag', 'Document tag')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'slug'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'description'))\n return { title, subtitle, icon: 'tag', badge: label }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'sales:sales_channel',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? ctx.customFields.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Website', record.website_url ?? record.websiteUrl)\n appendLine(lines, 'Contact email', record.contact_email ?? record.contactEmail)\n appendLine(lines, 'Contact phone', record.contact_phone ?? record.contactPhone)\n return buildIndexSource(ctx, buildChannelPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildChannelPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const channelId = readRecordText(ctx.record, 'id')\n return channelId ? `${SALES_CHANNELS_URL}/${encodeURIComponent(channelId)}/edit` : SALES_CHANNELS_URL\n },\n },\n {\n entityId: 'sales:sales_order',\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Order number', record.order_number ?? record.orderNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Fulfillment status', record.fulfillment_status ?? record.fulfillmentStatus)\n appendLine(lines, 'Payment status', record.payment_status ?? record.paymentStatus)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildOrderPresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderPresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildOrderUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_quote',\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quote number', record.quote_number ?? record.quoteNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Valid until', record.valid_until ?? record.validUntil)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildQuotePresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuotePresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_order_line',\n enabled: true,\n priority: 7,\n fieldPolicy: {\n searchable: ['name', 'description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata', 'catalog_snapshot', 'configuration', 'promotion_snapshot'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildOrderLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_line',\n enabled: true,\n priority: 7,\n fieldPolicy: {\n searchable: ['name', 'description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata', 'catalog_snapshot', 'configuration', 'promotion_snapshot'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildQuoteLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_order_adjustment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildOrderAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_adjustment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildQuoteAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Shipment number', record.shipment_number ?? record.shipmentNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Carrier', record.carrier_name ?? record.carrierName)\n appendLine(lines, 'Tracking numbers', record.tracking_numbers ?? record.trackingNumbers)\n return buildIndexSource(ctx, buildShipmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment_item',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Shipment', record.shipment_id ?? record.shipmentId)\n return buildIndexSource(ctx, buildShipmentItemPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentItemPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Invoice number', record.invoice_number ?? record.invoiceNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Due date', record.due_date ?? record.dueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildInvoicePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoicePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice_line',\n enabled: true,\n priority: 5,\n fieldPolicy: {\n searchable: ['description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n return buildIndexSource(ctx, buildInvoiceLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoiceLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo',\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Credit memo number', record.credit_memo_number ?? record.creditMemoNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Issue date', record.issue_date ?? record.issueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildCreditMemoPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo_line',\n enabled: true,\n priority: 5,\n fieldPolicy: {\n searchable: ['description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n return buildIndexSource(ctx, buildCreditMemoLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment',\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Payment reference', record.payment_reference ?? record.paymentReference)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n return buildIndexSource(ctx, buildPaymentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment_allocation',\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n appendLine(lines, 'Order', record.order_id ?? record.orderId)\n appendLine(lines, 'Invoice', record.invoice_id ?? record.invoiceId)\n return buildIndexSource(ctx, buildPaymentAllocationPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentAllocationPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_note',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Body', record.body)\n appendLine(lines, 'Author', record.author_user_id ?? record.authorUserId)\n appendLine(lines, 'Context type', record.context_type ?? record.contextType)\n return buildIndexSource(ctx, buildNotePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildNotePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_document_address',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Company', record.company_name ?? record.companyName)\n appendLine(lines, 'Address', record.address_line1 ?? record.addressLine1)\n appendLine(lines, 'City', record.city)\n appendLine(lines, 'Region', record.region)\n appendLine(lines, 'Country', record.country)\n return buildIndexSource(ctx, buildDocumentAddressPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentAddressPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_shipping_method',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Carrier', record.carrier_code ?? record.carrierCode)\n appendLine(lines, 'Service level', record.service_level ?? record.serviceLevel)\n return buildIndexSource(ctx, buildShippingMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShippingMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_delivery_window',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Lead time', record.lead_time_days ?? record.leadTimeDays)\n appendLine(lines, 'Timezone', record.timezone)\n return buildIndexSource(ctx, buildDeliveryWindowPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDeliveryWindowPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_payment_method',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Provider', record.provider_key ?? record.providerKey)\n appendLine(lines, 'Terms', record.terms)\n return buildIndexSource(ctx, buildPaymentMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_tax_rate',\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Rate', record.rate)\n appendLine(lines, 'Country', record.country_code ?? record.countryCode)\n return buildIndexSource(ctx, buildTaxRatePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildTaxRatePresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_document_tag',\n enabled: true,\n priority: 3,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Slug', record.slug)\n appendLine(lines, 'Description', record.description)\n return buildIndexSource(ctx, buildDocumentTagPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentTagPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_ORDERS_URL,\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type { SearchBuildContext, SearchIndexSource, SearchModuleConfig, SearchResultPresenter } from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\ntype SalesDocumentKind = 'order' | 'quote' | 'invoice' | 'credit_memo'\n\nconst SALES_CONFIG_URL = '/backend/config/sales'\nconst SALES_CHANNELS_URL = '/backend/sales/channels'\nconst SALES_ORDERS_URL = '/backend/sales/orders'\nconst SALES_QUOTES_URL = '/backend/sales/quotes'\n\nfunction normalizeText(value: unknown): string | null {\n if (value === null || value === undefined) return null\n if (typeof value === 'string') {\n const trimmed = value.trim()\n return trimmed.length > 0 ? trimmed : null\n }\n if (value instanceof Date) return value.toISOString()\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return null\n}\n\nfunction pickText(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n const text = normalizeText(candidate)\n if (text) return text\n }\n return null\n}\n\nfunction readRecordText(record: Record<string, unknown>, ...keys: string[]): string | null {\n for (const key of keys) {\n const text = normalizeText(record[key])\n if (text) return text\n }\n return null\n}\n\nfunction readObjectText(source: unknown, ...keys: string[]): string | null {\n if (!source || typeof source !== 'object') return null\n const record = source as Record<string, unknown>\n return readRecordText(record, ...keys)\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const text = parts\n .map((part) => normalizeText(part))\n .filter((value): value is string => Boolean(value))\n if (!text.length) return undefined\n return text.join(' \u00B7 ')\n}\n\nfunction snippet(value: unknown, maxLength = 140): string | undefined {\n const text = normalizeText(value)\n if (!text) return undefined\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength - 3)}...`\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => normalizeText(item)).filter(Boolean).join(', ')\n : typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction friendlyLabel(input: string): string {\n return input\n .replace(/^cf:/, '')\n .replace(/_/g, ' ')\n .replace(/([a-z])([A-Z])/g, (_match, firstChar, secondChar) => `${firstChar} ${secondChar}`)\n .replace(/\\b\\w/g, (character) => character.toUpperCase())\n}\n\nfunction appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {\n for (const [key, value] of Object.entries(customFields)) {\n if (value === null || value === undefined) continue\n appendLine(lines, friendlyLabel(key), value)\n }\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n appendCustomFieldLines(lines, ctx.customFields)\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nfunction buildOrderUrl(orderId: string | null): string | null {\n if (!orderId) return null\n return `${SALES_ORDERS_URL}/${encodeURIComponent(orderId)}`\n}\n\nfunction buildQuoteUrl(quoteId: string | null): string | null {\n if (!quoteId) return null\n return `${SALES_QUOTES_URL}/${encodeURIComponent(quoteId)}`\n}\n\nfunction resolveDocumentKind(record: Record<string, unknown>): SalesDocumentKind | null {\n const kind = readRecordText(record, 'document_kind', 'documentKind', 'context_type', 'contextType', 'kind')\n if (!kind) return null\n if (kind === 'order' || kind === 'quote' || kind === 'invoice' || kind === 'credit_memo') return kind\n return null\n}\n\nfunction resolveDocumentId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'document_id', 'documentId', 'context_id', 'contextId')\n}\n\nfunction resolveOrderId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'order_id', 'orderId')\n}\n\nfunction resolveQuoteId(record: Record<string, unknown>): string | null {\n return readRecordText(record, 'quote_id', 'quoteId')\n}\n\nfunction resolveDocumentUrl(kind: SalesDocumentKind | null, documentId: string | null): string | null {\n if (!documentId) return null\n if (kind === 'quote') return buildQuoteUrl(documentId)\n if (kind === 'order') return buildOrderUrl(documentId)\n return null\n}\n\nfunction resolveCustomerName(record: Record<string, unknown>): string | null {\n const snapshot = record.customer_snapshot ?? record.customerSnapshot\n const snapshotName = readObjectText(\n snapshot,\n 'display_name',\n 'displayName',\n 'company_name',\n 'companyName',\n 'legal_name',\n 'legalName',\n 'name',\n )\n if (snapshotName) return snapshotName\n const firstName = readObjectText(snapshot, 'first_name', 'firstName')\n const lastName = readObjectText(snapshot, 'last_name', 'lastName')\n if (firstName || lastName) return `${firstName ?? ''} ${lastName ?? ''}`.trim()\n return readRecordText(record, 'customer_name', 'customerName')\n}\n\nfunction formatAmount(amount: unknown, currency: unknown): string | null {\n const amountText = normalizeText(amount)\n if (!amountText) return null\n const currencyText = normalizeText(currency)\n return currencyText ? `${amountText} ${currencyText}` : amountText\n}\n\nfunction buildDocumentTitle(label: string, number: string | null, fallbackId: string | null): string {\n if (number) return `${label} ${number}`\n if (fallbackId) return `${label} ${fallbackId}`\n return label\n}\n\nfunction buildOrderPresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.order', 'Order')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'order_number', 'orderNumber') ?? readRecordText(customFields, 'order_number', 'orderNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'fulfillment_status', 'fulfillmentStatus'),\n readRecordText(record, 'payment_status', 'paymentStatus'),\n )\n return { title, subtitle, icon: 'shopping-cart', badge: label }\n}\n\nfunction buildQuotePresenter(\n translate: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const label = translate('sales.search.badge.quote', 'Quote')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'quote_number', 'quoteNumber') ?? readRecordText(customFields, 'quote_number', 'quoteNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n resolveCustomerName(record),\n readRecordText(record, 'status'),\n readRecordText(record, 'valid_until', 'validUntil'),\n )\n return { title, subtitle, icon: 'file-text', badge: label }\n}\n\nfunction buildInvoicePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoice', 'Invoice')\n const title = buildDocumentTitle(label, readRecordText(record, 'invoice_number', 'invoiceNumber'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n readRecordText(record, 'due_date', 'dueDate'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'receipt', badge: label }\n}\n\nfunction buildCreditMemoPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemo', 'Credit memo')\n const title = buildDocumentTitle(\n label,\n readRecordText(record, 'credit_memo_number', 'creditMemoNumber'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'status'),\n formatAmount(readRecordText(record, 'grand_total_gross_amount', 'grandTotalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title, subtitle, icon: 'file-minus', badge: label }\n}\n\nfunction buildShipmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipment', 'Shipment')\n const title = buildDocumentTitle(label, readRecordText(record, 'shipment_number', 'shipmentNumber'), readRecordText(record, 'id'))\n const tracking = record.tracking_numbers ?? record.trackingNumbers\n const subtitle = formatSubtitle(readRecordText(record, 'status'), Array.isArray(tracking) ? tracking.join(', ') : tracking)\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildPaymentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.payment', 'Payment')\n const title = buildDocumentTitle(label, readRecordText(record, 'payment_reference', 'paymentReference'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildPaymentAllocationPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentAllocation', 'Payment allocation')\n const title = buildDocumentTitle(label, null, readRecordText(record, 'id'))\n const subtitle = formatSubtitle(formatAmount(readRecordText(record, 'amount'), record.currency_code ?? record.currencyCode))\n return { title, subtitle, icon: 'layers', badge: label }\n}\n\nfunction buildDocumentAddressPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.address', 'Address')\n const title = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'company_name', 'companyName'),\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'id'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'address_line1', 'addressLine1'),\n readRecordText(record, 'city'),\n readRecordText(record, 'region'),\n readRecordText(record, 'country'),\n )\n return { title: title ?? label, subtitle, icon: 'map-pin', badge: label }\n}\n\nfunction buildNotePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.note', 'Note')\n const title = snippet(readRecordText(record, 'body'), 120) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'author_user_id', 'authorUserId'))\n return { title, subtitle, icon: 'sticky-note', badge: label }\n}\n\nfunction buildOrderLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderLine', 'Order line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildQuoteLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteLine', 'Quote line')\n const lineTitle = pickText(\n readRecordText(record, 'name'),\n readRecordText(record, 'description'),\n readRecordText(record, 'line_number', 'lineNumber'),\n )\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n readRecordText(record, 'status'),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildInvoiceLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.invoiceLine', 'Invoice line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildCreditMemoLinePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.creditMemoLine', 'Credit memo line')\n const lineTitle = pickText(readRecordText(record, 'description'), readRecordText(record, 'line_number', 'lineNumber'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'total_gross_amount', 'totalGrossAmount'), record.currency_code ?? record.currencyCode),\n )\n return { title: lineTitle ? `${label} ${lineTitle}` : label, subtitle, icon: 'list', badge: label }\n}\n\nfunction buildShipmentItemPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shipmentItem', 'Shipment item')\n const subtitle = formatSubtitle(readRecordText(record, 'quantity'))\n return { title: label, subtitle, icon: 'package', badge: label }\n}\n\nfunction buildOrderAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.orderAdjustment', 'Order adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildQuoteAdjustmentPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.quoteAdjustment', 'Quote adjustment')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'code'), readRecordText(record, 'id'))\n const subtitle = formatSubtitle(\n readRecordText(record, 'kind'),\n formatAmount(readRecordText(record, 'amount_gross', 'amountGross'), record.currency_code ?? record.currencyCode),\n )\n return { title: title ? `${label} ${title}` : label, subtitle, icon: 'sliders', badge: label }\n}\n\nfunction buildChannelPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.channel', 'Channel')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'code'), readRecordText(record, 'status'))\n return { title, subtitle, icon: 'store', badge: label }\n}\n\nfunction buildShippingMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.shippingMethod', 'Shipping method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'carrier_code', 'carrierCode'), readRecordText(record, 'service_level', 'serviceLevel'))\n return { title, subtitle, icon: 'truck', badge: label }\n}\n\nfunction buildDeliveryWindowPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.deliveryWindow', 'Delivery window')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'lead_time_days', 'leadTimeDays'), readRecordText(record, 'timezone'))\n return { title, subtitle, icon: 'clock', badge: label }\n}\n\nfunction buildPaymentMethodPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.paymentMethod', 'Payment method')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'provider_key', 'providerKey'))\n return { title, subtitle, icon: 'credit-card', badge: label }\n}\n\nfunction buildTaxRatePresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.taxRate', 'Tax rate')\n const title = pickText(readRecordText(record, 'name'), readRecordText(record, 'code'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'rate'), readRecordText(record, 'country_code', 'countryCode'))\n return { title, subtitle, icon: 'percent', badge: label }\n}\n\nfunction buildDocumentTagPresenter(translate: TranslateFn, record: Record<string, unknown>): SearchResultPresenter {\n const label = translate('sales.search.badge.documentTag', 'Document tag')\n const title = pickText(readRecordText(record, 'label'), readRecordText(record, 'slug'), readRecordText(record, 'id')) ?? label\n const subtitle = formatSubtitle(readRecordText(record, 'description'))\n return { title, subtitle, icon: 'tag', badge: label }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'sales:sales_channel',\n aclFeatures: ['sales.channels.manage'],\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? ctx.customFields.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Website', record.website_url ?? record.websiteUrl)\n appendLine(lines, 'Contact email', record.contact_email ?? record.contactEmail)\n appendLine(lines, 'Contact phone', record.contact_phone ?? record.contactPhone)\n return buildIndexSource(ctx, buildChannelPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildChannelPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const channelId = readRecordText(ctx.record, 'id')\n return channelId ? `${SALES_CHANNELS_URL}/${encodeURIComponent(channelId)}/edit` : SALES_CHANNELS_URL\n },\n },\n {\n entityId: 'sales:sales_order',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Order number', record.order_number ?? record.orderNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Fulfillment status', record.fulfillment_status ?? record.fulfillmentStatus)\n appendLine(lines, 'Payment status', record.payment_status ?? record.paymentStatus)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildOrderPresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderPresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildOrderUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_quote',\n aclFeatures: ['sales.quotes.view'],\n enabled: true,\n priority: 10,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quote number', record.quote_number ?? record.quoteNumber)\n appendLine(lines, 'Customer', resolveCustomerName(record))\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Valid until', record.valid_until ?? record.validUntil)\n appendLine(lines, 'External reference', record.external_reference ?? record.externalReference)\n appendLine(lines, 'Customer reference', record.customer_reference ?? record.customerReference)\n return buildIndexSource(ctx, buildQuotePresenter(translate, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuotePresenter(translate, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(readRecordText(ctx.record, 'id')),\n },\n {\n entityId: 'sales:sales_order_line',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 7,\n fieldPolicy: {\n searchable: ['name', 'description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata', 'catalog_snapshot', 'configuration', 'promotion_snapshot'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildOrderLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_line',\n aclFeatures: ['sales.quotes.view'],\n enabled: true,\n priority: 7,\n fieldPolicy: {\n searchable: ['name', 'description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata', 'catalog_snapshot', 'configuration', 'promotion_snapshot'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n appendLine(lines, 'Status', record.status)\n return buildIndexSource(ctx, buildQuoteLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_order_adjustment',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildOrderAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildOrderAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_quote_adjustment',\n aclFeatures: ['sales.quotes.view'],\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Amount gross', record.amount_gross ?? record.amountGross)\n return buildIndexSource(ctx, buildQuoteAdjustmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildQuoteAdjustmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildQuoteUrl(resolveQuoteId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Shipment number', record.shipment_number ?? record.shipmentNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Carrier', record.carrier_name ?? record.carrierName)\n appendLine(lines, 'Tracking numbers', record.tracking_numbers ?? record.trackingNumbers)\n return buildIndexSource(ctx, buildShipmentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_shipment_item',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Shipment', record.shipment_id ?? record.shipmentId)\n return buildIndexSource(ctx, buildShipmentItemPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShipmentItemPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice',\n aclFeatures: ['sales.invoices.manage'],\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Invoice number', record.invoice_number ?? record.invoiceNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Due date', record.due_date ?? record.dueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildInvoicePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoicePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_invoice_line',\n aclFeatures: ['sales.invoices.manage'],\n enabled: true,\n priority: 5,\n fieldPolicy: {\n searchable: ['description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n return buildIndexSource(ctx, buildInvoiceLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildInvoiceLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo',\n aclFeatures: ['sales.credit_memos.manage'],\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Credit memo number', record.credit_memo_number ?? record.creditMemoNumber)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Issue date', record.issue_date ?? record.issueDate)\n appendLine(lines, 'Total gross', record.grand_total_gross_amount ?? record.grandTotalGrossAmount)\n return buildIndexSource(ctx, buildCreditMemoPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_credit_memo_line',\n aclFeatures: ['sales.credit_memos.manage'],\n enabled: true,\n priority: 5,\n fieldPolicy: {\n searchable: ['description', 'quantity_unit', 'normalized_unit'],\n excluded: ['uom_snapshot', 'metadata'],\n },\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Kind', record.kind)\n appendLine(lines, 'Quantity', record.quantity)\n appendLine(lines, 'Quantity unit', record.quantity_unit ?? record.quantityUnit)\n appendLine(lines, 'Normalized quantity', record.normalized_quantity ?? record.normalizedQuantity)\n appendLine(lines, 'Normalized unit', record.normalized_unit ?? record.normalizedUnit)\n return buildIndexSource(ctx, buildCreditMemoLinePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildCreditMemoLinePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Payment reference', record.payment_reference ?? record.paymentReference)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n return buildIndexSource(ctx, buildPaymentPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_payment_allocation',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 5,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Amount', record.amount)\n appendLine(lines, 'Currency', record.currency_code ?? record.currencyCode)\n appendLine(lines, 'Order', record.order_id ?? record.orderId)\n appendLine(lines, 'Invoice', record.invoice_id ?? record.invoiceId)\n return buildIndexSource(ctx, buildPaymentAllocationPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentAllocationPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => buildOrderUrl(resolveOrderId(ctx.record)),\n },\n {\n entityId: 'sales:sales_note',\n aclFeatures: ['sales.orders.view'],\n enabled: false,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Body', record.body)\n appendLine(lines, 'Author', record.author_user_id ?? record.authorUserId)\n appendLine(lines, 'Context type', record.context_type ?? record.contextType)\n return buildIndexSource(ctx, buildNotePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildNotePresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_document_address',\n aclFeatures: ['sales.orders.view'],\n enabled: false,\n priority: 7,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Company', record.company_name ?? record.companyName)\n appendLine(lines, 'Address', record.address_line1 ?? record.addressLine1)\n appendLine(lines, 'City', record.city)\n appendLine(lines, 'Region', record.region)\n appendLine(lines, 'Country', record.country)\n return buildIndexSource(ctx, buildDocumentAddressPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentAddressPresenter(translate, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const kind = resolveDocumentKind(ctx.record)\n const documentId = resolveDocumentId(ctx.record)\n return resolveDocumentUrl(kind, documentId)\n },\n },\n {\n entityId: 'sales:sales_shipping_method',\n aclFeatures: ['sales.settings.manage'],\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Carrier', record.carrier_code ?? record.carrierCode)\n appendLine(lines, 'Service level', record.service_level ?? record.serviceLevel)\n return buildIndexSource(ctx, buildShippingMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildShippingMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_delivery_window',\n aclFeatures: ['sales.settings.manage'],\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Lead time', record.lead_time_days ?? record.leadTimeDays)\n appendLine(lines, 'Timezone', record.timezone)\n return buildIndexSource(ctx, buildDeliveryWindowPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDeliveryWindowPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_payment_method',\n aclFeatures: ['sales.settings.manage'],\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Provider', record.provider_key ?? record.providerKey)\n appendLine(lines, 'Terms', record.terms)\n return buildIndexSource(ctx, buildPaymentMethodPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildPaymentMethodPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_tax_rate',\n aclFeatures: ['sales.settings.manage'],\n enabled: true,\n priority: 4,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Rate', record.rate)\n appendLine(lines, 'Country', record.country_code ?? record.countryCode)\n return buildIndexSource(ctx, buildTaxRatePresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildTaxRatePresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_CONFIG_URL,\n },\n {\n entityId: 'sales:sales_document_tag',\n aclFeatures: ['sales.orders.view'],\n enabled: true,\n priority: 3,\n buildSource: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Label', record.label)\n appendLine(lines, 'Slug', record.slug)\n appendLine(lines, 'Description', record.description)\n return buildIndexSource(ctx, buildDocumentTagPresenter(translate, record), lines)\n },\n formatResult: async (ctx) => {\n const { t: translate } = await resolveTranslations()\n return buildDocumentTagPresenter(translate, ctx.record)\n },\n resolveUrl: async () => SALES_ORDERS_URL,\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -75,6 +75,7 @@ const searchConfig = {
|
|
|
75
75
|
entities: [
|
|
76
76
|
{
|
|
77
77
|
entityId: "staff:staff_team",
|
|
78
|
+
aclFeatures: ["staff.view"],
|
|
78
79
|
enabled: true,
|
|
79
80
|
priority: 7,
|
|
80
81
|
buildSource: async (ctx) => {
|
|
@@ -97,6 +98,7 @@ const searchConfig = {
|
|
|
97
98
|
},
|
|
98
99
|
{
|
|
99
100
|
entityId: "staff:staff_team_member",
|
|
101
|
+
aclFeatures: ["staff.view"],
|
|
100
102
|
enabled: true,
|
|
101
103
|
priority: 7,
|
|
102
104
|
buildSource: async (ctx) => {
|
|
@@ -120,6 +122,7 @@ const searchConfig = {
|
|
|
120
122
|
},
|
|
121
123
|
{
|
|
122
124
|
entityId: "staff:staff_team_role",
|
|
125
|
+
aclFeatures: ["staff.view"],
|
|
123
126
|
enabled: true,
|
|
124
127
|
priority: 7,
|
|
125
128
|
buildSource: async (ctx) => {
|
|
@@ -143,6 +146,7 @@ const searchConfig = {
|
|
|
143
146
|
},
|
|
144
147
|
{
|
|
145
148
|
entityId: "staff:staff_time_project",
|
|
149
|
+
aclFeatures: ["staff.timesheets.projects.view"],
|
|
146
150
|
enabled: true,
|
|
147
151
|
priority: 7,
|
|
148
152
|
buildSource: async (ctx) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/staff/search.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n SearchModuleConfig,\n SearchBuildContext,\n SearchResultPresenter,\n SearchIndexSource,\n} from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\nfunction pickString(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue\n const trimmed = candidate.trim()\n if (trimmed.length > 0) return trimmed\n }\n return null\n}\n\nfunction snippet(value: unknown, max = 140): string | undefined {\n if (typeof value !== 'string') return undefined\n const trimmed = value.trim()\n if (!trimmed.length) return undefined\n if (trimmed.length <= max) return trimmed\n return `${trimmed.slice(0, max - 3)}...`\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => (item === null || item === undefined ? '' : String(item))).filter(Boolean).join(', ')\n : (typeof value === 'object' ? JSON.stringify(value) : String(value))\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {\n for (const [key, value] of Object.entries(customFields)) {\n if (value === null || value === undefined) continue\n appendLine(lines, key.replace(/^cf:/, ''), value)\n }\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const text = parts\n .map((part) => (part === null || part === undefined ? '' : String(part)))\n .map((part) => part.trim())\n .filter(Boolean)\n if (text.length === 0) return undefined\n return text.join(' \u00B7 ')\n}\n\nfunction buildTeamPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const title =\n pickString(record.name, record.display_name, record.displayName, customFields.name, customFields.display_name) ??\n (record.id as string | undefined) ??\n t('staff.search.badge.team', 'Team')\n const description = snippet(record.description ?? customFields.description)\n return {\n title: String(title),\n subtitle: formatSubtitle(description),\n icon: 'users',\n badge: t('staff.search.badge.team', 'Team'),\n }\n}\n\nfunction buildTeamMemberPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const title =\n pickString(record.display_name, record.displayName, record.name, customFields.display_name, customFields.name) ??\n (record.id as string | undefined) ??\n t('staff.search.badge.teamMember', 'Employee')\n const description = snippet(record.description ?? customFields.description)\n const tags = Array.isArray(record.tags) ? record.tags.join(', ') : undefined\n return {\n title: String(title),\n subtitle: formatSubtitle(description, tags),\n icon: 'user',\n badge: t('staff.search.badge.teamMember', 'Employee'),\n }\n}\n\nfunction buildTeamRolePresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const title =\n pickString(record.name, record.display_name, record.displayName, customFields.name, customFields.display_name) ??\n (record.id as string | undefined) ??\n t('staff.search.badge.teamRole', 'Role')\n const description = snippet(record.description ?? customFields.description)\n return {\n title: String(title),\n subtitle: formatSubtitle(description),\n icon: 'shield',\n badge: t('staff.search.badge.teamRole', 'Role'),\n }\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n appendCustomFieldLines(lines, ctx.customFields)\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'staff:staff_team',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? record.display_name ?? ctx.customFields.name)\n appendLine(lines, 'Description', record.description ?? ctx.customFields.description)\n appendLine(lines, 'Active', record.is_active ?? record.isActive)\n return buildIndexSource(ctx, buildTeamPresenter(t, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildTeamPresenter(t, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => `/backend/staff/teams/${encodeURIComponent(String(ctx.record.id))}/edit`,\n fieldPolicy: {\n searchable: ['name', 'description'],\n },\n },\n {\n entityId: 'staff:staff_team_member',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.display_name ?? record.displayName ?? ctx.customFields.display_name)\n appendLine(lines, 'Description', record.description ?? ctx.customFields.description)\n appendLine(lines, 'Tags', record.tags)\n appendLine(lines, 'Active', record.is_active ?? record.isActive)\n return buildIndexSource(ctx, buildTeamMemberPresenter(t, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildTeamMemberPresenter(t, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => `/backend/staff/team-members/${encodeURIComponent(String(ctx.record.id))}`,\n fieldPolicy: {\n searchable: ['display_name', 'description', 'tags'],\n },\n },\n {\n entityId: 'staff:staff_team_role',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? record.display_name ?? ctx.customFields.name)\n appendLine(lines, 'Description', record.description ?? ctx.customFields.description)\n appendLine(lines, 'Icon', record.appearance_icon ?? record.appearanceIcon)\n appendLine(lines, 'Color', record.appearance_color ?? record.appearanceColor)\n return buildIndexSource(ctx, buildTeamRolePresenter(t, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildTeamRolePresenter(t, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => `/backend/staff/team-roles/${encodeURIComponent(String(ctx.record.id))}/edit`,\n fieldPolicy: {\n searchable: ['name', 'description', 'appearance_icon', 'appearance_color'],\n },\n },\n {\n entityId: 'staff:staff_time_project',\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Type', record.project_type ?? record.projectType)\n appendLine(lines, 'Cost Center', record.cost_center ?? record.costCenter)\n const presenter: SearchResultPresenter = {\n title: String(record.name ?? record.id ?? t('staff.search.badge.timeProject', 'Project')),\n subtitle: formatSubtitle(record.code, record.project_type ?? record.projectType),\n icon: 'clock',\n badge: t('staff.search.badge.timeProject', 'Project'),\n }\n return buildIndexSource(ctx, presenter, lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return {\n title: String(ctx.record.name ?? ctx.record.id ?? ''),\n subtitle: formatSubtitle(ctx.record.code, ctx.record.project_type ?? ctx.record.projectType),\n icon: 'clock',\n badge: t('staff.search.badge.timeProject', 'Project'),\n }\n },\n resolveUrl: async (ctx) => `/backend/staff/timesheets/projects/${encodeURIComponent(String(ctx.record.id))}`,\n fieldPolicy: {\n searchable: ['name', 'code', 'description', 'project_type', 'cost_center'],\n },\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
|
|
5
|
-
"mappings": "AAOA,SAAS,2BAA2B;AAEpC,SAAS,cAAc,YAA2C;AAChE,aAAW,aAAa,YAAY;AAClC,QAAI,OAAO,cAAc,SAAU;AACnC,UAAM,UAAU,UAAU,KAAK;AAC/B,QAAI,QAAQ,SAAS,EAAG,QAAO;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,QAAQ,OAAgB,MAAM,KAAyB;AAC9D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,MAAI,QAAQ,UAAU,IAAK,QAAO;AAClC,SAAO,GAAG,QAAQ,MAAM,GAAG,MAAM,CAAC,CAAC;AACrC;AAEA,SAAS,WAAW,OAAiB,OAAe,OAAgB;AAClE,MAAI,UAAU,QAAQ,UAAU,OAAW;AAC3C,QAAM,OAAO,MAAM,QAAQ,KAAK,IAC5B,MAAM,IAAI,CAAC,SAAU,SAAS,QAAQ,SAAS,SAAY,KAAK,OAAO,IAAI,CAAE,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,IACvG,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AACrE,MAAI,CAAC,KAAK,KAAK,EAAG;AAClB,QAAM,KAAK,GAAG,KAAK,KAAK,IAAI,EAAE;AAChC;AAEA,SAAS,uBAAuB,OAAiB,cAAuC;AACtF,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,YAAY,GAAG;AACvD,QAAI,UAAU,QAAQ,UAAU,OAAW;AAC3C,eAAW,OAAO,IAAI,QAAQ,QAAQ,EAAE,GAAG,KAAK;AAAA,EAClD;AACF;AAEA,SAAS,kBAAkB,OAA2C;AACpE,QAAM,OAAO,MACV,IAAI,CAAC,SAAU,SAAS,QAAQ,SAAS,SAAY,KAAK,OAAO,IAAI,CAAE,EACvE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO;AACjB,MAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,SAAO,KAAK,KAAK,QAAK;AACxB;AAEA,SAAS,mBACP,GACA,QACA,cACuB;AACvB,QAAM,QACJ,WAAW,OAAO,MAAM,OAAO,cAAc,OAAO,aAAa,aAAa,MAAM,aAAa,YAAY,KAC5G,OAAO,MACR,EAAE,2BAA2B,MAAM;AACrC,QAAM,cAAc,QAAQ,OAAO,eAAe,aAAa,WAAW;AAC1E,SAAO;AAAA,IACL,OAAO,OAAO,KAAK;AAAA,IACnB,UAAU,eAAe,WAAW;AAAA,IACpC,MAAM;AAAA,IACN,OAAO,EAAE,2BAA2B,MAAM;AAAA,EAC5C;AACF;AAEA,SAAS,yBACP,GACA,QACA,cACuB;AACvB,QAAM,QACJ,WAAW,OAAO,cAAc,OAAO,aAAa,OAAO,MAAM,aAAa,cAAc,aAAa,IAAI,KAC5G,OAAO,MACR,EAAE,iCAAiC,UAAU;AAC/C,QAAM,cAAc,QAAQ,OAAO,eAAe,aAAa,WAAW;AAC1E,QAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI;AACnE,SAAO;AAAA,IACL,OAAO,OAAO,KAAK;AAAA,IACnB,UAAU,eAAe,aAAa,IAAI;AAAA,IAC1C,MAAM;AAAA,IACN,OAAO,EAAE,iCAAiC,UAAU;AAAA,EACtD;AACF;AAEA,SAAS,uBACP,GACA,QACA,cACuB;AACvB,QAAM,QACJ,WAAW,OAAO,MAAM,OAAO,cAAc,OAAO,aAAa,aAAa,MAAM,aAAa,YAAY,KAC5G,OAAO,MACR,EAAE,+BAA+B,MAAM;AACzC,QAAM,cAAc,QAAQ,OAAO,eAAe,aAAa,WAAW;AAC1E,SAAO;AAAA,IACL,OAAO,OAAO,KAAK;AAAA,IACnB,UAAU,eAAe,WAAW;AAAA,IACpC,MAAM;AAAA,IACN,OAAO,EAAE,+BAA+B,MAAM;AAAA,EAChD;AACF;AAEA,SAAS,iBACP,KACA,WACA,OAC0B;AAC1B,yBAAuB,OAAO,IAAI,YAAY;AAC9C,MAAI,CAAC,MAAM,OAAQ,QAAO;AAC1B,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,gBAAgB,EAAE,QAAQ,IAAI,QAAQ,cAAc,IAAI,aAAa;AAAA,EACvE;AACF;AAEO,MAAM,eAAmC;AAAA,EAC9C,UAAU;AAAA,IACR;AAAA,MACE,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa,OAAO,QAAQ;AAC1B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,cAAM,SAAS,IAAI;AACnB,cAAM,QAAkB,CAAC;AACzB,mBAAW,OAAO,QAAQ,OAAO,QAAQ,OAAO,gBAAgB,IAAI,aAAa,IAAI;AACrF,mBAAW,OAAO,eAAe,OAAO,eAAe,IAAI,aAAa,WAAW;AACnF,mBAAW,OAAO,UAAU,OAAO,aAAa,OAAO,QAAQ;AAC/D,eAAO,iBAAiB,KAAK,mBAAmB,GAAG,QAAQ,IAAI,YAAY,GAAG,KAAK;AAAA,MACrF;AAAA,MACA,cAAc,OAAO,QAAQ;AAC3B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,eAAO,mBAAmB,GAAG,IAAI,QAAQ,IAAI,YAAY;AAAA,MAC3D;AAAA,MACA,YAAY,OAAO,QAAQ,wBAAwB,mBAAmB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC5F,aAAa;AAAA,QACX,YAAY,CAAC,QAAQ,aAAa;AAAA,MACpC;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa,OAAO,QAAQ;AAC1B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,cAAM,SAAS,IAAI;AACnB,cAAM,QAAkB,CAAC;AACzB,mBAAW,OAAO,QAAQ,OAAO,gBAAgB,OAAO,eAAe,IAAI,aAAa,YAAY;AACpG,mBAAW,OAAO,eAAe,OAAO,eAAe,IAAI,aAAa,WAAW;AACnF,mBAAW,OAAO,QAAQ,OAAO,IAAI;AACrC,mBAAW,OAAO,UAAU,OAAO,aAAa,OAAO,QAAQ;AAC/D,eAAO,iBAAiB,KAAK,yBAAyB,GAAG,QAAQ,IAAI,YAAY,GAAG,KAAK;AAAA,MAC3F;AAAA,MACA,cAAc,OAAO,QAAQ;AAC3B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,eAAO,yBAAyB,GAAG,IAAI,QAAQ,IAAI,YAAY;AAAA,MACjE;AAAA,MACA,YAAY,OAAO,QAAQ,+BAA+B,mBAAmB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MACnG,aAAa;AAAA,QACX,YAAY,CAAC,gBAAgB,eAAe,MAAM;AAAA,MACpD;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa,OAAO,QAAQ;AAC1B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,cAAM,SAAS,IAAI;AACnB,cAAM,QAAkB,CAAC;AACzB,mBAAW,OAAO,QAAQ,OAAO,QAAQ,OAAO,gBAAgB,IAAI,aAAa,IAAI;AACrF,mBAAW,OAAO,eAAe,OAAO,eAAe,IAAI,aAAa,WAAW;AACnF,mBAAW,OAAO,QAAQ,OAAO,mBAAmB,OAAO,cAAc;AACzE,mBAAW,OAAO,SAAS,OAAO,oBAAoB,OAAO,eAAe;AAC5E,eAAO,iBAAiB,KAAK,uBAAuB,GAAG,QAAQ,IAAI,YAAY,GAAG,KAAK;AAAA,MACzF;AAAA,MACA,cAAc,OAAO,QAAQ;AAC3B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,eAAO,uBAAuB,GAAG,IAAI,QAAQ,IAAI,YAAY;AAAA,MAC/D;AAAA,MACA,YAAY,OAAO,QAAQ,6BAA6B,mBAAmB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MACjG,aAAa;AAAA,QACX,YAAY,CAAC,QAAQ,eAAe,mBAAmB,kBAAkB;AAAA,MAC3E;AAAA,IACF;AAAA,IACA;AAAA,MACE,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa,OAAO,QAAQ;AAC1B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,cAAM,SAAS,IAAI;AACnB,cAAM,QAAkB,CAAC;AACzB,mBAAW,OAAO,QAAQ,OAAO,IAAI;AACrC,mBAAW,OAAO,QAAQ,OAAO,IAAI;AACrC,mBAAW,OAAO,eAAe,OAAO,WAAW;AACnD,mBAAW,OAAO,QAAQ,OAAO,gBAAgB,OAAO,WAAW;AACnE,mBAAW,OAAO,eAAe,OAAO,eAAe,OAAO,UAAU;AACxE,cAAM,YAAmC;AAAA,UACvC,OAAO,OAAO,OAAO,QAAQ,OAAO,MAAM,EAAE,kCAAkC,SAAS,CAAC;AAAA,UACxF,UAAU,eAAe,OAAO,MAAM,OAAO,gBAAgB,OAAO,WAAW;AAAA,UAC/E,MAAM;AAAA,UACN,OAAO,EAAE,kCAAkC,SAAS;AAAA,QACtD;AACA,eAAO,iBAAiB,KAAK,WAAW,KAAK;AAAA,MAC/C;AAAA,MACA,cAAc,OAAO,QAAQ;AAC3B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,eAAO;AAAA,UACL,OAAO,OAAO,IAAI,OAAO,QAAQ,IAAI,OAAO,MAAM,EAAE;AAAA,UACpD,UAAU,eAAe,IAAI,OAAO,MAAM,IAAI,OAAO,gBAAgB,IAAI,OAAO,WAAW;AAAA,UAC3F,MAAM;AAAA,UACN,OAAO,EAAE,kCAAkC,SAAS;AAAA,QACtD;AAAA,MACF;AAAA,MACA,YAAY,OAAO,QAAQ,sCAAsC,mBAAmB,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MAC1G,aAAa;AAAA,QACX,YAAY,CAAC,QAAQ,QAAQ,eAAe,gBAAgB,aAAa;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,iBAAQ;AACR,MAAM,SAAS;",
|
|
4
|
+
"sourcesContent": ["import type {\n SearchModuleConfig,\n SearchBuildContext,\n SearchResultPresenter,\n SearchIndexSource,\n} from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\nfunction pickString(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue\n const trimmed = candidate.trim()\n if (trimmed.length > 0) return trimmed\n }\n return null\n}\n\nfunction snippet(value: unknown, max = 140): string | undefined {\n if (typeof value !== 'string') return undefined\n const trimmed = value.trim()\n if (!trimmed.length) return undefined\n if (trimmed.length <= max) return trimmed\n return `${trimmed.slice(0, max - 3)}...`\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => (item === null || item === undefined ? '' : String(item))).filter(Boolean).join(', ')\n : (typeof value === 'object' ? JSON.stringify(value) : String(value))\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction appendCustomFieldLines(lines: string[], customFields: Record<string, unknown>) {\n for (const [key, value] of Object.entries(customFields)) {\n if (value === null || value === undefined) continue\n appendLine(lines, key.replace(/^cf:/, ''), value)\n }\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const text = parts\n .map((part) => (part === null || part === undefined ? '' : String(part)))\n .map((part) => part.trim())\n .filter(Boolean)\n if (text.length === 0) return undefined\n return text.join(' \u00B7 ')\n}\n\nfunction buildTeamPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const title =\n pickString(record.name, record.display_name, record.displayName, customFields.name, customFields.display_name) ??\n (record.id as string | undefined) ??\n t('staff.search.badge.team', 'Team')\n const description = snippet(record.description ?? customFields.description)\n return {\n title: String(title),\n subtitle: formatSubtitle(description),\n icon: 'users',\n badge: t('staff.search.badge.team', 'Team'),\n }\n}\n\nfunction buildTeamMemberPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const title =\n pickString(record.display_name, record.displayName, record.name, customFields.display_name, customFields.name) ??\n (record.id as string | undefined) ??\n t('staff.search.badge.teamMember', 'Employee')\n const description = snippet(record.description ?? customFields.description)\n const tags = Array.isArray(record.tags) ? record.tags.join(', ') : undefined\n return {\n title: String(title),\n subtitle: formatSubtitle(description, tags),\n icon: 'user',\n badge: t('staff.search.badge.teamMember', 'Employee'),\n }\n}\n\nfunction buildTeamRolePresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n customFields: Record<string, unknown>,\n): SearchResultPresenter {\n const title =\n pickString(record.name, record.display_name, record.displayName, customFields.name, customFields.display_name) ??\n (record.id as string | undefined) ??\n t('staff.search.badge.teamRole', 'Role')\n const description = snippet(record.description ?? customFields.description)\n return {\n title: String(title),\n subtitle: formatSubtitle(description),\n icon: 'shield',\n badge: t('staff.search.badge.teamRole', 'Role'),\n }\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n appendCustomFieldLines(lines, ctx.customFields)\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'staff:staff_team',\n aclFeatures: ['staff.view'],\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? record.display_name ?? ctx.customFields.name)\n appendLine(lines, 'Description', record.description ?? ctx.customFields.description)\n appendLine(lines, 'Active', record.is_active ?? record.isActive)\n return buildIndexSource(ctx, buildTeamPresenter(t, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildTeamPresenter(t, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => `/backend/staff/teams/${encodeURIComponent(String(ctx.record.id))}/edit`,\n fieldPolicy: {\n searchable: ['name', 'description'],\n },\n },\n {\n entityId: 'staff:staff_team_member',\n aclFeatures: ['staff.view'],\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.display_name ?? record.displayName ?? ctx.customFields.display_name)\n appendLine(lines, 'Description', record.description ?? ctx.customFields.description)\n appendLine(lines, 'Tags', record.tags)\n appendLine(lines, 'Active', record.is_active ?? record.isActive)\n return buildIndexSource(ctx, buildTeamMemberPresenter(t, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildTeamMemberPresenter(t, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => `/backend/staff/team-members/${encodeURIComponent(String(ctx.record.id))}`,\n fieldPolicy: {\n searchable: ['display_name', 'description', 'tags'],\n },\n },\n {\n entityId: 'staff:staff_team_role',\n aclFeatures: ['staff.view'],\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name ?? record.display_name ?? ctx.customFields.name)\n appendLine(lines, 'Description', record.description ?? ctx.customFields.description)\n appendLine(lines, 'Icon', record.appearance_icon ?? record.appearanceIcon)\n appendLine(lines, 'Color', record.appearance_color ?? record.appearanceColor)\n return buildIndexSource(ctx, buildTeamRolePresenter(t, record, ctx.customFields), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildTeamRolePresenter(t, ctx.record, ctx.customFields)\n },\n resolveUrl: async (ctx) => `/backend/staff/team-roles/${encodeURIComponent(String(ctx.record.id))}/edit`,\n fieldPolicy: {\n searchable: ['name', 'description', 'appearance_icon', 'appearance_color'],\n },\n },\n {\n entityId: 'staff:staff_time_project',\n aclFeatures: ['staff.timesheets.projects.view'],\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Description', record.description)\n appendLine(lines, 'Type', record.project_type ?? record.projectType)\n appendLine(lines, 'Cost Center', record.cost_center ?? record.costCenter)\n const presenter: SearchResultPresenter = {\n title: String(record.name ?? record.id ?? t('staff.search.badge.timeProject', 'Project')),\n subtitle: formatSubtitle(record.code, record.project_type ?? record.projectType),\n icon: 'clock',\n badge: t('staff.search.badge.timeProject', 'Project'),\n }\n return buildIndexSource(ctx, presenter, lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return {\n title: String(ctx.record.name ?? ctx.record.id ?? ''),\n subtitle: formatSubtitle(ctx.record.code, ctx.record.project_type ?? ctx.record.projectType),\n icon: 'clock',\n badge: t('staff.search.badge.timeProject', 'Project'),\n }\n },\n resolveUrl: async (ctx) => `/backend/staff/timesheets/projects/${encodeURIComponent(String(ctx.record.id))}`,\n fieldPolicy: {\n searchable: ['name', 'code', 'description', 'project_type', 'cost_center'],\n },\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -67,6 +67,7 @@ const searchConfig = {
|
|
|
67
67
|
entities: [
|
|
68
68
|
{
|
|
69
69
|
entityId: E.wms.warehouse,
|
|
70
|
+
aclFeatures: ["wms.view"],
|
|
70
71
|
enabled: true,
|
|
71
72
|
priority: 8,
|
|
72
73
|
buildSource: async (ctx) => {
|
|
@@ -91,6 +92,7 @@ const searchConfig = {
|
|
|
91
92
|
},
|
|
92
93
|
{
|
|
93
94
|
entityId: E.wms.warehouse_location,
|
|
95
|
+
aclFeatures: ["wms.view"],
|
|
94
96
|
enabled: true,
|
|
95
97
|
priority: 7,
|
|
96
98
|
buildSource: async (ctx) => {
|
|
@@ -116,6 +118,7 @@ const searchConfig = {
|
|
|
116
118
|
},
|
|
117
119
|
{
|
|
118
120
|
entityId: E.wms.product_inventory_profile,
|
|
121
|
+
aclFeatures: ["wms.view"],
|
|
119
122
|
enabled: true,
|
|
120
123
|
priority: 8,
|
|
121
124
|
buildSource: async (ctx) => {
|
|
@@ -156,6 +159,7 @@ const searchConfig = {
|
|
|
156
159
|
},
|
|
157
160
|
{
|
|
158
161
|
entityId: E.wms.inventory_lot,
|
|
162
|
+
aclFeatures: ["wms.view"],
|
|
159
163
|
enabled: true,
|
|
160
164
|
priority: 6,
|
|
161
165
|
buildSource: async (ctx) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/modules/wms/search.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n SearchBuildContext,\n SearchIndexSource,\n SearchModuleConfig,\n SearchResultPresenter,\n} from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { E } from '#generated/entities.ids.generated'\n\nconst WMS_ROOT_URL = '/backend/wms'\nconst WMS_INVENTORY_URL = '/backend/wms/inventory'\nconst WMS_CONFIG_URL = '/backend/config/wms'\n\nfunction pickString(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue\n const trimmed = candidate.trim()\n if (trimmed.length > 0) return trimmed\n }\n return null\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => (item == null ? '' : String(item))).filter(Boolean).join(', ')\n : typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const values = parts\n .map((part) => (part == null ? '' : String(part)).trim())\n .filter(Boolean)\n if (!values.length) return undefined\n return values.join(' \u00B7 ')\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n for (const [key, value] of Object.entries(ctx.customFields)) {\n appendLine(lines, key.replace(/^cf:/, ''), value)\n }\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nfunction buildWarehousePresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.warehouse', 'Warehouse')\n const title = pickString(record.name, record.code, record.id) ?? label\n const subtitle = formatSubtitle(record.code, record.city, record.country)\n return { title, subtitle, icon: 'warehouse', badge: label }\n}\n\nfunction buildLocationPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.location', 'Location')\n const title = pickString(record.code, record.id) ?? label\n const subtitle = formatSubtitle(record.type, record.warehouse_id ?? record.warehouseId)\n return { title, subtitle, icon: 'map-pinned', badge: label }\n}\n\nfunction buildInventoryProfilePresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.inventoryProfile', 'Inventory profile')\n const productId = pickString(record.catalog_product_id, record.catalogProductId)\n const variantId = pickString(record.catalog_variant_id, record.catalogVariantId)\n const title = variantId || productId || pickString(record.id) || label\n const subtitle = formatSubtitle(\n record.default_strategy ?? record.defaultStrategy,\n record.default_uom ?? record.defaultUom,\n variantId ? t('wms.search.profile.variantScoped', 'Variant-scoped') : t('wms.search.profile.productScoped', 'Product-scoped'),\n )\n return { title, subtitle, icon: 'boxes', badge: label }\n}\n\nfunction buildLotPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.lot', 'Inventory lot')\n const title = pickString(record.lot_number, record.lotNumber, record.batch_number, record.batchNumber, record.id) ?? label\n const subtitle = formatSubtitle(record.catalog_variant_id ?? record.catalogVariantId, record.status, record.expires_at ?? record.expiresAt)\n return { title, subtitle, icon: 'package-search', badge: label }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: E.wms.warehouse,\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'City', record.city)\n appendLine(lines, 'Country', record.country)\n appendLine(lines, 'Timezone', record.timezone)\n return buildIndexSource(ctx, buildWarehousePresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildWarehousePresenter(t, ctx.record)\n },\n resolveUrl: async () => WMS_CONFIG_URL,\n fieldPolicy: {\n searchable: ['name', 'code', 'city', 'country', 'timezone'],\n },\n },\n {\n entityId: E.wms.warehouse_location,\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Type', record.type)\n appendLine(lines, 'Warehouse', record.warehouse_id ?? record.warehouseId)\n appendLine(lines, 'Parent', record.parent_id ?? record.parentId)\n appendLine(lines, 'Capacity units', record.capacity_units ?? record.capacityUnits)\n appendLine(lines, 'Capacity weight', record.capacity_weight ?? record.capacityWeight)\n return buildIndexSource(ctx, buildLocationPresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildLocationPresenter(t, ctx.record)\n },\n resolveUrl: async () => WMS_CONFIG_URL,\n fieldPolicy: {\n searchable: ['code', 'type', 'warehouse_id', 'parent_id', 'capacity_units', 'capacity_weight'],\n },\n },\n {\n entityId: E.wms.product_inventory_profile,\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Product', record.catalog_product_id ?? record.catalogProductId)\n appendLine(lines, 'Variant', record.catalog_variant_id ?? record.catalogVariantId)\n appendLine(lines, 'Default UOM', record.default_uom ?? record.defaultUom)\n appendLine(lines, 'Strategy', record.default_strategy ?? record.defaultStrategy)\n appendLine(lines, 'Reorder point', record.reorder_point ?? record.reorderPoint)\n appendLine(lines, 'Safety stock', record.safety_stock ?? record.safetyStock)\n appendLine(lines, 'Track lot', record.track_lot ?? record.trackLot)\n appendLine(lines, 'Track serial', record.track_serial ?? record.trackSerial)\n appendLine(lines, 'Track expiration', record.track_expiration ?? record.trackExpiration)\n return buildIndexSource(ctx, buildInventoryProfilePresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildInventoryProfilePresenter(t, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const variantId = pickString(ctx.record.catalog_variant_id, ctx.record.catalogVariantId)\n if (variantId) return `${WMS_ROOT_URL}/sku/${variantId}`\n return WMS_CONFIG_URL\n },\n resolveLinks: async () => [{ href: WMS_INVENTORY_URL, label: 'Inventory console', kind: 'secondary' }],\n fieldPolicy: {\n searchable: [\n 'catalog_product_id',\n 'catalog_variant_id',\n 'default_uom',\n 'default_strategy',\n 'reorder_point',\n 'safety_stock',\n ],\n },\n },\n {\n entityId: E.wms.inventory_lot,\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Lot number', record.lot_number ?? record.lotNumber)\n appendLine(lines, 'Batch number', record.batch_number ?? record.batchNumber)\n appendLine(lines, 'SKU', record.sku)\n appendLine(lines, 'Variant', record.catalog_variant_id ?? record.catalogVariantId)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Expires at', record.expires_at ?? record.expiresAt)\n return buildIndexSource(ctx, buildLotPresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildLotPresenter(t, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const id = pickString(ctx.record.id)\n if (id) return `${WMS_ROOT_URL}/lot/${id}`\n return WMS_ROOT_URL\n },\n resolveLinks: async () => [{ href: WMS_CONFIG_URL, label: 'WMS configuration', kind: 'secondary' }],\n fieldPolicy: {\n searchable: ['lot_number', 'batch_number', 'sku', 'catalog_variant_id', 'status', 'expires_at'],\n },\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import type {\n SearchBuildContext,\n SearchIndexSource,\n SearchModuleConfig,\n SearchResultPresenter,\n} from '@open-mercato/shared/modules/search'\nimport type { TranslateFn } from '@open-mercato/shared/lib/i18n/context'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\nimport { E } from '#generated/entities.ids.generated'\n\nconst WMS_ROOT_URL = '/backend/wms'\nconst WMS_INVENTORY_URL = '/backend/wms/inventory'\nconst WMS_CONFIG_URL = '/backend/config/wms'\n\nfunction pickString(...candidates: Array<unknown>): string | null {\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue\n const trimmed = candidate.trim()\n if (trimmed.length > 0) return trimmed\n }\n return null\n}\n\nfunction appendLine(lines: string[], label: string, value: unknown) {\n if (value === null || value === undefined) return\n const text = Array.isArray(value)\n ? value.map((item) => (item == null ? '' : String(item))).filter(Boolean).join(', ')\n : typeof value === 'object'\n ? JSON.stringify(value)\n : String(value)\n if (!text.trim()) return\n lines.push(`${label}: ${text}`)\n}\n\nfunction formatSubtitle(...parts: Array<unknown>): string | undefined {\n const values = parts\n .map((part) => (part == null ? '' : String(part)).trim())\n .filter(Boolean)\n if (!values.length) return undefined\n return values.join(' \u00B7 ')\n}\n\nfunction buildIndexSource(\n ctx: SearchBuildContext,\n presenter: SearchResultPresenter,\n lines: string[],\n): SearchIndexSource | null {\n for (const [key, value] of Object.entries(ctx.customFields)) {\n appendLine(lines, key.replace(/^cf:/, ''), value)\n }\n if (!lines.length) return null\n return {\n text: lines,\n presenter,\n checksumSource: { record: ctx.record, customFields: ctx.customFields },\n }\n}\n\nfunction buildWarehousePresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.warehouse', 'Warehouse')\n const title = pickString(record.name, record.code, record.id) ?? label\n const subtitle = formatSubtitle(record.code, record.city, record.country)\n return { title, subtitle, icon: 'warehouse', badge: label }\n}\n\nfunction buildLocationPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.location', 'Location')\n const title = pickString(record.code, record.id) ?? label\n const subtitle = formatSubtitle(record.type, record.warehouse_id ?? record.warehouseId)\n return { title, subtitle, icon: 'map-pinned', badge: label }\n}\n\nfunction buildInventoryProfilePresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.inventoryProfile', 'Inventory profile')\n const productId = pickString(record.catalog_product_id, record.catalogProductId)\n const variantId = pickString(record.catalog_variant_id, record.catalogVariantId)\n const title = variantId || productId || pickString(record.id) || label\n const subtitle = formatSubtitle(\n record.default_strategy ?? record.defaultStrategy,\n record.default_uom ?? record.defaultUom,\n variantId ? t('wms.search.profile.variantScoped', 'Variant-scoped') : t('wms.search.profile.productScoped', 'Product-scoped'),\n )\n return { title, subtitle, icon: 'boxes', badge: label }\n}\n\nfunction buildLotPresenter(\n t: TranslateFn,\n record: Record<string, unknown>,\n): SearchResultPresenter {\n const label = t('wms.search.badge.lot', 'Inventory lot')\n const title = pickString(record.lot_number, record.lotNumber, record.batch_number, record.batchNumber, record.id) ?? label\n const subtitle = formatSubtitle(record.catalog_variant_id ?? record.catalogVariantId, record.status, record.expires_at ?? record.expiresAt)\n return { title, subtitle, icon: 'package-search', badge: label }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: E.wms.warehouse,\n aclFeatures: ['wms.view'],\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Name', record.name)\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'City', record.city)\n appendLine(lines, 'Country', record.country)\n appendLine(lines, 'Timezone', record.timezone)\n return buildIndexSource(ctx, buildWarehousePresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildWarehousePresenter(t, ctx.record)\n },\n resolveUrl: async () => WMS_CONFIG_URL,\n fieldPolicy: {\n searchable: ['name', 'code', 'city', 'country', 'timezone'],\n },\n },\n {\n entityId: E.wms.warehouse_location,\n aclFeatures: ['wms.view'],\n enabled: true,\n priority: 7,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Code', record.code)\n appendLine(lines, 'Type', record.type)\n appendLine(lines, 'Warehouse', record.warehouse_id ?? record.warehouseId)\n appendLine(lines, 'Parent', record.parent_id ?? record.parentId)\n appendLine(lines, 'Capacity units', record.capacity_units ?? record.capacityUnits)\n appendLine(lines, 'Capacity weight', record.capacity_weight ?? record.capacityWeight)\n return buildIndexSource(ctx, buildLocationPresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildLocationPresenter(t, ctx.record)\n },\n resolveUrl: async () => WMS_CONFIG_URL,\n fieldPolicy: {\n searchable: ['code', 'type', 'warehouse_id', 'parent_id', 'capacity_units', 'capacity_weight'],\n },\n },\n {\n entityId: E.wms.product_inventory_profile,\n aclFeatures: ['wms.view'],\n enabled: true,\n priority: 8,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Product', record.catalog_product_id ?? record.catalogProductId)\n appendLine(lines, 'Variant', record.catalog_variant_id ?? record.catalogVariantId)\n appendLine(lines, 'Default UOM', record.default_uom ?? record.defaultUom)\n appendLine(lines, 'Strategy', record.default_strategy ?? record.defaultStrategy)\n appendLine(lines, 'Reorder point', record.reorder_point ?? record.reorderPoint)\n appendLine(lines, 'Safety stock', record.safety_stock ?? record.safetyStock)\n appendLine(lines, 'Track lot', record.track_lot ?? record.trackLot)\n appendLine(lines, 'Track serial', record.track_serial ?? record.trackSerial)\n appendLine(lines, 'Track expiration', record.track_expiration ?? record.trackExpiration)\n return buildIndexSource(ctx, buildInventoryProfilePresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildInventoryProfilePresenter(t, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const variantId = pickString(ctx.record.catalog_variant_id, ctx.record.catalogVariantId)\n if (variantId) return `${WMS_ROOT_URL}/sku/${variantId}`\n return WMS_CONFIG_URL\n },\n resolveLinks: async () => [{ href: WMS_INVENTORY_URL, label: 'Inventory console', kind: 'secondary' }],\n fieldPolicy: {\n searchable: [\n 'catalog_product_id',\n 'catalog_variant_id',\n 'default_uom',\n 'default_strategy',\n 'reorder_point',\n 'safety_stock',\n ],\n },\n },\n {\n entityId: E.wms.inventory_lot,\n aclFeatures: ['wms.view'],\n enabled: true,\n priority: 6,\n buildSource: async (ctx) => {\n const { t } = await resolveTranslations()\n const record = ctx.record\n const lines: string[] = []\n appendLine(lines, 'Lot number', record.lot_number ?? record.lotNumber)\n appendLine(lines, 'Batch number', record.batch_number ?? record.batchNumber)\n appendLine(lines, 'SKU', record.sku)\n appendLine(lines, 'Variant', record.catalog_variant_id ?? record.catalogVariantId)\n appendLine(lines, 'Status', record.status)\n appendLine(lines, 'Expires at', record.expires_at ?? record.expiresAt)\n return buildIndexSource(ctx, buildLotPresenter(t, record), lines)\n },\n formatResult: async (ctx) => {\n const { t } = await resolveTranslations()\n return buildLotPresenter(t, ctx.record)\n },\n resolveUrl: async (ctx) => {\n const id = pickString(ctx.record.id)\n if (id) return `${WMS_ROOT_URL}/lot/${id}`\n return WMS_ROOT_URL\n },\n resolveLinks: async () => [{ href: WMS_CONFIG_URL, label: 'WMS configuration', kind: 'secondary' }],\n fieldPolicy: {\n searchable: ['lot_number', 'batch_number', 'sku', 'catalog_variant_id', 'status', 'expires_at'],\n },\n },\n ],\n}\n\nexport default searchConfig\nexport const config = searchConfig\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const id = "id";
|
|
2
2
|
export const name = "name";
|
|
3
3
|
export const tenant_id = "tenant_id";
|
|
4
|
+
export const min_active_holders = "min_active_holders";
|
|
4
5
|
export const created_at = "created_at";
|
|
5
6
|
export const updated_at = "updated_at";
|
|
6
7
|
export const deleted_at = "deleted_at";
|
|
@@ -1873,6 +1873,7 @@ export const entityFieldsRegistry: Record<string, Record<string, string>> = {
|
|
|
1873
1873
|
"id": "id",
|
|
1874
1874
|
"name": "name",
|
|
1875
1875
|
"tenant_id": "tenant_id",
|
|
1876
|
+
"min_active_holders": "min_active_holders",
|
|
1876
1877
|
"created_at": "created_at",
|
|
1877
1878
|
"updated_at": "updated_at",
|
|
1878
1879
|
"deleted_at": "deleted_at"
|