@sprucelabs/spruce-calendar-components 20.11.1 → 21.0.4

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.
Files changed (75) hide show
  1. package/build/.spruce/errors/errors.types.d.ts +122 -0
  2. package/build/.spruce/errors/errors.types.js +4 -0
  3. package/build/.spruce/errors/options.types.d.ts +28 -0
  4. package/build/.spruce/errors/options.types.js +2 -0
  5. package/build/constants.d.ts +5 -0
  6. package/build/constants.js +9 -0
  7. package/build/errors/SpruceError.d.ts +5 -0
  8. package/build/errors/SpruceError.js +45 -0
  9. package/build/esm/.spruce/errors/errors.types.d.ts +122 -0
  10. package/build/esm/.spruce/errors/errors.types.js +3 -0
  11. package/build/esm/.spruce/errors/options.types.d.ts +28 -0
  12. package/build/esm/.spruce/errors/options.types.js +1 -0
  13. package/build/esm/constants.d.ts +5 -0
  14. package/build/esm/constants.js +6 -0
  15. package/build/esm/errors/SpruceError.d.ts +5 -0
  16. package/build/esm/errors/SpruceError.js +39 -0
  17. package/build/esm/index-module.d.ts +30 -0
  18. package/build/esm/index-module.js +7 -0
  19. package/build/esm/skillViewControllers/Root.svc.d.ts +73 -0
  20. package/build/esm/skillViewControllers/Root.svc.js +404 -0
  21. package/build/esm/stores/RemotePreferencesStore.d.ts +26 -0
  22. package/build/esm/stores/RemotePreferencesStore.js +85 -0
  23. package/build/esm/toolBelt/CalendarToolTestFactory.d.ts +5 -0
  24. package/build/esm/toolBelt/CalendarToolTestFactory.js +28 -0
  25. package/build/esm/toolBelt/states/PrerequisitesToolBeltState.d.ts +37 -0
  26. package/build/esm/toolBelt/states/PrerequisitesToolBeltState.js +190 -0
  27. package/build/esm/toolBelt/states/RootToolBeltState.d.ts +37 -0
  28. package/build/esm/toolBelt/states/RootToolBeltState.js +122 -0
  29. package/build/esm/toolBelt/states/makeEventTyped.d.ts +2 -0
  30. package/build/esm/toolBelt/states/makeEventTyped.js +8 -0
  31. package/build/esm/types/calendar.types.d.ts +10 -0
  32. package/build/esm/utilities/CalendarEventManager.d.ts +72 -0
  33. package/build/esm/utilities/CalendarEventManager.js +321 -0
  34. package/build/esm/utilities/CalendarPeopleManager.d.ts +56 -0
  35. package/build/esm/utilities/CalendarPeopleManager.js +182 -0
  36. package/build/esm/utilities/calendarShiftGenerator.d.ts +8 -0
  37. package/build/esm/utilities/calendarShiftGenerator.js +24 -0
  38. package/build/esm/viewControllers/CalendarSelectTool.vc.d.ts +28 -0
  39. package/build/esm/viewControllers/CalendarSelectTool.vc.js +103 -0
  40. package/build/esm/viewControllers/DateSelectCard.vc.d.ts +29 -0
  41. package/build/esm/viewControllers/DateSelectCard.vc.js +77 -0
  42. package/build/esm/viewControllers/PersonSelectTool.vc.d.ts +36 -0
  43. package/build/esm/viewControllers/PersonSelectTool.vc.js +156 -0
  44. package/build/esm/viewControllers/SelectUpdateRepeatingStrategyCard.vc.d.ts +18 -0
  45. package/build/esm/viewControllers/SelectUpdateRepeatingStrategyCard.vc.js +85 -0
  46. package/build/index-module.d.ts +30 -0
  47. package/build/index-module.js +32 -0
  48. package/build/skillViewControllers/Root.svc.d.ts +73 -0
  49. package/build/skillViewControllers/Root.svc.js +359 -0
  50. package/build/stores/RemotePreferencesStore.d.ts +26 -0
  51. package/build/stores/RemotePreferencesStore.js +67 -0
  52. package/build/toolBelt/CalendarToolTestFactory.d.ts +5 -0
  53. package/build/toolBelt/CalendarToolTestFactory.js +34 -0
  54. package/build/toolBelt/states/PrerequisitesToolBeltState.d.ts +37 -0
  55. package/build/toolBelt/states/PrerequisitesToolBeltState.js +172 -0
  56. package/build/toolBelt/states/RootToolBeltState.d.ts +37 -0
  57. package/build/toolBelt/states/RootToolBeltState.js +113 -0
  58. package/build/toolBelt/states/makeEventTyped.d.ts +2 -0
  59. package/build/toolBelt/states/makeEventTyped.js +14 -0
  60. package/build/types/calendar.types.d.ts +10 -0
  61. package/build/utilities/CalendarEventManager.d.ts +72 -0
  62. package/build/utilities/CalendarEventManager.js +279 -0
  63. package/build/utilities/CalendarPeopleManager.d.ts +56 -0
  64. package/build/utilities/CalendarPeopleManager.js +163 -0
  65. package/build/utilities/calendarShiftGenerator.d.ts +8 -0
  66. package/build/utilities/calendarShiftGenerator.js +26 -0
  67. package/build/viewControllers/CalendarSelectTool.vc.d.ts +28 -0
  68. package/build/viewControllers/CalendarSelectTool.vc.js +93 -0
  69. package/build/viewControllers/DateSelectCard.vc.d.ts +29 -0
  70. package/build/viewControllers/DateSelectCard.vc.js +69 -0
  71. package/build/viewControllers/PersonSelectTool.vc.d.ts +36 -0
  72. package/build/viewControllers/PersonSelectTool.vc.js +140 -0
  73. package/build/viewControllers/SelectUpdateRepeatingStrategyCard.vc.d.ts +18 -0
  74. package/build/viewControllers/SelectUpdateRepeatingStrategyCard.vc.js +88 -0
  75. package/package.json +99 -26
@@ -0,0 +1,103 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { AbstractViewController, buildActiveRecordCard, } from '@sprucelabs/heartwood-view-controllers';
11
+ import { assertOptions } from '@sprucelabs/schema';
12
+ export default class CalendarSelectCardViewController extends AbstractViewController {
13
+ constructor(options) {
14
+ super(options);
15
+ this.isLoaded = false;
16
+ this.selectedCalendarIds = [];
17
+ const { events } = assertOptions(options, ['events']);
18
+ this.events = events;
19
+ this.selectedCalendarIds = this.events.getVisibleCalendarIds();
20
+ this.activeVc = this.CalendarListVc();
21
+ }
22
+ CalendarListVc() {
23
+ return this.Controller('activeRecordCard', buildActiveRecordCard({
24
+ shouldRenderRowDividers: true,
25
+ columnWidths: ['fill'],
26
+ header: {
27
+ title: 'Calendars',
28
+ },
29
+ noResultsRow: {
30
+ cells: [
31
+ {
32
+ text: { content: "You don't have any calendars yet!" },
33
+ },
34
+ ],
35
+ },
36
+ eventName: 'calendar.list-calendars::v2021_05_19',
37
+ rowTransformer: this.renderCalendarRow.bind(this),
38
+ responseKey: 'calendars',
39
+ }));
40
+ }
41
+ renderCalendarRow(calendar) {
42
+ return {
43
+ id: calendar.id,
44
+ cells: [
45
+ {
46
+ text: { content: calendar.title },
47
+ },
48
+ {
49
+ toggleInput: {
50
+ name: 'isVisible',
51
+ value: this.selectedCalendarIds.indexOf(calendar.id) > -1,
52
+ onChange: (isVisible) => __awaiter(this, void 0, void 0, function* () {
53
+ this.changePromise = this.events.setCalendarVisibility(calendar.id, isVisible);
54
+ return this.changePromise;
55
+ }),
56
+ },
57
+ },
58
+ ],
59
+ };
60
+ }
61
+ waitForChanges() {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ yield this.changePromise;
64
+ });
65
+ }
66
+ getActiveRecordCardVc() {
67
+ return this.activeVc;
68
+ }
69
+ getListVc() {
70
+ return this.activeVc.getListVc();
71
+ }
72
+ getIsLoaded() {
73
+ return this.isLoaded;
74
+ }
75
+ getSelectedCalendarIds() {
76
+ const records = this.activeVc.getRecords();
77
+ const ids = [];
78
+ for (const calendar of records) {
79
+ if (this.getListVc().getRowVc(calendar.id).getValue('isVisible')) {
80
+ ids.push(calendar.id);
81
+ }
82
+ }
83
+ return ids;
84
+ }
85
+ load(options) {
86
+ return __awaiter(this, void 0, void 0, function* () {
87
+ assertOptions(options, ['scope']);
88
+ const { scope } = options;
89
+ const org = yield scope.getCurrentOrganization();
90
+ if (org) {
91
+ this.activeVc.setTarget({
92
+ organizationId: org === null || org === void 0 ? void 0 : org.id,
93
+ });
94
+ }
95
+ yield this.activeVc.load();
96
+ this.isLoaded = true;
97
+ });
98
+ }
99
+ render() {
100
+ return this.activeVc.render();
101
+ }
102
+ }
103
+ CalendarSelectCardViewController.id = 'calendar-select-tool';
@@ -0,0 +1,29 @@
1
+ import { AbstractViewController, CalendarViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
+ declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
3
+ declare type DateSelectHandler = (dateTimeMs: number) => void | Promise<void>;
4
+ export interface DateSelectOptions {
5
+ onSelectDate: DateSelectHandler;
6
+ startDate: number;
7
+ selectedDate?: {
8
+ year: number;
9
+ month: number;
10
+ day: number;
11
+ };
12
+ }
13
+ export default class DateSelectCardViewController extends AbstractViewController<Card> {
14
+ static id: string;
15
+ private cardVc;
16
+ private calendarVc;
17
+ private dateSelectHandler;
18
+ constructor(options: ViewControllerOptions & DateSelectOptions);
19
+ getStartDate(): number | null | undefined;
20
+ setStartDate(startDate: number): void;
21
+ private CalendarVc;
22
+ private handleDateSelect;
23
+ private CardVc;
24
+ setSelectedDate(year: number, month: number, day: number): void;
25
+ getSelectedDate(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.CalendarSelectedDate;
26
+ getCalendarVc(): CalendarViewController;
27
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
28
+ }
29
+ export {};
@@ -0,0 +1,77 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { dateUtil } from '@sprucelabs/calendar-utils';
11
+ import { AbstractViewController, } from '@sprucelabs/heartwood-view-controllers';
12
+ import { assertOptions } from '@sprucelabs/schema';
13
+ export default class DateSelectCardViewController extends AbstractViewController {
14
+ constructor(options) {
15
+ super(options);
16
+ const { onSelectDate, startDate, selectedDate } = assertOptions(options, [
17
+ 'onSelectDate',
18
+ 'startDate',
19
+ ]);
20
+ this.dateSelectHandler = onSelectDate;
21
+ this.calendarVc = this.CalendarVc({
22
+ startDate,
23
+ selectedDates: selectedDate ? [selectedDate] : [],
24
+ });
25
+ this.cardVc = this.CardVc();
26
+ }
27
+ getStartDate() {
28
+ return this.calendarVc.getStartDate();
29
+ }
30
+ setStartDate(startDate) {
31
+ this.calendarVc.setStartDate(startDate);
32
+ }
33
+ CalendarVc(options) {
34
+ return this.Controller('calendar', Object.assign({ view: 'month', onClick: ({ dateTimeMs }) => this.handleDateSelect(dateTimeMs), selectedDates: [] }, options));
35
+ }
36
+ handleDateSelect(dateTimeMs) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const { year, month, day } = dateUtil.splitDate(dateTimeMs);
39
+ yield this.calendarVc.renderOnce(() => {
40
+ this.calendarVc.setStartDate(dateTimeMs);
41
+ this.calendarVc.clearSelectedDates();
42
+ this.calendarVc.selectDate(year, month, day);
43
+ });
44
+ yield this.dateSelectHandler(dateTimeMs !== null && dateTimeMs !== void 0 ? dateTimeMs : 0);
45
+ });
46
+ }
47
+ CardVc() {
48
+ return this.Controller('card', {
49
+ body: {
50
+ sections: [
51
+ {
52
+ calendar: this.calendarVc.render(),
53
+ },
54
+ ],
55
+ },
56
+ });
57
+ }
58
+ setSelectedDate(year, month, day) {
59
+ this.calendarVc.setSelectedDates([
60
+ {
61
+ year,
62
+ month,
63
+ day,
64
+ },
65
+ ]);
66
+ }
67
+ getSelectedDate() {
68
+ return this.calendarVc.getSelectedDates()[0];
69
+ }
70
+ getCalendarVc() {
71
+ return this.calendarVc;
72
+ }
73
+ render() {
74
+ return this.cardVc.render();
75
+ }
76
+ }
77
+ DateSelectCardViewController.id = 'date-select-card';
@@ -0,0 +1,36 @@
1
+ import { AbstractViewController, SpruceSchemas, ViewControllerOptions, ButtonBarViewController, Card, ListViewController } from '@sprucelabs/heartwood-view-controllers';
2
+ import CalendarPeopleManager from '../utilities/CalendarPeopleManager';
3
+ export default class PersonSelectToolViewController extends AbstractViewController<Card> {
4
+ static id: string;
5
+ private shouldUpdateVisibilityOnToggleChange;
6
+ private updatePromise?;
7
+ private get visiblePeopleIds();
8
+ private isLoaded;
9
+ private get loggedInPersonId();
10
+ private cardVc;
11
+ private listVc;
12
+ private modeButtonBarVc;
13
+ private get mode();
14
+ private people;
15
+ constructor(options: ViewControllerOptions & PersonSelectCardOptions);
16
+ private CardVc;
17
+ private ModeButtonBarVc;
18
+ waitForSave(): Promise<void | undefined>;
19
+ private ListVc;
20
+ private renderRow;
21
+ private handleChangeMode;
22
+ getModeButtonBar(): ButtonBarViewController;
23
+ load(): Promise<void>;
24
+ private handlePeopleUpdated;
25
+ getListVc(): ListViewController;
26
+ getMode(): PersonMode;
27
+ setMode(mode: PersonMode): Promise<void>;
28
+ getIsLoaded(): boolean;
29
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
30
+ }
31
+ export declare type PersonVisibilityToggleHandler = (person: SpruceSchemas.Spruce.v2020_07_22.Person, isVisible: boolean) => void;
32
+ export declare type PersonVisibilytModeToggleHandler = (mode: PersonMode) => Promise<void> | void;
33
+ export declare type PersonMode = 'me' | 'custom' | 'working';
34
+ export interface PersonSelectCardOptions {
35
+ people: CalendarPeopleManager;
36
+ }
@@ -0,0 +1,156 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { AbstractViewController, } from '@sprucelabs/heartwood-view-controllers';
11
+ import { assertOptions } from '@sprucelabs/schema';
12
+ export default class PersonSelectToolViewController extends AbstractViewController {
13
+ constructor(options) {
14
+ super(options);
15
+ this.shouldUpdateVisibilityOnToggleChange = true;
16
+ this.isLoaded = false;
17
+ const { people } = assertOptions(options, ['people']);
18
+ this.people = people;
19
+ this.listVc = this.ListVc();
20
+ this.modeButtonBarVc = this.ModeButtonBarVc();
21
+ this.cardVc = this.CardVc();
22
+ }
23
+ get visiblePeopleIds() {
24
+ return this.people.getVisiblePeople().map((p) => p.id);
25
+ }
26
+ get loggedInPersonId() {
27
+ var _a;
28
+ return (_a = this.people.getLoggedInPerson()) === null || _a === void 0 ? void 0 : _a.id;
29
+ }
30
+ get mode() {
31
+ return this.people.getVisibilityMode();
32
+ }
33
+ CardVc() {
34
+ return this.Controller('card', {
35
+ header: {
36
+ title: 'People',
37
+ },
38
+ body: {
39
+ sections: [
40
+ {
41
+ buttonBar: this.modeButtonBarVc.render(),
42
+ },
43
+ {
44
+ list: this.listVc.render(),
45
+ shouldBePadded: false,
46
+ },
47
+ ],
48
+ },
49
+ });
50
+ }
51
+ ModeButtonBarVc() {
52
+ return this.Controller('buttonBar', {
53
+ selected: [this.mode],
54
+ onSelectionChange: this.handleChangeMode.bind(this),
55
+ buttons: [
56
+ {
57
+ id: 'custom',
58
+ label: 'Custom',
59
+ lineIcon: 'users',
60
+ },
61
+ {
62
+ id: 'working',
63
+ label: 'Working',
64
+ lineIcon: 'clipboard',
65
+ },
66
+ {
67
+ id: 'me',
68
+ label: 'Me',
69
+ lineIcon: 'user',
70
+ },
71
+ ],
72
+ });
73
+ }
74
+ waitForSave() {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ return this.updatePromise;
77
+ });
78
+ }
79
+ ListVc() {
80
+ return this.Controller('list', {
81
+ columnWidths: ['fill'],
82
+ rows: this.people.getTeam().map((p) => this.renderRow(p)),
83
+ });
84
+ }
85
+ renderRow(person) {
86
+ return {
87
+ id: person.id,
88
+ cells: [
89
+ {
90
+ text: {
91
+ content: person.id === this.loggedInPersonId ? 'You' : person.casualName,
92
+ },
93
+ },
94
+ {
95
+ toggleInput: {
96
+ name: 'isVisible',
97
+ value: !!this.visiblePeopleIds.find((id) => id === person.id),
98
+ onChange: (value) => __awaiter(this, void 0, void 0, function* () {
99
+ if (this.shouldUpdateVisibilityOnToggleChange) {
100
+ this.updatePromise = this.people.setPersonVisibility(person.id, value !== null && value !== void 0 ? value : false);
101
+ }
102
+ }),
103
+ },
104
+ },
105
+ ],
106
+ };
107
+ }
108
+ handleChangeMode() {
109
+ return __awaiter(this, void 0, void 0, function* () {
110
+ yield this.people.setVisibilityMode(this.getMode());
111
+ });
112
+ }
113
+ getModeButtonBar() {
114
+ return this.modeButtonBarVc;
115
+ }
116
+ load() {
117
+ return __awaiter(this, void 0, void 0, function* () {
118
+ this.isLoaded = true;
119
+ yield this.people.on('did-update', this.handlePeopleUpdated.bind(this));
120
+ });
121
+ }
122
+ handlePeopleUpdated() {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ if (this.getMode() !== this.people.getVisibilityMode()) {
125
+ yield this.setMode(this.people.getVisibilityMode());
126
+ }
127
+ const rows = this.listVc.getRowVcs();
128
+ const visiblePeople = this.people.getVisiblePeople().map((p) => p.id);
129
+ this.shouldUpdateVisibilityOnToggleChange = false;
130
+ yield Promise.all(rows.map((row) => __awaiter(this, void 0, void 0, function* () {
131
+ const shouldBeSelected = visiblePeople.indexOf(row.getId()) > -1;
132
+ yield row.setValue('isVisible', shouldBeSelected);
133
+ })));
134
+ this.shouldUpdateVisibilityOnToggleChange = true;
135
+ });
136
+ }
137
+ getListVc() {
138
+ return this.listVc;
139
+ }
140
+ getMode() {
141
+ const [mode] = this.modeButtonBarVc.getSelectedButtons();
142
+ return mode;
143
+ }
144
+ setMode(mode) {
145
+ return __awaiter(this, void 0, void 0, function* () {
146
+ yield this.modeButtonBarVc.selectButtons([mode]);
147
+ });
148
+ }
149
+ getIsLoaded() {
150
+ return this.isLoaded;
151
+ }
152
+ render() {
153
+ return this.cardVc.render();
154
+ }
155
+ }
156
+ PersonSelectToolViewController.id = 'person-select-tool';
@@ -0,0 +1,18 @@
1
+ import { AbstractViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
+ import { CalendarEvent, UpdateRepeatingStrategyWithCancel } from '../types/calendar.types';
3
+ export default class SelectUpdateRepeatingStrategyCardViewController extends AbstractViewController<Card> {
4
+ static id: string;
5
+ private cardVc;
6
+ private event;
7
+ private onSelectStrategy;
8
+ constructor(options: ViewControllerOptions & SelectUpdateRepeatingStrategyOptions);
9
+ private CardVc;
10
+ getEvent(): CalendarEvent;
11
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
12
+ }
13
+ declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
14
+ export interface SelectUpdateRepeatingStrategyOptions {
15
+ event: CalendarEvent;
16
+ onSelectStrategy: (strategy: UpdateRepeatingStrategyWithCancel) => Promise<void> | void;
17
+ }
18
+ export {};
@@ -0,0 +1,85 @@
1
+ import { AbstractViewController, } from '@sprucelabs/heartwood-view-controllers';
2
+ import { assertOptions } from '@sprucelabs/schema';
3
+ import { randomUtil } from '@sprucelabs/spruce-skill-utils';
4
+ export default class SelectUpdateRepeatingStrategyCardViewController extends AbstractViewController {
5
+ constructor(options) {
6
+ super(options);
7
+ assertOptions(options, ['event', 'onSelectStrategy']);
8
+ this.onSelectStrategy = options.onSelectStrategy;
9
+ this.event = options.event;
10
+ this.cardVc = this.CardVc();
11
+ }
12
+ CardVc() {
13
+ var _a;
14
+ const buttons = [
15
+ {
16
+ id: 'only-this-one',
17
+ label: 'Update only this event',
18
+ },
19
+ ];
20
+ if (((_a = this.event.nthInRepeating) !== null && _a !== void 0 ? _a : 0) > 0) {
21
+ buttons.push({
22
+ id: 'all-going-forward',
23
+ label: 'Update this and all going forward',
24
+ });
25
+ }
26
+ buttons.push({
27
+ id: 'all',
28
+ label: 'Update all events',
29
+ });
30
+ buttons.forEach((button) => {
31
+ button.onClick = () => this.onSelectStrategy(button.id);
32
+ });
33
+ return this.Controller('card', {
34
+ header: {
35
+ title: `How do you want to update?`,
36
+ subtitle: `This is the ${this.event.nthInRepeating
37
+ ? ordinal_suffix_of(this.event.nthInRepeating)
38
+ : 'first'} of ${this.event.activeUntilDate
39
+ ? this.event.totalInRepeating
40
+ : randomUtil.rand([
41
+ 'as far as the eye can see!',
42
+ 'pretty much forever!',
43
+ 'unlimited events.',
44
+ 'eternity!',
45
+ ])}`,
46
+ },
47
+ body: {
48
+ sections: [
49
+ {
50
+ buttons,
51
+ },
52
+ ],
53
+ },
54
+ footer: {
55
+ buttons: [
56
+ {
57
+ id: 'cancel',
58
+ label: 'Cancel',
59
+ onClick: () => this.onSelectStrategy('cancel'),
60
+ },
61
+ ],
62
+ },
63
+ });
64
+ }
65
+ getEvent() {
66
+ return this.event;
67
+ }
68
+ render() {
69
+ return this.cardVc.render();
70
+ }
71
+ }
72
+ SelectUpdateRepeatingStrategyCardViewController.id = 'select-update-repeating-strategy-card';
73
+ function ordinal_suffix_of(i) {
74
+ let j = i % 10, k = i % 100;
75
+ if (j == 1 && k != 11) {
76
+ return i + 'st';
77
+ }
78
+ if (j == 2 && k != 12) {
79
+ return i + 'nd';
80
+ }
81
+ if (j == 3 && k != 13) {
82
+ return i + 'rd';
83
+ }
84
+ return i + 'th';
85
+ }
@@ -0,0 +1,30 @@
1
+ export { default as calendarAssert } from './__tests__/support/utilities/calendarAssert';
2
+ export { default as calendarSkillAssert } from './__tests__/support/utilities/calendarSkillAssert';
3
+ export { default as CalendarToolBeltStateMachineTestFactory } from './__tests__/support/CalendarToolBeltStateMachineTestFactory';
4
+ export { default as CalendarToolTestFactory } from './toolBelt/CalendarToolTestFactory';
5
+ export * from './toolBelt/CalendarToolTestFactory';
6
+ export { default as calendarToolBeltInteractor } from './__tests__/support/utilities/calendarToolBeltInteractor';
7
+ import CalendarViewController from './viewControllers/Calendar.vc';
8
+ import EventControlsCardViewController from './viewControllers/EventControlsCard.vc';
9
+ import EventDateTimeToolViewController from './viewControllers/EventDateTimeTool.vc';
10
+ import EventRepeatingToolViewController from './viewControllers/EventRepeatingTool.vc';
11
+ import EventTitleToolViewController from './viewControllers/EventTitleTool.vc';
12
+ import RepeatingControlsListViewController from './viewControllers/RepeatingControlsList.vc';
13
+ export * from './index-components';
14
+ declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.types' {
15
+ interface ViewControllerMap {
16
+ 'calendar.repeating-controls-list': RepeatingControlsListViewController;
17
+ 'calendar.calendar': CalendarViewController;
18
+ 'calendar.event-date-time-tool': EventDateTimeToolViewController;
19
+ 'calendar.event-repeating-tool': EventRepeatingToolViewController;
20
+ 'calendar.event-title-tool': EventTitleToolViewController;
21
+ 'calendar.event-controls-card': EventControlsCardViewController;
22
+ }
23
+ interface ViewControllerOptionsMap {
24
+ 'calendar.repeating-controls-list': ConstructorParameters<typeof RepeatingControlsListViewController>[0];
25
+ 'calendar.calendar': ConstructorParameters<typeof CalendarViewController>[0];
26
+ 'calendar.event-date-time-tool': ConstructorParameters<typeof EventDateTimeToolViewController>[0];
27
+ 'calendar.event-repeating-tool': ConstructorParameters<typeof EventRepeatingToolViewController>[0];
28
+ 'calendar.event-title-tool': ConstructorParameters<typeof EventTitleToolViewController>[0];
29
+ }
30
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.calendarToolBeltInteractor = exports.CalendarToolTestFactory = exports.CalendarToolBeltStateMachineTestFactory = exports.calendarSkillAssert = exports.calendarAssert = void 0;
21
+ var calendarAssert_1 = require("./__tests__/support/utilities/calendarAssert");
22
+ Object.defineProperty(exports, "calendarAssert", { enumerable: true, get: function () { return __importDefault(calendarAssert_1).default; } });
23
+ var calendarSkillAssert_1 = require("./__tests__/support/utilities/calendarSkillAssert");
24
+ Object.defineProperty(exports, "calendarSkillAssert", { enumerable: true, get: function () { return __importDefault(calendarSkillAssert_1).default; } });
25
+ var CalendarToolBeltStateMachineTestFactory_1 = require("./__tests__/support/CalendarToolBeltStateMachineTestFactory");
26
+ Object.defineProperty(exports, "CalendarToolBeltStateMachineTestFactory", { enumerable: true, get: function () { return __importDefault(CalendarToolBeltStateMachineTestFactory_1).default; } });
27
+ var CalendarToolTestFactory_1 = require("./toolBelt/CalendarToolTestFactory");
28
+ Object.defineProperty(exports, "CalendarToolTestFactory", { enumerable: true, get: function () { return __importDefault(CalendarToolTestFactory_1).default; } });
29
+ __exportStar(require("./toolBelt/CalendarToolTestFactory"), exports);
30
+ var calendarToolBeltInteractor_1 = require("./__tests__/support/utilities/calendarToolBeltInteractor");
31
+ Object.defineProperty(exports, "calendarToolBeltInteractor", { enumerable: true, get: function () { return __importDefault(calendarToolBeltInteractor_1).default; } });
32
+ __exportStar(require("./index-components"), exports);
@@ -0,0 +1,73 @@
1
+ import { AbstractSkillViewController, SkillViewControllerLoadOptions, SpruceSchemas, ViewControllerOptions, ScopeFlag } from '@sprucelabs/heartwood-view-controllers';
2
+ import { RemoteViewControllerFactory } from '@sprucelabs/spruce-heartwood-utils';
3
+ import RemotePreferencesStore from '../stores/RemotePreferencesStore';
4
+ import { CalendarToolBeltStateMachine } from '../types/calendar.types';
5
+ import { CalendarEventManager } from '../utilities/CalendarEventManager';
6
+ import CalendarPeopleManager from '../utilities/CalendarPeopleManager';
7
+ import CalendarViewController from '../viewControllers/Calendar.vc';
8
+ export default class RootSkillViewController extends AbstractSkillViewController<Args> {
9
+ static id: string;
10
+ private calendarVc;
11
+ private toolBeltVc;
12
+ private person?;
13
+ private sm;
14
+ private toolBeltStates;
15
+ private remoteEventStore;
16
+ private selectingTypePromise?;
17
+ private selectingTypeResolve?;
18
+ private client;
19
+ private organizationId;
20
+ private locationId;
21
+ private transitionPromise?;
22
+ private loadEventsPromise?;
23
+ protected events: CalendarEventManager;
24
+ protected preferences: RemotePreferencesStore;
25
+ protected people: CalendarPeopleManager;
26
+ protected remoteVc: RemoteViewControllerFactory;
27
+ constructor(options: ViewControllerOptions);
28
+ getScope: () => ScopeFlag[];
29
+ private createToolBeltStates;
30
+ private ToolBeltStateMachine;
31
+ private handleCancelEvent;
32
+ private askForUpdateStrategy;
33
+ private handleSelectEventType;
34
+ private restoreDraftAfterStateLoadError;
35
+ private transitionToStateFromDraftEvent;
36
+ private transitionToolBeltForEvent;
37
+ private transitionTo;
38
+ waitUntilDoneSaving(): Promise<void>;
39
+ private handleSelectCalendar;
40
+ getToolBeltStateMachine(): CalendarToolBeltStateMachine<import("../types/calendar.types").CalendarToolBeltContext>;
41
+ getToolBeltStateId(): string | undefined;
42
+ private CalendarVc;
43
+ private handleChangeDate;
44
+ private makeDateSelectMatchSelectedDateFromCalendar;
45
+ private setSelectedDateInDateSelectVc;
46
+ private getStartDate;
47
+ private handleDeselectEvent;
48
+ private resetToRootState;
49
+ private ToolBeltVc;
50
+ private handleClickEvent;
51
+ private handleDraftEventAdded;
52
+ private handleEventSwapped;
53
+ private handleDropEvent;
54
+ private handleDraftEventRemoved;
55
+ getPersonSelectVc(): import("../viewControllers/PersonSelectTool.vc").default;
56
+ renderToolBelt(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ToolBelt;
57
+ getCalendarSelectVc(): import("../viewControllers/CalendarSelectTool.vc").default | undefined;
58
+ getCalendarVc(): CalendarViewController;
59
+ load(options: SkillViewControllerLoadOptions<Args>): Promise<void>;
60
+ private syncPeopleOnCalendar;
61
+ private syncOffsetWithLocale;
62
+ private loadEvents;
63
+ private _loadEvents;
64
+ protected transitionToRoot(): Promise<void>;
65
+ private loadLoggedInPerson;
66
+ private getVisibleEvents;
67
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.SkillView;
68
+ }
69
+ export declare type CalendarPerson = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.CalendarPerson;
70
+ interface Args {
71
+ startDate?: number;
72
+ }
73
+ export {};