@timardex/cluemart-shared 1.5.740 → 1.5.741
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/dist/{chunk-6OBMKN7F.mjs → chunk-7JDAKGGH.mjs} +2 -2
- package/dist/{chunk-6YISZ3OD.mjs → chunk-L5BYCXXP.mjs} +2 -2
- package/dist/{chunk-XWFE6U3E.mjs → chunk-VPYYAF3L.mjs} +129 -117
- package/dist/chunk-VPYYAF3L.mjs.map +1 -0
- package/dist/formFields/index.cjs +28 -4
- package/dist/formFields/index.cjs.map +1 -1
- package/dist/formFields/index.mjs +2 -2
- package/dist/hooks/index.cjs +16 -6
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.mjs +3 -3
- package/dist/index.cjs +153 -141
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.mjs +152 -141
- package/dist/index.mjs.map +1 -1
- package/dist/sharing/index.cjs +82 -58
- package/dist/sharing/index.cjs.map +1 -1
- package/dist/sharing/index.mjs +2 -2
- package/dist/utils/index.cjs +167 -141
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.mts +5 -1
- package/dist/utils/index.d.ts +5 -1
- package/dist/utils/index.mjs +3 -1
- package/package.json +1 -1
- package/dist/chunk-XWFE6U3E.mjs.map +0 -1
- /package/dist/{chunk-6OBMKN7F.mjs.map → chunk-7JDAKGGH.mjs.map} +0 -0
- /package/dist/{chunk-6YISZ3OD.mjs.map → chunk-L5BYCXXP.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CLUEMART_MAIN_DOMAIN_URL,
|
|
3
3
|
formatDate
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VPYYAF3L.mjs";
|
|
5
5
|
|
|
6
6
|
// src/sharing/relationShareTypes.ts
|
|
7
7
|
var RELATION_SHARE_INVITATION = "invitation";
|
|
@@ -361,4 +361,4 @@ export {
|
|
|
361
361
|
normalizeShareRouteId,
|
|
362
362
|
buildSharePagePath
|
|
363
363
|
};
|
|
364
|
-
//# sourceMappingURL=chunk-
|
|
364
|
+
//# sourceMappingURL=chunk-7JDAKGGH.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
mapArrayToOptions
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VPYYAF3L.mjs";
|
|
4
4
|
import {
|
|
5
5
|
EnumFoodFlavor
|
|
6
6
|
} from "./chunk-4SNW63TJ.mjs";
|
|
@@ -1952,4 +1952,4 @@ export {
|
|
|
1952
1952
|
contactUsFields,
|
|
1953
1953
|
partnerBasicInfoFields
|
|
1954
1954
|
};
|
|
1955
|
-
//# sourceMappingURL=chunk-
|
|
1955
|
+
//# sourceMappingURL=chunk-L5BYCXXP.mjs.map
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
gameScreenIdentifierList
|
|
3
3
|
} from "./chunk-7VNXO63T.mjs";
|
|
4
4
|
import {
|
|
5
|
+
EnumEventDateStatus,
|
|
5
6
|
EnumInviteStatus,
|
|
6
7
|
EnumPaymentMethod,
|
|
7
8
|
EnumRegions
|
|
@@ -13,6 +14,111 @@ import customParseFormat from "dayjs/plugin/customParseFormat.js";
|
|
|
13
14
|
import isSameOrAfter from "dayjs/plugin/isSameOrAfter.js";
|
|
14
15
|
import timezone from "dayjs/plugin/timezone.js";
|
|
15
16
|
import utc from "dayjs/plugin/utc.js";
|
|
17
|
+
|
|
18
|
+
// src/utils/utils.ts
|
|
19
|
+
var removeTypename = (obj) => {
|
|
20
|
+
if (obj instanceof Date) {
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
if (obj instanceof File) {
|
|
24
|
+
return obj;
|
|
25
|
+
}
|
|
26
|
+
if (isIsoDateString(obj)) {
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
if (Array.isArray(obj)) {
|
|
30
|
+
return obj.map(removeTypename);
|
|
31
|
+
}
|
|
32
|
+
if (obj !== null && typeof obj === "object") {
|
|
33
|
+
const { __typename, ...cleanedObj } = obj;
|
|
34
|
+
return Object.keys(cleanedObj).reduce((acc, key) => {
|
|
35
|
+
acc[key] = removeTypename(cleanedObj[key]);
|
|
36
|
+
return acc;
|
|
37
|
+
}, {});
|
|
38
|
+
}
|
|
39
|
+
return obj;
|
|
40
|
+
};
|
|
41
|
+
var truncateText = (text, maxLength = 30) => {
|
|
42
|
+
return text.length > maxLength ? text.substring(0, maxLength) + "..." : text;
|
|
43
|
+
};
|
|
44
|
+
var mapArrayToOptions = (items) => items.map((item) => ({
|
|
45
|
+
label: item,
|
|
46
|
+
value: item
|
|
47
|
+
}));
|
|
48
|
+
var capitalizeFirstLetter = (str) => {
|
|
49
|
+
return str.split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
50
|
+
};
|
|
51
|
+
var statusOptions = [
|
|
52
|
+
...Object.values(EnumInviteStatus).map((status) => ({
|
|
53
|
+
label: status,
|
|
54
|
+
value: status
|
|
55
|
+
})).sort((a, b) => a.label.localeCompare(b.label))
|
|
56
|
+
// Sort the options alphabetically
|
|
57
|
+
];
|
|
58
|
+
var availableRegionTypes = Object.values(EnumRegions);
|
|
59
|
+
var availableRegionOptions = mapArrayToOptions(availableRegionTypes);
|
|
60
|
+
var paymentMethodOptions = mapArrayToOptions(
|
|
61
|
+
Object.values(EnumPaymentMethod)
|
|
62
|
+
);
|
|
63
|
+
function normalizeUrl(url) {
|
|
64
|
+
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
|
65
|
+
return `https://${url}`;
|
|
66
|
+
}
|
|
67
|
+
return url;
|
|
68
|
+
}
|
|
69
|
+
var licenseNiceNames = {
|
|
70
|
+
["pro_event" /* PRO_EVENT */]: "Pro Event",
|
|
71
|
+
["pro_vendor" /* PRO_VENDOR */]: "Pro Stallholder",
|
|
72
|
+
["standard_event" /* STANDARD_EVENT */]: "Standard Event",
|
|
73
|
+
["standard_vendor" /* STANDARD_VENDOR */]: "Standard Stallholder",
|
|
74
|
+
["pro_plus_event" /* PRO_PLUS_EVENT */]: "Pro+Ads Event",
|
|
75
|
+
["pro_plus_vendor" /* PRO_PLUS_VENDOR */]: "Pro+Ads Stallholder",
|
|
76
|
+
["standard_partner" /* STANDARD_PARTNER */]: "Partner"
|
|
77
|
+
};
|
|
78
|
+
var cluemartSocialMedia = [
|
|
79
|
+
{
|
|
80
|
+
link: "https://www.facebook.com/ClueMartApp",
|
|
81
|
+
name: "facebook" /* FACEBOOK */
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
link: "https://www.instagram.com/cluemart_app",
|
|
85
|
+
name: "instagram" /* INSTAGRAM */
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
link: "https://www.tiktok.com/@cluemart",
|
|
89
|
+
name: "tiktok" /* TIKTOK */
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
link: "https://www.youtube.com/@ClueMart-App-NZ",
|
|
93
|
+
name: "youtube" /* YOUTUBE */
|
|
94
|
+
}
|
|
95
|
+
];
|
|
96
|
+
var IOS_URL = "https://apps.apple.com/nz/app/cluemart/id6747251008";
|
|
97
|
+
var ANDROID_URL = "https://play.google.com/store/apps/details?id=com.timardex.cluemart";
|
|
98
|
+
var DEFAULT_RESOURCES_RETURN_LIMIT = 1e3;
|
|
99
|
+
var DEFAULT_RESOURCES_RETURN_OFFSET = 0;
|
|
100
|
+
var CLUEMART_MAIN_DOMAIN_URL = "https://cluemart.co.nz";
|
|
101
|
+
var rewardNiceNames = {
|
|
102
|
+
["mystery_joy_box" /* MYSTERY_JOY_BOX */]: {
|
|
103
|
+
name: "Mystery Joy Box",
|
|
104
|
+
points: 250
|
|
105
|
+
},
|
|
106
|
+
["mystery_squeeze_box" /* MYSTERY_SQUEEZE_BOX */]: {
|
|
107
|
+
name: "Mystery Squeeze Box",
|
|
108
|
+
points: 350
|
|
109
|
+
},
|
|
110
|
+
["mystery_deluxe_box" /* MYSTERY_DELUXE_BOX */]: {
|
|
111
|
+
name: "Mystery Deluxe Box",
|
|
112
|
+
points: 500
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var PostTypeLabels = {
|
|
116
|
+
["market_faces" /* MARKET_FACES */]: "Market Faces",
|
|
117
|
+
["clue_bites" /* CLUE_BITES */]: "Clue Bites",
|
|
118
|
+
["play_and_win" /* PLAY_AND_WIN */]: "Play & Win"
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// src/utils/date.ts
|
|
16
122
|
var dateFormat = "DD-MM-YYYY";
|
|
17
123
|
var timeFormat = "HH:mm";
|
|
18
124
|
dayjs.extend(customParseFormat);
|
|
@@ -71,7 +177,7 @@ var isIsoDateString = (value) => {
|
|
|
71
177
|
return typeof value === "string" && !isNaN(Date.parse(value));
|
|
72
178
|
};
|
|
73
179
|
function sortDatesChronologically(dates) {
|
|
74
|
-
if (!dates
|
|
180
|
+
if (!dates?.length) {
|
|
75
181
|
return [];
|
|
76
182
|
}
|
|
77
183
|
return [...dates].sort((a, b) => {
|
|
@@ -81,6 +187,14 @@ function sortDatesChronologically(dates) {
|
|
|
81
187
|
return dateA.valueOf() - dateB.valueOf();
|
|
82
188
|
});
|
|
83
189
|
}
|
|
190
|
+
var futureTimePeriods = mapArrayToOptions(
|
|
191
|
+
Object.values(EnumEventDateStatus)
|
|
192
|
+
).filter(
|
|
193
|
+
(period) => period.value !== "Starting_Soon" /* STARTING_SOON */ && period.value !== "Canceled" /* CANCELED */ && period.value !== "Rescheduled" /* RE_SCHEDULED */ && period.value !== "Started" /* STARTED */ && period.value !== "Ended" /* ENDED */ && period.value !== "Invalid" /* INVALID */
|
|
194
|
+
).map((period) => ({
|
|
195
|
+
label: period.value.replaceAll("_", " "),
|
|
196
|
+
value: period.value
|
|
197
|
+
}));
|
|
84
198
|
|
|
85
199
|
// src/utils/dailyClueGame.ts
|
|
86
200
|
function createSeededRng(seed) {
|
|
@@ -155,109 +269,6 @@ function computeDailyClueState(dailyClue) {
|
|
|
155
269
|
};
|
|
156
270
|
}
|
|
157
271
|
|
|
158
|
-
// src/utils/utils.ts
|
|
159
|
-
var removeTypename = (obj) => {
|
|
160
|
-
if (obj instanceof Date) {
|
|
161
|
-
return obj;
|
|
162
|
-
}
|
|
163
|
-
if (obj instanceof File) {
|
|
164
|
-
return obj;
|
|
165
|
-
}
|
|
166
|
-
if (isIsoDateString(obj)) {
|
|
167
|
-
return obj;
|
|
168
|
-
}
|
|
169
|
-
if (Array.isArray(obj)) {
|
|
170
|
-
return obj.map(removeTypename);
|
|
171
|
-
}
|
|
172
|
-
if (obj !== null && typeof obj === "object") {
|
|
173
|
-
const { __typename, ...cleanedObj } = obj;
|
|
174
|
-
return Object.keys(cleanedObj).reduce((acc, key) => {
|
|
175
|
-
acc[key] = removeTypename(cleanedObj[key]);
|
|
176
|
-
return acc;
|
|
177
|
-
}, {});
|
|
178
|
-
}
|
|
179
|
-
return obj;
|
|
180
|
-
};
|
|
181
|
-
var truncateText = (text, maxLength = 30) => {
|
|
182
|
-
return text.length > maxLength ? text.substring(0, maxLength) + "..." : text;
|
|
183
|
-
};
|
|
184
|
-
var mapArrayToOptions = (items) => items.map((item) => ({
|
|
185
|
-
label: item,
|
|
186
|
-
value: item
|
|
187
|
-
}));
|
|
188
|
-
var capitalizeFirstLetter = (str) => {
|
|
189
|
-
return str.split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
190
|
-
};
|
|
191
|
-
var statusOptions = [
|
|
192
|
-
...Object.values(EnumInviteStatus).map((status) => ({
|
|
193
|
-
label: status,
|
|
194
|
-
value: status
|
|
195
|
-
})).sort((a, b) => a.label.localeCompare(b.label))
|
|
196
|
-
// Sort the options alphabetically
|
|
197
|
-
];
|
|
198
|
-
var availableRegionTypes = Object.values(EnumRegions);
|
|
199
|
-
var availableRegionOptions = mapArrayToOptions(availableRegionTypes);
|
|
200
|
-
var paymentMethodOptions = mapArrayToOptions(
|
|
201
|
-
Object.values(EnumPaymentMethod)
|
|
202
|
-
);
|
|
203
|
-
function normalizeUrl(url) {
|
|
204
|
-
if (!url.startsWith("http://") && !url.startsWith("https://")) {
|
|
205
|
-
return `https://${url}`;
|
|
206
|
-
}
|
|
207
|
-
return url;
|
|
208
|
-
}
|
|
209
|
-
var licenseNiceNames = {
|
|
210
|
-
["pro_event" /* PRO_EVENT */]: "Pro Event",
|
|
211
|
-
["pro_vendor" /* PRO_VENDOR */]: "Pro Stallholder",
|
|
212
|
-
["standard_event" /* STANDARD_EVENT */]: "Standard Event",
|
|
213
|
-
["standard_vendor" /* STANDARD_VENDOR */]: "Standard Stallholder",
|
|
214
|
-
["pro_plus_event" /* PRO_PLUS_EVENT */]: "Pro+Ads Event",
|
|
215
|
-
["pro_plus_vendor" /* PRO_PLUS_VENDOR */]: "Pro+Ads Stallholder",
|
|
216
|
-
["standard_partner" /* STANDARD_PARTNER */]: "Partner"
|
|
217
|
-
};
|
|
218
|
-
var cluemartSocialMedia = [
|
|
219
|
-
{
|
|
220
|
-
link: "https://www.facebook.com/ClueMartApp",
|
|
221
|
-
name: "facebook" /* FACEBOOK */
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
link: "https://www.instagram.com/cluemart_app",
|
|
225
|
-
name: "instagram" /* INSTAGRAM */
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
link: "https://www.tiktok.com/@cluemart",
|
|
229
|
-
name: "tiktok" /* TIKTOK */
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
link: "https://www.youtube.com/@ClueMart-App-NZ",
|
|
233
|
-
name: "youtube" /* YOUTUBE */
|
|
234
|
-
}
|
|
235
|
-
];
|
|
236
|
-
var IOS_URL = "https://apps.apple.com/nz/app/cluemart/id6747251008";
|
|
237
|
-
var ANDROID_URL = "https://play.google.com/store/apps/details?id=com.timardex.cluemart";
|
|
238
|
-
var DEFAULT_RESOURCES_RETURN_LIMIT = 1e3;
|
|
239
|
-
var DEFAULT_RESOURCES_RETURN_OFFSET = 0;
|
|
240
|
-
var CLUEMART_MAIN_DOMAIN_URL = "https://cluemart.co.nz";
|
|
241
|
-
var rewardNiceNames = {
|
|
242
|
-
["mystery_joy_box" /* MYSTERY_JOY_BOX */]: {
|
|
243
|
-
name: "Mystery Joy Box",
|
|
244
|
-
points: 250
|
|
245
|
-
},
|
|
246
|
-
["mystery_squeeze_box" /* MYSTERY_SQUEEZE_BOX */]: {
|
|
247
|
-
name: "Mystery Squeeze Box",
|
|
248
|
-
points: 350
|
|
249
|
-
},
|
|
250
|
-
["mystery_deluxe_box" /* MYSTERY_DELUXE_BOX */]: {
|
|
251
|
-
name: "Mystery Deluxe Box",
|
|
252
|
-
points: 500
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
var PostTypeLabels = {
|
|
256
|
-
["market_faces" /* MARKET_FACES */]: "Market Faces",
|
|
257
|
-
["clue_bites" /* CLUE_BITES */]: "Clue Bites",
|
|
258
|
-
["play_and_win" /* PLAY_AND_WIN */]: "Play & Win"
|
|
259
|
-
};
|
|
260
|
-
|
|
261
272
|
// src/utils/school.ts
|
|
262
273
|
var SCHOOL_MIN_STUDENT_COUNT = 300;
|
|
263
274
|
var SCHOOL_MAX_STUDENT_COUNT = 0;
|
|
@@ -291,18 +302,6 @@ function filterEventsByDateStatusPeriod(events, period) {
|
|
|
291
302
|
}
|
|
292
303
|
|
|
293
304
|
export {
|
|
294
|
-
dateFormat,
|
|
295
|
-
timeFormat,
|
|
296
|
-
toNZTime,
|
|
297
|
-
nzStartOfDay,
|
|
298
|
-
formatDate,
|
|
299
|
-
getCurrentAndFutureDates,
|
|
300
|
-
isFutureDatesBeforeThreshold,
|
|
301
|
-
formatTimestamp,
|
|
302
|
-
isIsoDateString,
|
|
303
|
-
sortDatesChronologically,
|
|
304
|
-
seededShuffle,
|
|
305
|
-
computeDailyClueState,
|
|
306
305
|
removeTypename,
|
|
307
306
|
truncateText,
|
|
308
307
|
mapArrayToOptions,
|
|
@@ -321,6 +320,19 @@ export {
|
|
|
321
320
|
CLUEMART_MAIN_DOMAIN_URL,
|
|
322
321
|
rewardNiceNames,
|
|
323
322
|
PostTypeLabels,
|
|
323
|
+
dateFormat,
|
|
324
|
+
timeFormat,
|
|
325
|
+
toNZTime,
|
|
326
|
+
nzStartOfDay,
|
|
327
|
+
formatDate,
|
|
328
|
+
getCurrentAndFutureDates,
|
|
329
|
+
isFutureDatesBeforeThreshold,
|
|
330
|
+
formatTimestamp,
|
|
331
|
+
isIsoDateString,
|
|
332
|
+
sortDatesChronologically,
|
|
333
|
+
futureTimePeriods,
|
|
334
|
+
seededShuffle,
|
|
335
|
+
computeDailyClueState,
|
|
324
336
|
SCHOOL_MIN_STUDENT_COUNT,
|
|
325
337
|
SCHOOL_MAX_STUDENT_COUNT,
|
|
326
338
|
EVENT_DATE_STATUS_PERIOD_MAP,
|
|
@@ -328,4 +340,4 @@ export {
|
|
|
328
340
|
eventMatchesDateStatusPeriod,
|
|
329
341
|
filterEventsByDateStatusPeriod
|
|
330
342
|
};
|
|
331
|
-
//# sourceMappingURL=chunk-
|
|
343
|
+
//# sourceMappingURL=chunk-VPYYAF3L.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/date.ts","../src/utils/utils.ts","../src/utils/dailyClueGame.ts","../src/utils/school.ts","../src/utils/eventDateStatus.ts"],"sourcesContent":["import dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport isSameOrAfter from \"dayjs/plugin/isSameOrAfter.js\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\n\nimport { EnumEventDateStatus } from \"src/enums\";\n\nimport { mapArrayToOptions } from \"./utils\";\n\nexport const dateFormat = \"DD-MM-YYYY\";\nexport const timeFormat = \"HH:mm\";\n\n// Enable custom format parsing\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isSameOrAfter);\n\nconst NZ_TZ = \"Pacific/Auckland\";\n\nexport function toNZTime(date?: Date | string) {\n return date ? dayjs(date).tz(NZ_TZ) : dayjs().tz(NZ_TZ);\n}\n\n/** Start of the calendar day in Pacific/Auckland (daily games, streaks, etc.). */\nexport function nzStartOfDay(\n input?: Date | string | number | null,\n): dayjs.Dayjs {\n if (input == null) {\n return dayjs().tz(NZ_TZ).startOf(\"day\");\n }\n return dayjs.tz(input, NZ_TZ).startOf(\"day\");\n}\n\ntype DateFormat = \"date\" | \"time\" | \"datetime\";\n\n/**\n * Format a date string to a more readable format.\n * @param dateStr - the date string\n * @param timeStr - optional time string\n * @param display - 'date' | 'time' | 'datetime'\n * @returns formatted string based on display option\n */\nexport const formatDate = (\n dateStr: string,\n display: DateFormat = \"datetime\",\n timeStr?: string,\n) => {\n // Combine date and time into a single string if time is provided\n const dateTimeStr = timeStr ? `${dateStr} ${timeStr}` : dateStr;\n\n // Parse with formats\n const dateTime = timeStr\n ? dayjs(dateTimeStr, `${dateFormat} ${timeFormat}`)\n : dayjs(dateStr, dateFormat);\n\n // Format parts\n const formattedDate = dateTime.format(\"dddd, D MMMM, YYYY\");\n const formattedTime = dateTime.format(\"h:mm a\");\n\n // Return based on display option\n switch (display) {\n case \"date\":\n return formattedDate;\n case \"time\":\n return formattedTime;\n case \"datetime\":\n return `${formattedDate} at ${formattedTime}`;\n default:\n return formattedDate;\n }\n};\n\nexport const getCurrentAndFutureDates = <\n T extends { startDate: string; startTime: string },\n>(\n dates: T[],\n): T[] => {\n const now = dayjs(); // current date and time\n\n return dates.filter((dateObj) => {\n const dateTime = dayjs(\n `${dateObj.startDate} ${dateObj.startTime}`,\n `${dateFormat} ${timeFormat}`,\n );\n return dateTime.isSameOrAfter(now);\n });\n};\n\nexport const isFutureDatesBeforeThreshold = (\n date: {\n startDate: string;\n startTime: string;\n },\n minHoursFromNow: number,\n): boolean => {\n const threshold = minHoursFromNow\n ? dayjs().add(minHoursFromNow, \"hour\")\n : dayjs().startOf(\"day\");\n\n const dateTime = dayjs(\n `${date.startDate} ${date.startTime}`,\n `${dateFormat} ${timeFormat}`,\n );\n\n return dateTime.isSameOrAfter(threshold);\n};\n\nexport const formatTimestamp = (timestamp: string) => {\n const formattedDate = toNZTime(timestamp).format(dateFormat);\n\n return formatDate(formattedDate, \"date\");\n};\n\nexport const isIsoDateString = (value: unknown): value is string => {\n return typeof value === \"string\" && !isNaN(Date.parse(value));\n};\n\n/**\n * Sort an array of date strings by their proximity to the current date.\n * @param dates - The array of date strings to sort.\n * @returns - The sorted array of date strings.\n */\nexport function sortDatesChronologically<\n T extends { startDate: string; startTime: string },\n>(dates: T[]): T[] {\n if (!dates?.length) {\n return [];\n }\n\n return [...dates].sort((a, b) => {\n const dateTimeFormat = `${dateFormat} ${timeFormat}`;\n const dateA = dayjs(`${a.startDate} ${a.startTime}`, dateTimeFormat);\n const dateB = dayjs(`${b.startDate} ${b.startTime}`, dateTimeFormat);\n return dateA.valueOf() - dateB.valueOf(); // chronological order\n });\n}\n\nexport const futureTimePeriods = mapArrayToOptions(\n Object.values(EnumEventDateStatus),\n)\n .filter(\n (period) =>\n period.value !== EnumEventDateStatus.STARTING_SOON &&\n period.value !== EnumEventDateStatus.CANCELED &&\n period.value !== EnumEventDateStatus.RE_SCHEDULED &&\n period.value !== EnumEventDateStatus.STARTED &&\n period.value !== EnumEventDateStatus.ENDED &&\n period.value !== EnumEventDateStatus.INVALID,\n )\n .map((period) => ({\n label: period.value.replaceAll(\"_\", \" \"),\n value: period.value,\n }));\n","import {\n EnumInviteStatus,\n EnumPaymentMethod,\n EnumRegions,\n EnumReward,\n EnumSocialMedia,\n EnumUserLicence,\n} from \"src/enums\";\nimport { EnumPostType, OptionItem, SocialMediaType } from \"src/types\";\n\nimport { isIsoDateString } from \"./date\";\n\nexport const removeTypename = (obj: any): any => {\n // Preserve Date objects\n if (obj instanceof Date) {\n return obj;\n }\n\n // Preserve File objects (for apollo-upload-client)\n if (obj instanceof File) {\n return obj;\n }\n\n // Preserve ISO date strings\n if (isIsoDateString(obj)) {\n return obj;\n }\n\n // Handle arrays\n if (Array.isArray(obj)) {\n return obj.map(removeTypename);\n }\n\n // Handle plain objects only\n if (obj !== null && typeof obj === \"object\") {\n const { __typename, ...cleanedObj } = obj;\n\n return Object.keys(cleanedObj).reduce((acc: any, key) => {\n acc[key] = removeTypename(cleanedObj[key]);\n return acc;\n }, {});\n }\n\n // Primitives\n return obj;\n};\n\n/**\n * Truncate text to a specified length and append ellipsis if necessary.\n * @param text\n * @param maxLength\n * @returns\n */\nexport const truncateText = (text: string, maxLength: number = 30): string => {\n return text.length > maxLength ? text.substring(0, maxLength) + \"...\" : text;\n};\n\n/**\n * Convert an array of strings to an array of objects with label and value properties.\n * @param items - The array of strings to convert.\n * @returns - The converted array of objects.\n */\nexport const mapArrayToOptions = (items: string[]): OptionItem[] =>\n items.map((item) => ({\n label: item,\n value: item,\n }));\n\nexport const capitalizeFirstLetter = (str: string): string => {\n return str\n .split(\" \")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(\" \");\n};\n\nexport const statusOptions = [\n ...Object.values(EnumInviteStatus)\n .map((status) => ({\n label: status,\n value: status,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)), // Sort the options alphabetically\n];\n\nexport const availableRegionTypes = Object.values(EnumRegions);\nexport const availableRegionOptions: OptionItem[] =\n mapArrayToOptions(availableRegionTypes);\n\nexport const paymentMethodOptions: OptionItem[] = mapArrayToOptions(\n Object.values(EnumPaymentMethod),\n);\n\nexport function normalizeUrl(url: string): string {\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n return `https://${url}`;\n }\n return url;\n}\n\nexport const licenseNiceNames: Record<EnumUserLicence, string> = {\n [EnumUserLicence.PRO_EVENT]: \"Pro Event\",\n [EnumUserLicence.PRO_VENDOR]: \"Pro Stallholder\",\n [EnumUserLicence.STANDARD_EVENT]: \"Standard Event\",\n [EnumUserLicence.STANDARD_VENDOR]: \"Standard Stallholder\",\n [EnumUserLicence.PRO_PLUS_EVENT]: \"Pro+Ads Event\",\n [EnumUserLicence.PRO_PLUS_VENDOR]: \"Pro+Ads Stallholder\",\n [EnumUserLicence.STANDARD_PARTNER]: \"Partner\",\n};\n\nexport const cluemartSocialMedia: SocialMediaType[] = [\n {\n link: \"https://www.facebook.com/ClueMartApp\",\n name: EnumSocialMedia.FACEBOOK,\n },\n {\n link: \"https://www.instagram.com/cluemart_app\",\n name: EnumSocialMedia.INSTAGRAM,\n },\n {\n link: \"https://www.tiktok.com/@cluemart\",\n name: EnumSocialMedia.TIKTOK,\n },\n {\n link: \"https://www.youtube.com/@ClueMart-App-NZ\",\n name: EnumSocialMedia.YOUTUBE,\n },\n];\n\nexport const IOS_URL = \"https://apps.apple.com/nz/app/cluemart/id6747251008\";\nexport const ANDROID_URL =\n \"https://play.google.com/store/apps/details?id=com.timardex.cluemart\";\n\nexport const DEFAULT_RESOURCES_RETURN_LIMIT = 1000;\nexport const DEFAULT_RESOURCES_RETURN_OFFSET = 0;\nexport const CLUEMART_MAIN_DOMAIN_URL = \"https://cluemart.co.nz\";\n\nexport const rewardNiceNames: Record<\n EnumReward,\n { name: string; points: number }\n> = {\n [EnumReward.MYSTERY_JOY_BOX]: {\n name: \"Mystery Joy Box\",\n points: 250,\n },\n [EnumReward.MYSTERY_SQUEEZE_BOX]: {\n name: \"Mystery Squeeze Box\",\n points: 350,\n },\n [EnumReward.MYSTERY_DELUXE_BOX]: {\n name: \"Mystery Deluxe Box\",\n points: 500,\n },\n};\n\nexport const PostTypeLabels: Record<EnumPostType, string> = {\n [EnumPostType.MARKET_FACES]: \"Market Faces\",\n [EnumPostType.CLUE_BITES]: \"Clue Bites\",\n [EnumPostType.PLAY_AND_WIN]: \"Play & Win\",\n};\n","import type { Dayjs } from \"dayjs\";\n\nimport {\n DailyClueGameData,\n GamePlacement,\n GamePlacementClue,\n gameScreenIdentifierList,\n} from \"../types/game/dailyClue\";\n\nimport { nzStartOfDay } from \"./date\";\n\nfunction createSeededRng(seed: number) {\n let t = seed >>> 0;\n\n return function random() {\n t += 0x6d2b79f5;\n let x = t;\n\n x = Math.imul(x ^ (x >>> 15), x | 1);\n x ^= x + Math.imul(x ^ (x >>> 7), x | 61);\n\n return ((x ^ (x >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nfunction hashStringToNumber(seed: string): number {\n let hash = 2166136261;\n\n for (let i = 0; i < seed.length; i++) {\n hash ^= seed.codePointAt(i) ?? 0;\n hash = Math.imul(hash, 16777619);\n }\n\n return hash >>> 0;\n}\n\n/** Seeded shuffle so all players see the same letter order / placements for a game. */\nexport function seededShuffle<T>(array: readonly T[], seed: string): T[] {\n const rng = createSeededRng(hashStringToNumber(seed));\n const result = [...array];\n\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(rng() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n\n return result;\n}\n\nfunction getDayIndex(start: Dayjs, today: Dayjs): number {\n return today.diff(start, \"day\");\n}\n\nexport function computeDailyClueState(dailyClue: DailyClueGameData): {\n todaysClue: GamePlacementClue | null;\n todaysLetter: string | null;\n todaysPlacement: GamePlacement | null;\n} | null {\n const { startDate, endDate } = dailyClue.gameFields.gameDate;\n const { solutionShuffled, collected } = dailyClue.letterInfo;\n\n const today = nzStartOfDay();\n const start = nzStartOfDay(startDate);\n const end = nzStartOfDay(endDate);\n\n // Before game starts\n if (today.isBefore(start)) {\n return null;\n }\n\n const shuffledPlacements = seededShuffle(\n gameScreenIdentifierList,\n start.toISOString(),\n );\n\n const index = getDayIndex(start, today);\n\n // After game ends\n if (today.isAfter(end)) {\n return {\n todaysClue: null,\n todaysLetter: null,\n todaysPlacement: null,\n };\n }\n\n // Safety: index must exist in BOTH arrays\n if (\n index < 0 ||\n index >= solutionShuffled.length ||\n index >= shuffledPlacements.length\n ) {\n return null;\n }\n\n const letterToday = solutionShuffled[index];\n const placement = shuffledPlacements[index];\n\n if (!letterToday || !placement) return null;\n\n const alreadyCollectedToday = (collected ?? []).includes(letterToday);\n\n // Already completed today\n if (alreadyCollectedToday) {\n return {\n todaysClue: null,\n todaysLetter: null,\n todaysPlacement: null,\n };\n }\n\n // Active state\n return {\n todaysClue: placement.clue,\n todaysLetter: letterToday,\n todaysPlacement: placement.id,\n };\n}\n","export const SCHOOL_MIN_STUDENT_COUNT = 300;\nexport const SCHOOL_MAX_STUDENT_COUNT = 0;\n","import { EnumEventDateStatus } from \"../enums\";\nimport type { DateTimeType } from \"../types/global\";\n\nexport const EVENT_DATE_STATUS_PERIOD_MAP: Partial<\n Record<EnumEventDateStatus, EnumEventDateStatus[]>\n> = {\n [EnumEventDateStatus.TODAY]: [\n EnumEventDateStatus.STARTED,\n EnumEventDateStatus.STARTING_SOON,\n EnumEventDateStatus.TODAY,\n ],\n [EnumEventDateStatus.THIS_WEEK]: [\n EnumEventDateStatus.STARTED,\n EnumEventDateStatus.STARTING_SOON,\n EnumEventDateStatus.THIS_WEEK,\n EnumEventDateStatus.TODAY,\n EnumEventDateStatus.TOMORROW,\n ],\n};\n\nexport function getAllowedEventDateStatuses(\n period: EnumEventDateStatus,\n): EnumEventDateStatus[] {\n return EVENT_DATE_STATUS_PERIOD_MAP[period] ?? [period];\n}\n\nexport function eventMatchesDateStatusPeriod(\n dateTime: Pick<DateTimeType, \"dateStatus\">[] | null | undefined,\n period: EnumEventDateStatus,\n): boolean {\n const allowedStatuses = getAllowedEventDateStatuses(period);\n\n return (\n dateTime?.some((dt) => allowedStatuses.includes(dt.dateStatus)) ?? false\n );\n}\n\nexport function filterEventsByDateStatusPeriod<\n T extends { dateTime?: Pick<DateTimeType, \"dateStatus\">[] | null },\n>(events: T[], period: EnumEventDateStatus): T[] {\n return events.filter((event) =>\n eventMatchesDateStatusPeriod(event.dateTime, period),\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -323,6 +323,20 @@ var EnumRegions = /* @__PURE__ */ ((EnumRegions2) => {
|
|
|
323
323
|
EnumRegions2["Wellington"] = "Wellington";
|
|
324
324
|
return EnumRegions2;
|
|
325
325
|
})(EnumRegions || {});
|
|
326
|
+
var EnumEventDateStatus = /* @__PURE__ */ ((EnumEventDateStatus2) => {
|
|
327
|
+
EnumEventDateStatus2["STARTING_SOON"] = "Starting_Soon";
|
|
328
|
+
EnumEventDateStatus2["STARTED"] = "Started";
|
|
329
|
+
EnumEventDateStatus2["TODAY"] = "Today";
|
|
330
|
+
EnumEventDateStatus2["TOMORROW"] = "Tomorrow";
|
|
331
|
+
EnumEventDateStatus2["THIS_WEEK"] = "This_Week";
|
|
332
|
+
EnumEventDateStatus2["NEXT_WEEK"] = "Next_Week";
|
|
333
|
+
EnumEventDateStatus2["UPCOMING"] = "Upcoming";
|
|
334
|
+
EnumEventDateStatus2["ENDED"] = "Ended";
|
|
335
|
+
EnumEventDateStatus2["RE_SCHEDULED"] = "Rescheduled";
|
|
336
|
+
EnumEventDateStatus2["CANCELED"] = "Canceled";
|
|
337
|
+
EnumEventDateStatus2["INVALID"] = "Invalid";
|
|
338
|
+
return EnumEventDateStatus2;
|
|
339
|
+
})(EnumEventDateStatus || {});
|
|
326
340
|
|
|
327
341
|
// src/types/game/dailyClue.ts
|
|
328
342
|
var OBJECT_ID_PATH_SEGMENT = "[a-f0-9]{24}";
|
|
@@ -431,10 +445,6 @@ var import_customParseFormat = __toESM(require("dayjs/plugin/customParseFormat.j
|
|
|
431
445
|
var import_isSameOrAfter = __toESM(require("dayjs/plugin/isSameOrAfter.js"));
|
|
432
446
|
var import_timezone = __toESM(require("dayjs/plugin/timezone.js"));
|
|
433
447
|
var import_utc = __toESM(require("dayjs/plugin/utc.js"));
|
|
434
|
-
import_dayjs.default.extend(import_customParseFormat.default);
|
|
435
|
-
import_dayjs.default.extend(import_utc.default);
|
|
436
|
-
import_dayjs.default.extend(import_timezone.default);
|
|
437
|
-
import_dayjs.default.extend(import_isSameOrAfter.default);
|
|
438
448
|
|
|
439
449
|
// src/types/subscription.ts
|
|
440
450
|
var TIER_FROM_LICENCE = {
|
|
@@ -511,6 +521,20 @@ var PostTypeLabels = {
|
|
|
511
521
|
["play_and_win" /* PLAY_AND_WIN */]: "Play & Win"
|
|
512
522
|
};
|
|
513
523
|
|
|
524
|
+
// src/utils/date.ts
|
|
525
|
+
import_dayjs.default.extend(import_customParseFormat.default);
|
|
526
|
+
import_dayjs.default.extend(import_utc.default);
|
|
527
|
+
import_dayjs.default.extend(import_timezone.default);
|
|
528
|
+
import_dayjs.default.extend(import_isSameOrAfter.default);
|
|
529
|
+
var futureTimePeriods = mapArrayToOptions(
|
|
530
|
+
Object.values(EnumEventDateStatus)
|
|
531
|
+
).filter(
|
|
532
|
+
(period) => period.value !== "Starting_Soon" /* STARTING_SOON */ && period.value !== "Canceled" /* CANCELED */ && period.value !== "Rescheduled" /* RE_SCHEDULED */ && period.value !== "Started" /* STARTED */ && period.value !== "Ended" /* ENDED */ && period.value !== "Invalid" /* INVALID */
|
|
533
|
+
).map((period) => ({
|
|
534
|
+
label: period.value.replaceAll("_", " "),
|
|
535
|
+
value: period.value
|
|
536
|
+
}));
|
|
537
|
+
|
|
514
538
|
// src/utils/eventDateStatus.ts
|
|
515
539
|
var EVENT_DATE_STATUS_PERIOD_MAP = {
|
|
516
540
|
["Today" /* TODAY */]: [
|