medusa-ui-common 2.0.0

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 (79) hide show
  1. package/package.json +93 -0
  2. package/src/common/components/breadcrumb/index.tsx +43 -0
  3. package/src/common/components/cart-totals/index.tsx +562 -0
  4. package/src/common/components/checkbox/index.tsx +98 -0
  5. package/src/common/components/delete-button/index.tsx +158 -0
  6. package/src/common/components/discount-code/index.tsx +220 -0
  7. package/src/common/components/divider/index.tsx +9 -0
  8. package/src/common/components/error-message/index.tsx +13 -0
  9. package/src/common/components/filter-checkbox-group/index.tsx +134 -0
  10. package/src/common/components/filter-radio-group/index.tsx +62 -0
  11. package/src/common/components/input/index.tsx +79 -0
  12. package/src/common/components/interactive-link/index.tsx +33 -0
  13. package/src/common/components/line-item-options/index.tsx +26 -0
  14. package/src/common/components/line-item-price/index.tsx +64 -0
  15. package/src/common/components/line-item-unit-price/index.tsx +64 -0
  16. package/src/common/components/localized-client-link/index.tsx +32 -0
  17. package/src/common/components/login-popup/index.tsx +78 -0
  18. package/src/common/components/modal/index.tsx +123 -0
  19. package/src/common/components/native-select/index.tsx +75 -0
  20. package/src/common/components/obfuscated-email/index.tsx +30 -0
  21. package/src/common/components/processing-overlay/index.tsx +83 -0
  22. package/src/common/components/radio/index.tsx +27 -0
  23. package/src/common/components/side-panel/index.tsx +65 -0
  24. package/src/common/components/submit-button/index.tsx +32 -0
  25. package/src/common/icons/arrow-left.tsx +36 -0
  26. package/src/common/icons/back.tsx +37 -0
  27. package/src/common/icons/bancontact.tsx +26 -0
  28. package/src/common/icons/chevron-down.tsx +30 -0
  29. package/src/common/icons/delivered.tsx +29 -0
  30. package/src/common/icons/envelope.tsx +27 -0
  31. package/src/common/icons/eye-off.tsx +37 -0
  32. package/src/common/icons/eye.tsx +37 -0
  33. package/src/common/icons/fast-delivery.tsx +65 -0
  34. package/src/common/icons/ideal.tsx +26 -0
  35. package/src/common/icons/lock.tsx +31 -0
  36. package/src/common/icons/map-pin.tsx +37 -0
  37. package/src/common/icons/medusa.tsx +27 -0
  38. package/src/common/icons/menu.tsx +45 -0
  39. package/src/common/icons/nextjs.tsx +27 -0
  40. package/src/common/icons/package.tsx +44 -0
  41. package/src/common/icons/paypal.tsx +30 -0
  42. package/src/common/icons/phone.tsx +30 -0
  43. package/src/common/icons/placeholder-image.tsx +44 -0
  44. package/src/common/icons/refresh.tsx +51 -0
  45. package/src/common/icons/spinner.tsx +37 -0
  46. package/src/common/icons/trash.tsx +51 -0
  47. package/src/common/icons/user.tsx +37 -0
  48. package/src/common/icons/x.tsx +37 -0
  49. package/src/constants/payments.tsx +31 -0
  50. package/src/context/modal-context.tsx +37 -0
  51. package/src/context/wishlist-context.tsx +83 -0
  52. package/src/index.ts +16 -0
  53. package/src/skeletons/components/skeleton-button/index.tsx +5 -0
  54. package/src/skeletons/components/skeleton-card-details/index.tsx +10 -0
  55. package/src/skeletons/components/skeleton-cart-item/index.tsx +35 -0
  56. package/src/skeletons/components/skeleton-cart-totals/index.tsx +30 -0
  57. package/src/skeletons/components/skeleton-code-form/index.tsx +13 -0
  58. package/src/skeletons/components/skeleton-line-item/index.tsx +35 -0
  59. package/src/skeletons/components/skeleton-order-confirmed-header/index.tsx +14 -0
  60. package/src/skeletons/components/skeleton-order-information/index.tsx +36 -0
  61. package/src/skeletons/components/skeleton-order-items/index.tsx +43 -0
  62. package/src/skeletons/components/skeleton-order-summary/index.tsx +15 -0
  63. package/src/skeletons/components/skeleton-product-preview/index.tsx +15 -0
  64. package/src/skeletons/templates/skeleton-cart-page/index.tsx +65 -0
  65. package/src/skeletons/templates/skeleton-order-confirmed/index.tsx +21 -0
  66. package/src/skeletons/templates/skeleton-product-grid/index.tsx +23 -0
  67. package/src/skeletons/templates/skeleton-related-products/index.tsx +25 -0
  68. package/src/types/global.ts +24 -0
  69. package/src/types/icon.ts +6 -0
  70. package/src/util/checkout-dom.ts +65 -0
  71. package/src/util/compare-addresses.ts +28 -0
  72. package/src/util/env.ts +3 -0
  73. package/src/util/get-percentage-diff.ts +6 -0
  74. package/src/util/get-product-price.ts +79 -0
  75. package/src/util/isEmpty.ts +11 -0
  76. package/src/util/money.ts +26 -0
  77. package/src/util/product.ts +86 -0
  78. package/src/util/repeat.ts +5 -0
  79. package/src/util/returns.ts +72 -0
@@ -0,0 +1,72 @@
1
+
2
+ import { HttpTypes } from "@medusajs/types"
3
+
4
+ export type ItemWithDeliveryStatus = HttpTypes.StoreOrderLineItem & {
5
+ returnable_quantity: number
6
+ delivered_quantity: number
7
+ return_requested_quantity: number
8
+ return_received_quantity: number
9
+ written_off_quantity: number
10
+ }
11
+
12
+ export const calculateReturnableQuantity = (
13
+ item: HttpTypes.StoreOrderLineItem
14
+ ): number => {
15
+ // In a real implementation, these would come from the item.detail or similar
16
+ // For now, we'll assume we can calculate it from available data or default to quantity
17
+ // Adjust this based on your actual data structure for item details
18
+
19
+ // Note: The actual data structure depends on how Medusa returns order item details
20
+ // Typically it's in item.detail associated with fulfillments/returns
21
+
22
+ // For the purpose of this storefront implementation (assuming standard Medusa):
23
+ // We strictly follow the logic: delivered - requested - received - written_off
24
+
25
+ // Checking if properties exist on item (they might be on a 'detail' object or top level depending on version)
26
+ const anyItem = item as any
27
+
28
+ // Defaulting to item.quantity if details missing (safe fallback for initial dev)
29
+ // BUT per requirements, we must implement the logic.
30
+
31
+ // If the backend provides these fields on the item directly:
32
+ const delivered = anyItem.delivered_quantity ?? anyItem.quantity ?? 0 // Fallback to quantity if assumed delivered
33
+ const requested = anyItem.return_requested_quantity ?? 0
34
+ const received = anyItem.return_received_quantity ?? 0
35
+ const writtenOff = anyItem.written_off_quantity ?? 0
36
+
37
+ // If fulfillment_status is not fulfilled/shipped/partially_shipped, returnable might be 0
38
+ // But strict formula:
39
+ const returnable = Math.max(0, delivered - requested - received - writtenOff)
40
+
41
+ return returnable
42
+ }
43
+
44
+ export const isItemReturnable = (item: HttpTypes.StoreOrderLineItem): boolean => {
45
+ return calculateReturnableQuantity(item) > 0
46
+ }
47
+
48
+ export const hasReturnableItems = (order: HttpTypes.StoreOrder): boolean => {
49
+ if (!order || !order.items) return false
50
+
51
+ // Simple check: if order is canceled, no returns
52
+ if (order.status === "canceled") return false
53
+
54
+ return order.items.some((item) => isItemReturnable(item))
55
+ }
56
+
57
+ export const enhanceItemsWithReturnStatus = (
58
+ items: HttpTypes.StoreOrderLineItem[]
59
+ ): ItemWithDeliveryStatus[] => {
60
+ return items.map((item) => {
61
+ const anyItem = item as any
62
+ return {
63
+ ...item,
64
+ // Ensure these properties exist
65
+ delivered_quantity: anyItem.delivered_quantity ?? item.quantity, // Optimistic default
66
+ return_requested_quantity: anyItem.return_requested_quantity ?? 0,
67
+ return_received_quantity: anyItem.return_received_quantity ?? 0,
68
+ written_off_quantity: anyItem.written_off_quantity ?? 0,
69
+ returnable_quantity: calculateReturnableQuantity(item),
70
+ }
71
+ })
72
+ }