@lodashventure/medusa-booking-for-pickup 1.5.11 → 1.5.15
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.
|
@@ -738,6 +738,20 @@ const DEFAULT_SCHEDULE = {
|
|
|
738
738
|
},
|
|
739
739
|
sunday: { enabled: false, timeSlots: [] }
|
|
740
740
|
};
|
|
741
|
+
const dedupeTimeSlots = (slots) => {
|
|
742
|
+
const seen = /* @__PURE__ */ new Set();
|
|
743
|
+
return slots.filter((slot) => {
|
|
744
|
+
if (!(slot == null ? void 0 : slot.start) || !(slot == null ? void 0 : slot.end)) {
|
|
745
|
+
return false;
|
|
746
|
+
}
|
|
747
|
+
const key = `${slot.start}-${slot.end}`;
|
|
748
|
+
if (seen.has(key)) {
|
|
749
|
+
return false;
|
|
750
|
+
}
|
|
751
|
+
seen.add(key);
|
|
752
|
+
return true;
|
|
753
|
+
});
|
|
754
|
+
};
|
|
741
755
|
function ShippingOptionDetails() {
|
|
742
756
|
const shippingOptionId = usePickupRouteId();
|
|
743
757
|
const routerNavigate = useOptionalNavigate();
|
|
@@ -763,17 +777,17 @@ function ShippingOptionDetails() {
|
|
|
763
777
|
}
|
|
764
778
|
return [];
|
|
765
779
|
};
|
|
766
|
-
const
|
|
780
|
+
const allAvailabilities = [
|
|
767
781
|
...normalizeInput(data.shipping_option.pickup_availabilities),
|
|
768
782
|
...normalizeInput(data.shipping_option.pickupAvailability)
|
|
769
783
|
];
|
|
770
|
-
|
|
784
|
+
allAvailabilities.filter(Boolean).map((availability) => {
|
|
771
785
|
if (!(availability == null ? void 0 : availability.day_of_week)) {
|
|
772
|
-
return;
|
|
786
|
+
return null;
|
|
773
787
|
}
|
|
774
788
|
const dayKey = availability.day_of_week.toLowerCase();
|
|
775
789
|
if (!_schedule[dayKey]) {
|
|
776
|
-
return;
|
|
790
|
+
return null;
|
|
777
791
|
}
|
|
778
792
|
const timeSlots = _schedule[dayKey].timeSlots;
|
|
779
793
|
timeSlots.push({
|
|
@@ -784,6 +798,11 @@ function ShippingOptionDetails() {
|
|
|
784
798
|
enabled: Boolean(availability.enable),
|
|
785
799
|
timeSlots
|
|
786
800
|
};
|
|
801
|
+
return availability;
|
|
802
|
+
}).filter(Boolean);
|
|
803
|
+
Object.keys(_schedule).forEach((day) => {
|
|
804
|
+
const uniqueSlots = dedupeTimeSlots(_schedule[day].timeSlots);
|
|
805
|
+
_schedule[day].timeSlots = uniqueSlots;
|
|
787
806
|
});
|
|
788
807
|
setSchedule({ ..._schedule });
|
|
789
808
|
}, [data]);
|
|
@@ -830,14 +849,17 @@ function ShippingOptionDetails() {
|
|
|
830
849
|
"Content-Type": "application/json"
|
|
831
850
|
},
|
|
832
851
|
body: {
|
|
833
|
-
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) =>
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
852
|
+
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) => {
|
|
853
|
+
const uniqueTimeSlots = dedupeTimeSlots(timeSlots);
|
|
854
|
+
return {
|
|
855
|
+
day_of_week: day,
|
|
856
|
+
enable: enabled,
|
|
857
|
+
timeSlots: uniqueTimeSlots.map((slot) => ({
|
|
858
|
+
start: slot.start,
|
|
859
|
+
end: slot.end
|
|
860
|
+
}))
|
|
861
|
+
};
|
|
862
|
+
}).filter((schedule2) => schedule2.timeSlots.length > 0)
|
|
841
863
|
}
|
|
842
864
|
});
|
|
843
865
|
refetch();
|
|
@@ -737,6 +737,20 @@ const DEFAULT_SCHEDULE = {
|
|
|
737
737
|
},
|
|
738
738
|
sunday: { enabled: false, timeSlots: [] }
|
|
739
739
|
};
|
|
740
|
+
const dedupeTimeSlots = (slots) => {
|
|
741
|
+
const seen = /* @__PURE__ */ new Set();
|
|
742
|
+
return slots.filter((slot) => {
|
|
743
|
+
if (!(slot == null ? void 0 : slot.start) || !(slot == null ? void 0 : slot.end)) {
|
|
744
|
+
return false;
|
|
745
|
+
}
|
|
746
|
+
const key = `${slot.start}-${slot.end}`;
|
|
747
|
+
if (seen.has(key)) {
|
|
748
|
+
return false;
|
|
749
|
+
}
|
|
750
|
+
seen.add(key);
|
|
751
|
+
return true;
|
|
752
|
+
});
|
|
753
|
+
};
|
|
740
754
|
function ShippingOptionDetails() {
|
|
741
755
|
const shippingOptionId = usePickupRouteId();
|
|
742
756
|
const routerNavigate = useOptionalNavigate();
|
|
@@ -762,17 +776,17 @@ function ShippingOptionDetails() {
|
|
|
762
776
|
}
|
|
763
777
|
return [];
|
|
764
778
|
};
|
|
765
|
-
const
|
|
779
|
+
const allAvailabilities = [
|
|
766
780
|
...normalizeInput(data.shipping_option.pickup_availabilities),
|
|
767
781
|
...normalizeInput(data.shipping_option.pickupAvailability)
|
|
768
782
|
];
|
|
769
|
-
|
|
783
|
+
allAvailabilities.filter(Boolean).map((availability) => {
|
|
770
784
|
if (!(availability == null ? void 0 : availability.day_of_week)) {
|
|
771
|
-
return;
|
|
785
|
+
return null;
|
|
772
786
|
}
|
|
773
787
|
const dayKey = availability.day_of_week.toLowerCase();
|
|
774
788
|
if (!_schedule[dayKey]) {
|
|
775
|
-
return;
|
|
789
|
+
return null;
|
|
776
790
|
}
|
|
777
791
|
const timeSlots = _schedule[dayKey].timeSlots;
|
|
778
792
|
timeSlots.push({
|
|
@@ -783,6 +797,11 @@ function ShippingOptionDetails() {
|
|
|
783
797
|
enabled: Boolean(availability.enable),
|
|
784
798
|
timeSlots
|
|
785
799
|
};
|
|
800
|
+
return availability;
|
|
801
|
+
}).filter(Boolean);
|
|
802
|
+
Object.keys(_schedule).forEach((day) => {
|
|
803
|
+
const uniqueSlots = dedupeTimeSlots(_schedule[day].timeSlots);
|
|
804
|
+
_schedule[day].timeSlots = uniqueSlots;
|
|
786
805
|
});
|
|
787
806
|
setSchedule({ ..._schedule });
|
|
788
807
|
}, [data]);
|
|
@@ -829,14 +848,17 @@ function ShippingOptionDetails() {
|
|
|
829
848
|
"Content-Type": "application/json"
|
|
830
849
|
},
|
|
831
850
|
body: {
|
|
832
|
-
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) =>
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
851
|
+
schedules: Object.entries(schedule).filter(([_, daySchedule]) => daySchedule.enabled).map(([day, { enabled, timeSlots }]) => {
|
|
852
|
+
const uniqueTimeSlots = dedupeTimeSlots(timeSlots);
|
|
853
|
+
return {
|
|
854
|
+
day_of_week: day,
|
|
855
|
+
enable: enabled,
|
|
856
|
+
timeSlots: uniqueTimeSlots.map((slot) => ({
|
|
857
|
+
start: slot.start,
|
|
858
|
+
end: slot.end
|
|
859
|
+
}))
|
|
860
|
+
};
|
|
861
|
+
}).filter((schedule2) => schedule2.timeSlots.length > 0)
|
|
840
862
|
}
|
|
841
863
|
});
|
|
842
864
|
refetch();
|
|
@@ -5,6 +5,91 @@ const framework_1 = require("@medusajs/framework");
|
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const pickup_datetime_1 = require("../../../../modules/pickup-datetime");
|
|
7
7
|
const build_shipping_option_link_1 = require("../../../../workflows/pickup-availablity/utils/build-shipping-option-link");
|
|
8
|
+
const dedupeTimeSlots = (slots = []) => {
|
|
9
|
+
const seen = new Set();
|
|
10
|
+
const sanitized = [];
|
|
11
|
+
slots.forEach((slot) => {
|
|
12
|
+
if (!slot?.start || !slot?.end) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const key = `${slot.start}-${slot.end}`;
|
|
16
|
+
if (seen.has(key)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
seen.add(key);
|
|
20
|
+
sanitized.push({
|
|
21
|
+
start: slot.start,
|
|
22
|
+
end: slot.end,
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return sanitized;
|
|
26
|
+
};
|
|
27
|
+
const toTimeString = (value) => {
|
|
28
|
+
if (!value) {
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
const date = new Date(value);
|
|
32
|
+
if (!Number.isNaN(date.getTime())) {
|
|
33
|
+
return `${date.getHours().toString().padStart(2, "0")}:${date
|
|
34
|
+
.getMinutes()
|
|
35
|
+
.toString()
|
|
36
|
+
.padStart(2, "0")}`;
|
|
37
|
+
}
|
|
38
|
+
const match = `${value}`.match(/(\d{1,2}):(\d{2})/);
|
|
39
|
+
if (match) {
|
|
40
|
+
return `${match[1].padStart(2, "0")}:${match[2]}`;
|
|
41
|
+
}
|
|
42
|
+
return value.toString();
|
|
43
|
+
};
|
|
44
|
+
const dedupeAvailabilities = (availabilities = []) => {
|
|
45
|
+
const seen = new Set();
|
|
46
|
+
return availabilities.filter((availability) => {
|
|
47
|
+
if (!availability) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
const key = [
|
|
51
|
+
availability.day_of_week,
|
|
52
|
+
toTimeString(availability.timeStart),
|
|
53
|
+
toTimeString(availability.timeEnd),
|
|
54
|
+
]
|
|
55
|
+
.filter(Boolean)
|
|
56
|
+
.join("-");
|
|
57
|
+
if (!key) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
if (seen.has(key)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
seen.add(key);
|
|
64
|
+
return true;
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
const normalizeSchedulesByDay = (schedules = []) => {
|
|
68
|
+
const grouped = new Map();
|
|
69
|
+
schedules.forEach((schedule) => {
|
|
70
|
+
if (!schedule?.day_of_week) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const existing = grouped.get(schedule.day_of_week) ?? {
|
|
74
|
+
enable: false,
|
|
75
|
+
timeSlots: [],
|
|
76
|
+
};
|
|
77
|
+
existing.enable = existing.enable || Boolean(schedule.enable);
|
|
78
|
+
existing.timeSlots = [
|
|
79
|
+
...existing.timeSlots,
|
|
80
|
+
...(Array.isArray(schedule.timeSlots) ? schedule.timeSlots : []),
|
|
81
|
+
];
|
|
82
|
+
grouped.set(schedule.day_of_week, existing);
|
|
83
|
+
});
|
|
84
|
+
return Array.from(grouped.entries()).map(([day, config]) => {
|
|
85
|
+
const normalized = {
|
|
86
|
+
day_of_week: day,
|
|
87
|
+
enable: config.enable,
|
|
88
|
+
timeSlots: dedupeTimeSlots(config.timeSlots),
|
|
89
|
+
};
|
|
90
|
+
return normalized;
|
|
91
|
+
});
|
|
92
|
+
};
|
|
8
93
|
const POST = async (req, res) => {
|
|
9
94
|
const { id: shipping_option_id } = req.params;
|
|
10
95
|
const input = req.body;
|
|
@@ -18,7 +103,8 @@ const POST = async (req, res) => {
|
|
|
18
103
|
await link.dismiss(existingAvailabilities.map((availability) => (0, build_shipping_option_link_1.buildShippingOptionPickupLink)(shipping_option_id, availability.id)));
|
|
19
104
|
await pickupDatetimeService.deletePickupAvailabilities(existingAvailabilities.map((availability) => availability.id));
|
|
20
105
|
}
|
|
21
|
-
const
|
|
106
|
+
const schedules = normalizeSchedulesByDay(input.schedules ?? []);
|
|
107
|
+
const availabilities = schedules
|
|
22
108
|
.filter((schedule) => schedule.enable)
|
|
23
109
|
.flatMap((schedule) => schedule.timeSlots.map((slot) => {
|
|
24
110
|
const [startHour, startMinute] = slot.start.split(":").map(Number);
|
|
@@ -66,11 +152,12 @@ const GET = async (req, res) => {
|
|
|
66
152
|
const availabilities = await pickupDatetimeService.listPickupAvailabilities({
|
|
67
153
|
shipping_option_id,
|
|
68
154
|
});
|
|
155
|
+
const dedupedAvailabilities = dedupeAvailabilities(availabilities);
|
|
69
156
|
res.status(200).json({
|
|
70
157
|
shipping_option: {
|
|
71
158
|
...shippingOption,
|
|
72
|
-
pickup_availabilities:
|
|
73
|
-
pickupAvailability:
|
|
159
|
+
pickup_availabilities: dedupedAvailabilities,
|
|
160
|
+
pickupAvailability: dedupedAvailabilities,
|
|
74
161
|
},
|
|
75
162
|
});
|
|
76
163
|
}
|
|
@@ -79,4 +166,4 @@ const GET = async (req, res) => {
|
|
|
79
166
|
}
|
|
80
167
|
};
|
|
81
168
|
exports.GET = GET;
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BpY2t1cC1kYXRlL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQStFO0FBQy9FLHFEQUFzRTtBQU10RSx5RUFBNkU7QUFFN0UsMEhBQTBIO0FBSTFILE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBeUIsRUFBRSxFQUFjLEVBQUU7SUFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFFakMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUU7SUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsTUFB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
|