@lodashventure/medusa-booking-for-pickup 1.5.10 → 1.5.11
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.
- package/.medusa/server/src/admin/index.js +185 -34
- package/.medusa/server/src/admin/index.mjs +187 -34
- package/.medusa/server/src/api/admin/orders/[id]/pickup-booking/route.js +47 -29
- package/.medusa/server/src/api/admin/pickup-date/[id]/route.js +51 -11
- package/.medusa/server/src/api/store/pickup-date/route.js +20 -4
- package/package.json +1 -1
- package/.medusa/server/src/modules/pickup-datetime/migrations/Migration20250515000000.js +0 -186
|
@@ -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
|
|
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
|
-
|
|
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 =
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
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
|
-
|
|
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
|
|
631
|
-
const
|
|
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(
|
|
748
|
+
const { data, refetch, error } = usePickupAvailable(shippingOptionId);
|
|
636
749
|
react.useEffect(() => {
|
|
637
750
|
if (!(data == null ? void 0 : data.shipping_option)) {
|
|
638
751
|
return;
|
|
@@ -684,6 +797,14 @@ function ShippingOptionDetails() {
|
|
|
684
797
|
}));
|
|
685
798
|
}, []);
|
|
686
799
|
const handleUpdateSchedules = async () => {
|
|
800
|
+
if (!shippingOptionId) {
|
|
801
|
+
ui.toast.error("Missing shipping option id", {
|
|
802
|
+
description: "Please reopen this screen from the pickup shipping list.",
|
|
803
|
+
duration: 3e3,
|
|
804
|
+
dismissable: true
|
|
805
|
+
});
|
|
806
|
+
return;
|
|
807
|
+
}
|
|
687
808
|
const invalidSchedules = Object.entries(schedule).filter(
|
|
688
809
|
([_, schedule2]) => {
|
|
689
810
|
if (!schedule2.enabled) return false;
|
|
@@ -703,7 +824,7 @@ function ShippingOptionDetails() {
|
|
|
703
824
|
return;
|
|
704
825
|
}
|
|
705
826
|
try {
|
|
706
|
-
await sdk.client.fetch(`/admin/pickup-date/${
|
|
827
|
+
await sdk.client.fetch(`/admin/pickup-date/${shippingOptionId}`, {
|
|
707
828
|
method: "POST",
|
|
708
829
|
headers: {
|
|
709
830
|
"Content-Type": "application/json"
|
|
@@ -783,15 +904,45 @@ function ShippingOptionDetails() {
|
|
|
783
904
|
};
|
|
784
905
|
});
|
|
785
906
|
}, []);
|
|
907
|
+
const handleBackNavigation = react.useCallback(() => {
|
|
908
|
+
if (routerNavigate) {
|
|
909
|
+
routerNavigate("/pickup-shipping");
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
fallbackBack(pickupBasePath);
|
|
913
|
+
}, [routerNavigate, pickupBasePath]);
|
|
914
|
+
const handleRetry = react.useCallback(() => {
|
|
915
|
+
if (typeof window !== "undefined") {
|
|
916
|
+
window.location.reload();
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
refetch();
|
|
920
|
+
}, [refetch]);
|
|
786
921
|
if (error) {
|
|
787
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
922
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "p-6 space-y-4", children: [
|
|
923
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
924
|
+
ui.Button,
|
|
925
|
+
{
|
|
926
|
+
onClick: handleBackNavigation,
|
|
927
|
+
variant: "transparent",
|
|
928
|
+
className: "p-0",
|
|
929
|
+
children: [
|
|
930
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, { size: 20 }),
|
|
931
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "ml-2", children: "Back" })
|
|
932
|
+
]
|
|
933
|
+
}
|
|
934
|
+
),
|
|
935
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { children: "Unable to load pickup hours" }),
|
|
936
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { children: error.message || "An unexpected error occurred while loading this shipping option." }),
|
|
937
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: handleRetry, children: "Retry" })
|
|
938
|
+
] });
|
|
788
939
|
}
|
|
789
940
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
790
941
|
/* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "p-4 ", children: [
|
|
791
942
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
792
943
|
ui.Button,
|
|
793
944
|
{
|
|
794
|
-
onClick:
|
|
945
|
+
onClick: handleBackNavigation,
|
|
795
946
|
variant: "transparent",
|
|
796
947
|
className: "p-0 mb-4",
|
|
797
948
|
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
|
|
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
|
-
|
|
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 =
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
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
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
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
|
-
|
|
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
|
|
628
|
-
const
|
|
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(
|
|
747
|
+
const { data, refetch, error } = usePickupAvailable(shippingOptionId);
|
|
633
748
|
useEffect(() => {
|
|
634
749
|
if (!(data == null ? void 0 : data.shipping_option)) {
|
|
635
750
|
return;
|
|
@@ -681,6 +796,14 @@ function ShippingOptionDetails() {
|
|
|
681
796
|
}));
|
|
682
797
|
}, []);
|
|
683
798
|
const handleUpdateSchedules = async () => {
|
|
799
|
+
if (!shippingOptionId) {
|
|
800
|
+
toast.error("Missing shipping option id", {
|
|
801
|
+
description: "Please reopen this screen from the pickup shipping list.",
|
|
802
|
+
duration: 3e3,
|
|
803
|
+
dismissable: true
|
|
804
|
+
});
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
684
807
|
const invalidSchedules = Object.entries(schedule).filter(
|
|
685
808
|
([_, schedule2]) => {
|
|
686
809
|
if (!schedule2.enabled) return false;
|
|
@@ -700,7 +823,7 @@ function ShippingOptionDetails() {
|
|
|
700
823
|
return;
|
|
701
824
|
}
|
|
702
825
|
try {
|
|
703
|
-
await sdk.client.fetch(`/admin/pickup-date/${
|
|
826
|
+
await sdk.client.fetch(`/admin/pickup-date/${shippingOptionId}`, {
|
|
704
827
|
method: "POST",
|
|
705
828
|
headers: {
|
|
706
829
|
"Content-Type": "application/json"
|
|
@@ -780,15 +903,45 @@ function ShippingOptionDetails() {
|
|
|
780
903
|
};
|
|
781
904
|
});
|
|
782
905
|
}, []);
|
|
906
|
+
const handleBackNavigation = useCallback(() => {
|
|
907
|
+
if (routerNavigate) {
|
|
908
|
+
routerNavigate("/pickup-shipping");
|
|
909
|
+
return;
|
|
910
|
+
}
|
|
911
|
+
fallbackBack(pickupBasePath);
|
|
912
|
+
}, [routerNavigate, pickupBasePath]);
|
|
913
|
+
const handleRetry = useCallback(() => {
|
|
914
|
+
if (typeof window !== "undefined") {
|
|
915
|
+
window.location.reload();
|
|
916
|
+
return;
|
|
917
|
+
}
|
|
918
|
+
refetch();
|
|
919
|
+
}, [refetch]);
|
|
783
920
|
if (error) {
|
|
784
|
-
return /* @__PURE__ */
|
|
921
|
+
return /* @__PURE__ */ jsxs(Container, { className: "p-6 space-y-4", children: [
|
|
922
|
+
/* @__PURE__ */ jsxs(
|
|
923
|
+
Button,
|
|
924
|
+
{
|
|
925
|
+
onClick: handleBackNavigation,
|
|
926
|
+
variant: "transparent",
|
|
927
|
+
className: "p-0",
|
|
928
|
+
children: [
|
|
929
|
+
/* @__PURE__ */ jsx(ArrowLeft, { size: 20 }),
|
|
930
|
+
/* @__PURE__ */ jsx(Text, { className: "ml-2", children: "Back" })
|
|
931
|
+
]
|
|
932
|
+
}
|
|
933
|
+
),
|
|
934
|
+
/* @__PURE__ */ jsx(Heading, { children: "Unable to load pickup hours" }),
|
|
935
|
+
/* @__PURE__ */ jsx(Text, { children: error.message || "An unexpected error occurred while loading this shipping option." }),
|
|
936
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: handleRetry, children: "Retry" })
|
|
937
|
+
] });
|
|
785
938
|
}
|
|
786
939
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
787
940
|
/* @__PURE__ */ jsxs(Container, { className: "p-4 ", children: [
|
|
788
941
|
/* @__PURE__ */ jsxs(
|
|
789
942
|
Button,
|
|
790
943
|
{
|
|
791
|
-
onClick:
|
|
944
|
+
onClick: handleBackNavigation,
|
|
792
945
|
variant: "transparent",
|
|
793
946
|
className: "p-0 mb-4",
|
|
794
947
|
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.
|
|
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 &&
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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,
|
|
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
|
|
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
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
|
54
|
+
const { data: [shippingOption], } = await query.graph({
|
|
29
55
|
entity: "shipping_option",
|
|
30
|
-
fields: ["
|
|
56
|
+
fields: ["*", "service_zone.*", "service_zone.fulfillment_set.*"],
|
|
31
57
|
filters: {
|
|
32
58
|
id: shipping_option_id,
|
|
33
59
|
},
|
|
34
60
|
});
|
|
35
|
-
|
|
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,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BpY2t1cC1kYXRlL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUFzRTtBQUV0RSx5RUFBNkU7QUFFN0UsMEhBQTBIO0FBRW5ILE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FFRSxFQUNGLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBRXZCLElBQUksQ0FBQztRQUNILE1BQU0scUJBQXFCLEdBQ3pCLHFCQUFTLENBQUMsT0FBTyxDQUE4Qix3Q0FBc0IsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9ELE1BQU0sc0JBQXNCLEdBQzFCLE1BQU0scUJBQXFCLENBQUMsd0JBQXdCLENBQUM7WUFDbkQsa0JBQWtCO1NBQ25CLENBQUMsQ0FBQztRQUVMLElBQUksc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUNoQixzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUMxQyxJQUFBLDBEQUE2QixFQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FDbkUsQ0FDRixDQUFDO1lBRUYsTUFBTSxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FDcEQsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQzlELENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFNBQVM7YUFDbkMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ3JDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ3BCLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkUsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM3QixTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWpELE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUUzQyxPQUFPO2dCQUNMLGtCQUFrQjtnQkFDbEIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO2dCQUNqQyxTQUFTO2dCQUNULE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVKLE1BQU0sT0FBTyxHQUFHLE1BQU0scUJBQXFCLENBQUMsMEJBQTBCLENBQ3BFLGNBQWMsQ0FDZixDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUMzQixJQUFBLDBEQUE2QixFQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FDbkUsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBdEVXLFFBQUEsSUFBSSxRQXNFZjtBQUVLLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLHFCQUFxQixHQUN6QixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIsd0NBQXNCLENBQUMsQ0FBQztJQUV6RSxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQ3ZCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxpQkFBaUI7WUFDekIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLGdDQUFnQyxDQUFDO1lBQ2pFLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsa0JBQWtCO2FBQ3ZCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxtQkFBbUIsa0JBQWtCLFlBQVk7YUFDekQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0scUJBQXFCLENBQUMsd0JBQXdCLENBQ3pFO1lBQ0Usa0JBQWtCO1NBQ25CLENBQ0YsQ0FBQztRQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLGVBQWUsRUFBRTtnQkFDZixHQUFHLGNBQWM7Z0JBQ2pCLHFCQUFxQixFQUFFLGNBQWM7Z0JBQ3JDLGtCQUFrQixFQUFFLGNBQWM7YUFDbkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDLENBQUM7QUF2Q1csUUFBQSxHQUFHLE9BdUNkIn0=
|
|
@@ -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
|
|
12
|
+
const { data: [shippingOption], } = await query.graph({
|
|
11
13
|
entity: "shipping_option",
|
|
12
|
-
fields: ["
|
|
14
|
+
fields: ["*", "service_zone.*", "service_zone.fulfillment_set.*"],
|
|
13
15
|
filters: {
|
|
14
16
|
id: shipping_option_id,
|
|
15
17
|
},
|
|
16
18
|
});
|
|
17
|
-
|
|
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,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BpY2t1cC1kYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUErRTtBQUMvRSxxREFHbUM7QUFDbkMsc0VBQTBFO0FBR25FLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxNQUFNLEtBQUssR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLHFCQUFxQixHQUN6QixxQkFBUyxDQUFDLE9BQU8sQ0FBOEIsd0NBQXNCLENBQUMsQ0FBQztJQUV6RSxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQ0osSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQ3ZCLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxpQkFBaUI7WUFDekIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLGdDQUFnQyxDQUFDO1lBQ2pFLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsa0JBQWtCO2FBQ3ZCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxtQkFBbUIsa0JBQWtCLFlBQVk7YUFDekQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0scUJBQXFCLENBQUMsd0JBQXdCLENBQ3pFO1lBQ0Usa0JBQWtCO1NBQ25CLENBQ0YsQ0FBQztRQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLGVBQWUsRUFBRTtnQkFDZixHQUFHLGNBQWM7Z0JBQ2pCLHFCQUFxQixFQUFFLGNBQWM7Z0JBQ3JDLGtCQUFrQixFQUFFLGNBQWM7YUFDbkM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDLENBQUM7QUF2Q1csUUFBQSxHQUFHLE9BdUNkIn0=
|
package/package.json
CHANGED
|
@@ -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=
|