@lodashventure/medusa-booking-for-pickup 1.4.19 → 1.4.22

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.
@@ -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,5 +1,5 @@
1
1
  import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
- import { defineWidgetConfig, defineRouteConfig, useSdk } from "@medusajs/admin-sdk";
2
+ import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
3
3
  import { Container, Heading, Text, Badge, Button, toast, createDataTableColumnHelper, useDataTable, DataTable, Select, clx, Switch, IconButton } from "@medusajs/ui";
4
4
  import { useState, useEffect, useMemo, useCallback } from "react";
5
5
  import { Calendar, Package, ShoppingBag, Clock, MapPin, RefreshCw, ArrowLeft, Trash2 } from "lucide-react";
@@ -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");
@@ -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", {
@@ -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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
@@ -10,8 +10,45 @@ const GET = async (req, res) => {
10
10
  const customer_id = req.auth_context.actor_id;
11
11
  const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
12
12
  try {
13
- // Query pickup dates for orders associated with this customer
14
- const result = await query.graph({
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({
15
52
  entity: "pickup_date",
16
53
  fields: [
17
54
  "id",
@@ -21,53 +58,29 @@ const GET = async (req, res) => {
21
58
  "updated_at",
22
59
  ],
23
60
  filters: {
24
- order: {
25
- customer_id: customer_id,
26
- },
61
+ order_id: orderIds,
27
62
  },
28
63
  pagination: {
29
64
  order: {
30
- created_at: "DESC",
65
+ pickup_datetime: "DESC",
31
66
  },
32
67
  },
33
- });
34
- // Enrich with order details
35
- const pickupDates = result.data || [];
36
- if (pickupDates.length > 0) {
37
- // Get order details for each pickup
38
- const orderIds = pickupDates.map((pd) => pd.order_id).filter(Boolean);
39
- if (orderIds.length > 0) {
40
- const orders = await query.graph({
41
- entity: "order",
42
- fields: [
43
- "id",
44
- "display_id",
45
- "status",
46
- "created_at",
47
- "total",
48
- "currency_code",
49
- "items.*",
50
- "shipping_methods.*",
51
- ],
52
- filters: {
53
- id: orderIds,
54
- },
55
- });
56
- // Map orders to pickup dates
57
- const orderMap = new Map(orders.data.map((order) => [order.id, order]));
58
- const enrichedPickups = pickupDates.map((pickup) => ({
59
- ...pickup,
60
- order: orderMap.get(pickup.order_id) || null,
61
- }));
62
- return res.status(200).json({
63
- pickup_history: enrichedPickups,
64
- count: enrichedPickups.length,
65
- });
66
- }
68
+ }));
69
+ const pickupDates = pickupResult.data || [];
70
+ if (!pickupDates.length) {
71
+ return res.status(200).json({
72
+ pickup_history: [],
73
+ count: 0,
74
+ });
67
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
+ }));
68
81
  return res.status(200).json({
69
- pickup_history: [],
70
- count: 0,
82
+ pickup_history: enrichedPickups,
83
+ count: enrichedPickups.length,
71
84
  });
72
85
  }
73
86
  catch (error) {
@@ -78,4 +91,4 @@ const GET = async (req, res) => {
78
91
  }
79
92
  };
80
93
  exports.GET = GET;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9waWNrdXAtaGlzdG9yeS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBc0U7QUFFdEU7OztHQUdHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFakUsSUFBSSxDQUFDO1FBQ0gsOERBQThEO1FBQzlELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvQixNQUFNLEVBQUUsYUFBYTtZQUNyQixNQUFNLEVBQUU7Z0JBQ04sSUFBSTtnQkFDSixpQkFBaUI7Z0JBQ2pCLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixZQUFZO2FBQ2I7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFO29CQUNMLFdBQVcsRUFBRSxXQUFXO2lCQUN6QjthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEtBQUssRUFBRTtvQkFDTCxVQUFVLEVBQUUsTUFBTTtpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUV0QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0Isb0NBQW9DO1lBQ3BDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFM0UsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7b0JBQy9CLE1BQU0sRUFBRSxPQUFPO29CQUNmLE1BQU0sRUFBRTt3QkFDTixJQUFJO3dCQUNKLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixZQUFZO3dCQUNaLE9BQU87d0JBQ1AsZUFBZTt3QkFDZixTQUFTO3dCQUNULG9CQUFvQjtxQkFDckI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLEVBQUUsRUFBRSxRQUFRO3FCQUNiO2lCQUNGLENBQUMsQ0FBQztnQkFFSCw2QkFBNkI7Z0JBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQ25ELENBQUM7Z0JBRUYsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDeEQsR0FBRyxNQUFNO29CQUNULEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJO2lCQUM3QyxDQUFDLENBQUMsQ0FBQztnQkFFSixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUMxQixjQUFjLEVBQUUsZUFBZTtvQkFDL0IsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNO2lCQUM5QixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksZ0NBQWdDO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUM7QUFsRlcsUUFBQSxHQUFHLE9Ba0ZkIn0=
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.19",
3
+ "version": "1.4.22",
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",