@open-mercato/core 0.6.8-develop.7029.1.a1bb3363af → 0.6.8-develop.7031.1.005201cd70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/dist/modules/api_keys/backend/api-keys/page.js +3 -1
  2. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  3. package/dist/modules/attachments/components/AttachmentLibrary.js +2 -0
  4. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  5. package/dist/modules/audit_logs/backend/audit-logs/page.js +6 -0
  6. package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
  7. package/dist/modules/auth/backend/roles/page.js +3 -1
  8. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  9. package/dist/modules/auth/backend/users/page.js +2 -1
  10. package/dist/modules/auth/backend/users/page.js.map +2 -2
  11. package/dist/modules/business_rules/backend/logs/page.js +3 -1
  12. package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
  13. package/dist/modules/business_rules/backend/rules/page.js +3 -1
  14. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  15. package/dist/modules/business_rules/backend/sets/page.js +3 -1
  16. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  17. package/dist/modules/catalog/ai-agents.js +1 -1
  18. package/dist/modules/catalog/ai-agents.js.map +1 -1
  19. package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
  20. package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
  21. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +5 -2
  22. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
  23. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -0
  24. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  25. package/dist/modules/catalog/components/products/ProductsDataTable.js +7 -1
  26. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  27. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +2 -0
  28. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
  29. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +3 -0
  30. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
  31. package/dist/modules/configs/lib/system-status.js +9 -0
  32. package/dist/modules/configs/lib/system-status.js.map +2 -2
  33. package/dist/modules/currencies/backend/currencies/page.js +3 -1
  34. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  35. package/dist/modules/currencies/backend/exchange-rates/page.js +3 -1
  36. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  37. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +3 -1
  38. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
  39. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +3 -1
  40. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  41. package/dist/modules/customers/ai-tools/companies-pack.js +4 -1
  42. package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
  43. package/dist/modules/customers/ai-tools/deals-pack.js +4 -1
  44. package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
  45. package/dist/modules/customers/ai-tools/people-pack.js +4 -1
  46. package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
  47. package/dist/modules/customers/api/deals/map/route.js +2 -1
  48. package/dist/modules/customers/api/deals/map/route.js.map +2 -2
  49. package/dist/modules/customers/backend/customers/companies/page.js +3 -1
  50. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  51. package/dist/modules/customers/backend/customers/deals/page.js +5 -2
  52. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  53. package/dist/modules/customers/backend/customers/people/page.js +3 -1
  54. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  55. package/dist/modules/customers/components/CustomerTodosTable.js +1 -0
  56. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  57. package/dist/modules/data_sync/backend/data-sync/page.js +3 -1
  58. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  59. package/dist/modules/devices/backend/devices/page.js +3 -1
  60. package/dist/modules/devices/backend/devices/page.js.map +2 -2
  61. package/dist/modules/directory/backend/directory/organizations/page.js +2 -1
  62. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  63. package/dist/modules/directory/backend/directory/tenants/page.js +2 -1
  64. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  65. package/dist/modules/entities/api/records.js +4 -2
  66. package/dist/modules/entities/api/records.js.map +2 -2
  67. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +3 -1
  68. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  69. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +3 -0
  70. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
  71. package/dist/modules/eudr/backend/eudr/plots/page.js +3 -0
  72. package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
  73. package/dist/modules/eudr/backend/eudr/product-mappings/page.js +3 -0
  74. package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
  75. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +3 -0
  76. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
  77. package/dist/modules/eudr/backend/eudr/statements/page.js +3 -0
  78. package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
  79. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +1 -0
  80. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  81. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -0
  82. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  83. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +3 -0
  84. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
  85. package/dist/modules/inbox_ops/backend/inbox-ops/page.js +3 -0
  86. package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
  87. package/dist/modules/messages/components/MessagesInboxPageClient.js +4 -1
  88. package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
  89. package/dist/modules/payment_gateways/backend/payment-gateways/page.js +3 -1
  90. package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
  91. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +3 -0
  92. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  93. package/dist/modules/push_notifications/backend/push_notifications/page.js +3 -1
  94. package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
  95. package/dist/modules/query_index/lib/engine.js +108 -48
  96. package/dist/modules/query_index/lib/engine.js.map +2 -2
  97. package/dist/modules/resources/backend/resources/resource-types/page.js +3 -1
  98. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  99. package/dist/modules/resources/backend/resources/resources/page.js +3 -1
  100. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  101. package/dist/modules/sales/backend/sales/channels/offers/page.js +3 -0
  102. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  103. package/dist/modules/sales/backend/sales/channels/page.js +3 -0
  104. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  105. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +3 -0
  106. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  107. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +4 -0
  108. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  109. package/dist/modules/staff/backend/staff/leave-requests/page.js +3 -0
  110. package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
  111. package/dist/modules/staff/backend/staff/my-leave-requests/page.js +3 -0
  112. package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
  113. package/dist/modules/staff/backend/staff/team-members/page.js +3 -0
  114. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  115. package/dist/modules/staff/backend/staff/team-roles/page.js +3 -0
  116. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  117. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +3 -0
  118. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  119. package/dist/modules/staff/backend/staff/teams/page.js +3 -0
  120. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  121. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +3 -0
  122. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  123. package/dist/modules/warranty_claims/backend/page.js +3 -0
  124. package/dist/modules/warranty_claims/backend/page.js.map +2 -2
  125. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +3 -0
  126. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
  127. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +3 -0
  128. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
  129. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +3 -0
  130. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
  131. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +3 -0
  132. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
  133. package/dist/modules/wms/commands/inventory-actions.js +3 -0
  134. package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
  135. package/dist/modules/wms/components/backend/WmsConfigurationPage.js +4 -0
  136. package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +2 -2
  137. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +1 -0
  138. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
  139. package/dist/modules/wms/components/backend/WmsLotsListPage.js +1 -0
  140. package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
  141. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +27 -20
  142. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
  143. package/dist/modules/workflows/backend/definitions/page.js +3 -1
  144. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  145. package/dist/modules/workflows/backend/events/page.js +3 -1
  146. package/dist/modules/workflows/backend/events/page.js.map +2 -2
  147. package/dist/modules/workflows/backend/instances/page.js +3 -1
  148. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  149. package/dist/modules/workflows/backend/tasks/page.js +3 -1
  150. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  151. package/package.json +7 -7
  152. package/src/modules/api_keys/backend/api-keys/page.tsx +4 -1
  153. package/src/modules/attachments/components/AttachmentLibrary.tsx +3 -0
  154. package/src/modules/audit_logs/backend/audit-logs/page.tsx +8 -0
  155. package/src/modules/auth/backend/roles/page.tsx +4 -2
  156. package/src/modules/auth/backend/users/page.tsx +3 -2
  157. package/src/modules/business_rules/backend/logs/page.tsx +4 -1
  158. package/src/modules/business_rules/backend/rules/page.tsx +4 -1
  159. package/src/modules/business_rules/backend/sets/page.tsx +4 -1
  160. package/src/modules/catalog/ai-agents.ts +1 -1
  161. package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
  162. package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +12 -5
  163. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +3 -0
  164. package/src/modules/catalog/components/products/ProductsDataTable.tsx +7 -0
  165. package/src/modules/catalog/i18n/de.json +1 -0
  166. package/src/modules/catalog/i18n/en.json +1 -0
  167. package/src/modules/catalog/i18n/es.json +1 -0
  168. package/src/modules/catalog/i18n/ko.json +1 -0
  169. package/src/modules/catalog/i18n/pl.json +1 -0
  170. package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +4 -0
  171. package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +4 -0
  172. package/src/modules/configs/i18n/de.json +2 -0
  173. package/src/modules/configs/i18n/en.json +2 -0
  174. package/src/modules/configs/i18n/es.json +2 -0
  175. package/src/modules/configs/i18n/ko.json +2 -0
  176. package/src/modules/configs/i18n/pl.json +2 -0
  177. package/src/modules/configs/lib/system-status.ts +9 -0
  178. package/src/modules/currencies/backend/currencies/page.tsx +4 -1
  179. package/src/modules/currencies/backend/exchange-rates/page.tsx +4 -1
  180. package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +4 -1
  181. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +4 -1
  182. package/src/modules/customers/ai-tools/companies-pack.ts +4 -1
  183. package/src/modules/customers/ai-tools/deals-pack.ts +4 -1
  184. package/src/modules/customers/ai-tools/people-pack.ts +4 -1
  185. package/src/modules/customers/api/deals/map/route.ts +1 -0
  186. package/src/modules/customers/backend/customers/companies/page.tsx +4 -1
  187. package/src/modules/customers/backend/customers/deals/page.tsx +8 -2
  188. package/src/modules/customers/backend/customers/people/page.tsx +4 -1
  189. package/src/modules/customers/components/CustomerTodosTable.tsx +2 -0
  190. package/src/modules/data_sync/backend/data-sync/page.tsx +4 -1
  191. package/src/modules/devices/backend/devices/page.tsx +4 -1
  192. package/src/modules/directory/backend/directory/organizations/page.tsx +3 -1
  193. package/src/modules/directory/backend/directory/tenants/page.tsx +3 -1
  194. package/src/modules/entities/api/records.ts +2 -0
  195. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +4 -1
  196. package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +4 -0
  197. package/src/modules/eudr/backend/eudr/plots/page.tsx +4 -0
  198. package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +4 -0
  199. package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +4 -0
  200. package/src/modules/eudr/backend/eudr/statements/page.tsx +4 -0
  201. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +2 -1
  202. package/src/modules/feature_toggles/components/OverridesTable.tsx +2 -1
  203. package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +4 -0
  204. package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +4 -0
  205. package/src/modules/messages/components/MessagesInboxPageClient.tsx +4 -0
  206. package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +4 -1
  207. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +4 -0
  208. package/src/modules/push_notifications/backend/push_notifications/page.tsx +4 -1
  209. package/src/modules/query_index/lib/engine.ts +156 -53
  210. package/src/modules/resources/backend/resources/resource-types/page.tsx +4 -1
  211. package/src/modules/resources/backend/resources/resources/page.tsx +4 -1
  212. package/src/modules/sales/backend/sales/channels/offers/page.tsx +4 -0
  213. package/src/modules/sales/backend/sales/channels/page.tsx +4 -0
  214. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +4 -0
  215. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +5 -0
  216. package/src/modules/staff/backend/staff/leave-requests/page.tsx +4 -0
  217. package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +4 -0
  218. package/src/modules/staff/backend/staff/team-members/page.tsx +6 -0
  219. package/src/modules/staff/backend/staff/team-roles/page.tsx +4 -0
  220. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +4 -0
  221. package/src/modules/staff/backend/staff/teams/page.tsx +4 -0
  222. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +4 -0
  223. package/src/modules/warranty_claims/backend/page.tsx +4 -0
  224. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +4 -0
  225. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +4 -0
  226. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +4 -0
  227. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +4 -0
  228. package/src/modules/wms/commands/inventory-actions.ts +3 -0
  229. package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +5 -0
  230. package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +2 -0
  231. package/src/modules/wms/components/backend/WmsLotsListPage.tsx +2 -0
  232. package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +36 -20
  233. package/src/modules/workflows/backend/definitions/page.tsx +4 -1
  234. package/src/modules/workflows/backend/events/page.tsx +4 -1
  235. package/src/modules/workflows/backend/instances/page.tsx +4 -1
  236. package/src/modules/workflows/backend/tasks/page.tsx +4 -1
@@ -39,6 +39,7 @@ function WarrantyClaimsPortalListPage({ params }) {
39
39
  const [pageSize, setPageSize] = React.useState(20);
40
40
  const [total, setTotal] = React.useState(0);
41
41
  const [totalPages, setTotalPages] = React.useState(1);
42
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false);
42
43
  const [isLoading, setIsLoading] = React.useState(true);
43
44
  const [error, setError] = React.useState(null);
44
45
  const [search, setSearch] = React.useState("");
@@ -74,6 +75,7 @@ function WarrantyClaimsPortalListPage({ params }) {
74
75
  setRows(res.result.items);
75
76
  setTotal(res.result.total);
76
77
  setTotalPages(res.result.totalPages);
78
+ setTotalIsCapped(res.result.totalIsCapped === true);
77
79
  }).catch(() => {
78
80
  if (!cancelled) {
79
81
  setError(t("warranty_claims.portal.error.loadList"));
@@ -220,6 +222,7 @@ function WarrantyClaimsPortalListPage({ params }) {
220
222
  pageSize,
221
223
  total,
222
224
  totalPages,
225
+ totalIsCapped,
223
226
  onPageChange: setPage,
224
227
  onPageSizeChange: (nextPageSize) => {
225
228
  setPageSize(nextPageSize);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/warranty_claims/frontend/%5BorgSlug%5D/portal/claims/page.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport type { LegacyColumnDef as ColumnDef } from '@tanstack/react-table/legacy'\nimport { ChevronRight, Plus, ShieldCheck } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { formatRelativeTime } from '@open-mercato/shared/lib/time'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Tabs, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { DataTable } from '@open-mercato/ui'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\nimport { ErrorMessage } from '@open-mercato/ui/backend/detail'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { usePortalContext } from '@open-mercato/ui/portal/PortalContext'\nimport { PortalEmptyState } from '@open-mercato/ui/portal/components/PortalEmptyState'\nimport {\n ClaimStatusBadge,\n CLAIM_STATUS_BADGE_VARIANTS,\n type ClaimStatus,\n} from '../../../../backend/components/ClaimStatusBadge'\n\ntype Props = { params: { orgSlug: string } }\n\ntype PortalClaimRow = {\n id: string\n claimNumber: string\n claimType: string\n status: string\n createdAt: string | null\n updatedAt: string | null\n}\n\ntype PortalClaimsResponse = {\n items: PortalClaimRow[]\n total: number\n page: number\n pageSize: number\n totalPages: number\n}\n\nfunction formatDate(value: string | null, fallback: string, locale: string): string {\n if (!value) return fallback\n const date = new Date(value)\n if (Number.isNaN(date.getTime())) return value\n return date.toLocaleDateString(locale || undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\nexport default function WarrantyClaimsPortalListPage({ params }: Props) {\n const t = useT()\n const locale = useLocale()\n const router = useRouter()\n const { auth } = usePortalContext()\n const { user, loading } = auth\n const [rows, setRows] = React.useState<PortalClaimRow[]>([])\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const [isLoading, setIsLoading] = React.useState(true)\n const [error, setError] = React.useState<string | null>(null)\n const [search, setSearch] = React.useState('')\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n const [stateGroup, setStateGroup] = React.useState<'all' | 'open' | 'resolved'>('all')\n const [tabCounts, setTabCounts] = React.useState<Partial<Record<'all' | 'open' | 'resolved', number>>>({})\n\n React.useEffect(() => {\n if (!loading && !user) {\n router.replace(`/${params.orgSlug}/portal/login`)\n }\n }, [loading, user, router, params.orgSlug])\n\n const statusFilter = typeof filterValues.status === 'string' ? filterValues.status : ''\n\n React.useEffect(() => {\n if (!user) return\n let cancelled = false\n setIsLoading(true)\n setError(null)\n const queryParams = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })\n if (search.trim()) queryParams.set('search', search.trim())\n if (statusFilter) queryParams.set('status', statusFilter)\n else if (stateGroup !== 'all') queryParams.set('stateGroup', stateGroup)\n apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${queryParams.toString()}`,\n )\n .then((res) => {\n if (cancelled) return\n if (!res.ok || !res.result) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n return\n }\n setRows(res.result.items)\n setTotal(res.result.total)\n setTotalPages(res.result.totalPages)\n })\n .catch(() => {\n if (!cancelled) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n }\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false)\n })\n return () => {\n cancelled = true\n }\n }, [page, pageSize, search, stateGroup, statusFilter, t, user])\n\n React.useEffect(() => {\n if (!user) return\n const controller = new AbortController()\n const segments: Array<readonly ['all' | 'open' | 'resolved', string | null]> = [\n ['all', null],\n ['open', 'open'],\n ['resolved', 'resolved'],\n ]\n Promise.all(segments.map(async ([segment, state]) => {\n const query = new URLSearchParams({ page: '1', pageSize: '1' })\n if (state) query.set('stateGroup', state)\n const response = await apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${query.toString()}`,\n { signal: controller.signal },\n )\n if (!response.ok || !response.result) throw new Error('[internal] Failed to load portal claim counts')\n return [segment, response.result.total] as const\n }))\n .then((entries) => {\n if (!controller.signal.aborted) setTabCounts(Object.fromEntries(entries))\n })\n .catch(() => {\n if (!controller.signal.aborted) setTabCounts({})\n })\n return () => controller.abort()\n }, [user])\n\n const statusOptions = React.useMemo(\n () => (Object.keys(CLAIM_STATUS_BADGE_VARIANTS) as ClaimStatus[]).map((status) => ({\n value: status,\n label: t(`warranty_claims.status.${status}`),\n })),\n [t],\n )\n\n const filters = React.useMemo<FilterDef[]>(() => [\n {\n id: 'status',\n label: t('warranty_claims.list.filter.status'),\n type: 'select',\n options: statusOptions,\n },\n ], [statusOptions, t])\n\n const columns = React.useMemo<ColumnDef<PortalClaimRow>[]>(() => [\n {\n id: 'claim',\n header: t('warranty_claims.portal.list.column.claim', 'Claim'),\n cell: ({ row }) => (\n <span className=\"block min-w-0\">\n <span className=\"block truncate font-medium text-foreground\">\n {t(`warranty_claims.claimType.${row.original.claimType}`)}\n </span>\n <span className=\"block text-overline font-normal text-muted-foreground\">{row.original.claimNumber}</span>\n </span>\n ),\n meta: { truncate: true, maxWidth: 360 },\n },\n {\n accessorKey: 'status',\n header: t('warranty_claims.list.column.status'),\n cell: ({ row }) => <ClaimStatusBadge status={row.original.status} />,\n meta: { maxWidth: 180 },\n },\n {\n accessorKey: 'createdAt',\n header: t('warranty_claims.portal.list.column.submittedAt', 'Submitted'),\n cell: ({ row }) => formatDate(row.original.createdAt, t('warranty_claims.portal.value.notAvailable'), locale),\n meta: { maxWidth: 160 },\n },\n {\n accessorKey: 'updatedAt',\n header: t('warranty_claims.list.column.updatedAt'),\n cell: ({ row }) => formatRelativeTime(row.original.updatedAt, { locale }) ?? t('warranty_claims.portal.value.notAvailable'),\n meta: { maxWidth: 160 },\n },\n {\n id: 'open',\n header: '',\n meta: { maxWidth: 48 },\n cell: () => <ChevronRight aria-hidden=\"true\" className=\"size-4 text-muted-foreground\" />,\n },\n ], [locale, t])\n\n if (loading) {\n return <div className=\"flex items-center justify-center py-20\"><Spinner /></div>\n }\n\n if (!user) return null\n\n return (\n <div className=\"mx-auto flex w-full max-w-5xl flex-col gap-5 pt-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{t('warranty_claims.portal.listTitle')}</h1>\n <div className=\"shrink-0\">\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n </div>\n </div>\n\n {error ? (\n <ErrorMessage label={error} />\n ) : null}\n\n <section className=\"overflow-hidden rounded-xl border border-border bg-card\">\n <Tabs\n value={stateGroup}\n onValueChange={(value) => {\n setStateGroup(value === 'open' || value === 'resolved' ? value : 'all')\n setFilterValues({})\n setPage(1)\n }}\n variant=\"underline\"\n >\n <TabsList className=\"flex h-auto w-full gap-1 px-7\" aria-label={t('warranty_claims.portal.list.tabs.label', 'Claim status')}>\n <TabsTrigger value=\"all\" count={tabCounts.all} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.all', 'All')}</TabsTrigger>\n <TabsTrigger value=\"open\" count={tabCounts.open} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.open', 'Open')}</TabsTrigger>\n <TabsTrigger value=\"resolved\" count={tabCounts.resolved} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.resolved', 'Resolved')}</TabsTrigger>\n </TabsList>\n </Tabs>\n <div className=\"[&>[data-component-handle]>div:first-child]:px-7 [&>[data-component-handle]>div:first-child]:py-4 [&>[data-component-handle]>div:first-child_[data-slot=button]]:h-8 [&>[data-component-handle]>div:first-child_[data-slot=search-input-wrapper]]:h-8 [&_[data-slot=table-header]_[data-slot=table-row]]:h-9 [&_[data-slot=table-body]_[data-slot=table-row]]:h-16 [&_:has(>[data-slot=search-input-wrapper])]:lg:w-56\">\n <DataTable<PortalClaimRow>\n embedded\n columns={columns}\n data={rows}\n isLoading={isLoading}\n error={error}\n searchValue={search}\n onSearchChange={(value) => {\n setSearch(value)\n setPage(1)\n }}\n searchPlaceholder={t('warranty_claims.portal.list.searchPlaceholder')}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={(values) => {\n setFilterValues(values)\n if (typeof values.status === 'string' && values.status) setStateGroup('all')\n setPage(1)\n }}\n onFiltersClear={() => {\n setFilterValues({})\n setPage(1)\n }}\n pagination={{\n page,\n pageSize,\n total,\n totalPages,\n onPageChange: setPage,\n onPageSizeChange: (nextPageSize) => {\n setPageSize(nextPageSize)\n setPage(1)\n },\n }}\n onRowClick={(row) => {\n router.push(`/${params.orgSlug}/portal/claims/${row.id}`)\n }}\n rowClickActionIds={['open']}\n emptyState={(\n <PortalEmptyState\n icon={<ShieldCheck className=\"size-5\" />}\n title={t('warranty_claims.portal.empty.title')}\n description={t('warranty_claims.portal.empty.description')}\n action={\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n }\n />\n )}\n />\n </div>\n </section>\n </div>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport type { LegacyColumnDef as ColumnDef } from '@tanstack/react-table/legacy'\nimport { ChevronRight, Plus, ShieldCheck } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { formatRelativeTime } from '@open-mercato/shared/lib/time'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Tabs, TabsList, TabsTrigger } from '@open-mercato/ui/primitives/tabs'\nimport { Spinner } from '@open-mercato/ui/primitives/spinner'\nimport { DataTable } from '@open-mercato/ui'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\nimport { ErrorMessage } from '@open-mercato/ui/backend/detail'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { usePortalContext } from '@open-mercato/ui/portal/PortalContext'\nimport { PortalEmptyState } from '@open-mercato/ui/portal/components/PortalEmptyState'\nimport {\n ClaimStatusBadge,\n CLAIM_STATUS_BADGE_VARIANTS,\n type ClaimStatus,\n} from '../../../../backend/components/ClaimStatusBadge'\n\ntype Props = { params: { orgSlug: string } }\n\ntype PortalClaimRow = {\n id: string\n claimNumber: string\n claimType: string\n status: string\n createdAt: string | null\n updatedAt: string | null\n}\n\ntype PortalClaimsResponse = {\n items: PortalClaimRow[]\n total: number\n page: number\n pageSize: number\n totalPages: number\n totalIsCapped?: boolean\n}\n\nfunction formatDate(value: string | null, fallback: string, locale: string): string {\n if (!value) return fallback\n const date = new Date(value)\n if (Number.isNaN(date.getTime())) return value\n return date.toLocaleDateString(locale || undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n}\n\nexport default function WarrantyClaimsPortalListPage({ params }: Props) {\n const t = useT()\n const locale = useLocale()\n const router = useRouter()\n const { auth } = usePortalContext()\n const { user, loading } = auth\n const [rows, setRows] = React.useState<PortalClaimRow[]>([])\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const [totalIsCapped, setTotalIsCapped] = React.useState(false)\n const [isLoading, setIsLoading] = React.useState(true)\n const [error, setError] = React.useState<string | null>(null)\n const [search, setSearch] = React.useState('')\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n const [stateGroup, setStateGroup] = React.useState<'all' | 'open' | 'resolved'>('all')\n const [tabCounts, setTabCounts] = React.useState<Partial<Record<'all' | 'open' | 'resolved', number>>>({})\n\n React.useEffect(() => {\n if (!loading && !user) {\n router.replace(`/${params.orgSlug}/portal/login`)\n }\n }, [loading, user, router, params.orgSlug])\n\n const statusFilter = typeof filterValues.status === 'string' ? filterValues.status : ''\n\n React.useEffect(() => {\n if (!user) return\n let cancelled = false\n setIsLoading(true)\n setError(null)\n const queryParams = new URLSearchParams({ page: String(page), pageSize: String(pageSize) })\n if (search.trim()) queryParams.set('search', search.trim())\n if (statusFilter) queryParams.set('status', statusFilter)\n else if (stateGroup !== 'all') queryParams.set('stateGroup', stateGroup)\n apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${queryParams.toString()}`,\n )\n .then((res) => {\n if (cancelled) return\n if (!res.ok || !res.result) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n return\n }\n setRows(res.result.items)\n setTotal(res.result.total)\n setTotalPages(res.result.totalPages)\n setTotalIsCapped(res.result.totalIsCapped === true)\n })\n .catch(() => {\n if (!cancelled) {\n setError(t('warranty_claims.portal.error.loadList'))\n setRows([])\n setTotal(0)\n setTotalPages(1)\n }\n })\n .finally(() => {\n if (!cancelled) setIsLoading(false)\n })\n return () => {\n cancelled = true\n }\n }, [page, pageSize, search, stateGroup, statusFilter, t, user])\n\n React.useEffect(() => {\n if (!user) return\n const controller = new AbortController()\n const segments: Array<readonly ['all' | 'open' | 'resolved', string | null]> = [\n ['all', null],\n ['open', 'open'],\n ['resolved', 'resolved'],\n ]\n Promise.all(segments.map(async ([segment, state]) => {\n const query = new URLSearchParams({ page: '1', pageSize: '1' })\n if (state) query.set('stateGroup', state)\n const response = await apiCall<PortalClaimsResponse>(\n `/api/warranty_claims/portal/claims?${query.toString()}`,\n { signal: controller.signal },\n )\n if (!response.ok || !response.result) throw new Error('[internal] Failed to load portal claim counts')\n return [segment, response.result.total] as const\n }))\n .then((entries) => {\n if (!controller.signal.aborted) setTabCounts(Object.fromEntries(entries))\n })\n .catch(() => {\n if (!controller.signal.aborted) setTabCounts({})\n })\n return () => controller.abort()\n }, [user])\n\n const statusOptions = React.useMemo(\n () => (Object.keys(CLAIM_STATUS_BADGE_VARIANTS) as ClaimStatus[]).map((status) => ({\n value: status,\n label: t(`warranty_claims.status.${status}`),\n })),\n [t],\n )\n\n const filters = React.useMemo<FilterDef[]>(() => [\n {\n id: 'status',\n label: t('warranty_claims.list.filter.status'),\n type: 'select',\n options: statusOptions,\n },\n ], [statusOptions, t])\n\n const columns = React.useMemo<ColumnDef<PortalClaimRow>[]>(() => [\n {\n id: 'claim',\n header: t('warranty_claims.portal.list.column.claim', 'Claim'),\n cell: ({ row }) => (\n <span className=\"block min-w-0\">\n <span className=\"block truncate font-medium text-foreground\">\n {t(`warranty_claims.claimType.${row.original.claimType}`)}\n </span>\n <span className=\"block text-overline font-normal text-muted-foreground\">{row.original.claimNumber}</span>\n </span>\n ),\n meta: { truncate: true, maxWidth: 360 },\n },\n {\n accessorKey: 'status',\n header: t('warranty_claims.list.column.status'),\n cell: ({ row }) => <ClaimStatusBadge status={row.original.status} />,\n meta: { maxWidth: 180 },\n },\n {\n accessorKey: 'createdAt',\n header: t('warranty_claims.portal.list.column.submittedAt', 'Submitted'),\n cell: ({ row }) => formatDate(row.original.createdAt, t('warranty_claims.portal.value.notAvailable'), locale),\n meta: { maxWidth: 160 },\n },\n {\n accessorKey: 'updatedAt',\n header: t('warranty_claims.list.column.updatedAt'),\n cell: ({ row }) => formatRelativeTime(row.original.updatedAt, { locale }) ?? t('warranty_claims.portal.value.notAvailable'),\n meta: { maxWidth: 160 },\n },\n {\n id: 'open',\n header: '',\n meta: { maxWidth: 48 },\n cell: () => <ChevronRight aria-hidden=\"true\" className=\"size-4 text-muted-foreground\" />,\n },\n ], [locale, t])\n\n if (loading) {\n return <div className=\"flex items-center justify-center py-20\"><Spinner /></div>\n }\n\n if (!user) return null\n\n return (\n <div className=\"mx-auto flex w-full max-w-5xl flex-col gap-5 pt-2\">\n <div className=\"flex items-center justify-between gap-4\">\n <h1 className=\"text-2xl font-bold tracking-tight text-foreground\">{t('warranty_claims.portal.listTitle')}</h1>\n <div className=\"shrink-0\">\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n </div>\n </div>\n\n {error ? (\n <ErrorMessage label={error} />\n ) : null}\n\n <section className=\"overflow-hidden rounded-xl border border-border bg-card\">\n <Tabs\n value={stateGroup}\n onValueChange={(value) => {\n setStateGroup(value === 'open' || value === 'resolved' ? value : 'all')\n setFilterValues({})\n setPage(1)\n }}\n variant=\"underline\"\n >\n <TabsList className=\"flex h-auto w-full gap-1 px-7\" aria-label={t('warranty_claims.portal.list.tabs.label', 'Claim status')}>\n <TabsTrigger value=\"all\" count={tabCounts.all} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.all', 'All')}</TabsTrigger>\n <TabsTrigger value=\"open\" count={tabCounts.open} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.open', 'Open')}</TabsTrigger>\n <TabsTrigger value=\"resolved\" count={tabCounts.resolved} className=\"gap-2 px-4 pb-2 pt-3 [&_[data-slot=tabs-trigger-count]]:h-auto [&_[data-slot=tabs-trigger-count]]:min-w-0 [&_[data-slot=tabs-trigger-count]]:rounded-md [&_[data-slot=tabs-trigger-count]]:bg-muted [&_[data-slot=tabs-trigger-count]]:px-1.5 [&_[data-slot=tabs-trigger-count]]:py-0.5 [&_[data-slot=tabs-trigger-count]]:text-overline [&_[data-slot=tabs-trigger-count]]:text-muted-foreground\">{t('warranty_claims.portal.list.tabs.resolved', 'Resolved')}</TabsTrigger>\n </TabsList>\n </Tabs>\n <div className=\"[&>[data-component-handle]>div:first-child]:px-7 [&>[data-component-handle]>div:first-child]:py-4 [&>[data-component-handle]>div:first-child_[data-slot=button]]:h-8 [&>[data-component-handle]>div:first-child_[data-slot=search-input-wrapper]]:h-8 [&_[data-slot=table-header]_[data-slot=table-row]]:h-9 [&_[data-slot=table-body]_[data-slot=table-row]]:h-16 [&_:has(>[data-slot=search-input-wrapper])]:lg:w-56\">\n <DataTable<PortalClaimRow>\n embedded\n columns={columns}\n data={rows}\n isLoading={isLoading}\n error={error}\n searchValue={search}\n onSearchChange={(value) => {\n setSearch(value)\n setPage(1)\n }}\n searchPlaceholder={t('warranty_claims.portal.list.searchPlaceholder')}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={(values) => {\n setFilterValues(values)\n if (typeof values.status === 'string' && values.status) setStateGroup('all')\n setPage(1)\n }}\n onFiltersClear={() => {\n setFilterValues({})\n setPage(1)\n }}\n pagination={{\n page,\n pageSize,\n total,\n totalPages,\n totalIsCapped,\n onPageChange: setPage,\n onPageSizeChange: (nextPageSize) => {\n setPageSize(nextPageSize)\n setPage(1)\n },\n }}\n onRowClick={(row) => {\n router.push(`/${params.orgSlug}/portal/claims/${row.id}`)\n }}\n rowClickActionIds={['open']}\n emptyState={(\n <PortalEmptyState\n icon={<ShieldCheck className=\"size-5\" />}\n title={t('warranty_claims.portal.empty.title')}\n description={t('warranty_claims.portal.empty.description')}\n action={\n <Button asChild>\n <Link href={`/${params.orgSlug}/portal/claims/new`}>\n <Plus className=\"size-4\" aria-hidden=\"true\" />\n {t('warranty_claims.portal.newClaim')}\n </Link>\n </Button>\n }\n />\n )}\n />\n </div>\n </section>\n </div>\n )\n}\n"],
5
+ "mappings": ";AA6KQ,SACE,KADF;AA3KR,YAAY,WAAW;AACvB,OAAO,UAAU;AACjB,SAAS,iBAAiB;AAE1B,SAAS,cAAc,MAAM,mBAAmB;AAChD,SAAS,WAAW,YAAY;AAChC,SAAS,0BAA0B;AACnC,SAAS,cAAc;AACvB,SAAS,MAAM,UAAU,mBAAmB;AAC5C,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAE1B,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAsBP,SAAS,WAAW,OAAsB,UAAkB,QAAwB;AAClF,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,MAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAG,QAAO;AACzC,SAAO,KAAK,mBAAmB,UAAU,QAAW;AAAA,IAClD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,EACP,CAAC;AACH;AAEe,SAAR,6BAA8C,EAAE,OAAO,GAAU;AACtE,QAAM,IAAI,KAAK;AACf,QAAM,SAAS,UAAU;AACzB,QAAM,SAAS,UAAU;AACzB,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAClC,QAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAA2B,CAAC,CAAC;AAC3D,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,CAAC;AACxC,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE;AACjD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAS,CAAC;AAC1C,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,CAAC;AACpD,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAS,KAAK;AAC9D,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,IAAI;AACrD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,SAAwB,IAAI;AAC5D,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,EAAE;AAC7C,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAuB,CAAC,CAAC;AACvE,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAsC,KAAK;AACrF,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAA+D,CAAC,CAAC;AAEzG,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,WAAW,CAAC,MAAM;AACrB,aAAO,QAAQ,IAAI,OAAO,OAAO,eAAe;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,QAAQ,OAAO,OAAO,CAAC;AAE1C,QAAM,eAAe,OAAO,aAAa,WAAW,WAAW,aAAa,SAAS;AAErF,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,QAAI,YAAY;AAChB,iBAAa,IAAI;AACjB,aAAS,IAAI;AACb,UAAM,cAAc,IAAI,gBAAgB,EAAE,MAAM,OAAO,IAAI,GAAG,UAAU,OAAO,QAAQ,EAAE,CAAC;AAC1F,QAAI,OAAO,KAAK,EAAG,aAAY,IAAI,UAAU,OAAO,KAAK,CAAC;AAC1D,QAAI,aAAc,aAAY,IAAI,UAAU,YAAY;AAAA,aAC/C,eAAe,MAAO,aAAY,IAAI,cAAc,UAAU;AACvE;AAAA,MACE,sCAAsC,YAAY,SAAS,CAAC;AAAA,IAC9D,EACG,KAAK,CAAC,QAAQ;AACb,UAAI,UAAW;AACf,UAAI,CAAC,IAAI,MAAM,CAAC,IAAI,QAAQ;AAC1B,iBAAS,EAAE,uCAAuC,CAAC;AACnD,gBAAQ,CAAC,CAAC;AACV,iBAAS,CAAC;AACV,sBAAc,CAAC;AACf;AAAA,MACF;AACA,cAAQ,IAAI,OAAO,KAAK;AACxB,eAAS,IAAI,OAAO,KAAK;AACzB,oBAAc,IAAI,OAAO,UAAU;AACnC,uBAAiB,IAAI,OAAO,kBAAkB,IAAI;AAAA,IACpD,CAAC,EACA,MAAM,MAAM;AACX,UAAI,CAAC,WAAW;AACd,iBAAS,EAAE,uCAAuC,CAAC;AACnD,gBAAQ,CAAC,CAAC;AACV,iBAAS,CAAC;AACV,sBAAc,CAAC;AAAA,MACjB;AAAA,IACF,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,CAAC,UAAW,cAAa,KAAK;AAAA,IACpC,CAAC;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,QAAQ,YAAY,cAAc,GAAG,IAAI,CAAC;AAE9D,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,WAAyE;AAAA,MAC7E,CAAC,OAAO,IAAI;AAAA,MACZ,CAAC,QAAQ,MAAM;AAAA,MACf,CAAC,YAAY,UAAU;AAAA,IACzB;AACA,YAAQ,IAAI,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM;AACnD,YAAM,QAAQ,IAAI,gBAAgB,EAAE,MAAM,KAAK,UAAU,IAAI,CAAC;AAC9D,UAAI,MAAO,OAAM,IAAI,cAAc,KAAK;AACxC,YAAM,WAAW,MAAM;AAAA,QACrB,sCAAsC,MAAM,SAAS,CAAC;AAAA,QACtD,EAAE,QAAQ,WAAW,OAAO;AAAA,MAC9B;AACA,UAAI,CAAC,SAAS,MAAM,CAAC,SAAS,OAAQ,OAAM,IAAI,MAAM,+CAA+C;AACrG,aAAO,CAAC,SAAS,SAAS,OAAO,KAAK;AAAA,IACxC,CAAC,CAAC,EACC,KAAK,CAAC,YAAY;AACjB,UAAI,CAAC,WAAW,OAAO,QAAS,cAAa,OAAO,YAAY,OAAO,CAAC;AAAA,IAC1E,CAAC,EACA,MAAM,MAAM;AACX,UAAI,CAAC,WAAW,OAAO,QAAS,cAAa,CAAC,CAAC;AAAA,IACjD,CAAC;AACH,WAAO,MAAM,WAAW,MAAM;AAAA,EAChC,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,gBAAgB,MAAM;AAAA,IAC1B,MAAO,OAAO,KAAK,2BAA2B,EAAoB,IAAI,CAAC,YAAY;AAAA,MACjF,OAAO;AAAA,MACP,OAAO,EAAE,0BAA0B,MAAM,EAAE;AAAA,IAC7C,EAAE;AAAA,IACF,CAAC,CAAC;AAAA,EACJ;AAEA,QAAM,UAAU,MAAM,QAAqB,MAAM;AAAA,IAC/C;AAAA,MACE,IAAI;AAAA,MACJ,OAAO,EAAE,oCAAoC;AAAA,MAC7C,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,eAAe,CAAC,CAAC;AAErB,QAAM,UAAU,MAAM,QAAqC,MAAM;AAAA,IAC/D;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ,EAAE,4CAA4C,OAAO;AAAA,MAC7D,MAAM,CAAC,EAAE,IAAI,MACX,qBAAC,UAAK,WAAU,iBACd;AAAA,4BAAC,UAAK,WAAU,8CACb,YAAE,6BAA6B,IAAI,SAAS,SAAS,EAAE,GAC1D;AAAA,QACA,oBAAC,UAAK,WAAU,yDAAyD,cAAI,SAAS,aAAY;AAAA,SACpG;AAAA,MAEF,MAAM,EAAE,UAAU,MAAM,UAAU,IAAI;AAAA,IACxC;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,EAAE,oCAAoC;AAAA,MAC9C,MAAM,CAAC,EAAE,IAAI,MAAM,oBAAC,oBAAiB,QAAQ,IAAI,SAAS,QAAQ;AAAA,MAClE,MAAM,EAAE,UAAU,IAAI;AAAA,IACxB;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,EAAE,kDAAkD,WAAW;AAAA,MACvE,MAAM,CAAC,EAAE,IAAI,MAAM,WAAW,IAAI,SAAS,WAAW,EAAE,2CAA2C,GAAG,MAAM;AAAA,MAC5G,MAAM,EAAE,UAAU,IAAI;AAAA,IACxB;AAAA,IACA;AAAA,MACE,aAAa;AAAA,MACb,QAAQ,EAAE,uCAAuC;AAAA,MACjD,MAAM,CAAC,EAAE,IAAI,MAAM,mBAAmB,IAAI,SAAS,WAAW,EAAE,OAAO,CAAC,KAAK,EAAE,2CAA2C;AAAA,MAC1H,MAAM,EAAE,UAAU,IAAI;AAAA,IACxB;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,MAAM,EAAE,UAAU,GAAG;AAAA,MACrB,MAAM,MAAM,oBAAC,gBAAa,eAAY,QAAO,WAAU,gCAA+B;AAAA,IACxF;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEd,MAAI,SAAS;AACX,WAAO,oBAAC,SAAI,WAAU,0CAAyC,8BAAC,WAAQ,GAAE;AAAA,EAC5E;AAEA,MAAI,CAAC,KAAM,QAAO;AAElB,SACE,qBAAC,SAAI,WAAU,qDACb;AAAA,yBAAC,SAAI,WAAU,2CACb;AAAA,0BAAC,QAAG,WAAU,qDAAqD,YAAE,kCAAkC,GAAE;AAAA,MACzG,oBAAC,SAAI,WAAU,YACb,8BAAC,UAAO,SAAO,MACb,8BAAC,QAAK,MAAM,IAAI,OAAO,OAAO,sBAC3B,YAAE,iCAAiC,GACtC,GACF,GACF;AAAA,OACF;AAAA,IAEC,QACC,oBAAC,gBAAa,OAAO,OAAO,IAC1B;AAAA,IAEJ,qBAAC,aAAQ,WAAU,2DACjB;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,UACP,eAAe,CAAC,UAAU;AACxB,0BAAc,UAAU,UAAU,UAAU,aAAa,QAAQ,KAAK;AACtE,4BAAgB,CAAC,CAAC;AAClB,oBAAQ,CAAC;AAAA,UACX;AAAA,UACA,SAAQ;AAAA,UAER,+BAAC,YAAS,WAAU,iCAAgC,cAAY,EAAE,0CAA0C,cAAc,GACxH;AAAA,gCAAC,eAAY,OAAM,OAAM,OAAO,UAAU,KAAK,WAAU,qYAAqY,YAAE,wCAAwC,KAAK,GAAE;AAAA,YAC/e,oBAAC,eAAY,OAAM,QAAO,OAAO,UAAU,MAAM,WAAU,qYAAqY,YAAE,yCAAyC,MAAM,GAAE;AAAA,YACnf,oBAAC,eAAY,OAAM,YAAW,OAAO,UAAU,UAAU,WAAU,qYAAqY,YAAE,6CAA6C,UAAU,GAAE;AAAA,aACrgB;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,SAAI,WAAU,0ZACjB;AAAA,QAAC;AAAA;AAAA,UACC,UAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,aAAa;AAAA,UACb,gBAAgB,CAAC,UAAU;AACzB,sBAAU,KAAK;AACf,oBAAQ,CAAC;AAAA,UACX;AAAA,UACA,mBAAmB,EAAE,+CAA+C;AAAA,UACpE;AAAA,UACA;AAAA,UACA,gBAAgB,CAAC,WAAW;AAC1B,4BAAgB,MAAM;AACtB,gBAAI,OAAO,OAAO,WAAW,YAAY,OAAO,OAAQ,eAAc,KAAK;AAC3E,oBAAQ,CAAC;AAAA,UACX;AAAA,UACA,gBAAgB,MAAM;AACpB,4BAAgB,CAAC,CAAC;AAClB,oBAAQ,CAAC;AAAA,UACX;AAAA,UACA,YAAY;AAAA,YACV;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAc;AAAA,YACd,kBAAkB,CAAC,iBAAiB;AAClC,0BAAY,YAAY;AACxB,sBAAQ,CAAC;AAAA,YACX;AAAA,UACF;AAAA,UACA,YAAY,CAAC,QAAQ;AACnB,mBAAO,KAAK,IAAI,OAAO,OAAO,kBAAkB,IAAI,EAAE,EAAE;AAAA,UAC1D;AAAA,UACA,mBAAmB,CAAC,MAAM;AAAA,UAC1B,YACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,oBAAC,eAAY,WAAU,UAAS;AAAA,cACtC,OAAO,EAAE,oCAAoC;AAAA,cAC7C,aAAa,EAAE,0CAA0C;AAAA,cACzD,QACE,oBAAC,UAAO,SAAO,MACb,+BAAC,QAAK,MAAM,IAAI,OAAO,OAAO,sBAC5B;AAAA,oCAAC,QAAK,WAAU,UAAS,eAAY,QAAO;AAAA,gBAC3C,EAAE,iCAAiC;AAAA,iBACtC,GACF;AAAA;AAAA,UAEJ;AAAA;AAAA,MAEJ,GACE;AAAA,OACF;AAAA,KACF;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -892,6 +892,9 @@ const allocateInventoryReservationCommand = {
892
892
  const result = await runInTransaction(em, async (trx) => {
893
893
  const scope = resolveScope(ctx, input);
894
894
  const reservation = await requireReservation(trx, ctx, input.reservationId, scope, true);
895
+ if (reservation.status !== "active") {
896
+ throw new CrudHttpError(409, { error: "invalid_reservation_state" });
897
+ }
895
898
  const metadata = extractReservationMetadata(reservation);
896
899
  if (metadata.allocationState === "allocated") {
897
900
  return {