@fluid-app/portal-sdk 0.1.243 → 0.1.245

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 (117) hide show
  1. package/dist/{AppDownloadScreen-DQR40F0y.mjs → AppDownloadScreen-DPnbWP5G.mjs} +1 -1
  2. package/dist/{AppDownloadScreen-DQR40F0y.mjs.map → AppDownloadScreen-DPnbWP5G.mjs.map} +1 -1
  3. package/dist/{AppDownloadScreen-BXnl23_d.cjs → AppDownloadScreen-Og_iMsw5.cjs} +1 -1
  4. package/dist/{AppDownloadScreen-BXnl23_d.cjs.map → AppDownloadScreen-Og_iMsw5.cjs.map} +1 -1
  5. package/dist/{AppNavigationContext-C1-hd9Rw.cjs → AppNavigationContext-BDs1cOuG.cjs} +1 -1
  6. package/dist/{AppNavigationContext-C1-hd9Rw.cjs.map → AppNavigationContext-BDs1cOuG.cjs.map} +1 -1
  7. package/dist/{AppNavigationContext-Dvc0yoZF.mjs → AppNavigationContext-DNod9mf6.mjs} +1 -1
  8. package/dist/{AppNavigationContext-Dvc0yoZF.mjs.map → AppNavigationContext-DNod9mf6.mjs.map} +1 -1
  9. package/dist/{ContactsScreen-Cj0_VI0d.cjs → ContactsScreen-CZ2hrMqf.cjs} +6 -6
  10. package/dist/{ContactsScreen-Cj0_VI0d.cjs.map → ContactsScreen-CZ2hrMqf.cjs.map} +1 -1
  11. package/dist/{ContactsScreen-CMBERzKU.mjs → ContactsScreen-DuhDzRtI.mjs} +6 -6
  12. package/dist/{ContactsScreen-CMBERzKU.mjs.map → ContactsScreen-DuhDzRtI.mjs.map} +1 -1
  13. package/dist/{ContactsScreen-CH_P8WxC.cjs → ContactsScreen-Dv1SJNBo.cjs} +5 -5
  14. package/dist/{InfiniteScrollSentinel-DeIL8UkW.cjs → InfiniteScrollSentinel-BaPx1tjC.cjs} +1 -1
  15. package/dist/{InfiniteScrollSentinel-DeIL8UkW.cjs.map → InfiniteScrollSentinel-BaPx1tjC.cjs.map} +1 -1
  16. package/dist/{InfiniteScrollSentinel-B_clNL9Y.mjs → InfiniteScrollSentinel-D0XRJi51.mjs} +1 -1
  17. package/dist/{InfiniteScrollSentinel-B_clNL9Y.mjs.map → InfiniteScrollSentinel-D0XRJi51.mjs.map} +1 -1
  18. package/dist/{MessagingScreen-KYx6DSMx.cjs → MessagingScreen-BwI0RShj.cjs} +3 -3
  19. package/dist/{MessagingScreen-vb5P-7jP.mjs → MessagingScreen-DiSZ7fyd.mjs} +3 -3
  20. package/dist/{MessagingScreen-vb5P-7jP.mjs.map → MessagingScreen-DiSZ7fyd.mjs.map} +1 -1
  21. package/dist/{MessagingScreen-CCbgNRp1.cjs → MessagingScreen-WCeHWGlX.cjs} +5 -5
  22. package/dist/{MessagingScreen-CCbgNRp1.cjs.map → MessagingScreen-WCeHWGlX.cjs.map} +1 -1
  23. package/dist/{MySiteScreen-B_16cPgD.cjs → MySiteScreen-Bdd7a6Hy.cjs} +3 -2
  24. package/dist/MySiteScreen-CK84vXa9.mjs +301 -0
  25. package/dist/MySiteScreen-CK84vXa9.mjs.map +1 -0
  26. package/dist/MySiteScreen-zfajm9da.cjs +309 -0
  27. package/dist/MySiteScreen-zfajm9da.cjs.map +1 -0
  28. package/dist/{OrdersScreen-Cuch7aki.cjs → OrdersScreen-BLs1xTv7.cjs} +4 -4
  29. package/dist/{OrdersScreen-DPcp2dLW.cjs → OrdersScreen-BbS7Alby.cjs} +86 -41
  30. package/dist/OrdersScreen-BbS7Alby.cjs.map +1 -0
  31. package/dist/{OrdersScreen-BV3vJ7xy.mjs → OrdersScreen-b-ZC4_NI.mjs} +86 -41
  32. package/dist/OrdersScreen-b-ZC4_NI.mjs.map +1 -0
  33. package/dist/{PortalProductsApiProvider-BIZg_c4Y.mjs → PortalProductsApiProvider-BFdHFvog.mjs} +1 -1
  34. package/dist/{PortalProductsApiProvider-BIZg_c4Y.mjs.map → PortalProductsApiProvider-BFdHFvog.mjs.map} +1 -1
  35. package/dist/{PortalProductsApiProvider-DL8nl7To.cjs → PortalProductsApiProvider-CkS7OIGt.cjs} +1 -1
  36. package/dist/{PortalProductsApiProvider-DL8nl7To.cjs.map → PortalProductsApiProvider-CkS7OIGt.cjs.map} +1 -1
  37. package/dist/{ProfileScreen-BT0iys-q.cjs → ProfileScreen-BfvdQa0q.cjs} +114 -33
  38. package/dist/ProfileScreen-BfvdQa0q.cjs.map +1 -0
  39. package/dist/{ProfileScreen-CZAIUM2a.mjs → ProfileScreen-CRLf8oDe.mjs} +116 -35
  40. package/dist/ProfileScreen-CRLf8oDe.mjs.map +1 -0
  41. package/dist/{ProfileScreen-CKcdtroU.cjs → ProfileScreen-Za3ZIWPO.cjs} +4 -2
  42. package/dist/{SearchSort-CeJqRK2c.cjs → SearchSort-BP2ktxyN.cjs} +1 -1
  43. package/dist/{SearchSort-CeJqRK2c.cjs.map → SearchSort-BP2ktxyN.cjs.map} +1 -1
  44. package/dist/{SearchSort-CFHU38Er.mjs → SearchSort-CokMCrhy.mjs} +1 -1
  45. package/dist/{SearchSort-CFHU38Er.mjs.map → SearchSort-CokMCrhy.mjs.map} +1 -1
  46. package/dist/{ShareablesScreen-sieWBlAl.mjs → ShareablesScreen-BZZ-RT71.mjs} +8 -8
  47. package/dist/{ShareablesScreen-sieWBlAl.mjs.map → ShareablesScreen-BZZ-RT71.mjs.map} +1 -1
  48. package/dist/{ShareablesScreen-A69L0Nok.cjs → ShareablesScreen-BxOKbuuU.cjs} +20 -20
  49. package/dist/{ShareablesScreen-A69L0Nok.cjs.map → ShareablesScreen-BxOKbuuU.cjs.map} +1 -1
  50. package/dist/{ShareablesScreen-BUYG-mjj.cjs → ShareablesScreen-CsDxLODp.cjs} +7 -7
  51. package/dist/{ShopScreen-sLUTgIcQ.mjs → ShopScreen-BG1pxd2D.mjs} +4 -4
  52. package/dist/{ShopScreen-sLUTgIcQ.mjs.map → ShopScreen-BG1pxd2D.mjs.map} +1 -1
  53. package/dist/{ShopScreen-DVpCo-OV.cjs → ShopScreen-BigHJ5wE.cjs} +3 -3
  54. package/dist/{ShopScreen-Dm85_rMp.cjs → ShopScreen-S6rBaoWM.cjs} +4 -4
  55. package/dist/{ShopScreen-Dm85_rMp.cjs.map → ShopScreen-S6rBaoWM.cjs.map} +1 -1
  56. package/dist/{SubscriptionsScreen-DrDSwMXS.cjs → SubscriptionsScreen-B88_dLfE.cjs} +9 -9
  57. package/dist/{SubscriptionsScreen-DrDSwMXS.cjs.map → SubscriptionsScreen-B88_dLfE.cjs.map} +1 -1
  58. package/dist/{SubscriptionsScreen-CXM2zmF7.mjs → SubscriptionsScreen-DK9-h3Cz.mjs} +8 -8
  59. package/dist/{SubscriptionsScreen-CXM2zmF7.mjs.map → SubscriptionsScreen-DK9-h3Cz.mjs.map} +1 -1
  60. package/dist/{SubscriptionsScreen-t5wtDGfB.cjs → SubscriptionsScreen-dhnfYn4L.cjs} +5 -5
  61. package/dist/{UpgradeScreen-DUvg-WZv.cjs → UpgradeScreen-Bl9lb32K.cjs} +1 -1
  62. package/dist/{UpgradeScreen-DAKe_hiv.cjs → UpgradeScreen-C-hFDAR2.cjs} +1 -1
  63. package/dist/{UpgradeScreen-DAKe_hiv.cjs.map → UpgradeScreen-C-hFDAR2.cjs.map} +1 -1
  64. package/dist/{UpgradeScreen-DnGnWVTf.mjs → UpgradeScreen-X6j0_625.mjs} +1 -1
  65. package/dist/{UpgradeScreen-DnGnWVTf.mjs.map → UpgradeScreen-X6j0_625.mjs.map} +1 -1
  66. package/dist/{MySiteScreen-CUyJteDm.cjs → components-BKADyCYp.cjs} +42 -466
  67. package/dist/components-BKADyCYp.cjs.map +1 -0
  68. package/dist/{MySiteScreen-CN0ZDBgy.mjs → components-CjgEvBYG.mjs} +6 -470
  69. package/dist/components-CjgEvBYG.mjs.map +1 -0
  70. package/dist/{dist-PbA1vxAz.mjs → dist-BstXVe25.mjs} +1 -1
  71. package/dist/{dist-PbA1vxAz.mjs.map → dist-BstXVe25.mjs.map} +1 -1
  72. package/dist/{dist-o2cjwzIa.mjs → dist-CTLDCXCc.mjs} +2 -2
  73. package/dist/{dist-o2cjwzIa.mjs.map → dist-CTLDCXCc.mjs.map} +1 -1
  74. package/dist/{dist-BQZkLGL6.cjs → dist-DJAHGHHi.cjs} +1 -19
  75. package/dist/{dist-BQZkLGL6.cjs.map → dist-DJAHGHHi.cjs.map} +1 -1
  76. package/dist/{dist-DbRTQ2QF.cjs → dist-D_3_ZuC5.cjs} +1 -1
  77. package/dist/{dist-DbRTQ2QF.cjs.map → dist-D_3_ZuC5.cjs.map} +1 -1
  78. package/dist/{dist-myuZC8sf.cjs → dist-vhBaFZ9L.cjs} +2 -2
  79. package/dist/{dist-myuZC8sf.cjs.map → dist-vhBaFZ9L.cjs.map} +1 -1
  80. package/dist/{es-UfEBhcZD.cjs → es-B5heQ57j.cjs} +1 -1
  81. package/dist/{es-UfEBhcZD.cjs.map → es-B5heQ57j.cjs.map} +1 -1
  82. package/dist/{fluid-pay-api-adapter-eNT8m0xB.mjs → fluid-pay-api-adapter-CJ7-I8k-.mjs} +673 -381
  83. package/dist/fluid-pay-api-adapter-CJ7-I8k-.mjs.map +1 -0
  84. package/dist/{fluid-pay-api-adapter-BszgrFL6.cjs → fluid-pay-api-adapter-D63KLi5c.cjs} +700 -378
  85. package/dist/fluid-pay-api-adapter-D63KLi5c.cjs.map +1 -0
  86. package/dist/{format-CytB2M00.cjs → format-CLUjV1oR.cjs} +1 -1
  87. package/dist/{format-CytB2M00.cjs.map → format-CLUjV1oR.cjs.map} +1 -1
  88. package/dist/index.cjs +51 -116
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.d.cts.map +1 -1
  91. package/dist/index.d.mts.map +1 -1
  92. package/dist/index.mjs +50 -115
  93. package/dist/index.mjs.map +1 -1
  94. package/dist/{order-status-badge-DHyaK6mU.cjs → order-status-badge-BKvLeVsM.cjs} +3 -3
  95. package/dist/{order-status-badge-DHyaK6mU.cjs.map → order-status-badge-BKvLeVsM.cjs.map} +1 -1
  96. package/dist/{order-status-badge-Dmo8lLnt.mjs → order-status-badge-xuJ732eH.mjs} +3 -3
  97. package/dist/{order-status-badge-Dmo8lLnt.mjs.map → order-status-badge-xuJ732eH.mjs.map} +1 -1
  98. package/dist/{query-keys-oQKvV4jp.mjs → query-keys-8SVs82aF.mjs} +1 -1
  99. package/dist/{query-keys-elu0svUd.cjs.map → query-keys-8SVs82aF.mjs.map} +1 -1
  100. package/dist/{query-keys-elu0svUd.cjs → query-keys-e9EEoWxN.cjs} +1 -1
  101. package/dist/{query-keys-oQKvV4jp.mjs.map → query-keys-e9EEoWxN.cjs.map} +1 -1
  102. package/dist/{sortable.esm-C8G00cCP.mjs → sortable.esm-C8riJ_zv.mjs} +2 -14
  103. package/dist/{sortable.esm-C8G00cCP.mjs.map → sortable.esm-C8riJ_zv.mjs.map} +1 -1
  104. package/dist/{use-account-C1X-VLY-.cjs → use-account-D6Z9hkDX.cjs} +2 -2
  105. package/dist/{use-account-C1X-VLY-.cjs.map → use-account-D6Z9hkDX.cjs.map} +1 -1
  106. package/dist/{use-account-C76sphlu.mjs → use-account-DsTz5BlS.mjs} +2 -2
  107. package/dist/{use-account-C76sphlu.mjs.map → use-account-DsTz5BlS.mjs.map} +1 -1
  108. package/package.json +10 -9
  109. package/styles/packages.css +1 -0
  110. package/dist/MySiteScreen-CN0ZDBgy.mjs.map +0 -1
  111. package/dist/MySiteScreen-CUyJteDm.cjs.map +0 -1
  112. package/dist/OrdersScreen-BV3vJ7xy.mjs.map +0 -1
  113. package/dist/OrdersScreen-DPcp2dLW.cjs.map +0 -1
  114. package/dist/ProfileScreen-BT0iys-q.cjs.map +0 -1
  115. package/dist/ProfileScreen-CZAIUM2a.mjs.map +0 -1
  116. package/dist/fluid-pay-api-adapter-BszgrFL6.cjs.map +0 -1
  117. package/dist/fluid-pay-api-adapter-eNT8m0xB.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  require("./chunk-9hOWP6kD.cjs");
2
2
  const require_src = require("./src-uhf6Szlw.cjs");
3
- const require_SearchSort = require("./SearchSort-CeJqRK2c.cjs");
4
- const require_InfiniteScrollSentinel = require("./InfiniteScrollSentinel-DeIL8UkW.cjs");
3
+ const require_SearchSort = require("./SearchSort-BP2ktxyN.cjs");
4
+ const require_InfiniteScrollSentinel = require("./InfiniteScrollSentinel-BaPx1tjC.cjs");
5
5
  let react = require("react");
6
6
  let _tanstack_react_query = require("@tanstack/react-query");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -461,4 +461,4 @@ Object.defineProperty(exports, "usePortalTenantOrder", {
461
461
  }
462
462
  });
463
463
 
464
- //# sourceMappingURL=order-status-badge-DHyaK6mU.cjs.map
464
+ //# sourceMappingURL=order-status-badge-BKvLeVsM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-status-badge-DHyaK6mU.cjs","names":["cn","TableHead","cn","SearchSort","Skeleton","Table","TableHeader","TableRow","TableBody","TableCell","InfiniteScrollSentinel"],"sources":["../../../orders/core/src/orders-api-context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-infinite-customer-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/core/src/utils/format-order-total.ts","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/components/orders-list.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\n\nconst OrdersApiContext = createContext<OrdersApi | null>(null);\n\nexport const OrdersApiProvider = OrdersApiContext.Provider;\n\nexport function useOrdersApi(): OrdersApi {\n const api = useContext(OrdersApiContext);\n if (!api) {\n throw new Error(\"useOrdersApi must be used within an OrdersCoreProvider\");\n }\n return api;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\nimport { OrdersApiProvider } from \"./orders-api-context\";\n\nexport interface OrdersCoreProviderProps {\n api: OrdersApi;\n children: ReactNode;\n}\n\nexport function OrdersCoreProvider({\n api,\n children,\n}: OrdersCoreProviderProps): JSX.Element {\n return <OrdersApiProvider value={api}>{children}</OrdersApiProvider>;\n}\n","import type { orders } from \"./types\";\n\nexport const ordersKeys = {\n all: [\"orders\"] as const,\n list: (params?: orders.FetchOrdersParams) =>\n [...ordersKeys.all, \"list\", params] as const,\n detail: (orderToken: string) =>\n [...ordersKeys.all, \"detail\", orderToken] as const,\n} as const;\n\nexport const portalTenantOrdersKeys = {\n all: [\"portalTenantOrders\"] as const,\n list: (params?: orders.PortalTenantFetchOrdersParams) =>\n [...portalTenantOrdersKeys.all, \"list\", params] as const,\n detail: (id: string | number) =>\n [...portalTenantOrdersKeys.all, \"detail\", id] as const,\n} as const;\n","import { useInfiniteQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function useInfiniteCustomerOrders(\n params: Omit<orders.FetchOrdersParams, \"cursor\">,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useInfiniteQuery({\n queryKey: [...ordersKeys.all, \"infinite-list\", params],\n queryFn: ({ pageParam }) => {\n if (!api.fetchCustomerOrders) {\n throw new Error(\n \"fetchCustomerOrders not implemented on this OrdersApi\",\n );\n }\n return api.fetchCustomerOrders({ ...params, cursor: pageParam });\n },\n getNextPageParam: (lastPage) =>\n lastPage.meta?.pagination?.next_cursor ?? undefined,\n initialPageParam: undefined as string | undefined,\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function usePortalTenantOrder(\n id: string | number,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.detail(id),\n queryFn: () => {\n if (!api.fetchOrderById) {\n throw new Error(\"fetchOrderById not implemented on this OrdersApi\");\n }\n return api.fetchOrderById(id);\n },\n enabled: (options?.enabled ?? true) && !!id,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor = \"green\" | \"yellow\" | \"red\" | \"blue\" | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\n yellow:\n \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\n red: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\n blue: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\n gray: \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n useInfiniteCustomerOrders,\n formatOrderTotal,\n} from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { InfiniteScrollSentinel } from \"@fluid-app/ui-components/components/InfiniteScrollSentinel\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =\n useInfiniteCustomerOrders(params, { enabled: !!customerId });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n }, []);\n\n const ordersList = data?.pages.flatMap((p) => p.orders) ?? [];\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"flex justify-end p-3\">\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-3 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {new Date(order.created_at).toLocaleDateString()}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"status\")}\n </span>\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn label={t(\"date\")} sortable={false} />\n <TableColumn label={t(\"status\")} sortable={false} />\n <TableColumn label={t(\"total\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-20\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n </TableRow>\n ))\n ) : ordersList.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <InfiniteScrollSentinel\n onLoadMore={fetchNextPage}\n hasMore={!!hasNextPage}\n isLoading={isFetchingNextPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"order-status-badge-BKvLeVsM.cjs","names":["cn","TableHead","cn","SearchSort","Skeleton","Table","TableHeader","TableRow","TableBody","TableCell","InfiniteScrollSentinel"],"sources":["../../../orders/core/src/orders-api-context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-infinite-customer-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/core/src/utils/format-order-total.ts","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/components/orders-list.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\n\nconst OrdersApiContext = createContext<OrdersApi | null>(null);\n\nexport const OrdersApiProvider = OrdersApiContext.Provider;\n\nexport function useOrdersApi(): OrdersApi {\n const api = useContext(OrdersApiContext);\n if (!api) {\n throw new Error(\"useOrdersApi must be used within an OrdersCoreProvider\");\n }\n return api;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\nimport { OrdersApiProvider } from \"./orders-api-context\";\n\nexport interface OrdersCoreProviderProps {\n api: OrdersApi;\n children: ReactNode;\n}\n\nexport function OrdersCoreProvider({\n api,\n children,\n}: OrdersCoreProviderProps): JSX.Element {\n return <OrdersApiProvider value={api}>{children}</OrdersApiProvider>;\n}\n","import type { orders } from \"./types\";\n\nexport const ordersKeys = {\n all: [\"orders\"] as const,\n list: (params?: orders.FetchOrdersParams) =>\n [...ordersKeys.all, \"list\", params] as const,\n detail: (orderToken: string) =>\n [...ordersKeys.all, \"detail\", orderToken] as const,\n} as const;\n\nexport const portalTenantOrdersKeys = {\n all: [\"portalTenantOrders\"] as const,\n list: (params?: orders.PortalTenantFetchOrdersParams) =>\n [...portalTenantOrdersKeys.all, \"list\", params] as const,\n detail: (id: string | number) =>\n [...portalTenantOrdersKeys.all, \"detail\", id] as const,\n} as const;\n","import { useInfiniteQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function useInfiniteCustomerOrders(\n params: Omit<orders.FetchOrdersParams, \"cursor\">,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useInfiniteQuery({\n queryKey: [...ordersKeys.all, \"infinite-list\", params],\n queryFn: ({ pageParam }) => {\n if (!api.fetchCustomerOrders) {\n throw new Error(\n \"fetchCustomerOrders not implemented on this OrdersApi\",\n );\n }\n return api.fetchCustomerOrders({ ...params, cursor: pageParam });\n },\n getNextPageParam: (lastPage) =>\n lastPage.meta?.pagination?.next_cursor ?? undefined,\n initialPageParam: undefined as string | undefined,\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function usePortalTenantOrder(\n id: string | number,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.detail(id),\n queryFn: () => {\n if (!api.fetchOrderById) {\n throw new Error(\"fetchOrderById not implemented on this OrdersApi\");\n }\n return api.fetchOrderById(id);\n },\n enabled: (options?.enabled ?? true) && !!id,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor = \"green\" | \"yellow\" | \"red\" | \"blue\" | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\n yellow:\n \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\n red: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\n blue: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\n gray: \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n useInfiniteCustomerOrders,\n formatOrderTotal,\n} from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { InfiniteScrollSentinel } from \"@fluid-app/ui-components/components/InfiniteScrollSentinel\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =\n useInfiniteCustomerOrders(params, { enabled: !!customerId });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n }, []);\n\n const ordersList = data?.pages.flatMap((p) => p.orders) ?? [];\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"flex justify-end p-3\">\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-3 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {new Date(order.created_at).toLocaleDateString()}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"status\")}\n </span>\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn label={t(\"date\")} sortable={false} />\n <TableColumn label={t(\"status\")} sortable={false} />\n <TableColumn label={t(\"total\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-20\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n </TableRow>\n ))\n ) : ordersList.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <InfiniteScrollSentinel\n onLoadMore={fetchNextPage}\n hasMore={!!hasNextPage}\n isLoading={isFetchingNextPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { C as Skeleton, Fn as cn, d as Table, f as TableBody, g as TableRow, h as TableHeader, m as TableHead, p as TableCell } from "./src-pgBBOcJa.mjs";
2
- import { t as SearchSort } from "./SearchSort-CFHU38Er.mjs";
3
- import { t as InfiniteScrollSentinel } from "./InfiniteScrollSentinel-B_clNL9Y.mjs";
2
+ import { t as SearchSort } from "./SearchSort-CokMCrhy.mjs";
3
+ import { t as InfiniteScrollSentinel } from "./InfiniteScrollSentinel-D0XRJi51.mjs";
4
4
  import { createContext, useCallback, useContext, useState } from "react";
5
5
  import { useInfiniteQuery, useQuery } from "@tanstack/react-query";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -431,4 +431,4 @@ function OrderStatusBadge({ status, className }) {
431
431
  //#endregion
432
432
  export { OrdersCoreProvider as a, usePortalTenantOrder as i, OrdersList as n, TableColumn as r, OrderStatusBadge as t };
433
433
 
434
- //# sourceMappingURL=order-status-badge-Dmo8lLnt.mjs.map
434
+ //# sourceMappingURL=order-status-badge-xuJ732eH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"order-status-badge-Dmo8lLnt.mjs","names":[],"sources":["../../../orders/core/src/orders-api-context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-infinite-customer-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/core/src/utils/format-order-total.ts","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/components/orders-list.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\n\nconst OrdersApiContext = createContext<OrdersApi | null>(null);\n\nexport const OrdersApiProvider = OrdersApiContext.Provider;\n\nexport function useOrdersApi(): OrdersApi {\n const api = useContext(OrdersApiContext);\n if (!api) {\n throw new Error(\"useOrdersApi must be used within an OrdersCoreProvider\");\n }\n return api;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\nimport { OrdersApiProvider } from \"./orders-api-context\";\n\nexport interface OrdersCoreProviderProps {\n api: OrdersApi;\n children: ReactNode;\n}\n\nexport function OrdersCoreProvider({\n api,\n children,\n}: OrdersCoreProviderProps): JSX.Element {\n return <OrdersApiProvider value={api}>{children}</OrdersApiProvider>;\n}\n","import type { orders } from \"./types\";\n\nexport const ordersKeys = {\n all: [\"orders\"] as const,\n list: (params?: orders.FetchOrdersParams) =>\n [...ordersKeys.all, \"list\", params] as const,\n detail: (orderToken: string) =>\n [...ordersKeys.all, \"detail\", orderToken] as const,\n} as const;\n\nexport const portalTenantOrdersKeys = {\n all: [\"portalTenantOrders\"] as const,\n list: (params?: orders.PortalTenantFetchOrdersParams) =>\n [...portalTenantOrdersKeys.all, \"list\", params] as const,\n detail: (id: string | number) =>\n [...portalTenantOrdersKeys.all, \"detail\", id] as const,\n} as const;\n","import { useInfiniteQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function useInfiniteCustomerOrders(\n params: Omit<orders.FetchOrdersParams, \"cursor\">,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useInfiniteQuery({\n queryKey: [...ordersKeys.all, \"infinite-list\", params],\n queryFn: ({ pageParam }) => {\n if (!api.fetchCustomerOrders) {\n throw new Error(\n \"fetchCustomerOrders not implemented on this OrdersApi\",\n );\n }\n return api.fetchCustomerOrders({ ...params, cursor: pageParam });\n },\n getNextPageParam: (lastPage) =>\n lastPage.meta?.pagination?.next_cursor ?? undefined,\n initialPageParam: undefined as string | undefined,\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function usePortalTenantOrder(\n id: string | number,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.detail(id),\n queryFn: () => {\n if (!api.fetchOrderById) {\n throw new Error(\"fetchOrderById not implemented on this OrdersApi\");\n }\n return api.fetchOrderById(id);\n },\n enabled: (options?.enabled ?? true) && !!id,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor = \"green\" | \"yellow\" | \"red\" | \"blue\" | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\n yellow:\n \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\n red: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\n blue: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\n gray: \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n useInfiniteCustomerOrders,\n formatOrderTotal,\n} from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { InfiniteScrollSentinel } from \"@fluid-app/ui-components/components/InfiniteScrollSentinel\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =\n useInfiniteCustomerOrders(params, { enabled: !!customerId });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n }, []);\n\n const ordersList = data?.pages.flatMap((p) => p.orders) ?? [];\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"flex justify-end p-3\">\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-3 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {new Date(order.created_at).toLocaleDateString()}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"status\")}\n </span>\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn label={t(\"date\")} sortable={false} />\n <TableColumn label={t(\"status\")} sortable={false} />\n <TableColumn label={t(\"total\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-20\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n </TableRow>\n ))\n ) : ordersList.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <InfiniteScrollSentinel\n onLoadMore={fetchNextPage}\n hasMore={!!hasNextPage}\n isLoading={isFetchingNextPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"order-status-badge-xuJ732eH.mjs","names":[],"sources":["../../../orders/core/src/orders-api-context.ts","../../../orders/core/src/provider.tsx","../../../orders/core/src/query-keys.ts","../../../orders/core/src/hooks/use-infinite-customer-orders.ts","../../../orders/core/src/hooks/use-portal-tenant-order.ts","../../../orders/core/src/utils/format-order-total.ts","../../../orders/ui/src/components/status-badge.tsx","../../../orders/ui/src/components/table-column.tsx","../../../orders/ui/src/components/orders-list.tsx","../../../orders/ui/src/lib/format.ts","../../../orders/ui/src/components/order-status-badge.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\n\nconst OrdersApiContext = createContext<OrdersApi | null>(null);\n\nexport const OrdersApiProvider = OrdersApiContext.Provider;\n\nexport function useOrdersApi(): OrdersApi {\n const api = useContext(OrdersApiContext);\n if (!api) {\n throw new Error(\"useOrdersApi must be used within an OrdersCoreProvider\");\n }\n return api;\n}\n","import type { JSX, ReactNode } from \"react\";\nimport type { OrdersApi } from \"./orders-api\";\nimport { OrdersApiProvider } from \"./orders-api-context\";\n\nexport interface OrdersCoreProviderProps {\n api: OrdersApi;\n children: ReactNode;\n}\n\nexport function OrdersCoreProvider({\n api,\n children,\n}: OrdersCoreProviderProps): JSX.Element {\n return <OrdersApiProvider value={api}>{children}</OrdersApiProvider>;\n}\n","import type { orders } from \"./types\";\n\nexport const ordersKeys = {\n all: [\"orders\"] as const,\n list: (params?: orders.FetchOrdersParams) =>\n [...ordersKeys.all, \"list\", params] as const,\n detail: (orderToken: string) =>\n [...ordersKeys.all, \"detail\", orderToken] as const,\n} as const;\n\nexport const portalTenantOrdersKeys = {\n all: [\"portalTenantOrders\"] as const,\n list: (params?: orders.PortalTenantFetchOrdersParams) =>\n [...portalTenantOrdersKeys.all, \"list\", params] as const,\n detail: (id: string | number) =>\n [...portalTenantOrdersKeys.all, \"detail\", id] as const,\n} as const;\n","import { useInfiniteQuery } from \"@tanstack/react-query\";\nimport type { orders } from \"../types\";\nimport { ordersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function useInfiniteCustomerOrders(\n params: Omit<orders.FetchOrdersParams, \"cursor\">,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useInfiniteQuery({\n queryKey: [...ordersKeys.all, \"infinite-list\", params],\n queryFn: ({ pageParam }) => {\n if (!api.fetchCustomerOrders) {\n throw new Error(\n \"fetchCustomerOrders not implemented on this OrdersApi\",\n );\n }\n return api.fetchCustomerOrders({ ...params, cursor: pageParam });\n },\n getNextPageParam: (lastPage) =>\n lastPage.meta?.pagination?.next_cursor ?? undefined,\n initialPageParam: undefined as string | undefined,\n enabled: options?.enabled ?? true,\n });\n}\n","import { useQuery } from \"@tanstack/react-query\";\nimport { portalTenantOrdersKeys } from \"../query-keys\";\nimport { useOrdersApi } from \"../orders-api-context\";\n\nexport function usePortalTenantOrder(\n id: string | number,\n options?: { enabled?: boolean },\n) {\n const api = useOrdersApi();\n return useQuery({\n queryKey: portalTenantOrdersKeys.detail(id),\n queryFn: () => {\n if (!api.fetchOrderById) {\n throw new Error(\"fetchOrderById not implemented on this OrdersApi\");\n }\n return api.fetchOrderById(id);\n },\n enabled: (options?.enabled ?? true) && !!id,\n });\n}\n","import type { orders } from \"../types\";\n\nexport function formatOrderTotal(order: orders.ListOrder): string {\n if (order.order_total_after_points_redemption != null) {\n return `${order.currency_symbol || \"$\"}${Number(\n order.order_total_after_points_redemption,\n ).toFixed(2)}`;\n }\n return (\n order.total_display_amount ||\n `${order.currency_symbol || \"$\"}${Number(order.amount).toFixed(2)}`\n );\n}\n","import { cn } from \"@fluid-app/ui-primitives\";\n\nexport type BadgeColor = \"green\" | \"yellow\" | \"red\" | \"blue\" | \"gray\";\n\ntype BadgeSize = \"xs\" | \"sm\" | \"md\";\n\ninterface StatusBadgeProps {\n color: BadgeColor;\n dot?: boolean;\n size?: BadgeSize;\n className?: string;\n children: React.ReactNode;\n}\n\nconst colorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400\",\n yellow:\n \"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400\",\n red: \"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400\",\n blue: \"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400\",\n gray: \"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-300\",\n};\n\nconst dotColorStyles: Record<BadgeColor, string> = {\n green: \"bg-green-500\",\n yellow: \"bg-yellow-500\",\n red: \"bg-red-500\",\n blue: \"bg-blue-500\",\n gray: \"bg-gray-500\",\n};\n\nconst sizeStyles: Record<BadgeSize, string> = {\n xs: \"px-1.5 py-0.5 text-[10px]\",\n sm: \"px-2 py-0.5 text-xs\",\n md: \"px-2.5 py-1 text-sm\",\n};\n\nexport function StatusBadge({\n color,\n dot,\n size = \"md\",\n className,\n children,\n}: StatusBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium whitespace-nowrap capitalize\",\n colorStyles[color],\n sizeStyles[size],\n className,\n )}\n >\n {dot && (\n <span\n className={cn(\"h-1.5 w-1.5 rounded-full\", dotColorStyles[color])}\n />\n )}\n {children}\n </span>\n );\n}\n","import { cn, TableHead } from \"@fluid-app/ui-primitives\";\n\ninterface TableColumnProps {\n label: string;\n sortable?: boolean;\n className?: string;\n onSortClick?: (sortBy: string) => void;\n sortBy?: string;\n sortData?: {\n column: string;\n direction: \"asc\" | \"desc\";\n };\n chevronUpIcon?: string;\n chevronDownIcon?: string;\n}\n\nexport function TableColumn({\n label,\n sortable = true,\n className,\n onSortClick,\n sortBy,\n sortData,\n chevronUpIcon,\n chevronDownIcon,\n}: TableColumnProps) {\n const hideUpIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"asc\");\n\n const hideDownIcon =\n sortData?.column !== sortBy ||\n (sortData?.column === sortBy && sortData?.direction === \"desc\");\n\n return (\n <TableHead\n className={cn(\n \"group text-muted-foreground cursor-pointer px-3 text-xs transition-colors duration-200\",\n \"hover:text-primary\",\n className,\n )}\n onClick={() => sortable && onSortClick?.(sortBy ?? \"\")}\n >\n <div className=\"relative flex items-center\">\n {label}\n {sortable && chevronUpIcon && chevronDownIcon && (\n <button\n className={`ml-2 inline-flex flex-col items-center justify-center group-hover:opacity-100 ${\n sortData?.column === sortBy ? \"opacity-100\" : \"opacity-0\"\n } transition-opacity duration-200`}\n >\n <div className=\"flex flex-col\">\n <img\n src={chevronUpIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideUpIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n <img\n src={chevronDownIcon}\n alt=\"\"\n width={12}\n height={12}\n className={cn(\n \"text-muted-foreground group-hover:text-primary h-2.5 w-2.5 transition-colors duration-200\",\n hideDownIcon && \"opacity-0\",\n sortData?.column !== sortBy && \"group-hover:opacity-100\",\n )}\n />\n </div>\n </button>\n )}\n </div>\n </TableHead>\n );\n}\n","import { useState, useCallback } from \"react\";\nimport type { orders } from \"@fluid-app/orders-core\";\nimport {\n useInfiniteCustomerOrders,\n formatOrderTotal,\n} from \"@fluid-app/orders-core\";\nimport {\n Skeleton,\n Table,\n TableBody,\n TableCell,\n TableHeader,\n TableRow,\n} from \"@fluid-app/ui-primitives\";\nimport { SearchSort } from \"@fluid-app/ui-components/components/SearchSort\";\nimport { InfiniteScrollSentinel } from \"@fluid-app/ui-components/components/InfiniteScrollSentinel\";\nimport { StatusBadge } from \"./status-badge\";\nimport { TableColumn } from \"./table-column\";\n\nexport interface OrdersListProps {\n customerId: number | undefined;\n onOrderClick: (order: orders.ListOrder) => void;\n onSubscriptionClick?: (subscriptionToken: string) => void;\n t: (key: string) => string;\n pageSize?: number;\n}\n\nexport function OrdersList({\n customerId,\n onOrderClick,\n onSubscriptionClick,\n t,\n pageSize = 10,\n}: OrdersListProps) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n\n const params = {\n customerId,\n limit: pageSize,\n search: searchTerm || undefined,\n sort: \"-created_at\",\n };\n\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } =\n useInfiniteCustomerOrders(params, { enabled: !!customerId });\n\n const handleSearchChange = useCallback((term: string) => {\n setSearchTerm(term);\n }, []);\n\n const ordersList = data?.pages.flatMap((p) => p.orders) ?? [];\n\n return (\n <div className=\"border-border overflow-hidden rounded-lg border shadow-sm\">\n <div className=\"flex justify-end p-3\">\n <div className=\"w-full max-w-sm\">\n <SearchSort\n searchValue={searchTerm}\n onSearchChange={handleSearchChange}\n placeholder={t(\"search_orders\")}\n />\n </div>\n </div>\n\n {/* mobile view */}\n <div className=\"block md:hidden\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <div\n key={`skeleton-${index}`}\n className=\"border-border border-b p-4\"\n >\n <div className=\"flex space-x-3\">\n <Skeleton className=\"h-12 w-12 rounded-md\" />\n <div className=\"flex-1 space-y-2\">\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-1/2\" />\n </div>\n </div>\n </div>\n ))\n ) : ordersList.length === 0 ? (\n <div className=\"text-muted-foreground px-3 py-8 text-center text-sm\">\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </div>\n ) : (\n ordersList.map((order) => (\n <div\n key={order.id}\n className=\"border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors duration-200 ease-in-out last:border-b-0\"\n onClick={() => onOrderClick(order)}\n >\n <div className=\"flex items-start space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={48}\n height={48}\n className=\"h-12 w-12 flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border h-12 w-12 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"w-0 min-w-0 flex-1\">\n {order.first_item?.title ? (\n <p className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </p>\n ) : (\n <div className=\"bg-muted rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge color=\"blue\" size=\"xs\" className=\"mt-1\">\n {t(\"subscription\")}\n </StatusBadge>\n )}\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 mt-1 inline-block text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n <div className=\"mt-2 grid grid-cols-3 gap-x-4 gap-y-1 text-sm\">\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"date\")}\n </span>\n <span className=\"text-muted-foreground\">\n {new Date(order.created_at).toLocaleDateString()}\n </span>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"status\")}\n </span>\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </div>\n <div>\n <span className=\"text-muted-foreground block text-xs\">\n {t(\"total\")}\n </span>\n <span className=\"text-foreground font-medium\">\n {formatOrderTotal(order)}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n ))\n )}\n </div>\n\n {/* desktop view */}\n <div className=\"hidden md:block\">\n <Table className=\"min-w-full table-fixed\">\n <colgroup>\n <col className=\"w-2/5 min-w-[240px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n <col className=\"w-[20%] min-w-[100px]\" />\n </colgroup>\n <TableHeader className=\"bg-muted\">\n <TableRow className=\"hover:bg-muted h-10\">\n <TableColumn label={t(\"product\")} sortable={false} />\n <TableColumn label={t(\"date\")} sortable={false} />\n <TableColumn label={t(\"status\")} sortable={false} />\n <TableColumn label={t(\"total\")} sortable={false} />\n </TableRow>\n </TableHeader>\n <TableBody className=\"bg-background\">\n {isLoading ? (\n Array(5)\n .fill(0)\n .map((_, index) => (\n <TableRow key={`skeleton-${index}`}>\n <TableCell className=\"px-3 py-4\">\n <div className=\"flex items-center space-x-2\">\n <Skeleton className=\"h-9 w-9 rounded-md\" />\n <Skeleton className=\"h-4 w-32\" />\n </div>\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-20\" />\n </TableCell>\n <TableCell className=\"px-3 py-4\">\n <Skeleton className=\"h-4 w-24\" />\n </TableCell>\n </TableRow>\n ))\n ) : ordersList.length === 0 ? (\n <TableRow>\n <TableCell\n colSpan={4}\n className=\"text-muted-foreground px-3 py-8 text-center text-sm\"\n >\n {searchTerm ? t(\"no_matching_orders\") : t(\"no_orders_found\")}\n </TableCell>\n </TableRow>\n ) : (\n ordersList.map((order) => (\n <TableRow\n key={order.id}\n className=\"cursor-pointer\"\n onClick={() => onOrderClick(order)}\n >\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm\">\n <div className=\"flex max-w-[280px] flex-row items-center space-x-3\">\n {order.first_item?.image_url ? (\n <img\n src={order.first_item.image_url}\n alt={t(\"no_image_available\")}\n width={42}\n height={42}\n className=\"h-[42px] w-[42px] flex-shrink-0 rounded-md object-cover\"\n />\n ) : (\n <div className=\"bg-border ml-1 h-9 w-9 flex-shrink-0 rounded-md\" />\n )}\n <div className=\"flex min-w-0 flex-col space-y-1\">\n <div className=\"flex items-center space-x-2\">\n {order.first_item?.title ? (\n <span className=\"text-foreground truncate text-sm font-medium\">\n {order.first_item.title}\n </span>\n ) : (\n <div className=\"bg-muted w-full rounded-lg p-2\">\n <div className=\"text-muted-foreground text-xs\">\n {t(\"this_product_no_longer_exists\")}\n </div>\n </div>\n )}\n {order.subscription && (\n <StatusBadge\n color=\"blue\"\n size=\"xs\"\n className=\"flex-shrink-0\"\n >\n {t(\"subscription\")}\n </StatusBadge>\n )}\n </div>\n {order.subscription?.subscription_token &&\n onSubscriptionClick && (\n <button\n type=\"button\"\n className=\"text-foreground hover:text-foreground/80 text-left text-xs transition-colors duration-200 hover:underline\"\n onClick={(e) => {\n e.stopPropagation();\n onSubscriptionClick(\n order.subscription!.subscription_token,\n );\n }}\n >\n {t(\"view_subscription\")}\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell className=\"text-muted-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {new Date(order.created_at).toLocaleDateString()}\n </TableCell>\n <TableCell className=\"px-3 py-4 text-sm\">\n <StatusBadge\n color={\n order.order_status === \"completed\" ||\n order.order_status === \"delivered\" ||\n order.order_status === \"shipped\"\n ? \"green\"\n : order.order_status === \"cancelled\" ||\n order.order_status === \"returned\"\n ? \"red\"\n : \"yellow\"\n }\n size=\"xs\"\n >\n {order.order_status}\n </StatusBadge>\n </TableCell>\n <TableCell className=\"text-foreground px-3 py-4 text-sm whitespace-nowrap\">\n {formatOrderTotal(order)}\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n </div>\n\n <InfiniteScrollSentinel\n onLoadMore={fetchNextPage}\n hasMore={!!hasNextPage}\n isLoading={isFetchingNextPage}\n />\n </div>\n );\n}\n","export function startCase(str: string | undefined | null): string {\n if (!str) return \"\";\n return str.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatCurrency(symbol: string, value: string | number): string {\n return `${symbol}${Number(value).toFixed(2)}`;\n}\n","import { StatusBadge, type BadgeColor } from \"./status-badge\";\nimport { startCase } from \"../lib/format\";\n\nconst statusColorMap: Record<string, BadgeColor> = {\n paid: \"green\",\n fulfilled: \"green\",\n delivered: \"green\",\n complete: \"green\",\n pending: \"yellow\",\n unfulfilled: \"yellow\",\n partially_fulfilled: \"yellow\",\n processing: \"yellow\",\n refunded: \"red\",\n cancelled: \"red\",\n failed: \"red\",\n voided: \"red\",\n};\n\nexport interface OrderStatusBadgeProps {\n status: string;\n className?: string;\n}\n\nexport function OrderStatusBadge({ status, className }: OrderStatusBadgeProps) {\n const color = statusColorMap[status] ?? \"gray\";\n return (\n <StatusBadge color={color} dot size=\"sm\" className={className}>\n {startCase(status)}\n </StatusBadge>\n );\n}\n"],"mappings":"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"}
@@ -24,4 +24,4 @@ const payKeys = {
24
24
  //#endregion
25
25
  export { payKeys as n, storeKeys as r, accountKeys as t };
26
26
 
27
- //# sourceMappingURL=query-keys-oQKvV4jp.mjs.map
27
+ //# sourceMappingURL=query-keys-8SVs82aF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-keys-elu0svUd.cjs","names":[],"sources":["../src/account/query-keys.ts"],"sourcesContent":["export const accountKeys = {\n all: [\"portalTenant\", \"account\"] as const,\n detail: (userId?: number) => [...accountKeys.all, userId] as const,\n} as const;\n\nexport const storeKeys = {\n countries: () => [\"bff-store-countries\"] as const,\n languages: () => [\"bff-store-languages\"] as const,\n} as const;\n\nexport const payKeys = {\n addresses: {\n all: [\"portalTenant\", \"addresses\"] as const,\n list: (userId?: number) => [...payKeys.addresses.all, userId] as const,\n },\n paymentMethods: {\n all: [\"portalTenant\", \"paymentMethods\"] as const,\n list: (userId?: number) => [...payKeys.paymentMethods.all, userId] as const,\n },\n pointsLedgers: {\n all: [\"portalTenant\", \"pointsLedgers\"] as const,\n list: (userId?: number) => [...payKeys.pointsLedgers.all, userId] as const,\n },\n} as const;\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,KAAK,CAAC,gBAAgB,UAAU;CAChC,SAAS,WAAoB,CAAC,GAAG,YAAY,KAAK,OAAO;CAC1D;AAED,MAAa,YAAY;CACvB,iBAAiB,CAAC,sBAAsB;CACxC,iBAAiB,CAAC,sBAAsB;CACzC;AAED,MAAa,UAAU;CACrB,WAAW;EACT,KAAK,CAAC,gBAAgB,YAAY;EAClC,OAAO,WAAoB,CAAC,GAAG,QAAQ,UAAU,KAAK,OAAO;EAC9D;CACD,gBAAgB;EACd,KAAK,CAAC,gBAAgB,iBAAiB;EACvC,OAAO,WAAoB,CAAC,GAAG,QAAQ,eAAe,KAAK,OAAO;EACnE;CACD,eAAe;EACb,KAAK,CAAC,gBAAgB,gBAAgB;EACtC,OAAO,WAAoB,CAAC,GAAG,QAAQ,cAAc,KAAK,OAAO;EAClE;CACF"}
1
+ {"version":3,"file":"query-keys-8SVs82aF.mjs","names":[],"sources":["../src/account/query-keys.ts"],"sourcesContent":["export const accountKeys = {\n all: [\"portalTenant\", \"account\"] as const,\n detail: (userId?: number) => [...accountKeys.all, userId] as const,\n} as const;\n\nexport const storeKeys = {\n countries: () => [\"bff-store-countries\"] as const,\n languages: () => [\"bff-store-languages\"] as const,\n} as const;\n\nexport const payKeys = {\n addresses: {\n all: [\"portalTenant\", \"addresses\"] as const,\n list: (userId?: number) => [...payKeys.addresses.all, userId] as const,\n },\n paymentMethods: {\n all: [\"portalTenant\", \"paymentMethods\"] as const,\n list: (userId?: number) => [...payKeys.paymentMethods.all, userId] as const,\n },\n pointsLedgers: {\n all: [\"portalTenant\", \"pointsLedgers\"] as const,\n list: (userId?: number) => [...payKeys.pointsLedgers.all, userId] as const,\n },\n} as const;\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,KAAK,CAAC,gBAAgB,UAAU;CAChC,SAAS,WAAoB,CAAC,GAAG,YAAY,KAAK,OAAO;CAC1D;AAED,MAAa,YAAY;CACvB,iBAAiB,CAAC,sBAAsB;CACxC,iBAAiB,CAAC,sBAAsB;CACzC;AAED,MAAa,UAAU;CACrB,WAAW;EACT,KAAK,CAAC,gBAAgB,YAAY;EAClC,OAAO,WAAoB,CAAC,GAAG,QAAQ,UAAU,KAAK,OAAO;EAC9D;CACD,gBAAgB;EACd,KAAK,CAAC,gBAAgB,iBAAiB;EACvC,OAAO,WAAoB,CAAC,GAAG,QAAQ,eAAe,KAAK,OAAO;EACnE;CACD,eAAe;EACb,KAAK,CAAC,gBAAgB,gBAAgB;EACtC,OAAO,WAAoB,CAAC,GAAG,QAAQ,cAAc,KAAK,OAAO;EAClE;CACF"}
@@ -41,4 +41,4 @@ Object.defineProperty(exports, "storeKeys", {
41
41
  }
42
42
  });
43
43
 
44
- //# sourceMappingURL=query-keys-elu0svUd.cjs.map
44
+ //# sourceMappingURL=query-keys-e9EEoWxN.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-keys-oQKvV4jp.mjs","names":[],"sources":["../src/account/query-keys.ts"],"sourcesContent":["export const accountKeys = {\n all: [\"portalTenant\", \"account\"] as const,\n detail: (userId?: number) => [...accountKeys.all, userId] as const,\n} as const;\n\nexport const storeKeys = {\n countries: () => [\"bff-store-countries\"] as const,\n languages: () => [\"bff-store-languages\"] as const,\n} as const;\n\nexport const payKeys = {\n addresses: {\n all: [\"portalTenant\", \"addresses\"] as const,\n list: (userId?: number) => [...payKeys.addresses.all, userId] as const,\n },\n paymentMethods: {\n all: [\"portalTenant\", \"paymentMethods\"] as const,\n list: (userId?: number) => [...payKeys.paymentMethods.all, userId] as const,\n },\n pointsLedgers: {\n all: [\"portalTenant\", \"pointsLedgers\"] as const,\n list: (userId?: number) => [...payKeys.pointsLedgers.all, userId] as const,\n },\n} as const;\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,KAAK,CAAC,gBAAgB,UAAU;CAChC,SAAS,WAAoB,CAAC,GAAG,YAAY,KAAK,OAAO;CAC1D;AAED,MAAa,YAAY;CACvB,iBAAiB,CAAC,sBAAsB;CACxC,iBAAiB,CAAC,sBAAsB;CACzC;AAED,MAAa,UAAU;CACrB,WAAW;EACT,KAAK,CAAC,gBAAgB,YAAY;EAClC,OAAO,WAAoB,CAAC,GAAG,QAAQ,UAAU,KAAK,OAAO;EAC9D;CACD,gBAAgB;EACd,KAAK,CAAC,gBAAgB,iBAAiB;EACvC,OAAO,WAAoB,CAAC,GAAG,QAAQ,eAAe,KAAK,OAAO;EACnE;CACD,eAAe;EACb,KAAK,CAAC,gBAAgB,gBAAgB;EACtC,OAAO,WAAoB,CAAC,GAAG,QAAQ,cAAc,KAAK,OAAO;EAClE;CACF"}
1
+ {"version":3,"file":"query-keys-e9EEoWxN.cjs","names":[],"sources":["../src/account/query-keys.ts"],"sourcesContent":["export const accountKeys = {\n all: [\"portalTenant\", \"account\"] as const,\n detail: (userId?: number) => [...accountKeys.all, userId] as const,\n} as const;\n\nexport const storeKeys = {\n countries: () => [\"bff-store-countries\"] as const,\n languages: () => [\"bff-store-languages\"] as const,\n} as const;\n\nexport const payKeys = {\n addresses: {\n all: [\"portalTenant\", \"addresses\"] as const,\n list: (userId?: number) => [...payKeys.addresses.all, userId] as const,\n },\n paymentMethods: {\n all: [\"portalTenant\", \"paymentMethods\"] as const,\n list: (userId?: number) => [...payKeys.paymentMethods.all, userId] as const,\n },\n pointsLedgers: {\n all: [\"portalTenant\", \"pointsLedgers\"] as const,\n list: (userId?: number) => [...payKeys.pointsLedgers.all, userId] as const,\n },\n} as const;\n"],"mappings":";AAAA,MAAa,cAAc;CACzB,KAAK,CAAC,gBAAgB,UAAU;CAChC,SAAS,WAAoB,CAAC,GAAG,YAAY,KAAK,OAAO;CAC1D;AAED,MAAa,YAAY;CACvB,iBAAiB,CAAC,sBAAsB;CACxC,iBAAiB,CAAC,sBAAsB;CACzC;AAED,MAAa,UAAU;CACrB,WAAW;EACT,KAAK,CAAC,gBAAgB,YAAY;EAClC,OAAO,WAAoB,CAAC,GAAG,QAAQ,UAAU,KAAK,OAAO;EAC9D;CACD,gBAAgB;EACd,KAAK,CAAC,gBAAgB,iBAAiB;EACvC,OAAO,WAAoB,CAAC,GAAG,QAAQ,eAAe,KAAK,OAAO;EACnE;CACD,eAAe;EACb,KAAK,CAAC,gBAAgB,gBAAgB;EACtC,OAAO,WAAoB,CAAC,GAAG,QAAQ,cAAc,KAAK,OAAO;EAClE;CACF"}
@@ -16,18 +16,6 @@ function usePortalMySiteProfile() {
16
16
  queryFn: () => api.fetchProfile()
17
17
  });
18
18
  }
19
- function usePortalUpdateProfile(options) {
20
- const api = useMySiteApi();
21
- const queryClient = useQueryClient();
22
- return useMutation({
23
- mutationFn: (body) => api.updateProfile(body),
24
- onSuccess: (data) => {
25
- queryClient.setQueryData(PORTAL_MYSITE_KEYS.profile(), data);
26
- queryClient.invalidateQueries({ queryKey: PORTAL_MYSITE_KEYS.profile() });
27
- options?.onSuccess?.();
28
- }
29
- });
30
- }
31
19
  function usePortalUpdateSettings(options) {
32
20
  const api = useMySiteApi();
33
21
  const queryClient = useQueryClient();
@@ -3166,6 +3154,6 @@ function isAfter(a, b) {
3166
3154
  return a.data.current.sortable.index < b.data.current.sortable.index;
3167
3155
  }
3168
3156
  //#endregion
3169
- export { usePortalUpdateLink as C, usePortalReorderLinks as S, usePortalUpdateSettings as T, usePortalFavorites as _, verticalListSortingStrategy as a, usePortalMySiteThemes as b, PointerSensor as c, useSensors as d, CSS as f, usePortalDeleteLink as g, usePortalDeleteFavorite as h, useSortable as i, closestCenter as l, usePortalCreateLink as m, arrayMove as n, DndContext as o, PORTAL_MYSITE_KEYS as p, sortableKeyboardCoordinates as r, KeyboardSensor as s, SortableContext as t, useSensor as u, usePortalLinks as v, usePortalUpdateProfile as w, usePortalReorderFavorites as x, usePortalMySiteProfile as y };
3157
+ export { usePortalUpdateLink as C, usePortalReorderLinks as S, usePortalFavorites as _, verticalListSortingStrategy as a, usePortalMySiteThemes as b, PointerSensor as c, useSensors as d, CSS as f, usePortalDeleteLink as g, usePortalDeleteFavorite as h, useSortable as i, closestCenter as l, usePortalCreateLink as m, arrayMove as n, DndContext as o, PORTAL_MYSITE_KEYS as p, sortableKeyboardCoordinates as r, KeyboardSensor as s, SortableContext as t, useSensor as u, usePortalLinks as v, usePortalUpdateSettings as w, usePortalReorderFavorites as x, usePortalMySiteProfile as y };
3170
3158
 
3171
- //# sourceMappingURL=sortable.esm-C8G00cCP.mjs.map
3159
+ //# sourceMappingURL=sortable.esm-C8riJ_zv.mjs.map