@sprucelabs/spruce-calendar-components 22.9.12 → 22.10.0

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 (43) hide show
  1. package/build/.spruce/schemas/schemas.types.d.ts +556 -594
  2. package/build/__tests__/support/SpyEventManager.d.ts +10 -1
  3. package/build/__tests__/support/SpyEventManager.js +14 -0
  4. package/build/__tests__/support/SpyRemoteEventStore.d.ts +2 -2
  5. package/build/__tests__/support/SpyRemoteEventStore.js +1 -1
  6. package/build/esm/.spruce/schemas/schemas.types.d.ts +556 -594
  7. package/build/esm/__tests__/support/SpyEventManager.d.ts +10 -1
  8. package/build/esm/__tests__/support/SpyEventManager.js +19 -0
  9. package/build/esm/__tests__/support/SpyRemoteEventStore.d.ts +2 -2
  10. package/build/esm/__tests__/support/SpyRemoteEventStore.js +1 -1
  11. package/build/esm/skillViewControllers/Root.svc.d.ts +1 -1
  12. package/build/esm/skillViewControllers/Root.svc.js +5 -5
  13. package/build/esm/stores/RemoteEventStore.d.ts +2 -2
  14. package/build/esm/toolBelt/states/AbstractCalendarEventToolBeltState.d.ts +6 -8
  15. package/build/esm/toolBelt/states/AbstractCalendarEventToolBeltState.js +1 -1
  16. package/build/esm/types/calendar.types.d.ts +2 -0
  17. package/build/esm/utilities/CalendarEventManager.d.ts +8 -4
  18. package/build/esm/utilities/CalendarEventManager.js +23 -4
  19. package/build/esm/viewControllers/EventControlsCard.vc.d.ts +7 -9
  20. package/build/esm/viewControllers/EventDateTimeTool.vc.d.ts +2 -1
  21. package/build/esm/viewControllers/EventDateTimeTool.vc.js +24 -17
  22. package/build/esm/viewControllers/EventRepeatingTool.vc.d.ts +24 -24
  23. package/build/esm/viewControllers/EventRepeatingTool.vc.js +33 -24
  24. package/build/esm/viewControllers/EventTitleTool.vc.d.ts +15 -16
  25. package/build/esm/viewControllers/EventTitleTool.vc.js +23 -20
  26. package/build/esm/viewControllers/RepeatingControlsList.vc.d.ts +11 -14
  27. package/build/skillViewControllers/Root.svc.d.ts +1 -1
  28. package/build/skillViewControllers/Root.svc.js +5 -5
  29. package/build/stores/RemoteEventStore.d.ts +2 -2
  30. package/build/toolBelt/states/AbstractCalendarEventToolBeltState.d.ts +6 -8
  31. package/build/toolBelt/states/AbstractCalendarEventToolBeltState.js +1 -1
  32. package/build/types/calendar.types.d.ts +2 -0
  33. package/build/utilities/CalendarEventManager.d.ts +8 -4
  34. package/build/utilities/CalendarEventManager.js +23 -4
  35. package/build/viewControllers/EventControlsCard.vc.d.ts +7 -9
  36. package/build/viewControllers/EventDateTimeTool.vc.d.ts +2 -1
  37. package/build/viewControllers/EventDateTimeTool.vc.js +22 -17
  38. package/build/viewControllers/EventRepeatingTool.vc.d.ts +24 -24
  39. package/build/viewControllers/EventRepeatingTool.vc.js +33 -24
  40. package/build/viewControllers/EventTitleTool.vc.d.ts +15 -16
  41. package/build/viewControllers/EventTitleTool.vc.js +23 -20
  42. package/build/viewControllers/RepeatingControlsList.vc.d.ts +11 -14
  43. package/package.json +1 -1
@@ -9,20 +9,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { AbstractViewController, buildForm, } from '@sprucelabs/heartwood-view-controllers';
11
11
  import { buildSchema } from '@sprucelabs/schema';
12
- const formSchema = buildSchema({
13
- id: 'titleSubtitle',
14
- fields: {
15
- title: {
16
- type: 'text',
17
- isRequired: true,
18
- label: 'Title',
19
- },
20
- subtitle: {
21
- type: 'text',
22
- label: 'Subtitle',
23
- },
24
- },
25
- });
26
12
  export default class EventTitleToolViewController extends AbstractViewController {
27
13
  constructor(options) {
28
14
  super(options);
@@ -44,7 +30,8 @@ export default class EventTitleToolViewController extends AbstractViewController
44
30
  });
45
31
  }
46
32
  FormVc() {
47
- var _a, _b, _c, _d, _e, _f;
33
+ var _a, _b;
34
+ const timeBlock = (_b = (_a = this.getContext().event) === null || _a === void 0 ? void 0 : _a.timeBlocks) === null || _b === void 0 ? void 0 : _b[0];
48
35
  return this.Controller('form', buildForm({
49
36
  schema: formSchema,
50
37
  shouldShowSubmitControls: false,
@@ -55,17 +42,19 @@ export default class EventTitleToolViewController extends AbstractViewController
55
42
  },
56
43
  ],
57
44
  values: {
58
- title: (_c = (_b = (_a = this.getContext().event) === null || _a === void 0 ? void 0 : _a.timeBlocks) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.title,
59
- subtitle: (_f = (_e = (_d = this.getContext().event) === null || _d === void 0 ? void 0 : _d.timeBlocks) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.subtitle,
45
+ title: timeBlock === null || timeBlock === void 0 ? void 0 : timeBlock.title,
46
+ subtitle: timeBlock === null || timeBlock === void 0 ? void 0 : timeBlock.subtitle,
60
47
  },
61
48
  }));
62
49
  }
63
50
  handleChangeForm() {
64
51
  return __awaiter(this, void 0, void 0, function* () {
65
- const { event } = this.getContext();
66
- event.timeBlocks[0] = Object.assign(Object.assign({}, event.timeBlocks[0]), this.formVc.getValues());
52
+ const { title, subtitle } = this.formVc.getValues();
67
53
  yield this.updateContextHandler({
68
- event: Object.assign({}, event),
54
+ //@ts-ignore
55
+ 'event.timeBlocks[0].title': title,
56
+ //@ts-ignore
57
+ 'event.timeBlocks[0].subtitle': subtitle,
69
58
  });
70
59
  });
71
60
  }
@@ -85,3 +74,17 @@ export default class EventTitleToolViewController extends AbstractViewController
85
74
  }
86
75
  }
87
76
  EventTitleToolViewController.id = 'event-title-card';
77
+ const formSchema = buildSchema({
78
+ id: 'titleSubtitle',
79
+ fields: {
80
+ title: {
81
+ type: 'text',
82
+ isRequired: true,
83
+ label: 'Title',
84
+ },
85
+ subtitle: {
86
+ type: 'text',
87
+ label: 'Subtitle',
88
+ },
89
+ },
90
+ });
@@ -1,9 +1,4 @@
1
- import { AbstractViewController, CalendarEvent, CalendarViewController, ListViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
- declare type List = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.List;
3
- export declare type RepeatingOptions = Partial<Pick<CalendarEvent, 'repeats' | 'interval' | 'repeatsUntil' | 'occurrences' | 'startDateTimeMs' | 'daysOfWeek' | 'daysOfMonth'> & {
4
- repeatAmount?: 'forever' | 'until' | 'after';
5
- }>;
6
- declare type Row = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ListRow;
1
+ import { AbstractViewController, CalendarEvent, CalendarViewController, List, ListRow, ListViewController, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
7
2
  export default class RepeatingControlsListViewController extends AbstractViewController<List> {
8
3
  static id: string;
9
4
  private listVc;
@@ -15,13 +10,13 @@ export default class RepeatingControlsListViewController extends AbstractViewCon
15
10
  didChangeRepeating: (values: RepeatingOptions) => void;
16
11
  });
17
12
  private ListVc;
18
- renderRows(): Row[];
19
- renderRepeatRow(): Row;
13
+ renderRows(): ListRow[];
14
+ renderRepeatRow(): ListRow;
20
15
  private renderRepeatingControlsRow;
21
- renderRepeatEveryRow(): Row;
22
- renderWeekDayRow(): Row;
23
- renderCalendarRow(): Row;
24
- renderRepeatAmountRow(): Row;
16
+ renderRepeatEveryRow(): ListRow;
17
+ renderWeekDayRow(): ListRow;
18
+ renderCalendarRow(): ListRow;
19
+ renderRepeatAmountRow(): ListRow;
25
20
  private handleRepeatsChange;
26
21
  private resetRows;
27
22
  private changeRepeatingControlsRow;
@@ -45,6 +40,8 @@ export default class RepeatingControlsListViewController extends AbstractViewCon
45
40
  private setCalendarSelectedDatesFromDate;
46
41
  private getSelectedDatesFromDate;
47
42
  private changeCalendarSelectedDate;
48
- render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.List;
43
+ render(): import("@sprucelabs/calendar-utils").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.List;
49
44
  }
50
- export {};
45
+ export declare type RepeatingOptions = Partial<Pick<CalendarEvent, 'repeats' | 'interval' | 'repeatsUntil' | 'occurrences' | 'startDateTimeMs' | 'daysOfWeek' | 'daysOfMonth'> & {
46
+ repeatAmount?: 'forever' | 'until' | 'after';
47
+ }>;
@@ -59,7 +59,7 @@ export default class RootSkillViewController extends AbstractSkillViewController
59
59
  load(options: SkillViewControllerLoadOptions<RootArgs>): Promise<void>;
60
60
  private setupCalendarEventListeners;
61
61
  private handleDidCancelEvent;
62
- private handleDidCreateOrUpdate;
62
+ private handleDidCreateOrUpdateRemoteEvent;
63
63
  private loadEventStore;
64
64
  private loadPeople;
65
65
  private loadScope;
@@ -76,7 +76,7 @@ class RootSkillViewController extends heartwood_view_controllers_1.AbstractSkill
76
76
  });
77
77
  if (confirm) {
78
78
  await this.resetToRootState();
79
- await this.events.removeEvent(eventId);
79
+ await this.events.cancelEvent(eventId);
80
80
  }
81
81
  }
82
82
  async askForUpdateStrategy(cleaned) {
@@ -286,18 +286,18 @@ class RootSkillViewController extends heartwood_view_controllers_1.AbstractSkill
286
286
  }
287
287
  async setupCalendarEventListeners() {
288
288
  await Promise.all([
289
- this.client.on('calendar.did-create-calendar-event::v2021_05_19', this.handleDidCreateOrUpdate.bind(this)),
290
- this.client.on('calendar.did-update-calendar-event::v2021_05_19', this.handleDidCreateOrUpdate.bind(this)),
289
+ this.client.on('calendar.did-create-calendar-event::v2021_05_19', this.handleDidCreateOrUpdateRemoteEvent.bind(this)),
290
+ this.client.on('calendar.did-update-calendar-event::v2021_05_19', this.handleDidCreateOrUpdateRemoteEvent.bind(this)),
291
291
  this.client.on('calendar.did-cancel-calendar-event::v2021_05_19', this.handleDidCancelEvent.bind(this)),
292
292
  ]);
293
293
  }
294
294
  async handleDidCancelEvent({ target }) {
295
295
  const { calendarEventId } = target;
296
296
  if (this.events.hasEvent(calendarEventId)) {
297
- await this.events.removeEvent(calendarEventId, { shouldPersist: false });
297
+ await this.events.cancelEvent(calendarEventId, { shouldPersist: false });
298
298
  }
299
299
  }
300
- async handleDidCreateOrUpdate({ payload, target, }) {
300
+ async handleDidCreateOrUpdateRemoteEvent({ payload, target, }) {
301
301
  const { calendarEvent } = payload;
302
302
  const { locationId } = target;
303
303
  if (calendarEvent.style !== 'draft' && locationId === this.locationId) {
@@ -1,6 +1,6 @@
1
1
  import { SpruceSchemas } from '@sprucelabs/heartwood-view-controllers';
2
2
  import { MercuryClient } from '@sprucelabs/mercury-client';
3
- import { Calendar, CalendarEvent, CalendarEventType, UpdateEvent } from '../types/calendar.types';
3
+ import { Calendar, CalendarEvent, CalendarEventType, CancelEventRecurringOptions, UpdateEvent } from '../types/calendar.types';
4
4
  export default class RemoteEventStoreImpl implements RemoteEventStore {
5
5
  private connectToApi;
6
6
  protected calendarId?: string;
@@ -52,7 +52,7 @@ export interface RemoteEventStore {
52
52
  clearCalendarId(): void;
53
53
  getCalendarId(): string | undefined;
54
54
  waitForPendingSaves(): Promise<void>;
55
- cancelEvent(id: string): Promise<void>;
55
+ cancelEvent(id: string, options?: CancelEventRecurringOptions): Promise<void>;
56
56
  getSchedules(options: GetScheduleOptions): Promise<CalendarEvent[]>;
57
57
  getEventTypes(): Promise<CalendarEventType[]>;
58
58
  getCalendars(): Promise<Calendar[]>;
@@ -1,10 +1,6 @@
1
- import { SpruceSchemas, ToolBeltState, ViewControllerId } from '@sprucelabs/heartwood-view-controllers';
2
- import { CalendarTool, CalendarToolBeltContext, CalendarToolBeltStateMachine, CalendarToolOptions, GetPersonFromEventHandler, UpdateCalendarContextOptions } from '../../types/calendar.types';
1
+ import { ToolBeltState, ViewControllerId } from '@sprucelabs/heartwood-view-controllers';
2
+ import { CalendarTool, CalendarToolBeltContext, CalendarToolBeltStateMachine, CalendarToolOptions, GetPersonFromEventHandler, Tool, UpdateCalendarContextOptions } from '../../types/calendar.types';
3
3
  import EventControlsCardViewController from '../../viewControllers/EventControlsCard.vc';
4
- declare type Tool = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ToolBeltTool;
5
- export declare type AddToolOptions = Omit<Tool, 'card'> & {
6
- cardVcId: ViewControllerId;
7
- };
8
4
  export default abstract class AbstractCalendarEventToolBeltState implements ToolBeltState {
9
5
  abstract id: string;
10
6
  protected sm: CalendarToolBeltStateMachine;
@@ -20,7 +16,7 @@ export default abstract class AbstractCalendarEventToolBeltState implements Tool
20
16
  protected handleClickSave(): Promise<void>;
21
17
  private deselectEvent;
22
18
  private handleDidUpdateContext;
23
- private getContext;
19
+ protected getContext(): CalendarToolBeltContext;
24
20
  clearPendingContextChanges(shouldEmitDidUpdate?: boolean): Promise<void>;
25
21
  addTool(options: AddToolOptions): Promise<CalendarTool>;
26
22
  protected buildVcConstructorOptions(id: string): CalendarToolOptions;
@@ -33,4 +29,6 @@ export default abstract class AbstractCalendarEventToolBeltState implements Tool
33
29
  getControlsVc(): EventControlsCardViewController;
34
30
  destroy(): Promise<void>;
35
31
  }
36
- export {};
32
+ export declare type AddToolOptions = Omit<Tool, 'card'> & {
33
+ cardVcId: ViewControllerId;
34
+ };
@@ -61,7 +61,7 @@ class AbstractCalendarEventToolBeltState {
61
61
  this.controlsVc.handleUpdateContext();
62
62
  }
63
63
  getContext() {
64
- return Object.assign(Object.assign({}, this.sm.getContext()), this.pendingContextUpdates);
64
+ return Object.assign({}, this.sm.getContext(this.pendingContextUpdates));
65
65
  }
66
66
  async clearPendingContextChanges(shouldEmitDidUpdate = true) {
67
67
  this.pendingContextUpdates = {};
@@ -52,6 +52,7 @@ export interface UpdateCalendarContextOptions {
52
52
  shouldPersistContextChangesImmediately?: boolean;
53
53
  }
54
54
  export declare type UpdateCalendarToolBeltContextHandler<Context extends CalendarToolBeltContext = CalendarToolBeltContext> = (context: Partial<Context>, options?: UpdateCalendarContextOptions) => Promise<boolean>;
55
+ export declare type Tool = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ToolBeltTool;
55
56
  export declare type GetCalendarToolBeltContextHandler = () => CalendarToolBeltContext;
56
57
  export declare type GetPersonFromEventHandler = () => Promise<Person | null>;
57
58
  export declare type GetHasPendingContextChangesHandler = () => boolean;
@@ -63,6 +64,7 @@ export interface CalendarToolOptions {
63
64
  getPersonFromEvent: GetPersonFromEventHandler;
64
65
  getHasPendingContextChanges: GetHasPendingContextChangesHandler;
65
66
  }
67
+ export declare type CancelEventRecurringOptions = SpruceSchemas.Calendar.v2021_05_19.CancelCalendarEventEmitPayload;
66
68
  export interface EventWithToolBeltState {
67
69
  getToolBeltState(): ToolBeltState;
68
70
  }
@@ -16,8 +16,8 @@ export default class CalendarEventManager {
16
16
  protected sm: CalendarToolBeltStateMachine<CalendarToolBeltContext>;
17
17
  protected shouldIgnoreNextContextUpdate: boolean;
18
18
  private askForUpdateStrategy;
19
- private dateToUpdate?;
20
- private shouldUpdateAllEventsGoingForward?;
19
+ protected dateToUpdate?: number;
20
+ protected shouldUpdateAllEventsGoingForward?: boolean;
21
21
  private dates;
22
22
  protected prefs: RemotePreferencesStore;
23
23
  private calendars;
@@ -45,7 +45,7 @@ export default class CalendarEventManager {
45
45
  reset(): Promise<void>;
46
46
  restoreEventToDraftOnStateLoadError(): Promise<void>;
47
47
  getVisibleCalendarIds(): string[];
48
- removeEvent(id: string, options?: {
48
+ cancelEvent(id: string, options?: {
49
49
  shouldPersist?: boolean;
50
50
  }): Promise<void>;
51
51
  makeCalendarVisible(calendarId: string): Promise<void>;
@@ -95,7 +95,8 @@ export default class CalendarEventManager {
95
95
  private handleWillUpdateContext;
96
96
  deselectEvent(): Promise<void>;
97
97
  private handleDidUpdateContext;
98
- private saveEvent;
98
+ protected saveEvent(event: SavedEvent): Promise<void>;
99
+ private clearPersistRepeatingOptions;
99
100
  getIsLoaded(): boolean;
100
101
  hasEvent(id: string): boolean;
101
102
  optionallyAskForUpdateRepeatingStrategy(event: UpdateEvent): Promise<boolean>;
@@ -111,4 +112,7 @@ export interface CalendarEventManagerOptions {
111
112
  preferences: RemotePreferencesStore;
112
113
  askForUpdateStrategy: (event: UpdateEvent) => Promise<UpdateRepeatingStrategyWithCancel>;
113
114
  }
115
+ export declare type SavedEvent = Partial<CalendarEvent> & {
116
+ id: string;
117
+ };
114
118
  export {};
@@ -130,21 +130,32 @@ class CalendarEventManager {
130
130
  getVisibleCalendarIds() {
131
131
  return this.visibleCalendarIds;
132
132
  }
133
- async removeEvent(id, options) {
133
+ async cancelEvent(id, options) {
134
134
  var _a;
135
- this.allEvents = this.allEvents.filter((e) => e.id !== id);
135
+ const { shouldPersist = true } = options !== null && options !== void 0 ? options : {};
136
136
  const event = this.calendarVc.getEvent(id);
137
+ if (shouldPersist) {
138
+ const accepted = await this.optionallyAskForUpdateRepeatingStrategy(event);
139
+ if (!accepted) {
140
+ return;
141
+ }
142
+ }
143
+ this.allEvents = this.allEvents.filter((e) => e.id !== id);
137
144
  await this.calendarVc.removeEvent(id);
138
- if ((options === null || options === void 0 ? void 0 : options.shouldPersist) === false) {
145
+ if (!shouldPersist) {
139
146
  return;
140
147
  }
141
148
  try {
142
- await this.events.cancelEvent(event.id);
149
+ await this.events.cancelEvent(event.id, {
150
+ shouldCancelAllEventsGoingForward: this.shouldUpdateAllEventsGoingForward,
151
+ dateToCancel: this.dateToUpdate,
152
+ });
143
153
  }
144
154
  catch (err) {
145
155
  console.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);
146
156
  this.calendarVc.addEvent(Object.assign(Object.assign({}, event), { error: err }));
147
157
  }
158
+ this.clearPersistRepeatingOptions();
148
159
  }
149
160
  async makeCalendarVisible(calendarId) {
150
161
  this.assertValidCalendarId(calendarId);
@@ -305,6 +316,11 @@ class CalendarEventManager {
305
316
  catch (err) {
306
317
  console.error('Updating event in context from root failed because:\n\n', err);
307
318
  }
319
+ this.clearPersistRepeatingOptions();
320
+ }
321
+ clearPersistRepeatingOptions() {
322
+ this.dateToUpdate = undefined;
323
+ this.shouldUpdateAllEventsGoingForward = undefined;
308
324
  }
309
325
  getIsLoaded() {
310
326
  return this.isLoaded;
@@ -314,6 +330,9 @@ class CalendarEventManager {
314
330
  }
315
331
  async optionallyAskForUpdateRepeatingStrategy(event) {
316
332
  var _a;
333
+ if (!event.id) {
334
+ return true;
335
+ }
317
336
  const cleaned = (0, schema_1.normalizeSchemaValues)(heartwood_view_controllers_1.calendarEventSchema, event, {});
318
337
  if (((_a = cleaned.totalInRepeating) !== null && _a !== void 0 ? _a : 0) > 1) {
319
338
  let strategy = await this.askForUpdateStrategy(cleaned);
@@ -1,11 +1,5 @@
1
- import { AbstractViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
1
+ import { AbstractViewController, Card, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
2
  import { CalendarTool, CalendarToolOptions, CancelEventHandler } from '../types/calendar.types';
3
- declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
4
- export interface EventControlsCardOptions extends CalendarToolOptions {
5
- onCancel: () => Promise<void | boolean> | void | boolean;
6
- onCancelEvent: CancelEventHandler;
7
- onSave: () => Promise<void | boolean> | void | boolean;
8
- }
9
3
  export default class EventControlsCardViewController extends AbstractViewController<Card> implements CalendarTool {
10
4
  static id: string;
11
5
  private cardVc;
@@ -25,6 +19,10 @@ export default class EventControlsCardViewController extends AbstractViewControl
25
19
  handleUpdateContext(): void;
26
20
  private shouldFooterBeEnabled;
27
21
  private optionallyDropInCancelButton;
28
- render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
22
+ render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
23
+ }
24
+ export interface EventControlsCardOptions extends CalendarToolOptions {
25
+ onCancel: () => Promise<void | boolean> | void | boolean;
26
+ onCancelEvent: CancelEventHandler;
27
+ onSave: () => Promise<void | boolean> | void | boolean;
29
28
  }
30
- export {};
@@ -1,6 +1,5 @@
1
1
  import { AbstractViewController, CalendarViewController, FormViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
2
  import { CalendarTool, CalendarToolBeltContext, CalendarToolOptions } from '../types/calendar.types';
3
- declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
4
3
  export default class EventDateTimeToolViewController extends AbstractViewController<Card> implements CalendarTool {
5
4
  static id: string;
6
5
  shouldPersistContextChangesImmediately: boolean;
@@ -11,6 +10,7 @@ export default class EventDateTimeToolViewController extends AbstractViewControl
11
10
  private calendarVc;
12
11
  constructor(options: ViewControllerOptions & CalendarToolOptions);
13
12
  private handleSelectDateFromCalendar;
13
+ private promptForNavigationPreference;
14
14
  private getSelectedDate;
15
15
  private CardVc;
16
16
  getCalendarVc(): CalendarViewController;
@@ -38,4 +38,5 @@ export default class EventDateTimeToolViewController extends AbstractViewControl
38
38
  }, false>;
39
39
  render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
40
40
  }
41
+ declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
41
42
  export {};
@@ -3,15 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const calendar_utils_1 = require("@sprucelabs/calendar-utils");
4
4
  const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
5
5
  const schema_1 = require("@sprucelabs/schema");
6
- const schema = (0, schema_1.buildSchema)({
7
- id: ' startDateTime',
8
- fields: {
9
- startDateTime: {
10
- type: 'dateTime',
11
- isRequired: true,
12
- },
13
- },
14
- });
15
6
  class EventDateTimeToolViewController extends heartwood_view_controllers_1.AbstractViewController {
16
7
  constructor(options) {
17
8
  super(options);
@@ -27,6 +18,15 @@ class EventDateTimeToolViewController extends heartwood_view_controllers_1.Abstr
27
18
  this.cardVc = this.CardVc();
28
19
  }
29
20
  async handleSelectDateFromCalendar({ dateTimeMs, }) {
21
+ let shouldBail = await this.promptForNavigationPreference(dateTimeMs);
22
+ if (shouldBail) {
23
+ return;
24
+ }
25
+ const { hour, minute } = calendar_utils_1.dateUtil.splitDate(this.getContext().event.startDateTimeMs);
26
+ await this.formVc.setValue('startDateTime', calendar_utils_1.dateUtil.setTimeOfDay(dateTimeMs, hour, minute, 0, 0));
27
+ this.calendarVc.setSelectedDates([this.getSelectedDate(dateTimeMs)]);
28
+ }
29
+ async promptForNavigationPreference(dateTimeMs) {
30
30
  let shouldBail = false;
31
31
  const formattedDestination = calendar_utils_1.dateUtil.format(dateTimeMs, 'MMM do');
32
32
  const dlg = this.renderInDialog({
@@ -70,15 +70,10 @@ class EventDateTimeToolViewController extends heartwood_view_controllers_1.Abstr
70
70
  },
71
71
  });
72
72
  await dlg.wait();
73
- if (shouldBail) {
74
- return;
75
- }
76
- const { hour, minute } = calendar_utils_1.dateUtil.splitDate(this.getContext().event.startDateTimeMs);
77
- await this.formVc.setValue('startDateTime', calendar_utils_1.dateUtil.setTimeOfDay(dateTimeMs, hour, minute, 0, 0));
78
- this.calendarVc.setSelectedDates([this.getSelectedDate(dateTimeMs)]);
73
+ return shouldBail;
79
74
  }
80
75
  getSelectedDate(dateTimeMs) {
81
- const { year, month, day } = calendar_utils_1.dateUtil.splitDate(dateTimeMs !== null && dateTimeMs !== void 0 ? dateTimeMs : this.getContext().event.startDateTimeMs);
76
+ const { year, month, day } = this.dates.splitDate(dateTimeMs !== null && dateTimeMs !== void 0 ? dateTimeMs : this.getContext().event.startDateTimeMs);
82
77
  return { year, month, day };
83
78
  }
84
79
  CardVc() {
@@ -124,7 +119,8 @@ class EventDateTimeToolViewController extends heartwood_view_controllers_1.Abstr
124
119
  var _a;
125
120
  if (values.startDateTime) {
126
121
  await ((_a = this.updateContext) === null || _a === void 0 ? void 0 : _a.call(this, {
127
- event: Object.assign(Object.assign({}, this.getContext().event), { startDateTimeMs: values.startDateTime }),
122
+ //@ts-ignore
123
+ 'event.startDateTimeMs': values.startDateTime,
128
124
  }));
129
125
  }
130
126
  }
@@ -143,3 +139,12 @@ class EventDateTimeToolViewController extends heartwood_view_controllers_1.Abstr
143
139
  }
144
140
  exports.default = EventDateTimeToolViewController;
145
141
  EventDateTimeToolViewController.id = 'event-date-time-tool';
142
+ const schema = (0, schema_1.buildSchema)({
143
+ id: ' startDateTime',
144
+ fields: {
145
+ startDateTime: {
146
+ type: 'dateTime',
147
+ isRequired: true,
148
+ },
149
+ },
150
+ });
@@ -1,29 +1,7 @@
1
- import { AbstractViewController, FormViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
1
+ import { AbstractViewController, Card, FormViewController, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
2
  import { CalendarTool } from '../index-components';
3
3
  import { CalendarToolBeltContext, CalendarToolOptions } from '../types/calendar.types';
4
4
  import RepeatingControlsListViewController, { RepeatingOptions } from './RepeatingControlsList.vc';
5
- declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
6
- declare const schema: {
7
- id: string;
8
- fields: {
9
- repeat: {
10
- type: "text";
11
- isRequired: true;
12
- defaultValue: string;
13
- };
14
- repeatEvery: {
15
- type: "text";
16
- };
17
- repeatAmount: {
18
- type: "text";
19
- };
20
- repeatUntilMs: {
21
- type: "dateTime";
22
- };
23
- };
24
- };
25
- declare type Schema = typeof schema;
26
- export declare type FormVc = FormViewController<Schema>;
27
5
  export default class EventRepeatingToolViewController extends AbstractViewController<Card> implements CalendarTool {
28
6
  static id: string;
29
7
  private cardVc;
@@ -35,6 +13,7 @@ export default class EventRepeatingToolViewController extends AbstractViewContro
35
13
  handleUpdateContext(_context: CalendarToolBeltContext): void | Promise<void>;
36
14
  private CardVc;
37
15
  private ControlsListVc;
16
+ private handleDidChangeRepeating;
38
17
  private removeExtraRepeatingFields;
39
18
  private FormVc;
40
19
  getControlsListVc(): RepeatingControlsListViewController;
@@ -51,6 +30,27 @@ export default class EventRepeatingToolViewController extends AbstractViewContro
51
30
  };
52
31
  setValues(repeating: RepeatingOptions): void;
53
32
  getCalendarVc(): import("@sprucelabs/heartwood-view-controllers").CalendarViewController | undefined;
54
- render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
33
+ render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
55
34
  }
35
+ declare const schema: {
36
+ id: string;
37
+ fields: {
38
+ repeat: {
39
+ type: "text";
40
+ isRequired: true;
41
+ defaultValue: string;
42
+ };
43
+ repeatEvery: {
44
+ type: "text";
45
+ };
46
+ repeatAmount: {
47
+ type: "text";
48
+ };
49
+ repeatUntilMs: {
50
+ type: "dateTime";
51
+ };
52
+ };
53
+ };
54
+ declare type Schema = typeof schema;
55
+ export declare type FormVc = FormViewController<Schema>;
56
56
  export {};
@@ -2,25 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
4
4
  const schema_1 = require("@sprucelabs/schema");
5
- const schema = (0, schema_1.buildSchema)({
6
- id: 'repeatingSchema',
7
- fields: {
8
- repeat: {
9
- type: 'text',
10
- isRequired: true,
11
- defaultValue: 'doesntRepeat',
12
- },
13
- repeatEvery: {
14
- type: 'text',
15
- },
16
- repeatAmount: {
17
- type: 'text',
18
- },
19
- repeatUntilMs: {
20
- type: 'dateTime',
21
- },
22
- },
23
- });
24
5
  class EventRepeatingToolViewController extends heartwood_view_controllers_1.AbstractViewController {
25
6
  constructor(options) {
26
7
  super(options);
@@ -48,14 +29,23 @@ class EventRepeatingToolViewController extends heartwood_view_controllers_1.Abst
48
29
  return this.Controller('calendar.repeating-controls-list', {
49
30
  repeating: Object.assign({}, this.getEvent()),
50
31
  didChangeRepeating: async (value) => {
51
- var _a;
52
- const cleaned = this.removeExtraRepeatingFields(value);
53
- return (_a = this.updateContextHandler) === null || _a === void 0 ? void 0 : _a.call(this, {
54
- event: Object.assign(Object.assign(Object.assign({}, this.removeExtraRepeatingFields(this.getEvent())), { repeats: undefined, interval: undefined, repeatsUntil: undefined, occurrences: undefined, daysOfWeek: undefined, daysOfMonth: undefined }), cleaned),
55
- });
32
+ const pass = this.handleDidChangeRepeating(value);
33
+ return pass;
56
34
  },
57
35
  });
58
36
  }
37
+ handleDidChangeRepeating(value) {
38
+ var _a;
39
+ const cleaned = this.removeExtraRepeatingFields(value);
40
+ const updates = Object.assign({ repeats: undefined, interval: undefined, repeatsUntil: undefined, occurrences: undefined, daysOfWeek: undefined, daysOfMonth: undefined }, cleaned);
41
+ const keyedUpdates = {};
42
+ Object.keys(updates).forEach((k) => {
43
+ //@ts-ignore
44
+ keyedUpdates[`event.${k}`] = updates[k];
45
+ });
46
+ const pass = (_a = this.updateContextHandler) === null || _a === void 0 ? void 0 : _a.call(this, Object.assign({}, keyedUpdates));
47
+ return pass;
48
+ }
59
49
  removeExtraRepeatingFields(value) {
60
50
  const cleaned = Object.assign({}, value);
61
51
  delete cleaned.repeatAmount;
@@ -95,3 +85,22 @@ class EventRepeatingToolViewController extends heartwood_view_controllers_1.Abst
95
85
  }
96
86
  exports.default = EventRepeatingToolViewController;
97
87
  EventRepeatingToolViewController.id = 'event-repeating-tool';
88
+ const schema = (0, schema_1.buildSchema)({
89
+ id: 'repeatingSchema',
90
+ fields: {
91
+ repeat: {
92
+ type: 'text',
93
+ isRequired: true,
94
+ defaultValue: 'doesntRepeat',
95
+ },
96
+ repeatEvery: {
97
+ type: 'text',
98
+ },
99
+ repeatAmount: {
100
+ type: 'text',
101
+ },
102
+ repeatUntilMs: {
103
+ type: 'dateTime',
104
+ },
105
+ },
106
+ });
@@ -1,6 +1,19 @@
1
- import { AbstractViewController, FormViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
1
+ import { AbstractViewController, Card, FormViewController, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
2
  import { CalendarTool, CalendarToolBeltContext, CalendarToolOptions } from '../types/calendar.types';
3
- declare type Card = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
3
+ export default class EventTitleToolViewController extends AbstractViewController<Card> implements CalendarTool {
4
+ static id: string;
5
+ private cardVc;
6
+ private formVc;
7
+ private getContext;
8
+ private updateContextHandler;
9
+ constructor(options: ViewControllerOptions & CalendarToolOptions);
10
+ private CardVc;
11
+ private FormVc;
12
+ private handleChangeForm;
13
+ handleUpdateContext(context: CalendarToolBeltContext): Promise<void>;
14
+ getFormVc(): FormVc;
15
+ render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
16
+ }
4
17
  declare const formSchema: {
5
18
  id: string;
6
19
  fields: {
@@ -17,18 +30,4 @@ declare const formSchema: {
17
30
  };
18
31
  declare type FormSchema = typeof formSchema;
19
32
  declare type FormVc = FormViewController<FormSchema>;
20
- export default class EventTitleToolViewController extends AbstractViewController<Card> implements CalendarTool {
21
- static id: string;
22
- private cardVc;
23
- private formVc;
24
- private getContext;
25
- private updateContextHandler;
26
- constructor(options: ViewControllerOptions & CalendarToolOptions);
27
- private CardVc;
28
- private FormVc;
29
- private handleChangeForm;
30
- handleUpdateContext(context: CalendarToolBeltContext): Promise<void>;
31
- getFormVc(): FormVc;
32
- render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
33
- }
34
33
  export {};