@lodashventure/medusa-booking-for-pickup 1.4.18 → 1.4.20

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.
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  const jsxRuntime = require("react/jsx-runtime");
3
- const react = require("react");
4
- const lucideReact = require("lucide-react");
5
3
  const adminSdk = require("@medusajs/admin-sdk");
6
4
  const ui = require("@medusajs/ui");
5
+ const react = require("react");
6
+ const lucideReact = require("lucide-react");
7
7
  const icons = require("@medusajs/icons");
8
8
  const reactRouterDom = require("react-router-dom");
9
9
  const Medusa = require("@medusajs/js-sdk");
@@ -69,38 +69,38 @@ const CustomerPickupHistoryWidget = ({ data }) => {
69
69
  canceled: "ยกเลิก",
70
70
  processing: "กำลังดำเนินการ"
71
71
  };
72
- return /* @__PURE__ */ jsxRuntime.jsx(Badge, { color: statusColors[status] || "grey", size: "small", children: statusLabels[status] || status });
72
+ return /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: statusColors[status] || "grey", size: "small", children: statusLabels[status] || status });
73
73
  };
74
74
  if (loading) {
75
- return /* @__PURE__ */ jsxRuntime.jsxs(Container, { className: "divide-y p-0", children: [
75
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
76
76
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-x-2", children: [
77
77
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { className: "text-ui-fg-subtle" }),
78
- /* @__PURE__ */ jsxRuntime.jsx(Heading, { level: "h2", children: "ประวัติการจองรับสินค้า" })
78
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "ประวัติการจองรับสินค้า" })
79
79
  ] }) }),
80
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { className: "text-ui-fg-subtle", children: "กำลังโหลด..." }) })
80
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "กำลังโหลด..." }) })
81
81
  ] });
82
82
  }
83
83
  if (error) {
84
- return /* @__PURE__ */ jsxRuntime.jsxs(Container, { className: "divide-y p-0", children: [
84
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
85
85
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-x-2", children: [
86
86
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { className: "text-ui-fg-subtle" }),
87
- /* @__PURE__ */ jsxRuntime.jsx(Heading, { level: "h2", children: "ประวัติการจองรับสินค้า" })
87
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "ประวัติการจองรับสินค้า" })
88
88
  ] }) }),
89
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { className: "text-red-500", children: error }) })
89
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-red-500", children: error }) })
90
90
  ] });
91
91
  }
92
- return /* @__PURE__ */ jsxRuntime.jsxs(Container, { className: "divide-y p-0", children: [
92
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
93
93
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-6 py-4", children: [
94
94
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-x-2", children: [
95
95
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { className: "text-ui-fg-subtle" }),
96
- /* @__PURE__ */ jsxRuntime.jsx(Heading, { level: "h2", children: "ประวัติการจองรับสินค้า" }),
97
- pickupHistory.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "small", children: pickupHistory.length })
96
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "ประวัติการจองรับสินค้า" }),
97
+ pickupHistory.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { size: "small", children: pickupHistory.length })
98
98
  ] }),
99
- /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "small", variant: "transparent", onClick: fetchPickupHistory, children: "รีเฟรช" })
99
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { size: "small", variant: "transparent", onClick: fetchPickupHistory, children: "รีเฟรช" })
100
100
  ] }),
101
101
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-6 py-4", children: pickupHistory.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center py-8 text-center", children: [
102
102
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Package, { className: "text-ui-fg-muted mb-4", size: 48 }),
103
- /* @__PURE__ */ jsxRuntime.jsx(Text, { className: "text-ui-fg-subtle", children: "ยังไม่มีประวัติการจองรับสินค้า" })
103
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "ยังไม่มีประวัติการจองรับสินค้า" })
104
104
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children: pickupHistory.map((pickup) => {
105
105
  var _a;
106
106
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -112,22 +112,22 @@ const CustomerPickupHistoryWidget = ({ data }) => {
112
112
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
113
113
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShoppingBag, { className: "text-ui-fg-subtle", size: 20 }),
114
114
  /* @__PURE__ */ jsxRuntime.jsx("div", { children: pickup.order ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
115
- /* @__PURE__ */ jsxRuntime.jsxs(Text, { weight: "plus", size: "small", children: [
115
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { weight: "plus", size: "small", children: [
116
116
  "คำสั่งซื้อ #",
117
117
  pickup.order.display_id
118
118
  ] }),
119
- /* @__PURE__ */ jsxRuntime.jsxs(Text, { size: "xsmall", className: "text-ui-fg-subtle", children: [
119
+ /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "xsmall", className: "text-ui-fg-subtle", children: [
120
120
  ((_a = pickup.order.items) == null ? void 0 : _a.length) || 0,
121
121
  " รายการ"
122
122
  ] })
123
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(Text, { weight: "plus", size: "small", children: [
123
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { weight: "plus", size: "small", children: [
124
124
  "คำสั่งซื้อ ",
125
125
  pickup.order_id
126
126
  ] }) })
127
127
  ] }),
128
128
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end gap-1", children: [
129
129
  pickup.order && getStatusBadge(pickup.order.status),
130
- pickup.order && /* @__PURE__ */ jsxRuntime.jsx(Text, { weight: "plus", size: "small", children: formatCurrency(
130
+ pickup.order && /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { weight: "plus", size: "small", children: formatCurrency(
131
131
  pickup.order.total,
132
132
  pickup.order.currency_code
133
133
  ) })
@@ -149,7 +149,7 @@ const CustomerPickupHistoryWidget = ({ data }) => {
149
149
  ] })
150
150
  ] })
151
151
  ] }),
152
- pickup.order && pickup.order.shipping_methods && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 pt-2 border-t", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { size: "xsmall", className: "text-ui-fg-subtle", children: pickup.order.shipping_methods.map((sm) => sm.name).join(", ") }) })
152
+ pickup.order && pickup.order.shipping_methods && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2 pt-2 border-t", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "xsmall", className: "text-ui-fg-subtle", children: pickup.order.shipping_methods.map((sm) => sm.name).join(", ") }) })
153
153
  ]
154
154
  },
155
155
  pickup.id
@@ -157,7 +157,7 @@ const CustomerPickupHistoryWidget = ({ data }) => {
157
157
  }) }) })
158
158
  ] });
159
159
  };
160
- defineWidgetConfig({
160
+ adminSdk.defineWidgetConfig({
161
161
  zone: "customer.details.after"
162
162
  });
163
163
  const OrderPickupBookingWidget = ({ data }) => {
@@ -460,7 +460,7 @@ const usePickupAvailable = (id) => {
460
460
  setError(null);
461
461
  try {
462
462
  const option = await sdk.admin.shippingOption.retrieve(id, {
463
- fields: "*.*,pickup_availabilities.*"
463
+ fields: "*.*,pickupAvailability.*,pickup_availabilities.*"
464
464
  });
465
465
  if (option.shipping_option.service_zone.fulfillment_set.type !== "pickup") {
466
466
  throw new Error("shipping option is not pickup");
@@ -629,22 +629,46 @@ const DEFAULT_SCHEDULE = {
629
629
  function ShippingOptionDetails() {
630
630
  const { id } = reactRouterDom.useParams();
631
631
  const navigate = reactRouterDom.useNavigate();
632
- const sdk2 = adminSdk.useSdk();
633
632
  const [schedule, setSchedule] = react.useState(
634
633
  structuredClone(DEFAULT_SCHEDULE)
635
634
  );
636
635
  const { data, refetch, error } = usePickupAvailable(id);
637
636
  react.useEffect(() => {
638
- if (!data) return;
637
+ if (!(data == null ? void 0 : data.shipping_option)) {
638
+ return;
639
+ }
639
640
  const _schedule = structuredClone(DEFAULT_SCHEDULE);
640
- data.shipping_option.pickup_availabilities.forEach((availability) => {
641
- const timeSlots = _schedule[availability.day_of_week].timeSlots;
641
+ const normalizeInput = (input) => {
642
+ if (!input) {
643
+ return [];
644
+ }
645
+ if (Array.isArray(input)) {
646
+ return input;
647
+ }
648
+ if (typeof input === "object") {
649
+ return Object.values(input);
650
+ }
651
+ return [];
652
+ };
653
+ const normalized = [
654
+ ...normalizeInput(data.shipping_option.pickup_availabilities),
655
+ ...normalizeInput(data.shipping_option.pickupAvailability)
656
+ ];
657
+ normalized.forEach((availability) => {
658
+ if (!(availability == null ? void 0 : availability.day_of_week)) {
659
+ return;
660
+ }
661
+ const dayKey = availability.day_of_week.toLowerCase();
662
+ if (!_schedule[dayKey]) {
663
+ return;
664
+ }
665
+ const timeSlots = _schedule[dayKey].timeSlots;
642
666
  timeSlots.push({
643
667
  start: dateToString(availability.timeStart),
644
668
  end: dateToString(availability.timeEnd)
645
669
  });
646
- _schedule[availability.day_of_week] = {
647
- enabled: availability.enable,
670
+ _schedule[dayKey] = {
671
+ enabled: Boolean(availability.enable),
648
672
  timeSlots
649
673
  };
650
674
  });
@@ -679,12 +703,12 @@ function ShippingOptionDetails() {
679
703
  return;
680
704
  }
681
705
  try {
682
- await sdk2.client.fetch(`/admin/pickup-date/${id}`, {
706
+ await sdk.client.fetch(`/admin/pickup-date/${id}`, {
683
707
  method: "POST",
684
708
  headers: {
685
709
  "Content-Type": "application/json"
686
710
  },
687
- body: JSON.stringify({
711
+ body: {
688
712
  schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) => ({
689
713
  day_of_week: day,
690
714
  enable: enabled,
@@ -693,7 +717,7 @@ function ShippingOptionDetails() {
693
717
  end: slot.end
694
718
  }))
695
719
  }))
696
- })
720
+ }
697
721
  });
698
722
  refetch();
699
723
  ui.toast.success("Availability updated", {
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
3
+ import { Container, Heading, Text, Badge, Button, toast, createDataTableColumnHelper, useDataTable, DataTable, Select, clx, Switch, IconButton } from "@medusajs/ui";
2
4
  import { useState, useEffect, useMemo, useCallback } from "react";
3
5
  import { Calendar, Package, ShoppingBag, Clock, MapPin, RefreshCw, ArrowLeft, Trash2 } from "lucide-react";
4
- import { defineWidgetConfig as defineWidgetConfig$1, defineRouteConfig, useSdk } from "@medusajs/admin-sdk";
5
- import { Container as Container$1, Heading as Heading$1, Text as Text$1, Badge as Badge$1, Button as Button$1, toast, createDataTableColumnHelper, useDataTable, DataTable, Select, clx, Switch, IconButton } from "@medusajs/ui";
6
6
  import { StackPerspective, Plus } from "@medusajs/icons";
7
7
  import { useNavigate, useParams, Navigate } from "react-router-dom";
8
8
  import Medusa from "@medusajs/js-sdk";
@@ -232,46 +232,46 @@ const OrderPickupBookingWidget = ({ data }) => {
232
232
  return { label: "รอรับสินค้า", color: "blue" };
233
233
  };
234
234
  if (loading) {
235
- return /* @__PURE__ */ jsxs(Container$1, { className: "divide-y p-0", children: [
235
+ return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
236
236
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
237
237
  /* @__PURE__ */ jsx(Calendar, { className: "text-ui-fg-subtle" }),
238
- /* @__PURE__ */ jsx(Heading$1, { level: "h2", children: "การจองรับสินค้า" })
238
+ /* @__PURE__ */ jsx(Heading, { level: "h2", children: "การจองรับสินค้า" })
239
239
  ] }) }),
240
- /* @__PURE__ */ jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsx(Text$1, { className: "text-ui-fg-subtle", children: "กำลังโหลด..." }) })
240
+ /* @__PURE__ */ jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "กำลังโหลด..." }) })
241
241
  ] });
242
242
  }
243
243
  if (error) {
244
- return /* @__PURE__ */ jsxs(Container$1, { className: "divide-y p-0", children: [
244
+ return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
245
245
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
246
246
  /* @__PURE__ */ jsx(Calendar, { className: "text-ui-fg-subtle" }),
247
- /* @__PURE__ */ jsx(Heading$1, { level: "h2", children: "การจองรับสินค้า" })
247
+ /* @__PURE__ */ jsx(Heading, { level: "h2", children: "การจองรับสินค้า" })
248
248
  ] }) }),
249
- /* @__PURE__ */ jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsx(Text$1, { className: "text-red-500", children: error }) })
249
+ /* @__PURE__ */ jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsx(Text, { className: "text-red-500", children: error }) })
250
250
  ] });
251
251
  }
252
252
  if (!pickupBooking) {
253
- return /* @__PURE__ */ jsxs(Container$1, { className: "divide-y p-0", children: [
253
+ return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
254
254
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-between px-6 py-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
255
255
  /* @__PURE__ */ jsx(Calendar, { className: "text-ui-fg-subtle" }),
256
- /* @__PURE__ */ jsx(Heading$1, { level: "h2", children: "การจองรับสินค้า" })
256
+ /* @__PURE__ */ jsx(Heading, { level: "h2", children: "การจองรับสินค้า" })
257
257
  ] }) }),
258
258
  /* @__PURE__ */ jsx("div", { className: "px-6 py-4", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center justify-center py-8 text-center", children: [
259
259
  /* @__PURE__ */ jsx(MapPin, { className: "text-ui-fg-muted mb-4", size: 48 }),
260
- /* @__PURE__ */ jsx(Text$1, { className: "text-ui-fg-subtle", children: "คำสั่งซื้อนี้ไม่ได้จองรับสินค้าที่สาขา" }),
261
- /* @__PURE__ */ jsx(Text$1, { size: "xsmall", className: "text-ui-fg-muted mt-2", children: "คำสั่งซื้อนี้อาจเป็นการจัดส่งแบบปกติ" })
260
+ /* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "คำสั่งซื้อนี้ไม่ได้จองรับสินค้าที่สาขา" }),
261
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-muted mt-2", children: "คำสั่งซื้อนี้อาจเป็นการจัดส่งแบบปกติ" })
262
262
  ] }) })
263
263
  ] });
264
264
  }
265
265
  const status = getPickupStatus();
266
- return /* @__PURE__ */ jsxs(Container$1, { className: "divide-y p-0", children: [
266
+ return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
267
267
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-6 py-4", children: [
268
268
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2", children: [
269
269
  /* @__PURE__ */ jsx(Calendar, { className: "text-ui-fg-subtle" }),
270
- /* @__PURE__ */ jsx(Heading$1, { level: "h2", children: "การจองรับสินค้าที่สาขา" }),
271
- /* @__PURE__ */ jsx(Badge$1, { color: status.color, size: "small", children: status.label })
270
+ /* @__PURE__ */ jsx(Heading, { level: "h2", children: "การจองรับสินค้าที่สาขา" }),
271
+ /* @__PURE__ */ jsx(Badge, { color: status.color, size: "small", children: status.label })
272
272
  ] }),
273
273
  /* @__PURE__ */ jsx(
274
- Button$1,
274
+ Button,
275
275
  {
276
276
  size: "small",
277
277
  variant: "transparent",
@@ -288,25 +288,25 @@ const OrderPickupBookingWidget = ({ data }) => {
288
288
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
289
289
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-ui-fg-subtle", children: [
290
290
  /* @__PURE__ */ jsx(Calendar, { size: 16 }),
291
- /* @__PURE__ */ jsx(Text$1, { size: "xsmall", weight: "plus", children: "วันที่รับสินค้า" })
291
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", weight: "plus", children: "วันที่รับสินค้า" })
292
292
  ] }),
293
- /* @__PURE__ */ jsx(Text$1, { weight: "plus", children: formatDate(pickupBooking.pickup_datetime) })
293
+ /* @__PURE__ */ jsx(Text, { weight: "plus", children: formatDate(pickupBooking.pickup_datetime) })
294
294
  ] }),
295
295
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
296
296
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-ui-fg-subtle", children: [
297
297
  /* @__PURE__ */ jsx(Clock, { size: 16 }),
298
- /* @__PURE__ */ jsx(Text$1, { size: "xsmall", weight: "plus", children: "เวลารับสินค้า" })
298
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", weight: "plus", children: "เวลารับสินค้า" })
299
299
  ] }),
300
- /* @__PURE__ */ jsx(Text$1, { weight: "plus", children: formatTime(pickupBooking.pickup_datetime) })
300
+ /* @__PURE__ */ jsx(Text, { weight: "plus", children: formatTime(pickupBooking.pickup_datetime) })
301
301
  ] })
302
302
  ] }),
303
303
  pickupBooking.shipping_option && /* @__PURE__ */ jsx("div", { className: "rounded-lg border p-4 bg-ui-bg-subtle", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 mb-2", children: [
304
304
  /* @__PURE__ */ jsx(MapPin, { className: "text-ui-fg-muted mt-1", size: 16 }),
305
305
  /* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
306
- /* @__PURE__ */ jsx(Text$1, { weight: "plus", size: "small", className: "mb-1", children: pickupBooking.shipping_option.name }),
306
+ /* @__PURE__ */ jsx(Text, { weight: "plus", size: "small", className: "mb-1", children: pickupBooking.shipping_option.name }),
307
307
  ((_b = (_a = pickupBooking.shipping_option.service_zone) == null ? void 0 : _a.fulfillment_set) == null ? void 0 : _b.location) && /* @__PURE__ */ jsxs(Fragment, { children: [
308
- /* @__PURE__ */ jsx(Text$1, { size: "small", className: "text-ui-fg-subtle", children: pickupBooking.shipping_option.service_zone.fulfillment_set.location.name }),
309
- pickupBooking.shipping_option.service_zone.fulfillment_set.location.address && /* @__PURE__ */ jsxs(Text$1, { size: "xsmall", className: "text-ui-fg-muted mt-1", children: [
308
+ /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: pickupBooking.shipping_option.service_zone.fulfillment_set.location.name }),
309
+ pickupBooking.shipping_option.service_zone.fulfillment_set.location.address && /* @__PURE__ */ jsxs(Text, { size: "xsmall", className: "text-ui-fg-muted mt-1", children: [
310
310
  pickupBooking.shipping_option.service_zone.fulfillment_set.location.address.address_1,
311
311
  pickupBooking.shipping_option.service_zone.fulfillment_set.location.address.address_2 && `, ${pickupBooking.shipping_option.service_zone.fulfillment_set.location.address.address_2}`,
312
312
  /* @__PURE__ */ jsx("br", {}),
@@ -321,22 +321,22 @@ const OrderPickupBookingWidget = ({ data }) => {
321
321
  ] }) }),
322
322
  /* @__PURE__ */ jsx("div", { className: "pt-4 border-t", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
323
323
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
324
- /* @__PURE__ */ jsx(Text$1, { size: "xsmall", className: "text-ui-fg-subtle", children: "จองเมื่อ" }),
325
- /* @__PURE__ */ jsx(Text$1, { size: "small", children: formatDateTime(pickupBooking.created_at) })
324
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-subtle", children: "จองเมื่อ" }),
325
+ /* @__PURE__ */ jsx(Text, { size: "small", children: formatDateTime(pickupBooking.created_at) })
326
326
  ] }),
327
327
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
328
- /* @__PURE__ */ jsx(Text$1, { size: "xsmall", className: "text-ui-fg-subtle", children: "อัปเดตล่าสุด" }),
329
- /* @__PURE__ */ jsx(Text$1, { size: "small", children: formatDateTime(pickupBooking.updated_at) })
328
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-ui-fg-subtle", children: "อัปเดตล่าสุด" }),
329
+ /* @__PURE__ */ jsx(Text, { size: "small", children: formatDateTime(pickupBooking.updated_at) })
330
330
  ] })
331
331
  ] }) }),
332
- /* @__PURE__ */ jsx("div", { className: "pt-4 border-t", children: /* @__PURE__ */ jsxs(Text$1, { size: "xsmall", className: "text-ui-fg-muted", children: [
332
+ /* @__PURE__ */ jsx("div", { className: "pt-4 border-t", children: /* @__PURE__ */ jsxs(Text, { size: "xsmall", className: "text-ui-fg-muted", children: [
333
333
  "Booking ID: ",
334
334
  pickupBooking.id
335
335
  ] }) })
336
336
  ] }) })
337
337
  ] });
338
338
  };
339
- defineWidgetConfig$1({
339
+ defineWidgetConfig({
340
340
  zone: "order.details.after"
341
341
  });
342
342
  const sdk = new Medusa({
@@ -431,8 +431,8 @@ const ShippingOptionList = () => {
431
431
  navigate(`/pickup-shipping/${row.id}`);
432
432
  }
433
433
  });
434
- return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Container$1, { className: "flex flex-col p-0 overflow-hidden", children: /* @__PURE__ */ jsxs(DataTable, { instance: table, children: [
435
- /* @__PURE__ */ jsx(DataTable.Toolbar, { className: "flex flex-col items-start justify-between gap-2 md:flex-row md:items-center", children: /* @__PURE__ */ jsx(Heading$1, { children: "Pickup Shipping Options" }) }),
434
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Container, { className: "flex flex-col p-0 overflow-hidden", children: /* @__PURE__ */ jsxs(DataTable, { instance: table, children: [
435
+ /* @__PURE__ */ jsx(DataTable.Toolbar, { className: "flex flex-col items-start justify-between gap-2 md:flex-row md:items-center", children: /* @__PURE__ */ jsx(Heading, { children: "Pickup Shipping Options" }) }),
436
436
  /* @__PURE__ */ jsx(DataTable.Table, {})
437
437
  ] }) }) });
438
438
  };
@@ -457,7 +457,7 @@ const usePickupAvailable = (id) => {
457
457
  setError(null);
458
458
  try {
459
459
  const option = await sdk.admin.shippingOption.retrieve(id, {
460
- fields: "*.*,pickup_availabilities.*"
460
+ fields: "*.*,pickupAvailability.*,pickup_availabilities.*"
461
461
  });
462
462
  if (option.shipping_option.service_zone.fulfillment_set.type !== "pickup") {
463
463
  throw new Error("shipping option is not pickup");
@@ -567,10 +567,10 @@ function TimeTable({
567
567
  });
568
568
  };
569
569
  if (timeSlots.length === 0) return null;
570
- return /* @__PURE__ */ jsxs(Container$1, { className: "p-4 overflow-x-auto", children: [
571
- /* @__PURE__ */ jsx(Heading$1, { className: "text-xl font-bold mb-4", children: "Pickup Hours Schedule" }),
570
+ return /* @__PURE__ */ jsxs(Container, { className: "p-4 overflow-x-auto", children: [
571
+ /* @__PURE__ */ jsx(Heading, { className: "text-xl font-bold mb-4", children: "Pickup Hours Schedule" }),
572
572
  /* @__PURE__ */ jsxs("div", { className: "min-w-full flex", children: [
573
- /* @__PURE__ */ jsx("div", { className: "ml-2 mt-7 flex flex-col items-end", children: timeSlots.map((timeSlot) => /* @__PURE__ */ jsx(Text$1, { className: "h-8", children: timeSlot }, timeSlot)) }),
573
+ /* @__PURE__ */ jsx("div", { className: "ml-2 mt-7 flex flex-col items-end", children: timeSlots.map((timeSlot) => /* @__PURE__ */ jsx(Text, { className: "h-8", children: timeSlot }, timeSlot)) }),
574
574
  /* @__PURE__ */ jsxs("table", { className: "ml-2 w-full border-collapse", children: [
575
575
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: days.map((day) => /* @__PURE__ */ jsx(
576
576
  "th",
@@ -626,22 +626,46 @@ const DEFAULT_SCHEDULE = {
626
626
  function ShippingOptionDetails() {
627
627
  const { id } = useParams();
628
628
  const navigate = useNavigate();
629
- const sdk2 = useSdk();
630
629
  const [schedule, setSchedule] = useState(
631
630
  structuredClone(DEFAULT_SCHEDULE)
632
631
  );
633
632
  const { data, refetch, error } = usePickupAvailable(id);
634
633
  useEffect(() => {
635
- if (!data) return;
634
+ if (!(data == null ? void 0 : data.shipping_option)) {
635
+ return;
636
+ }
636
637
  const _schedule = structuredClone(DEFAULT_SCHEDULE);
637
- data.shipping_option.pickup_availabilities.forEach((availability) => {
638
- const timeSlots = _schedule[availability.day_of_week].timeSlots;
638
+ const normalizeInput = (input) => {
639
+ if (!input) {
640
+ return [];
641
+ }
642
+ if (Array.isArray(input)) {
643
+ return input;
644
+ }
645
+ if (typeof input === "object") {
646
+ return Object.values(input);
647
+ }
648
+ return [];
649
+ };
650
+ const normalized = [
651
+ ...normalizeInput(data.shipping_option.pickup_availabilities),
652
+ ...normalizeInput(data.shipping_option.pickupAvailability)
653
+ ];
654
+ normalized.forEach((availability) => {
655
+ if (!(availability == null ? void 0 : availability.day_of_week)) {
656
+ return;
657
+ }
658
+ const dayKey = availability.day_of_week.toLowerCase();
659
+ if (!_schedule[dayKey]) {
660
+ return;
661
+ }
662
+ const timeSlots = _schedule[dayKey].timeSlots;
639
663
  timeSlots.push({
640
664
  start: dateToString(availability.timeStart),
641
665
  end: dateToString(availability.timeEnd)
642
666
  });
643
- _schedule[availability.day_of_week] = {
644
- enabled: availability.enable,
667
+ _schedule[dayKey] = {
668
+ enabled: Boolean(availability.enable),
645
669
  timeSlots
646
670
  };
647
671
  });
@@ -676,12 +700,12 @@ function ShippingOptionDetails() {
676
700
  return;
677
701
  }
678
702
  try {
679
- await sdk2.client.fetch(`/admin/pickup-date/${id}`, {
703
+ await sdk.client.fetch(`/admin/pickup-date/${id}`, {
680
704
  method: "POST",
681
705
  headers: {
682
706
  "Content-Type": "application/json"
683
707
  },
684
- body: JSON.stringify({
708
+ body: {
685
709
  schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) => ({
686
710
  day_of_week: day,
687
711
  enable: enabled,
@@ -690,7 +714,7 @@ function ShippingOptionDetails() {
690
714
  end: slot.end
691
715
  }))
692
716
  }))
693
- })
717
+ }
694
718
  });
695
719
  refetch();
696
720
  toast.success("Availability updated", {
@@ -760,22 +784,22 @@ function ShippingOptionDetails() {
760
784
  return /* @__PURE__ */ jsx(Navigate, { to: "/pickup-shipping" });
761
785
  }
762
786
  return /* @__PURE__ */ jsxs(Fragment, { children: [
763
- /* @__PURE__ */ jsxs(Container$1, { className: "p-4 ", children: [
787
+ /* @__PURE__ */ jsxs(Container, { className: "p-4 ", children: [
764
788
  /* @__PURE__ */ jsxs(
765
- Button$1,
789
+ Button,
766
790
  {
767
791
  onClick: () => navigate("/pickup-shipping"),
768
792
  variant: "transparent",
769
793
  className: "p-0 mb-4",
770
794
  children: [
771
795
  /* @__PURE__ */ jsx(ArrowLeft, { size: 20 }),
772
- /* @__PURE__ */ jsx(Text$1, { className: "ml-2", children: "Back" })
796
+ /* @__PURE__ */ jsx(Text, { className: "ml-2", children: "Back" })
773
797
  ]
774
798
  }
775
799
  ),
776
800
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 mb-4", children: [
777
- /* @__PURE__ */ jsx(Heading$1, { className: "text-xl font-bold", children: "Pickup Hours" }),
778
- /* @__PURE__ */ jsx(Button$1, { onClick: handleUpdateSchedules, children: "Save" })
801
+ /* @__PURE__ */ jsx(Heading, { className: "text-xl font-bold", children: "Pickup Hours" }),
802
+ /* @__PURE__ */ jsx(Button, { onClick: handleUpdateSchedules, children: "Save" })
779
803
  ] }),
780
804
  /* @__PURE__ */ jsx("div", { className: "space-y-4", children: Object.entries(schedule).map(([day, { enabled, timeSlots }]) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
781
805
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 mb-2 h-8", children: [
@@ -787,7 +811,7 @@ function ShippingOptionDetails() {
787
811
  },
788
812
  `switch-${day}`
789
813
  ),
790
- /* @__PURE__ */ jsx(Text$1, { className: "capitalize", children: day }),
814
+ /* @__PURE__ */ jsx(Text, { className: "capitalize", children: day }),
791
815
  enabled && /* @__PURE__ */ jsx(
792
816
  IconButton,
793
817
  {
@@ -812,7 +836,7 @@ function ShippingOptionDetails() {
812
836
  maxTime: slot.end
813
837
  }
814
838
  ),
815
- /* @__PURE__ */ jsx(Text$1, { className: "text-gray-400", children: "-" }),
839
+ /* @__PURE__ */ jsx(Text, { className: "text-gray-400", children: "-" }),
816
840
  /* @__PURE__ */ jsx(
817
841
  TimeSelect,
818
842
  {
@@ -6,8 +6,45 @@ const GET = async (req, res) => {
6
6
  const { id: customer_id } = req.params;
7
7
  const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
8
8
  try {
9
- // Query pickup dates for orders associated with this customer
10
- const result = await query.graph({
9
+ // Fetch customer orders first because pickup_date doesn't expose the customer relationship.
10
+ const ordersResult = (await query.graph({
11
+ entity: "order",
12
+ fields: [
13
+ "id",
14
+ "display_id",
15
+ "status",
16
+ "created_at",
17
+ "total",
18
+ "currency_code",
19
+ "items.id",
20
+ "shipping_methods.name",
21
+ ],
22
+ filters: {
23
+ customer_id,
24
+ },
25
+ pagination: {
26
+ order: {
27
+ created_at: "DESC",
28
+ },
29
+ },
30
+ }));
31
+ const orders = ordersResult.data || [];
32
+ if (!orders.length) {
33
+ return res.status(200).json({
34
+ pickup_history: [],
35
+ count: 0,
36
+ });
37
+ }
38
+ const orderIds = Array.from(new Set(orders
39
+ .map((order) => order.id)
40
+ .filter((id) => typeof id === "string" && id.length > 0)));
41
+ if (!orderIds.length) {
42
+ return res.status(200).json({
43
+ pickup_history: [],
44
+ count: 0,
45
+ });
46
+ }
47
+ const pickupResult = (await query.graph({
11
48
  entity: "pickup_date",
12
49
  fields: [
13
50
  "id",
@@ -17,53 +54,29 @@ const GET = async (req, res) => {
17
54
  "updated_at",
18
55
  ],
19
56
  filters: {
20
- order: {
21
- customer_id: customer_id,
22
- },
57
+ order_id: orderIds,
23
58
  },
24
59
  pagination: {
25
60
  order: {
26
- created_at: "DESC",
61
+ pickup_datetime: "DESC",
27
62
  },
28
63
  },
29
- });
30
- // Enrich with order details
31
- const pickupDates = result.data || [];
32
- if (pickupDates.length > 0) {
33
- // Get order details for each pickup
34
- const orderIds = pickupDates.map((pd) => pd.order_id).filter(Boolean);
35
- if (orderIds.length > 0) {
36
- const orders = await query.graph({
37
- entity: "order",
38
- fields: [
39
- "id",
40
- "display_id",
41
- "status",
42
- "created_at",
43
- "total",
44
- "currency_code",
45
- "items.*",
46
- "shipping_methods.*",
47
- ],
48
- filters: {
49
- id: orderIds,
50
- },
51
- });
52
- // Map orders to pickup dates
53
- const orderMap = new Map(orders.data.map((order) => [order.id, order]));
54
- const enrichedPickups = pickupDates.map((pickup) => ({
55
- ...pickup,
56
- order: orderMap.get(pickup.order_id) || null,
57
- }));
58
- return res.status(200).json({
59
- pickup_history: enrichedPickups,
60
- count: enrichedPickups.length,
61
- });
62
- }
64
+ }));
65
+ const pickupDates = pickupResult.data || [];
66
+ if (!pickupDates.length) {
67
+ return res.status(200).json({
68
+ pickup_history: [],
69
+ count: 0,
70
+ });
63
71
  }
72
+ const orderMap = new Map(orders.map((order) => [order.id, order]));
73
+ const enrichedPickups = pickupDates.map((pickup) => ({
74
+ ...pickup,
75
+ order: pickup.order_id ? orderMap.get(pickup.order_id) ?? null : null,
76
+ }));
64
77
  return res.status(200).json({
65
- pickup_history: [],
66
- count: 0,
78
+ pickup_history: enrichedPickups,
79
+ count: enrichedPickups.length,
67
80
  });
68
81
  }
69
82
  catch (error) {
@@ -74,4 +87,4 @@ const GET = async (req, res) => {
74
87
  }
75
88
  };
76
89
  exports.GET = GET;
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2N1c3RvbWVycy9baWRdL3BpY2t1cC1oaXN0b3J5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUUvRCxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILDhEQUE4RDtRQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDL0IsTUFBTSxFQUFFLGFBQWE7WUFDckIsTUFBTSxFQUFFO2dCQUNOLElBQUk7Z0JBQ0osaUJBQWlCO2dCQUNqQixVQUFVO2dCQUNWLFlBQVk7Z0JBQ1osWUFBWTthQUNiO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRTtvQkFDTCxXQUFXLEVBQUUsV0FBVztpQkFDekI7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUU7b0JBQ0wsVUFBVSxFQUFFLE1BQU07aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCw0QkFBNEI7UUFDNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFFdEMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLG9DQUFvQztZQUNwQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNFLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUMvQixNQUFNLEVBQUUsT0FBTztvQkFDZixNQUFNLEVBQUU7d0JBQ04sSUFBSTt3QkFDSixZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixPQUFPO3dCQUNQLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxFQUFFLEVBQUUsUUFBUTtxQkFDYjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsNkJBQTZCO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUNuRCxDQUFDO2dCQUVGLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3hELEdBQUcsTUFBTTtvQkFDVCxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSTtpQkFDN0MsQ0FBQyxDQUFDLENBQUM7Z0JBRUosT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDMUIsY0FBYyxFQUFFLGVBQWU7b0JBQy9CLEtBQUssRUFBRSxlQUFlLENBQUMsTUFBTTtpQkFDOUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLGdDQUFnQztTQUN6RCxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBL0VXLFFBQUEsR0FBRyxPQStFZCJ9
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2N1c3RvbWVycy9baWRdL3BpY2t1cC1oaXN0b3J5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQXlCL0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN2QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxJQUFJLENBQUM7UUFDSCw0RkFBNEY7UUFDNUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDdEMsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUU7Z0JBQ04sSUFBSTtnQkFDSixZQUFZO2dCQUNaLFFBQVE7Z0JBQ1IsWUFBWTtnQkFDWixPQUFPO2dCQUNQLGVBQWU7Z0JBQ2YsVUFBVTtnQkFDVix1QkFBdUI7YUFDeEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsV0FBVzthQUNaO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEtBQUssRUFBRTtvQkFDTCxVQUFVLEVBQUUsTUFBTTtpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBNEIsQ0FBQztRQUUvQixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLGNBQWMsRUFBRSxFQUFFO2dCQUNsQixLQUFLLEVBQUUsQ0FBQzthQUNULENB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
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ /**
6
+ * GET /store/customers/me/pickup-history
7
+ * Returns pickup history for the authenticated customer
8
+ */
9
+ const GET = async (req, res) => {
10
+ const customer_id = req.auth_context.actor_id;
11
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
12
+ try {
13
+ // Fetch customer orders first because pickup_date doesn't expose the customer relationship.
14
+ const ordersResult = (await query.graph({
15
+ entity: "order",
16
+ fields: [
17
+ "id",
18
+ "display_id",
19
+ "status",
20
+ "created_at",
21
+ "total",
22
+ "currency_code",
23
+ "items.id",
24
+ "shipping_methods.name",
25
+ ],
26
+ filters: {
27
+ customer_id,
28
+ },
29
+ pagination: {
30
+ order: {
31
+ created_at: "DESC",
32
+ },
33
+ },
34
+ }));
35
+ const orders = ordersResult.data || [];
36
+ if (!orders.length) {
37
+ return res.status(200).json({
38
+ pickup_history: [],
39
+ count: 0,
40
+ });
41
+ }
42
+ const orderIds = Array.from(new Set(orders
43
+ .map((order) => order.id)
44
+ .filter((id) => typeof id === "string" && id.length > 0)));
45
+ if (!orderIds.length) {
46
+ return res.status(200).json({
47
+ pickup_history: [],
48
+ count: 0,
49
+ });
50
+ }
51
+ const pickupResult = (await query.graph({
52
+ entity: "pickup_date",
53
+ fields: [
54
+ "id",
55
+ "pickup_datetime",
56
+ "order_id",
57
+ "created_at",
58
+ "updated_at",
59
+ ],
60
+ filters: {
61
+ order_id: orderIds,
62
+ },
63
+ pagination: {
64
+ order: {
65
+ pickup_datetime: "DESC",
66
+ },
67
+ },
68
+ }));
69
+ const pickupDates = pickupResult.data || [];
70
+ if (!pickupDates.length) {
71
+ return res.status(200).json({
72
+ pickup_history: [],
73
+ count: 0,
74
+ });
75
+ }
76
+ const orderMap = new Map(orders.map((order) => [order.id, order]));
77
+ const enrichedPickups = pickupDates.map((pickup) => ({
78
+ ...pickup,
79
+ order: pickup.order_id ? orderMap.get(pickup.order_id) ?? null : null,
80
+ }));
81
+ return res.status(200).json({
82
+ pickup_history: enrichedPickups,
83
+ count: enrichedPickups.length,
84
+ });
85
+ }
86
+ catch (error) {
87
+ console.error("Error fetching pickup history:", error);
88
+ return res.status(500).json({
89
+ error: error.message || "Failed to fetch pickup history",
90
+ });
91
+ }
92
+ };
93
+ exports.GET = GET;
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9waWNrdXAtaGlzdG9yeS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBc0U7QUF5QnRFOzs7R0FHRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILDRGQUE0RjtRQUM1RixNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN0QyxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixZQUFZO2dCQUNaLE9BQU87Z0JBQ1AsZUFBZTtnQkFDZixVQUFVO2dCQUNWLHVCQUF1QjthQUN4QjtZQUNELE9BQU8sRUFBRTtnQkFDUCxXQUFXO2FBQ1o7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFO29CQUNMLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUE0QixDQUFDO1FBRS9CLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXZDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDO2FBQ1Qs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
@@ -7,10 +7,9 @@ const utils_1 = require("@medusajs/framework/utils");
7
7
  const fulfillment_1 = __importDefault(require("@medusajs/medusa/fulfillment"));
8
8
  const pickup_datetime_1 = __importDefault(require("../modules/pickup-datetime"));
9
9
  exports.default = (0, utils_1.defineLink)({
10
- linkable: fulfillment_1.default.linkable.shippingOption,
11
- field: "shipping_option_id",
10
+ linkable: pickup_datetime_1.default.linkable.pickupAvailability,
11
+ foreignKey: "shipping_option_id",
12
12
  }, {
13
- linkable: pickup_datetime_1.default.linkable.pickupAvailability.id,
14
- isList: true,
13
+ linkable: fulfillment_1.default.linkable.shippingOption,
15
14
  });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctb3B0aW9uLXBpY2t1cC1hdmFpbGFiaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlua3Mvc2hpcHBpbmctb3B0aW9uLXBpY2t1cC1hdmFpbGFiaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBdUQ7QUFDdkQsK0VBQTZEO0FBQzdELGlGQUE4RDtBQUU5RCxrQkFBZSxJQUFBLGtCQUFVLEVBQ3ZCO0lBQ0UsUUFBUSxFQUFFLHFCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjO0lBQ25ELEtBQUssRUFBRSxvQkFBb0I7Q0FDNUIsRUFDRDtJQUNFLFFBQVEsRUFBRSx5QkFBb0IsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsRUFBRTtJQUM3RCxNQUFNLEVBQUUsSUFBSTtDQUNiLENBQ0YsQ0FBQyJ9
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctb3B0aW9uLXBpY2t1cC1hdmFpbGFiaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlua3Mvc2hpcHBpbmctb3B0aW9uLXBpY2t1cC1hdmFpbGFiaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBdUQ7QUFDdkQsK0VBQTZEO0FBQzdELGlGQUE4RDtBQUU5RCxrQkFBZSxJQUFBLGtCQUFVLEVBQ3ZCO0lBQ0UsUUFBUSxFQUFFLHlCQUFvQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7SUFDMUQsVUFBVSxFQUFFLG9CQUFvQjtDQUNqQyxFQUNEO0lBQ0UsUUFBUSxFQUFFLHFCQUFpQixDQUFDLFFBQVEsQ0FBQyxjQUFjO0NBQ3BELENBQ0YsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-booking-for-pickup",
3
- "version": "1.4.18",
3
+ "version": "1.4.20",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",
@@ -44,6 +44,7 @@
44
44
  "prop-types": "^15.8.1",
45
45
  "react": "^18.2.0",
46
46
  "react-dom": "^18.2.0",
47
+ "react-router-dom": "^6.22.0",
47
48
  "ts-node": "^10.9.2",
48
49
  "typescript": "^5.6.2",
49
50
  "vite": "^5.2.11",