@sprucelabs/calendar-utils 36.0.29 → 36.1.1
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/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/types/calendar.types.d.ts +1 -0
- package/build/esm/utilities/RepeatingRuleTextGenerator.d.ts +11 -0
- package/build/esm/utilities/RepeatingRuleTextGenerator.js +51 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +3 -1
- package/build/types/calendar.types.d.ts +1 -0
- package/build/utilities/RepeatingRuleTextGenerator.d.ts +11 -0
- package/build/utilities/RepeatingRuleTextGenerator.js +54 -0
- package/package.json +1 -1
package/build/esm/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { default as eventTimeBlockSchema } from './.spruce/schemas/calendarUtils
|
|
|
17
17
|
export { default as calendarEventLineIconSchema } from './.spruce/schemas/calendarUtils/v2021_05_19/calendarEventLineIcon.schema';
|
|
18
18
|
export { default as DateParser } from './parsing/DateParser';
|
|
19
19
|
export { default as sortTimezoneChoices } from './utilities/sortTimezoneChoices';
|
|
20
|
+
export { default as RepeatingRuleTextGenerator } from './utilities/RepeatingRuleTextGenerator';
|
|
20
21
|
export * from './dates';
|
|
21
22
|
export { SpruceSchemas } from "./.spruce/schemas/schemas.types";
|
|
22
23
|
export * from './constants';
|
package/build/esm/index.js
CHANGED
|
@@ -17,5 +17,6 @@ export { default as eventTimeBlockSchema } from './.spruce/schemas/calendarUtils
|
|
|
17
17
|
export { default as calendarEventLineIconSchema } from './.spruce/schemas/calendarUtils/v2021_05_19/calendarEventLineIcon.schema.js';
|
|
18
18
|
export { default as DateParser } from './parsing/DateParser.js';
|
|
19
19
|
export { default as sortTimezoneChoices } from './utilities/sortTimezoneChoices.js';
|
|
20
|
+
export { default as RepeatingRuleTextGenerator } from './utilities/RepeatingRuleTextGenerator.js';
|
|
20
21
|
export * from './dates.js';
|
|
21
22
|
export * from './constants.js';
|
|
@@ -14,6 +14,7 @@ export type CalendarEvent = SpruceSchemas.CalendarUtils.v2021_05_19.CalendarEven
|
|
|
14
14
|
export type DayOfWeek = NonNullable<CalendarEvent['daysOfWeek']>[number];
|
|
15
15
|
export type TimezoneChoices = typeof timezoneChoices;
|
|
16
16
|
export type TimezoneName = TimezoneChoices[number]['value'];
|
|
17
|
+
export type Repeats = NonNullable<CalendarEvent['repeats']>;
|
|
17
18
|
export type Locale = Pick<LocaleImpl, 'on' | 'getZoneName' | 'offsetMinutesToZoneName' | 'getTimezoneOffsetMinutes' | 'setTimezoneOffsetMinutes' | 'setZoneName' | 'zoneNameToOffsetMinutes'>;
|
|
18
19
|
export type SorterCalendarEvent = {
|
|
19
20
|
id: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CalendarEvent, DateUtil } from '../types/calendar.types';
|
|
2
|
+
export default class RepeatingRuleTextGenerator {
|
|
3
|
+
private unitMap;
|
|
4
|
+
private downMap;
|
|
5
|
+
private dates;
|
|
6
|
+
private constructor();
|
|
7
|
+
static Generator(options: {
|
|
8
|
+
dates: DateUtil;
|
|
9
|
+
}): RepeatingRuleTextGenerator;
|
|
10
|
+
generate(event: Pick<CalendarEvent, 'repeats' | 'interval' | 'daysOfWeek' | 'occurrences' | 'repeatsUntil'>): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { assertOptions } from '@sprucelabs/schema';
|
|
2
|
+
export default class RepeatingRuleTextGenerator {
|
|
3
|
+
constructor(dates) {
|
|
4
|
+
this.unitMap = {
|
|
5
|
+
daily: 'days',
|
|
6
|
+
weekly: 'weeks',
|
|
7
|
+
monthly: 'months',
|
|
8
|
+
};
|
|
9
|
+
this.downMap = {
|
|
10
|
+
sun: 'Sundays',
|
|
11
|
+
mon: 'Mondays',
|
|
12
|
+
tue: 'Tuesdays',
|
|
13
|
+
wed: 'Wednesdays',
|
|
14
|
+
thur: 'Thursdays',
|
|
15
|
+
fri: 'Fridays',
|
|
16
|
+
sat: 'Saturdays',
|
|
17
|
+
};
|
|
18
|
+
this.dates = dates;
|
|
19
|
+
}
|
|
20
|
+
static Generator(options) {
|
|
21
|
+
const { dates } = assertOptions(options, ['dates']);
|
|
22
|
+
return new this(dates);
|
|
23
|
+
}
|
|
24
|
+
generate(event) {
|
|
25
|
+
const { repeats, repeatsUntil, interval, daysOfWeek, occurrences } = event;
|
|
26
|
+
let message = '';
|
|
27
|
+
if (repeats) {
|
|
28
|
+
if (daysOfWeek) {
|
|
29
|
+
message = `Repeats weekly on ${daysOfWeek
|
|
30
|
+
.map((d) => this.downMap[d])
|
|
31
|
+
.join(', ')}`;
|
|
32
|
+
}
|
|
33
|
+
else if ((interval !== null && interval !== void 0 ? interval : 0) > 1) {
|
|
34
|
+
message = `Repeats every ${interval} ${this.unitMap[repeats]}`;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
message = `Repeats ${repeats}`;
|
|
38
|
+
}
|
|
39
|
+
if (occurrences) {
|
|
40
|
+
message += ` for ${occurrences} times.`;
|
|
41
|
+
}
|
|
42
|
+
else if (repeatsUntil) {
|
|
43
|
+
message += ` until ${this.dates.formatDate(repeatsUntil)}.`;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
message += ` forever.`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return message;
|
|
50
|
+
}
|
|
51
|
+
}
|
package/build/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { default as eventTimeBlockSchema } from './.spruce/schemas/calendarUtils
|
|
|
17
17
|
export { default as calendarEventLineIconSchema } from './.spruce/schemas/calendarUtils/v2021_05_19/calendarEventLineIcon.schema';
|
|
18
18
|
export { default as DateParser } from './parsing/DateParser';
|
|
19
19
|
export { default as sortTimezoneChoices } from './utilities/sortTimezoneChoices';
|
|
20
|
+
export { default as RepeatingRuleTextGenerator } from './utilities/RepeatingRuleTextGenerator';
|
|
20
21
|
export * from './dates';
|
|
21
22
|
export { SpruceSchemas } from "./.spruce/schemas/schemas.types";
|
|
22
23
|
export * from './constants';
|
package/build/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.sortTimezoneChoices = exports.DateParser = exports.calendarEventLineIconSchema = exports.eventTimeBlockSchema = exports.eventExclusionDateSchema = exports.calendarEventTargetSchema = exports.calendarEventSchema = exports.calculateEventDurationMinutes = exports.calculateEventDurationMillis = exports.TimezoneChoiceSorter = exports.DateUtilDecorator = exports.LocaleImpl = exports.PeopleSorter = exports.durationUtil = exports.dateUtil = exports.calendarUtil = void 0;
|
|
20
|
+
exports.RepeatingRuleTextGenerator = exports.sortTimezoneChoices = exports.DateParser = exports.calendarEventLineIconSchema = exports.eventTimeBlockSchema = exports.eventExclusionDateSchema = exports.calendarEventTargetSchema = exports.calendarEventSchema = exports.calculateEventDurationMinutes = exports.calculateEventDurationMillis = exports.TimezoneChoiceSorter = exports.DateUtilDecorator = exports.LocaleImpl = exports.PeopleSorter = exports.durationUtil = exports.dateUtil = exports.calendarUtil = void 0;
|
|
21
21
|
var calendar_utility_1 = require("./utilities/calendar.utility");
|
|
22
22
|
Object.defineProperty(exports, "calendarUtil", { enumerable: true, get: function () { return __importDefault(calendar_utility_1).default; } });
|
|
23
23
|
var date_utility_1 = require("./utilities/date.utility");
|
|
@@ -53,5 +53,7 @@ var DateParser_1 = require("./parsing/DateParser");
|
|
|
53
53
|
Object.defineProperty(exports, "DateParser", { enumerable: true, get: function () { return __importDefault(DateParser_1).default; } });
|
|
54
54
|
var sortTimezoneChoices_1 = require("./utilities/sortTimezoneChoices");
|
|
55
55
|
Object.defineProperty(exports, "sortTimezoneChoices", { enumerable: true, get: function () { return __importDefault(sortTimezoneChoices_1).default; } });
|
|
56
|
+
var RepeatingRuleTextGenerator_1 = require("./utilities/RepeatingRuleTextGenerator");
|
|
57
|
+
Object.defineProperty(exports, "RepeatingRuleTextGenerator", { enumerable: true, get: function () { return __importDefault(RepeatingRuleTextGenerator_1).default; } });
|
|
56
58
|
__exportStar(require("./dates"), exports);
|
|
57
59
|
__exportStar(require("./constants"), exports);
|
|
@@ -14,6 +14,7 @@ export type CalendarEvent = SpruceSchemas.CalendarUtils.v2021_05_19.CalendarEven
|
|
|
14
14
|
export type DayOfWeek = NonNullable<CalendarEvent['daysOfWeek']>[number];
|
|
15
15
|
export type TimezoneChoices = typeof timezoneChoices;
|
|
16
16
|
export type TimezoneName = TimezoneChoices[number]['value'];
|
|
17
|
+
export type Repeats = NonNullable<CalendarEvent['repeats']>;
|
|
17
18
|
export type Locale = Pick<LocaleImpl, 'on' | 'getZoneName' | 'offsetMinutesToZoneName' | 'getTimezoneOffsetMinutes' | 'setTimezoneOffsetMinutes' | 'setZoneName' | 'zoneNameToOffsetMinutes'>;
|
|
18
19
|
export type SorterCalendarEvent = {
|
|
19
20
|
id: string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CalendarEvent, DateUtil } from '../types/calendar.types';
|
|
2
|
+
export default class RepeatingRuleTextGenerator {
|
|
3
|
+
private unitMap;
|
|
4
|
+
private downMap;
|
|
5
|
+
private dates;
|
|
6
|
+
private constructor();
|
|
7
|
+
static Generator(options: {
|
|
8
|
+
dates: DateUtil;
|
|
9
|
+
}): RepeatingRuleTextGenerator;
|
|
10
|
+
generate(event: Pick<CalendarEvent, 'repeats' | 'interval' | 'daysOfWeek' | 'occurrences' | 'repeatsUntil'>): string;
|
|
11
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const schema_1 = require("@sprucelabs/schema");
|
|
4
|
+
class RepeatingRuleTextGenerator {
|
|
5
|
+
constructor(dates) {
|
|
6
|
+
this.unitMap = {
|
|
7
|
+
daily: 'days',
|
|
8
|
+
weekly: 'weeks',
|
|
9
|
+
monthly: 'months',
|
|
10
|
+
};
|
|
11
|
+
this.downMap = {
|
|
12
|
+
sun: 'Sundays',
|
|
13
|
+
mon: 'Mondays',
|
|
14
|
+
tue: 'Tuesdays',
|
|
15
|
+
wed: 'Wednesdays',
|
|
16
|
+
thur: 'Thursdays',
|
|
17
|
+
fri: 'Fridays',
|
|
18
|
+
sat: 'Saturdays',
|
|
19
|
+
};
|
|
20
|
+
this.dates = dates;
|
|
21
|
+
}
|
|
22
|
+
static Generator(options) {
|
|
23
|
+
const { dates } = (0, schema_1.assertOptions)(options, ['dates']);
|
|
24
|
+
return new this(dates);
|
|
25
|
+
}
|
|
26
|
+
generate(event) {
|
|
27
|
+
const { repeats, repeatsUntil, interval, daysOfWeek, occurrences } = event;
|
|
28
|
+
let message = '';
|
|
29
|
+
if (repeats) {
|
|
30
|
+
if (daysOfWeek) {
|
|
31
|
+
message = `Repeats weekly on ${daysOfWeek
|
|
32
|
+
.map((d) => this.downMap[d])
|
|
33
|
+
.join(', ')}`;
|
|
34
|
+
}
|
|
35
|
+
else if ((interval !== null && interval !== void 0 ? interval : 0) > 1) {
|
|
36
|
+
message = `Repeats every ${interval} ${this.unitMap[repeats]}`;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
message = `Repeats ${repeats}`;
|
|
40
|
+
}
|
|
41
|
+
if (occurrences) {
|
|
42
|
+
message += ` for ${occurrences} times.`;
|
|
43
|
+
}
|
|
44
|
+
else if (repeatsUntil) {
|
|
45
|
+
message += ` until ${this.dates.formatDate(repeatsUntil)}.`;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
message += ` forever.`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return message;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.default = RepeatingRuleTextGenerator;
|