@sparted/shared-library 1.7.74 → 1.7.75
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/business/campaign/index.d.ts +1 -0
- package/business/campaign/index.js +14 -0
- package/business/campaign/index.js.map +1 -0
- package/business/campaign/live-campaign.d.ts +3 -1
- package/business/campaign/live-campaign.js +91 -0
- package/business/campaign/live-campaign.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './live-campaign';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var liveCampaign = require('./live-campaign.js');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.checkTodayPlayable = liveCampaign.checkTodayPlayable;
|
|
10
|
+
exports.computeCurrentSession = liveCampaign.computeCurrentSession;
|
|
11
|
+
exports.computeIntenseCalendar = liveCampaign.computeIntenseCalendar;
|
|
12
|
+
exports.findNextAvailableDate = liveCampaign.findNextAvailableDate;
|
|
13
|
+
exports.getCalendarSessionDatesFromCampaign = liveCampaign.getCalendarSessionDatesFromCampaign;
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -3,6 +3,8 @@ export declare const computeIntenseCalendar: (card: LiveCampaign) => Date[];
|
|
|
3
3
|
export declare const computeCurrentSession: (card: LiveCampaign) => number;
|
|
4
4
|
export declare const checkTodayPlayable: (card: LiveCampaign) => boolean;
|
|
5
5
|
export declare const findNextAvailableDate: (currentDate: Date, endDate: Date, enabledWeekDays: number[], disabledDates: Date[]) => Date | null;
|
|
6
|
-
type GetCalendarSessionDatesFromCampaignProps = Pick<CampaignDetails, 'launchDate' | 'enabledWeekDays' | 'disabledDates' | 'nbSessions'
|
|
6
|
+
type GetCalendarSessionDatesFromCampaignProps = Pick<CampaignDetails, 'launchDate' | 'enabledWeekDays' | 'disabledDates' | 'nbSessions'> & {
|
|
7
|
+
endDate?: string;
|
|
8
|
+
};
|
|
7
9
|
export declare const getCalendarSessionDatesFromCampaign: ({ launchDate, enabledWeekDays, disabledDates, nbSessions, endDate, }: GetCalendarSessionDatesFromCampaignProps) => Record<number, Date>;
|
|
8
10
|
export {};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var isSameDate = require('../../date/is-same-date.js');
|
|
6
|
+
var addDays = require('../../date/add-days.js');
|
|
7
|
+
|
|
8
|
+
const computeIntenseCalendar = (card) => {
|
|
9
|
+
const { details } = card;
|
|
10
|
+
const startDate = new Date(details.utcStartDate);
|
|
11
|
+
const endDate = new Date(details.utcEndDate);
|
|
12
|
+
const calculateIntenseCalendarAux = (date, calendar) => {
|
|
13
|
+
if (date > endDate) {
|
|
14
|
+
return calendar;
|
|
15
|
+
}
|
|
16
|
+
const jsDay = date.getDay();
|
|
17
|
+
const day = jsDay === 0 ? 7 : jsDay;
|
|
18
|
+
if (details.enabledWeekDays.includes(day) && !details.disabledDates.includes(date.toISOString().slice(0, 10))) {
|
|
19
|
+
calendar.push(new Date(date));
|
|
20
|
+
}
|
|
21
|
+
date.setDate(date.getDate() + 1);
|
|
22
|
+
return calculateIntenseCalendarAux(date, calendar);
|
|
23
|
+
};
|
|
24
|
+
return calculateIntenseCalendarAux(startDate, []);
|
|
25
|
+
};
|
|
26
|
+
const computeCurrentSession = (card) => {
|
|
27
|
+
const { details, achievement } = card;
|
|
28
|
+
if (details.type === 'flexible') {
|
|
29
|
+
return Math.min(achievement.lastSessionPlayed + 1, details.sessionCount);
|
|
30
|
+
}
|
|
31
|
+
const today = new Date();
|
|
32
|
+
if (today <= new Date(details.utcStartDate)) {
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
if (today >= new Date(details.utcEndDate)) {
|
|
36
|
+
return details.sessionCount;
|
|
37
|
+
}
|
|
38
|
+
const calendar = computeIntenseCalendar(card);
|
|
39
|
+
const todayDate = today.toISOString().slice(0, 10);
|
|
40
|
+
const currentSession = calendar.findIndex((date) => date.toISOString().slice(0, 10) >= todayDate);
|
|
41
|
+
if (currentSession === -1) {
|
|
42
|
+
throw new Error('Current session not found');
|
|
43
|
+
}
|
|
44
|
+
return currentSession + 1;
|
|
45
|
+
};
|
|
46
|
+
const checkTodayPlayable = (card) => {
|
|
47
|
+
const today = new Date();
|
|
48
|
+
const { details } = card;
|
|
49
|
+
const startDate = new Date(details.utcStartDate);
|
|
50
|
+
const endDate = new Date(details.utcEndDate);
|
|
51
|
+
if (today < startDate || today > endDate) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const jsDay = today.getDay();
|
|
55
|
+
const day = jsDay === 0 ? 7 : jsDay;
|
|
56
|
+
if (!details.enabledWeekDays.includes(day)) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (details.disabledDates.includes(today.toISOString().slice(0, 10))) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
};
|
|
64
|
+
const findNextAvailableDate = (currentDate, endDate, enabledWeekDays, disabledDates) => {
|
|
65
|
+
if (enabledWeekDays.length === 0)
|
|
66
|
+
return null;
|
|
67
|
+
const differenceInDays = Math.floor((endDate.getTime() - currentDate.getTime()) / (1000 * 3600 * 24));
|
|
68
|
+
return differenceInDays > 0 &&
|
|
69
|
+
(!enabledWeekDays.includes(currentDate.getDay()) || disabledDates.some((d) => isSameDate.isSameDate(d, currentDate)))
|
|
70
|
+
? findNextAvailableDate(addDays.addDays(currentDate, 1), endDate, enabledWeekDays, disabledDates)
|
|
71
|
+
: currentDate;
|
|
72
|
+
};
|
|
73
|
+
const getCalendarSessionDatesFromCampaign = ({ launchDate, enabledWeekDays, disabledDates, nbSessions, endDate, }) => {
|
|
74
|
+
const calendarDatesBySession = Array.from({ length: nbSessions }).reduce((acc, _, index) => {
|
|
75
|
+
const session = index + 1;
|
|
76
|
+
const lastDate = session > 1 ? addDays.addDays(new Date(acc[session - 1]), 1) : new Date(launchDate);
|
|
77
|
+
const formatedEndDate = endDate ? new Date(endDate) : new Date(launchDate);
|
|
78
|
+
const nextSessionDate = findNextAvailableDate(lastDate, formatedEndDate, enabledWeekDays, disabledDates);
|
|
79
|
+
if (!nextSessionDate)
|
|
80
|
+
return acc;
|
|
81
|
+
return Object.assign(Object.assign({}, acc), { [session]: nextSessionDate });
|
|
82
|
+
}, {});
|
|
83
|
+
return calendarDatesBySession;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.checkTodayPlayable = checkTodayPlayable;
|
|
87
|
+
exports.computeCurrentSession = computeCurrentSession;
|
|
88
|
+
exports.computeIntenseCalendar = computeIntenseCalendar;
|
|
89
|
+
exports.findNextAvailableDate = findNextAvailableDate;
|
|
90
|
+
exports.getCalendarSessionDatesFromCampaign = getCalendarSessionDatesFromCampaign;
|
|
91
|
+
//# sourceMappingURL=live-campaign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-campaign.js","sources":["../../../src/business/campaign/live-campaign.ts"],"sourcesContent":["import { addDays, isSameDate } from '../../date';\nimport { CampaignDetails, LiveCampaign } from '../types';\n\nexport const computeIntenseCalendar = (card: LiveCampaign): Date[] => {\n const { details } = card;\n\n const startDate = new Date(details.utcStartDate);\n const endDate = new Date(details.utcEndDate);\n\n const calculateIntenseCalendarAux = (date: Date, calendar: Date[]): Date[] => {\n if (date > endDate) {\n return calendar;\n }\n\n const jsDay = date.getDay();\n const day = jsDay === 0 ? 7 : jsDay;\n\n if (details.enabledWeekDays.includes(day) && !details.disabledDates.includes(date.toISOString().slice(0, 10))) {\n calendar.push(new Date(date));\n }\n\n date.setDate(date.getDate() + 1);\n\n return calculateIntenseCalendarAux(date, calendar);\n };\n\n return calculateIntenseCalendarAux(startDate, []);\n};\n\nexport const computeCurrentSession = (card: LiveCampaign): number => {\n const { details, achievement } = card;\n\n if (details.type === 'flexible') {\n return Math.min(achievement.lastSessionPlayed + 1, details.sessionCount);\n }\n\n const today = new Date();\n\n if (today <= new Date(details.utcStartDate)) {\n return 1;\n }\n\n if (today >= new Date(details.utcEndDate)) {\n return details.sessionCount;\n }\n\n const calendar = computeIntenseCalendar(card);\n\n const todayDate = today.toISOString().slice(0, 10);\n const currentSession = calendar.findIndex((date) => date.toISOString().slice(0, 10) >= todayDate);\n\n if (currentSession === -1) {\n throw new Error('Current session not found');\n }\n\n return currentSession + 1;\n};\n\nexport const checkTodayPlayable = (card: LiveCampaign): boolean => {\n const today = new Date();\n\n const { details } = card;\n\n const startDate = new Date(details.utcStartDate);\n const endDate = new Date(details.utcEndDate);\n\n if (today < startDate || today > endDate) {\n return false;\n }\n\n const jsDay = today.getDay();\n const day = jsDay === 0 ? 7 : jsDay;\n\n if (!details.enabledWeekDays.includes(day)) {\n return false;\n }\n\n if (details.disabledDates.includes(today.toISOString().slice(0, 10))) {\n return false;\n }\n\n return true;\n};\n\nexport const findNextAvailableDate = (\n currentDate: Date,\n endDate: Date,\n enabledWeekDays: number[],\n disabledDates: Date[],\n): Date | null => {\n if (enabledWeekDays.length === 0) return null;\n\n const differenceInDays = Math.floor((endDate.getTime() - currentDate.getTime()) / (1000 * 3600 * 24));\n\n return differenceInDays > 0 &&\n (!enabledWeekDays.includes(currentDate.getDay()) || disabledDates.some((d) => isSameDate(d, currentDate)))\n ? findNextAvailableDate(addDays(currentDate, 1), endDate, enabledWeekDays, disabledDates)\n : currentDate;\n};\n\ntype GetCalendarSessionDatesFromCampaignProps = Pick<\n CampaignDetails,\n 'launchDate' | 'enabledWeekDays' | 'disabledDates' | 'nbSessions'\n> & {\n endDate?: string;\n};\n\nexport const getCalendarSessionDatesFromCampaign = ({\n launchDate,\n enabledWeekDays,\n disabledDates,\n nbSessions,\n endDate,\n}: GetCalendarSessionDatesFromCampaignProps): Record<number, Date> => {\n const calendarDatesBySession = Array.from({ length: nbSessions }).reduce((acc: Record<number, Date>, _, index) => {\n const session = index + 1;\n const lastDate = session > 1 ? addDays(new Date(acc[session - 1]), 1) : new Date(launchDate);\n const formatedEndDate = endDate ? new Date(endDate) : new Date(launchDate);\n\n const nextSessionDate = findNextAvailableDate(lastDate, formatedEndDate, enabledWeekDays, disabledDates);\n\n if (!nextSessionDate) return acc;\n\n return {\n ...acc,\n [session]: nextSessionDate,\n };\n }, {});\n\n return calendarDatesBySession;\n};\n"],"names":["isSameDate","addDays"],"mappings":"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"}
|