@lodashventure/medusa-booking-for-pickup 1.5.10 → 1.5.12

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.
@@ -5,8 +5,8 @@ const ui = require("@medusajs/ui");
5
5
  const react = require("react");
6
6
  const lucideReact = require("lucide-react");
7
7
  const icons = require("@medusajs/icons");
8
- const reactRouterDom = require("react-router-dom");
9
8
  const Medusa = require("@medusajs/js-sdk");
9
+ const reactRouterDom = require("react-router-dom");
10
10
  require("@medusajs/admin-shared");
11
11
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
12
12
  const Medusa__default = /* @__PURE__ */ _interopDefault(Medusa);
@@ -398,6 +398,48 @@ const usePickupShippingOptions = () => {
398
398
  refetch: fetchOptions
399
399
  };
400
400
  };
401
+ const useOptionalNavigate = () => {
402
+ try {
403
+ return reactRouterDom.useNavigate();
404
+ } catch (error) {
405
+ if (void 0) {
406
+ console.warn(
407
+ "[pickup-shipping] Router context unavailable; navigation will fall back to window.location.",
408
+ error
409
+ );
410
+ }
411
+ return null;
412
+ }
413
+ };
414
+ const DEFAULT_PICKUP_PATH = "/app/pickup-shipping";
415
+ const derivePickupBasePath = () => {
416
+ if (typeof window === "undefined") {
417
+ return DEFAULT_PICKUP_PATH;
418
+ }
419
+ const { pathname } = window.location;
420
+ const marker = "/pickup-shipping";
421
+ const index = pathname.indexOf(marker);
422
+ if (index === -1) {
423
+ return DEFAULT_PICKUP_PATH;
424
+ }
425
+ return pathname.slice(0, index + marker.length);
426
+ };
427
+ const fallbackNavigate = (target) => {
428
+ if (typeof window === "undefined") {
429
+ return;
430
+ }
431
+ window.location.assign(target);
432
+ };
433
+ const fallbackBack = (fallbackTarget) => {
434
+ if (typeof window === "undefined") {
435
+ return;
436
+ }
437
+ if (window.history.length > 1) {
438
+ window.history.back();
439
+ return;
440
+ }
441
+ fallbackNavigate(fallbackTarget);
442
+ };
401
443
  const columnHelper = ui.createDataTableColumnHelper();
402
444
  const columns = [
403
445
  columnHelper.accessor("shipping_profile.name", {
@@ -414,12 +456,23 @@ const columns = [
414
456
  })
415
457
  ];
416
458
  const ShippingOptionList = () => {
417
- const navigate = reactRouterDom.useNavigate();
459
+ const routerNavigate = useOptionalNavigate();
460
+ const pickupBasePath = react.useMemo(() => derivePickupBasePath(), []);
418
461
  const [pagination, setPagination] = react.useState({
419
462
  pageSize: 1e3,
420
463
  pageIndex: 0
421
464
  });
422
465
  const { data, isLoading } = usePickupShippingOptions();
466
+ const handleNavigate = react.useCallback(
467
+ (id) => {
468
+ if (routerNavigate) {
469
+ routerNavigate(`/pickup-shipping/${id}`);
470
+ return;
471
+ }
472
+ fallbackNavigate(`${pickupBasePath}/${id}`);
473
+ },
474
+ [routerNavigate, pickupBasePath]
475
+ );
423
476
  const table = ui.useDataTable({
424
477
  columns,
425
478
  data: (data == null ? void 0 : data.shipping_options) || [],
@@ -431,7 +484,7 @@ const ShippingOptionList = () => {
431
484
  onPaginationChange: setPagination
432
485
  },
433
486
  onRowClick: (_, row) => {
434
- navigate(`/pickup-shipping/${row.id}`);
487
+ handleNavigate(row.id);
435
488
  }
436
489
  });
437
490
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { className: "flex flex-col p-0 overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.DataTable, { instance: table, children: [
@@ -446,44 +499,103 @@ const config = adminSdk.defineRouteConfig({
446
499
  label: "Shipping Pickup",
447
500
  icon: icons.StackPerspective
448
501
  });
502
+ const normalizeResponse = (payload) => {
503
+ if (payload == null ? void 0 : payload.shipping_option) {
504
+ return payload;
505
+ }
506
+ return {
507
+ shipping_option: payload
508
+ };
509
+ };
449
510
  const usePickupAvailable = (id) => {
450
511
  const [data, setData] = react.useState(null);
451
512
  const [isLoading, setIsLoading] = react.useState(true);
452
513
  const [error, setError] = react.useState(null);
453
- const fetchPickupAvailable = async () => {
454
- if (!id) {
455
- setError(new Error("id is required"));
456
- setIsLoading(false);
457
- return;
458
- }
459
- setIsLoading(true);
460
- setError(null);
461
- try {
462
- const option = await sdk.admin.shippingOption.retrieve(id, {
463
- fields: "*.*,pickupAvailability.*,pickup_availabilities.*"
464
- });
465
- if (option.shipping_option.service_zone.fulfillment_set.type !== "pickup") {
466
- throw new Error("shipping option is not pickup");
514
+ const fetchPickupAvailable = react.useCallback(
515
+ async (shippingOptionId) => {
516
+ var _a, _b, _c;
517
+ if (!shippingOptionId || shippingOptionId === "undefined") {
518
+ return;
467
519
  }
468
- setData(option);
469
- } catch (err) {
470
- setError(
471
- err instanceof Error ? err : new Error("Failed to fetch pickup availability")
472
- );
473
- } finally {
520
+ setIsLoading(true);
521
+ setError(null);
522
+ try {
523
+ const option = await sdk.client.fetch(
524
+ `/admin/pickup-date/${shippingOptionId}`,
525
+ {
526
+ method: "GET"
527
+ }
528
+ );
529
+ const normalized = normalizeResponse(option);
530
+ if (((_c = (_b = (_a = normalized.shipping_option) == null ? void 0 : _a.service_zone) == null ? void 0 : _b.fulfillment_set) == null ? void 0 : _c.type) !== "pickup") {
531
+ throw new Error("shipping option is not pickup");
532
+ }
533
+ setData(normalized);
534
+ } catch (err) {
535
+ setError(
536
+ err instanceof Error ? err : new Error("Failed to fetch pickup availability")
537
+ );
538
+ } finally {
539
+ setIsLoading(false);
540
+ }
541
+ },
542
+ []
543
+ );
544
+ react.useEffect(() => {
545
+ if (!id || id === "undefined") {
474
546
  setIsLoading(false);
547
+ return;
475
548
  }
476
- };
477
- react.useEffect(() => {
478
- fetchPickupAvailable();
479
- }, [id]);
549
+ fetchPickupAvailable(id);
550
+ }, [id, fetchPickupAvailable]);
480
551
  return {
481
552
  data,
482
553
  isLoading,
483
554
  error,
484
- refetch: fetchPickupAvailable
555
+ refetch: () => fetchPickupAvailable(id)
485
556
  };
486
557
  };
558
+ const PICKUP_SEGMENT = "/pickup-shipping/";
559
+ const deriveIdFromPath = (pathname) => {
560
+ if (!pathname) {
561
+ return void 0;
562
+ }
563
+ const normalizedPath = pathname.split("?")[0] ?? "";
564
+ const markerIndex = normalizedPath.indexOf(PICKUP_SEGMENT);
565
+ if (markerIndex === -1) {
566
+ return void 0;
567
+ }
568
+ const startIndex = markerIndex + PICKUP_SEGMENT.length;
569
+ if (startIndex >= normalizedPath.length) {
570
+ return void 0;
571
+ }
572
+ const endIndex = normalizedPath.indexOf("/", startIndex);
573
+ const rawId = endIndex === -1 ? normalizedPath.slice(startIndex) : normalizedPath.slice(startIndex, endIndex);
574
+ return rawId ? decodeURIComponent(rawId) : void 0;
575
+ };
576
+ const usePickupRouteId = () => {
577
+ let params = {};
578
+ try {
579
+ params = reactRouterDom.useParams();
580
+ } catch (error) {
581
+ if (void 0) {
582
+ console.warn(
583
+ "[pickup-shipping] Router params unavailable; deriving id from pathname.",
584
+ error
585
+ );
586
+ }
587
+ }
588
+ const paramId = params == null ? void 0 : params.id;
589
+ return react.useMemo(() => {
590
+ if (paramId && paramId !== "undefined") {
591
+ return paramId;
592
+ }
593
+ if (typeof window === "undefined") {
594
+ return void 0;
595
+ }
596
+ return deriveIdFromPath(window.location.pathname);
597
+ }, [paramId]);
598
+ };
487
599
  const stringToMinutes = (time, defaultValue) => {
488
600
  if (!time) return defaultValue;
489
601
  const [hours, minutes] = time.split(":");
@@ -627,12 +739,13 @@ const DEFAULT_SCHEDULE = {
627
739
  sunday: { enabled: false, timeSlots: [] }
628
740
  };
629
741
  function ShippingOptionDetails() {
630
- const { id } = reactRouterDom.useParams();
631
- const navigate = reactRouterDom.useNavigate();
742
+ const shippingOptionId = usePickupRouteId();
743
+ const routerNavigate = useOptionalNavigate();
744
+ const pickupBasePath = react.useMemo(() => derivePickupBasePath(), []);
632
745
  const [schedule, setSchedule] = react.useState(
633
746
  structuredClone(DEFAULT_SCHEDULE)
634
747
  );
635
- const { data, refetch, error } = usePickupAvailable(id);
748
+ const { data, refetch, error } = usePickupAvailable(shippingOptionId);
636
749
  react.useEffect(() => {
637
750
  if (!(data == null ? void 0 : data.shipping_option)) {
638
751
  return;
@@ -650,10 +763,48 @@ function ShippingOptionDetails() {
650
763
  }
651
764
  return [];
652
765
  };
653
- const normalized = [
766
+ const safeDateIdentifier = (value) => {
767
+ if (!value) {
768
+ return "";
769
+ }
770
+ const date = new Date(value);
771
+ if (Number.isNaN(date.getTime())) {
772
+ return value.toString();
773
+ }
774
+ return date.toISOString();
775
+ };
776
+ const buildIdentifier = (availability) => {
777
+ if (!availability) {
778
+ return "";
779
+ }
780
+ if (availability.id) {
781
+ return availability.id.toString();
782
+ }
783
+ return [
784
+ availability.day_of_week,
785
+ safeDateIdentifier(availability.timeStart),
786
+ safeDateIdentifier(availability.timeEnd)
787
+ ].filter(Boolean).join("-");
788
+ };
789
+ const allAvailabilities = [
654
790
  ...normalizeInput(data.shipping_option.pickup_availabilities),
655
791
  ...normalizeInput(data.shipping_option.pickupAvailability)
656
792
  ];
793
+ const seenAvailabilities = /* @__PURE__ */ new Set();
794
+ const normalized = allAvailabilities.filter((availability) => {
795
+ if (!availability) {
796
+ return false;
797
+ }
798
+ const identifier = buildIdentifier(availability);
799
+ if (!identifier) {
800
+ return true;
801
+ }
802
+ if (seenAvailabilities.has(identifier)) {
803
+ return false;
804
+ }
805
+ seenAvailabilities.add(identifier);
806
+ return true;
807
+ });
657
808
  normalized.forEach((availability) => {
658
809
  if (!(availability == null ? void 0 : availability.day_of_week)) {
659
810
  return;
@@ -684,6 +835,14 @@ function ShippingOptionDetails() {
684
835
  }));
685
836
  }, []);
686
837
  const handleUpdateSchedules = async () => {
838
+ if (!shippingOptionId) {
839
+ ui.toast.error("Missing shipping option id", {
840
+ description: "Please reopen this screen from the pickup shipping list.",
841
+ duration: 3e3,
842
+ dismissable: true
843
+ });
844
+ return;
845
+ }
687
846
  const invalidSchedules = Object.entries(schedule).filter(
688
847
  ([_, schedule2]) => {
689
848
  if (!schedule2.enabled) return false;
@@ -703,7 +862,7 @@ function ShippingOptionDetails() {
703
862
  return;
704
863
  }
705
864
  try {
706
- await sdk.client.fetch(`/admin/pickup-date/${id}`, {
865
+ await sdk.client.fetch(`/admin/pickup-date/${shippingOptionId}`, {
707
866
  method: "POST",
708
867
  headers: {
709
868
  "Content-Type": "application/json"
@@ -783,15 +942,45 @@ function ShippingOptionDetails() {
783
942
  };
784
943
  });
785
944
  }, []);
945
+ const handleBackNavigation = react.useCallback(() => {
946
+ if (routerNavigate) {
947
+ routerNavigate("/pickup-shipping");
948
+ return;
949
+ }
950
+ fallbackBack(pickupBasePath);
951
+ }, [routerNavigate, pickupBasePath]);
952
+ const handleRetry = react.useCallback(() => {
953
+ if (typeof window !== "undefined") {
954
+ window.location.reload();
955
+ return;
956
+ }
957
+ refetch();
958
+ }, [refetch]);
786
959
  if (error) {
787
- return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/pickup-shipping" });
960
+ return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "p-6 space-y-4", children: [
961
+ /* @__PURE__ */ jsxRuntime.jsxs(
962
+ ui.Button,
963
+ {
964
+ onClick: handleBackNavigation,
965
+ variant: "transparent",
966
+ className: "p-0",
967
+ children: [
968
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, { size: 20 }),
969
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "ml-2", children: "Back" })
970
+ ]
971
+ }
972
+ ),
973
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: "Unable to load pickup hours" }),
974
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { children: error.message || "An unexpected error occurred while loading this shipping option." }),
975
+ /* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: handleRetry, children: "Retry" })
976
+ ] });
788
977
  }
789
978
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
790
979
  /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "p-4 ", children: [
791
980
  /* @__PURE__ */ jsxRuntime.jsxs(
792
981
  ui.Button,
793
982
  {
794
- onClick: () => navigate("/pickup-shipping"),
983
+ onClick: handleBackNavigation,
795
984
  variant: "transparent",
796
985
  className: "p-0 mb-4",
797
986
  children: [
@@ -4,8 +4,8 @@ import { Container, Heading, Text, Badge, Button, toast, createDataTableColumnHe
4
4
  import { useState, useEffect, useMemo, useCallback } from "react";
5
5
  import { Calendar, Package, ShoppingBag, Clock, MapPin, RefreshCw, ArrowLeft, Trash2 } from "lucide-react";
6
6
  import { StackPerspective, Plus } from "@medusajs/icons";
7
- import { useNavigate, useParams, Navigate } from "react-router-dom";
8
7
  import Medusa from "@medusajs/js-sdk";
8
+ import { useNavigate, useParams } from "react-router-dom";
9
9
  import "@medusajs/admin-shared";
10
10
  const CustomerPickupHistoryWidget = ({ data }) => {
11
11
  const [pickupHistory, setPickupHistory] = useState([]);
@@ -395,6 +395,49 @@ const usePickupShippingOptions = () => {
395
395
  refetch: fetchOptions
396
396
  };
397
397
  };
398
+ const useOptionalNavigate = () => {
399
+ var _a, _b;
400
+ try {
401
+ return useNavigate();
402
+ } catch (error) {
403
+ if ((_b = (_a = import.meta) == null ? void 0 : _a.env) == null ? void 0 : _b.DEV) {
404
+ console.warn(
405
+ "[pickup-shipping] Router context unavailable; navigation will fall back to window.location.",
406
+ error
407
+ );
408
+ }
409
+ return null;
410
+ }
411
+ };
412
+ const DEFAULT_PICKUP_PATH = "/app/pickup-shipping";
413
+ const derivePickupBasePath = () => {
414
+ if (typeof window === "undefined") {
415
+ return DEFAULT_PICKUP_PATH;
416
+ }
417
+ const { pathname } = window.location;
418
+ const marker = "/pickup-shipping";
419
+ const index = pathname.indexOf(marker);
420
+ if (index === -1) {
421
+ return DEFAULT_PICKUP_PATH;
422
+ }
423
+ return pathname.slice(0, index + marker.length);
424
+ };
425
+ const fallbackNavigate = (target) => {
426
+ if (typeof window === "undefined") {
427
+ return;
428
+ }
429
+ window.location.assign(target);
430
+ };
431
+ const fallbackBack = (fallbackTarget) => {
432
+ if (typeof window === "undefined") {
433
+ return;
434
+ }
435
+ if (window.history.length > 1) {
436
+ window.history.back();
437
+ return;
438
+ }
439
+ fallbackNavigate(fallbackTarget);
440
+ };
398
441
  const columnHelper = createDataTableColumnHelper();
399
442
  const columns = [
400
443
  columnHelper.accessor("shipping_profile.name", {
@@ -411,12 +454,23 @@ const columns = [
411
454
  })
412
455
  ];
413
456
  const ShippingOptionList = () => {
414
- const navigate = useNavigate();
457
+ const routerNavigate = useOptionalNavigate();
458
+ const pickupBasePath = useMemo(() => derivePickupBasePath(), []);
415
459
  const [pagination, setPagination] = useState({
416
460
  pageSize: 1e3,
417
461
  pageIndex: 0
418
462
  });
419
463
  const { data, isLoading } = usePickupShippingOptions();
464
+ const handleNavigate = useCallback(
465
+ (id) => {
466
+ if (routerNavigate) {
467
+ routerNavigate(`/pickup-shipping/${id}`);
468
+ return;
469
+ }
470
+ fallbackNavigate(`${pickupBasePath}/${id}`);
471
+ },
472
+ [routerNavigate, pickupBasePath]
473
+ );
420
474
  const table = useDataTable({
421
475
  columns,
422
476
  data: (data == null ? void 0 : data.shipping_options) || [],
@@ -428,7 +482,7 @@ const ShippingOptionList = () => {
428
482
  onPaginationChange: setPagination
429
483
  },
430
484
  onRowClick: (_, row) => {
431
- navigate(`/pickup-shipping/${row.id}`);
485
+ handleNavigate(row.id);
432
486
  }
433
487
  });
434
488
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Container, { className: "flex flex-col p-0 overflow-hidden", children: /* @__PURE__ */ jsxs(DataTable, { instance: table, children: [
@@ -443,44 +497,104 @@ const config = defineRouteConfig({
443
497
  label: "Shipping Pickup",
444
498
  icon: StackPerspective
445
499
  });
500
+ const normalizeResponse = (payload) => {
501
+ if (payload == null ? void 0 : payload.shipping_option) {
502
+ return payload;
503
+ }
504
+ return {
505
+ shipping_option: payload
506
+ };
507
+ };
446
508
  const usePickupAvailable = (id) => {
447
509
  const [data, setData] = useState(null);
448
510
  const [isLoading, setIsLoading] = useState(true);
449
511
  const [error, setError] = useState(null);
450
- const fetchPickupAvailable = async () => {
451
- if (!id) {
452
- setError(new Error("id is required"));
453
- setIsLoading(false);
454
- return;
455
- }
456
- setIsLoading(true);
457
- setError(null);
458
- try {
459
- const option = await sdk.admin.shippingOption.retrieve(id, {
460
- fields: "*.*,pickupAvailability.*,pickup_availabilities.*"
461
- });
462
- if (option.shipping_option.service_zone.fulfillment_set.type !== "pickup") {
463
- throw new Error("shipping option is not pickup");
512
+ const fetchPickupAvailable = useCallback(
513
+ async (shippingOptionId) => {
514
+ var _a, _b, _c;
515
+ if (!shippingOptionId || shippingOptionId === "undefined") {
516
+ return;
464
517
  }
465
- setData(option);
466
- } catch (err) {
467
- setError(
468
- err instanceof Error ? err : new Error("Failed to fetch pickup availability")
469
- );
470
- } finally {
518
+ setIsLoading(true);
519
+ setError(null);
520
+ try {
521
+ const option = await sdk.client.fetch(
522
+ `/admin/pickup-date/${shippingOptionId}`,
523
+ {
524
+ method: "GET"
525
+ }
526
+ );
527
+ const normalized = normalizeResponse(option);
528
+ if (((_c = (_b = (_a = normalized.shipping_option) == null ? void 0 : _a.service_zone) == null ? void 0 : _b.fulfillment_set) == null ? void 0 : _c.type) !== "pickup") {
529
+ throw new Error("shipping option is not pickup");
530
+ }
531
+ setData(normalized);
532
+ } catch (err) {
533
+ setError(
534
+ err instanceof Error ? err : new Error("Failed to fetch pickup availability")
535
+ );
536
+ } finally {
537
+ setIsLoading(false);
538
+ }
539
+ },
540
+ []
541
+ );
542
+ useEffect(() => {
543
+ if (!id || id === "undefined") {
471
544
  setIsLoading(false);
545
+ return;
472
546
  }
473
- };
474
- useEffect(() => {
475
- fetchPickupAvailable();
476
- }, [id]);
547
+ fetchPickupAvailable(id);
548
+ }, [id, fetchPickupAvailable]);
477
549
  return {
478
550
  data,
479
551
  isLoading,
480
552
  error,
481
- refetch: fetchPickupAvailable
553
+ refetch: () => fetchPickupAvailable(id)
482
554
  };
483
555
  };
556
+ const PICKUP_SEGMENT = "/pickup-shipping/";
557
+ const deriveIdFromPath = (pathname) => {
558
+ if (!pathname) {
559
+ return void 0;
560
+ }
561
+ const normalizedPath = pathname.split("?")[0] ?? "";
562
+ const markerIndex = normalizedPath.indexOf(PICKUP_SEGMENT);
563
+ if (markerIndex === -1) {
564
+ return void 0;
565
+ }
566
+ const startIndex = markerIndex + PICKUP_SEGMENT.length;
567
+ if (startIndex >= normalizedPath.length) {
568
+ return void 0;
569
+ }
570
+ const endIndex = normalizedPath.indexOf("/", startIndex);
571
+ const rawId = endIndex === -1 ? normalizedPath.slice(startIndex) : normalizedPath.slice(startIndex, endIndex);
572
+ return rawId ? decodeURIComponent(rawId) : void 0;
573
+ };
574
+ const usePickupRouteId = () => {
575
+ var _a, _b;
576
+ let params = {};
577
+ try {
578
+ params = useParams();
579
+ } catch (error) {
580
+ if ((_b = (_a = import.meta) == null ? void 0 : _a.env) == null ? void 0 : _b.DEV) {
581
+ console.warn(
582
+ "[pickup-shipping] Router params unavailable; deriving id from pathname.",
583
+ error
584
+ );
585
+ }
586
+ }
587
+ const paramId = params == null ? void 0 : params.id;
588
+ return useMemo(() => {
589
+ if (paramId && paramId !== "undefined") {
590
+ return paramId;
591
+ }
592
+ if (typeof window === "undefined") {
593
+ return void 0;
594
+ }
595
+ return deriveIdFromPath(window.location.pathname);
596
+ }, [paramId]);
597
+ };
484
598
  const stringToMinutes = (time, defaultValue) => {
485
599
  if (!time) return defaultValue;
486
600
  const [hours, minutes] = time.split(":");
@@ -624,12 +738,13 @@ const DEFAULT_SCHEDULE = {
624
738
  sunday: { enabled: false, timeSlots: [] }
625
739
  };
626
740
  function ShippingOptionDetails() {
627
- const { id } = useParams();
628
- const navigate = useNavigate();
741
+ const shippingOptionId = usePickupRouteId();
742
+ const routerNavigate = useOptionalNavigate();
743
+ const pickupBasePath = useMemo(() => derivePickupBasePath(), []);
629
744
  const [schedule, setSchedule] = useState(
630
745
  structuredClone(DEFAULT_SCHEDULE)
631
746
  );
632
- const { data, refetch, error } = usePickupAvailable(id);
747
+ const { data, refetch, error } = usePickupAvailable(shippingOptionId);
633
748
  useEffect(() => {
634
749
  if (!(data == null ? void 0 : data.shipping_option)) {
635
750
  return;
@@ -647,10 +762,48 @@ function ShippingOptionDetails() {
647
762
  }
648
763
  return [];
649
764
  };
650
- const normalized = [
765
+ const safeDateIdentifier = (value) => {
766
+ if (!value) {
767
+ return "";
768
+ }
769
+ const date = new Date(value);
770
+ if (Number.isNaN(date.getTime())) {
771
+ return value.toString();
772
+ }
773
+ return date.toISOString();
774
+ };
775
+ const buildIdentifier = (availability) => {
776
+ if (!availability) {
777
+ return "";
778
+ }
779
+ if (availability.id) {
780
+ return availability.id.toString();
781
+ }
782
+ return [
783
+ availability.day_of_week,
784
+ safeDateIdentifier(availability.timeStart),
785
+ safeDateIdentifier(availability.timeEnd)
786
+ ].filter(Boolean).join("-");
787
+ };
788
+ const allAvailabilities = [
651
789
  ...normalizeInput(data.shipping_option.pickup_availabilities),
652
790
  ...normalizeInput(data.shipping_option.pickupAvailability)
653
791
  ];
792
+ const seenAvailabilities = /* @__PURE__ */ new Set();
793
+ const normalized = allAvailabilities.filter((availability) => {
794
+ if (!availability) {
795
+ return false;
796
+ }
797
+ const identifier = buildIdentifier(availability);
798
+ if (!identifier) {
799
+ return true;
800
+ }
801
+ if (seenAvailabilities.has(identifier)) {
802
+ return false;
803
+ }
804
+ seenAvailabilities.add(identifier);
805
+ return true;
806
+ });
654
807
  normalized.forEach((availability) => {
655
808
  if (!(availability == null ? void 0 : availability.day_of_week)) {
656
809
  return;
@@ -681,6 +834,14 @@ function ShippingOptionDetails() {
681
834
  }));
682
835
  }, []);
683
836
  const handleUpdateSchedules = async () => {
837
+ if (!shippingOptionId) {
838
+ toast.error("Missing shipping option id", {
839
+ description: "Please reopen this screen from the pickup shipping list.",
840
+ duration: 3e3,
841
+ dismissable: true
842
+ });
843
+ return;
844
+ }
684
845
  const invalidSchedules = Object.entries(schedule).filter(
685
846
  ([_, schedule2]) => {
686
847
  if (!schedule2.enabled) return false;
@@ -700,7 +861,7 @@ function ShippingOptionDetails() {
700
861
  return;
701
862
  }
702
863
  try {
703
- await sdk.client.fetch(`/admin/pickup-date/${id}`, {
864
+ await sdk.client.fetch(`/admin/pickup-date/${shippingOptionId}`, {
704
865
  method: "POST",
705
866
  headers: {
706
867
  "Content-Type": "application/json"
@@ -780,15 +941,45 @@ function ShippingOptionDetails() {
780
941
  };
781
942
  });
782
943
  }, []);
944
+ const handleBackNavigation = useCallback(() => {
945
+ if (routerNavigate) {
946
+ routerNavigate("/pickup-shipping");
947
+ return;
948
+ }
949
+ fallbackBack(pickupBasePath);
950
+ }, [routerNavigate, pickupBasePath]);
951
+ const handleRetry = useCallback(() => {
952
+ if (typeof window !== "undefined") {
953
+ window.location.reload();
954
+ return;
955
+ }
956
+ refetch();
957
+ }, [refetch]);
783
958
  if (error) {
784
- return /* @__PURE__ */ jsx(Navigate, { to: "/pickup-shipping" });
959
+ return /* @__PURE__ */ jsxs(Container, { className: "p-6 space-y-4", children: [
960
+ /* @__PURE__ */ jsxs(
961
+ Button,
962
+ {
963
+ onClick: handleBackNavigation,
964
+ variant: "transparent",
965
+ className: "p-0",
966
+ children: [
967
+ /* @__PURE__ */ jsx(ArrowLeft, { size: 20 }),
968
+ /* @__PURE__ */ jsx(Text, { className: "ml-2", children: "Back" })
969
+ ]
970
+ }
971
+ ),
972
+ /* @__PURE__ */ jsx(Heading, { children: "Unable to load pickup hours" }),
973
+ /* @__PURE__ */ jsx(Text, { children: error.message || "An unexpected error occurred while loading this shipping option." }),
974
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: handleRetry, children: "Retry" })
975
+ ] });
785
976
  }
786
977
  return /* @__PURE__ */ jsxs(Fragment, { children: [
787
978
  /* @__PURE__ */ jsxs(Container, { className: "p-4 ", children: [
788
979
  /* @__PURE__ */ jsxs(
789
980
  Button,
790
981
  {
791
- onClick: () => navigate("/pickup-shipping"),
982
+ onClick: handleBackNavigation,
792
983
  variant: "transparent",
793
984
  className: "p-0 mb-4",
794
985
  children: [
@@ -31,10 +31,8 @@ const GET = async (req, res) => {
31
31
  entity: "order",
32
32
  fields: [
33
33
  "id",
34
- "shipping_methods.*",
35
- "shipping_methods.shipping_option.*",
36
- "shipping_methods.shipping_option.service_zone.*",
37
- "shipping_methods.shipping_option.service_zone.fulfillment_set.*",
34
+ "shipping_methods.id",
35
+ "shipping_methods.shipping_option_id",
38
36
  ],
39
37
  filters: {
40
38
  id: order_id,
@@ -43,32 +41,52 @@ const GET = async (req, res) => {
43
41
  const order = orderResult.data?.[0] || null;
44
42
  // Find the pickup shipping method
45
43
  let pickupShippingOption = null;
46
- if (order && order.shipping_methods && order.shipping_methods.length > 0) {
47
- // Find shipping method with fulfillment_set type = "pickup"
48
- const pickupMethod = order.shipping_methods.find((sm) => sm.shipping_option?.service_zone?.fulfillment_set?.type === "pickup");
49
- if (pickupMethod) {
50
- pickupShippingOption = pickupMethod.shipping_option;
51
- // Try to fetch stock location separately if fulfillment_set has location_id
52
- const fulfillmentSet = pickupShippingOption?.service_zone
53
- ?.fulfillment_set;
54
- if (fulfillmentSet?.location_id) {
55
- try {
56
- const locationResult = await query.graph({
57
- entity: "stock_location",
58
- fields: ["id", "name", "address.*"],
59
- filters: {
60
- id: fulfillmentSet.location_id,
61
- },
62
- });
63
- if (locationResult.data?.[0]) {
64
- // Attach location to fulfillment_set
65
- fulfillmentSet.location = locationResult.data[0];
44
+ if (order && Array.isArray(order.shipping_methods)) {
45
+ for (const shippingMethod of order.shipping_methods) {
46
+ if (!shippingMethod?.shipping_option_id) {
47
+ continue;
48
+ }
49
+ try {
50
+ const optionResult = await query.graph({
51
+ entity: "shipping_option",
52
+ fields: [
53
+ "id",
54
+ "name",
55
+ "type",
56
+ "service_zone.*",
57
+ "service_zone.fulfillment_set.*",
58
+ ],
59
+ filters: {
60
+ id: shippingMethod.shipping_option_id,
61
+ },
62
+ });
63
+ const candidate = optionResult.data?.[0];
64
+ if (candidate?.service_zone?.fulfillment_set?.type &&
65
+ candidate.service_zone.fulfillment_set.type === "pickup") {
66
+ pickupShippingOption = candidate;
67
+ const fulfillmentSet = candidate.service_zone?.fulfillment_set || null;
68
+ if (fulfillmentSet?.location_id) {
69
+ try {
70
+ const locationResult = await query.graph({
71
+ entity: "stock_location",
72
+ fields: ["id", "name", "address.*"],
73
+ filters: {
74
+ id: fulfillmentSet.location_id,
75
+ },
76
+ });
77
+ if (locationResult.data?.[0]) {
78
+ fulfillmentSet.location = locationResult.data[0];
79
+ }
80
+ }
81
+ catch (locError) {
82
+ console.warn("Could not fetch location:", locError);
83
+ }
66
84
  }
85
+ break;
67
86
  }
68
- catch (locError) {
69
- // If location query fails, continue without it
70
- console.warn("Could not fetch location:", locError);
71
- }
87
+ }
88
+ catch (optionError) {
89
+ console.warn(`Could not fetch shipping option ${shippingMethod.shipping_option_id}:`, optionError);
72
90
  }
73
91
  }
74
92
  }
@@ -175,4 +193,4 @@ const PATCH = async (req, res) => {
175
193
  }
176
194
  };
177
195
  exports.PATCH = PATCH;
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL29yZGVycy9baWRdL3BpY2t1cC1ib29raW5nL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUV0RTs7OztHQUlHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxJQUFJLENBQUM7UUFDSCxtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQy9CLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztZQUN6RSxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLFFBQVE7YUFDbkI7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBRTVDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxQixPQUFPLEVBQUUsd0NBQXdDO2dCQUNqRCxjQUFjLEVBQUUsSUFBSTthQUNyQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNw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
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL29yZGVycy9baWRdL3BpY2t1cC1ib29raW5nL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUV0RTs7OztHQUlHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxJQUFJLENBQUM7UUFDSCxtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQy9CLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztZQUN6RSxPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLFFBQVE7YUFDbkI7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBRTVDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxQixPQUFPLEVBQUUsd0NBQXdDO2dCQUNqRCxjQUFjLEVBQUUsSUFBSTthQUNyQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNw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
@@ -3,18 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GET = exports.POST = void 0;
4
4
  const framework_1 = require("@medusajs/framework");
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
- const updatePickupAvailabilityWorkflow_1 = require("../../../../workflows/pickup-availablity/updatePickupAvailabilityWorkflow");
6
+ const pickup_datetime_1 = require("../../../../modules/pickup-datetime");
7
+ const build_shipping_option_link_1 = require("../../../../workflows/pickup-availablity/utils/build-shipping-option-link");
7
8
  const POST = async (req, res) => {
8
9
  const { id: shipping_option_id } = req.params;
9
10
  const input = req.body;
10
11
  try {
11
- const updated = await updatePickupAvailabilityWorkflow_1.updatePickupAvailabilityWorkflow.run({
12
- input: {
13
- schedules: input.schedules,
14
- shipping_option_id,
15
- },
12
+ const pickupDatetimeService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
13
+ const link = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.LINK);
14
+ const existingAvailabilities = await pickupDatetimeService.listPickupAvailabilities({
15
+ shipping_option_id,
16
16
  });
17
- res.status(200).json({ availability: updated });
17
+ if (existingAvailabilities.length) {
18
+ await link.dismiss(existingAvailabilities.map((availability) => (0, build_shipping_option_link_1.buildShippingOptionPickupLink)(shipping_option_id, availability.id)));
19
+ await pickupDatetimeService.deletePickupAvailabilities(existingAvailabilities.map((availability) => availability.id));
20
+ }
21
+ const availabilities = input.schedules
22
+ .filter((schedule) => schedule.enable)
23
+ .flatMap((schedule) => schedule.timeSlots.map((slot) => {
24
+ const [startHour, startMinute] = slot.start.split(":").map(Number);
25
+ const [endHour, endMinute] = slot.end.split(":").map(Number);
26
+ const timeStart = new Date();
27
+ timeStart.setHours(startHour, startMinute, 0, 0);
28
+ const timeEnd = new Date();
29
+ timeEnd.setHours(endHour, endMinute, 0, 0);
30
+ return {
31
+ shipping_option_id,
32
+ enable: true,
33
+ day_of_week: schedule.day_of_week,
34
+ timeStart,
35
+ timeEnd,
36
+ };
37
+ }));
38
+ const created = await pickupDatetimeService.createPickupAvailabilities(availabilities);
39
+ if (created.length) {
40
+ await link.create(created.map((availability) => (0, build_shipping_option_link_1.buildShippingOptionPickupLink)(shipping_option_id, availability.id)));
41
+ }
42
+ res.status(200).json({ availability: created });
18
43
  }
19
44
  catch (error) {
20
45
  res.status(500).json({ error: error.message });
@@ -24,19 +49,34 @@ exports.POST = POST;
24
49
  const GET = async (req, res) => {
25
50
  const { id: shipping_option_id } = req.params;
26
51
  const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
52
+ const pickupDatetimeService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
27
53
  try {
28
- const option = await query.graph({
54
+ const { data: [shippingOption], } = await query.graph({
29
55
  entity: "shipping_option",
30
- fields: ["pickup_availabilities.*"],
56
+ fields: ["*", "service_zone.*", "service_zone.fulfillment_set.*"],
31
57
  filters: {
32
58
  id: shipping_option_id,
33
59
  },
34
60
  });
35
- res.status(200).json(option.data[0]);
61
+ if (!shippingOption) {
62
+ return res.status(404).json({
63
+ error: `Shipping option ${shipping_option_id} not found`,
64
+ });
65
+ }
66
+ const availabilities = await pickupDatetimeService.listPickupAvailabilities({
67
+ shipping_option_id,
68
+ });
69
+ res.status(200).json({
70
+ shipping_option: {
71
+ ...shippingOption,
72
+ pickup_availabilities: availabilities,
73
+ pickupAvailability: availabilities,
74
+ },
75
+ });
36
76
  }
37
77
  catch (error) {
38
78
  res.status(500).json({ error: error.message });
39
79
  }
40
80
  };
41
81
  exports.GET = GET;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BpY2t1cC1kYXRlL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUdtQztBQUNuQyxnSUFBNkg7QUFHdEgsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUVFLEVBQ0YsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFFdkIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxtRUFBZ0MsQ0FBQyxHQUFHLENBQUM7WUFDekQsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsa0JBQWtCO2FBQ25CO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDLENBQUM7QUFwQlcsUUFBQSxJQUFJLFFBb0JmO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvQixNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLE1BQU0sRUFBRSxDQUFDLHlCQUF5QixDQUFDO1lBQ25DLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsa0JBQWtCO2FBQ3ZCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUMsQ0FBQztBQWhCVyxRQUFBLEdBQUcsT0FnQmQifQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BpY2t1cC1kYXRlL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUFzRTtBQUV0RSx5RUFBNkU7QUFFN0UsMEhBQTBIO0FBRW5ILE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FFRSxFQUNGLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBRXZCLElBQUksQ0FBQztRQUNILE1BQU0scUJBQXFCLEdBQ3pCLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix3Q0FBc0IsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELE1BQU0sc0JBQXNCLEdBQzFCLE1BQU0scUJBQXFCLENBQUMsd0JBQXdCLENBQUM7WUFDbkQsa0JBQWtCO1NBQ25CLENBQUMsQ0FBQztRQUVMLElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUNoQixzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUMxQyxJQUFBLDBEQUE2QixFQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FDbkUsQ0FDRixDQUFDO1lBRUYsTUFBTSxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FDcEQsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQzlELENBQUM7UUFDSixDQUFDO1FBRUQs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
@@ -3,22 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GET = void 0;
4
4
  const framework_1 = require("@medusajs/framework");
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
+ const pickup_datetime_1 = require("../../../modules/pickup-datetime");
6
7
  const GET = async (req, res) => {
7
8
  const { id: shipping_option_id } = req.params;
8
9
  const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
10
+ const pickupDatetimeService = framework_1.container.resolve(pickup_datetime_1.PICKUP_DATETIME_MODULE);
9
11
  try {
10
- const option = await query.graph({
12
+ const { data: [shippingOption], } = await query.graph({
11
13
  entity: "shipping_option",
12
- fields: ["pickup_availabilities.*"],
14
+ fields: ["*", "service_zone.*", "service_zone.fulfillment_set.*"],
13
15
  filters: {
14
16
  id: shipping_option_id,
15
17
  },
16
18
  });
17
- res.status(200).json(option.data[0]);
19
+ if (!shippingOption) {
20
+ return res.status(404).json({
21
+ error: `Shipping option ${shipping_option_id} not found`,
22
+ });
23
+ }
24
+ const availabilities = await pickupDatetimeService.listPickupAvailabilities({
25
+ shipping_option_id,
26
+ });
27
+ res.status(200).json({
28
+ shipping_option: {
29
+ ...shippingOption,
30
+ pickup_availabilities: availabilities,
31
+ pickupAvailability: availabilities,
32
+ },
33
+ });
18
34
  }
19
35
  catch (error) {
20
36
  res.status(500).json({ error: error.message });
21
37
  }
22
38
  };
23
39
  exports.GET = GET;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BpY2t1cC1kYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFHbUM7QUFFNUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMvQixNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLE1BQU0sRUFBRSxDQUFDLHlCQUF5QixDQUFDO1lBQ25DLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsa0JBQWtCO2FBQ3ZCO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUMsQ0FBQztBQWhCVyxRQUFBLEdBQUcsT0FnQmQifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BpY2t1cC1kYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFHbUM7QUFDbkMsc0VBQTBFO0FBR25FLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLHFCQUFxQixHQUN6QixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIsd0NBQXNCLENBQUMsQ0FBQztJQUV6RSxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQ3ZCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxpQkFBaUI7WUFDekIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLGdDQUFnQyxDQUFDO1lBQ2pFLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsa0JBQWtCO2FBQ3ZCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxtQkFBbUIsa0JBQWtCLFlBQVk7YUFDekQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0scUJBQXFCLENBQUMsd0JBQXdCLENBQ3pFO1lBQ0Usa0JBQWtCO1NBQ25CLENBQ0YsQ0FBQztRQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLGVBQWUsRUFBRTtnQkFDZixHQUFHLGNBQWM7Z0JBQ2pCLHFCQUFxQixFQUFFLGNBQWM7Z0JBQ3JDLGtCQUFrQixFQUFFLGNBQWM7YUFDbkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDLENBQUM7QUF2Q1csUUFBQSxHQUFHLE9BdUNkIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-booking-for-pickup",
3
- "version": "1.5.10",
3
+ "version": "1.5.12",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",
@@ -1,186 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20250515000000 = void 0;
4
- const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
- class Migration20250515000000 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`
8
- create table if not exists "product_variant_attribute" (
9
- "id" text not null,
10
- "product_variant_id" text not null,
11
- "attribute_key" text not null,
12
- "attribute_value" text not null,
13
- "created_at" timestamptz not null default now(),
14
- "updated_at" timestamptz not null default now(),
15
- "deleted_at" timestamptz null,
16
- constraint "product_variant_attribute_pkey" primary key ("id")
17
- );
18
- `);
19
- this.addSql(`
20
- CREATE INDEX IF NOT EXISTS "IDX_product_variant_attribute_deleted_at"
21
- ON "product_variant_attribute" (deleted_at)
22
- WHERE deleted_at IS NULL;
23
- `);
24
- this.addSql(`
25
- CREATE INDEX IF NOT EXISTS "IDX_product_variant_attribute_product_variant_id"
26
- ON "product_variant_attribute" (product_variant_id)
27
- WHERE deleted_at IS NULL;
28
- `);
29
- this.addSql(`
30
- do $$
31
- begin
32
- if not exists (
33
- select 1
34
- from information_schema.table_constraints
35
- where table_name = 'product_variant_attribute'
36
- and constraint_name = 'product_variant_attribute_product_variant_id_foreign'
37
- ) then
38
- alter table "product_variant_attribute"
39
- add constraint "product_variant_attribute_product_variant_id_foreign"
40
- foreign key ("product_variant_id") references "product_variant" ("id")
41
- on update cascade on delete cascade;
42
- end if;
43
- end;
44
- $$;
45
- `);
46
- this.addSql(`
47
- do $$
48
- begin
49
- if to_regclass('product_variant') is not null and
50
- exists (
51
- select 1 from information_schema.columns
52
- where table_name = 'product_variant'
53
- and column_name = 'color'
54
- ) then
55
- insert into "product_variant_attribute"
56
- ("id", "product_variant_id", "attribute_key", "attribute_value", "created_at", "updated_at")
57
- select
58
- concat('pvat_', substr(md5(random()::text), 1, 24)),
59
- pv.id,
60
- 'color',
61
- pv.color,
62
- now(),
63
- now()
64
- from "product_variant" pv
65
- where pv.color is not null
66
- and pv.color <> ''
67
- and not exists (
68
- select 1
69
- from "product_variant_attribute" pva
70
- where pva.product_variant_id = pv.id
71
- and pva.attribute_key = 'color'
72
- and pva.deleted_at is null
73
- );
74
- end if;
75
- end;
76
- $$;
77
- `);
78
- this.addSql(`
79
- do $$
80
- begin
81
- if to_regclass('product_variant') is not null and
82
- exists (
83
- select 1 from information_schema.columns
84
- where table_name = 'product_variant'
85
- and column_name = 'size'
86
- ) then
87
- insert into "product_variant_attribute"
88
- ("id", "product_variant_id", "attribute_key", "attribute_value", "created_at", "updated_at")
89
- select
90
- concat('pvat_', substr(md5(random()::text), 1, 24)),
91
- pv.id,
92
- 'size',
93
- pv.size,
94
- now(),
95
- now()
96
- from "product_variant" pv
97
- where pv.size is not null
98
- and pv.size <> ''
99
- and not exists (
100
- select 1
101
- from "product_variant_attribute" pva
102
- where pva.product_variant_id = pv.id
103
- and pva.attribute_key = 'size'
104
- and pva.deleted_at is null
105
- );
106
- end if;
107
- end;
108
- $$;
109
- `);
110
- this.addSql(`
111
- do $$
112
- begin
113
- if to_regclass('product_variant') is not null and
114
- exists (
115
- select 1 from information_schema.columns
116
- where table_name = 'product_variant'
117
- and column_name = 'custom_attribute_1'
118
- ) then
119
- insert into "product_variant_attribute"
120
- ("id", "product_variant_id", "attribute_key", "attribute_value", "created_at", "updated_at")
121
- select
122
- concat('pvat_', substr(md5(random()::text), 1, 24)),
123
- pv.id,
124
- trim(split_part(pv.custom_attribute_1, ':', 1)),
125
- trim(regexp_replace(pv.custom_attribute_1, '^[^:]*:', '')),
126
- now(),
127
- now()
128
- from "product_variant" pv
129
- where pv.custom_attribute_1 is not null
130
- and pv.custom_attribute_1 <> ''
131
- and pv.custom_attribute_1 like '%:%'
132
- and trim(split_part(pv.custom_attribute_1, ':', 1)) <> ''
133
- and trim(regexp_replace(pv.custom_attribute_1, '^[^:]*:', '')) <> ''
134
- and not exists (
135
- select 1
136
- from "product_variant_attribute" pva
137
- where pva.product_variant_id = pv.id
138
- and pva.attribute_key = trim(split_part(pv.custom_attribute_1, ':', 1))
139
- and pva.deleted_at is null
140
- );
141
- end if;
142
- end;
143
- $$;
144
- `);
145
- this.addSql(`
146
- do $$
147
- begin
148
- if to_regclass('product_variant') is not null and
149
- exists (
150
- select 1 from information_schema.columns
151
- where table_name = 'product_variant'
152
- and column_name = 'custom_attribute_2'
153
- ) then
154
- insert into "product_variant_attribute"
155
- ("id", "product_variant_id", "attribute_key", "attribute_value", "created_at", "updated_at")
156
- select
157
- concat('pvat_', substr(md5(random()::text), 1, 24)),
158
- pv.id,
159
- trim(split_part(pv.custom_attribute_2, ':', 1)),
160
- trim(regexp_replace(pv.custom_attribute_2, '^[^:]*:', '')),
161
- now(),
162
- now()
163
- from "product_variant" pv
164
- where pv.custom_attribute_2 is not null
165
- and pv.custom_attribute_2 <> ''
166
- and pv.custom_attribute_2 like '%:%'
167
- and trim(split_part(pv.custom_attribute_2, ':', 1)) <> ''
168
- and trim(regexp_replace(pv.custom_attribute_2, '^[^:]*:', '')) <> ''
169
- and not exists (
170
- select 1
171
- from "product_variant_attribute" pva
172
- where pva.product_variant_id = pv.id
173
- and pva.attribute_key = trim(split_part(pv.custom_attribute_2, ':', 1))
174
- and pva.deleted_at is null
175
- );
176
- end if;
177
- end;
178
- $$;
179
- `);
180
- }
181
- async down() {
182
- this.addSql(`drop table if exists "product_variant_attribute" cascade;`);
183
- }
184
- }
185
- exports.Migration20250515000000 = Migration20250515000000;
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA1MTUwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9waWNrdXAtZGF0ZXRpbWUvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MDUxNTAwMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0tBV1gsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7OztLQUlYLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7S0FJWCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0tBZ0JYLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0ErQlgsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQStCWCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0NYLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0Y7QUEzTEQsMERBMkxDIn0=