@sprucelabs/spruce-calendar-components 38.1.6 → 38.1.8
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/__tests__/support/utilities/mixinViewControllersForTests.js +2 -0
- package/build/esm/__tests__/support/utilities/mixinViewControllersForTests.js +2 -0
- package/build/esm/index-components.d.ts +0 -5
- package/build/esm/index-components.js +0 -2
- package/build/esm/tools/VenueSelectionTool.vc.d.ts +23 -0
- package/build/esm/tools/VenueSelectionTool.vc.js +85 -0
- package/build/esm/viewControllers/VenuesList.vc.d.ts +25 -0
- package/build/esm/viewControllers/VenuesList.vc.js +118 -0
- package/build/index-components.d.ts +0 -5
- package/build/index-components.js +1 -4
- package/build/tools/VenueSelectionTool.vc.d.ts +23 -0
- package/build/tools/VenueSelectionTool.vc.js +72 -0
- package/build/viewControllers/VenuesList.vc.d.ts +25 -0
- package/build/viewControllers/VenuesList.vc.js +104 -0
- package/package.json +13 -2
|
@@ -9,6 +9,7 @@ const EventDateTimeTool_vc_1 = __importDefault(require("../../../tools/EventDate
|
|
|
9
9
|
const EventDurationTool_vc_1 = __importDefault(require("../../../tools/EventDurationTool.vc"));
|
|
10
10
|
const EventRepeatingTool_vc_1 = __importDefault(require("../../../tools/EventRepeatingTool.vc"));
|
|
11
11
|
const EventTitleTool_vc_1 = __importDefault(require("../../../tools/EventTitleTool.vc"));
|
|
12
|
+
const VenueSelectionTool_vc_1 = __importDefault(require("../../../tools/VenueSelectionTool.vc"));
|
|
12
13
|
const EventControlsCard_vc_1 = __importDefault(require("../../../viewControllers/EventControlsCard.vc"));
|
|
13
14
|
const RepeatingControlsList_vc_1 = __importDefault(require("../../../viewControllers/RepeatingControlsList.vc"));
|
|
14
15
|
const UniversalCalendarEvent_vc_1 = __importDefault(require("../../../viewControllers/UniversalCalendarEvent.vc"));
|
|
@@ -28,4 +29,5 @@ const vcs = {
|
|
|
28
29
|
['calendar.event-title-tool']: EventTitleTool_vc_1.default,
|
|
29
30
|
['calendar.event-controls-card']: EventControlsCard_vc_1.default,
|
|
30
31
|
['calendar.universal-calendar-event']: UniversalCalendarEvent_vc_1.default,
|
|
32
|
+
['calendar.venue-selection-tool']: VenueSelectionTool_vc_1.default,
|
|
31
33
|
};
|
|
@@ -3,6 +3,7 @@ import EventDateTimeToolViewController from '../../../tools/EventDateTimeTool.vc
|
|
|
3
3
|
import EventDurationToolViewController from '../../../tools/EventDurationTool.vc.js';
|
|
4
4
|
import EventRepeatingToolViewController from '../../../tools/EventRepeatingTool.vc.js';
|
|
5
5
|
import EventTitleToolViewController from '../../../tools/EventTitleTool.vc.js';
|
|
6
|
+
import VenueSelectionToolViewController from '../../../tools/VenueSelectionTool.vc.js';
|
|
6
7
|
import EventControlsCardViewController from '../../../viewControllers/EventControlsCard.vc.js';
|
|
7
8
|
import RepeatingControlsListViewController from '../../../viewControllers/RepeatingControlsList.vc.js';
|
|
8
9
|
import UniversalCalendarEventViewController from '../../../viewControllers/UniversalCalendarEvent.vc.js';
|
|
@@ -22,4 +23,5 @@ const vcs = {
|
|
|
22
23
|
['calendar.event-title-tool']: EventTitleToolViewController,
|
|
23
24
|
['calendar.event-controls-card']: EventControlsCardViewController,
|
|
24
25
|
['calendar.universal-calendar-event']: UniversalCalendarEventViewController,
|
|
26
|
+
['calendar.venue-selection-tool']: VenueSelectionToolViewController,
|
|
25
27
|
};
|
|
@@ -12,7 +12,6 @@ import EventTitleToolViewController from './tools/EventTitleTool.vc';
|
|
|
12
12
|
import VenueSelectionToolViewController from './tools/VenueSelectionTool.vc';
|
|
13
13
|
import EventControlsCardViewController from './viewControllers/EventControlsCard.vc';
|
|
14
14
|
import RepeatingControlsListViewController from './viewControllers/RepeatingControlsList.vc';
|
|
15
|
-
import VenuesListViewController from './viewControllers/VenuesList.vc';
|
|
16
15
|
export { default as calculateCalendarEventDifferences } from './calendar/calculateCalendarEventDifferences';
|
|
17
16
|
export { default as RepeatingCardViewController } from './tools/EventRepeatingTool.vc';
|
|
18
17
|
export * from './tools/EventRepeatingTool.vc';
|
|
@@ -26,8 +25,6 @@ export { default as EventDateTimeToolViewController } from './tools/EventDateTim
|
|
|
26
25
|
export * from './tools/EventDateTimeTool.vc';
|
|
27
26
|
export { default as VenueSelectionToolViewController } from './tools/VenueSelectionTool.vc';
|
|
28
27
|
export * from './tools/VenueSelectionTool.vc';
|
|
29
|
-
export { default as VenuesListViewController } from './viewControllers/VenuesList.vc';
|
|
30
|
-
export * from './viewControllers/VenuesList.vc';
|
|
31
28
|
export { default as EventRepeatingToolViewController } from './tools/EventRepeatingTool.vc';
|
|
32
29
|
export * from './tools/EventRepeatingTool.vc';
|
|
33
30
|
export { default as EventDurationToolViewController } from './tools/EventDurationTool.vc';
|
|
@@ -50,7 +47,6 @@ declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.typ
|
|
|
50
47
|
'calendar.event-title-tool': EventTitleToolViewController;
|
|
51
48
|
'calendar.event-controls-card': EventControlsCardViewController;
|
|
52
49
|
'calendar.venue-selection-tool': VenueSelectionToolViewController;
|
|
53
|
-
'calendar.venues-list': VenuesListViewController;
|
|
54
50
|
}
|
|
55
51
|
interface ViewControllerOptionsMap {
|
|
56
52
|
'calendar.repeating-controls-list': ConstructorParameters<typeof RepeatingControlsListViewController>[0];
|
|
@@ -60,6 +56,5 @@ declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.typ
|
|
|
60
56
|
'calendar.event-repeating-tool': ConstructorParameters<typeof EventRepeatingToolViewController>[0];
|
|
61
57
|
'calendar.event-title-tool': ConstructorParameters<typeof EventTitleToolViewController>[0];
|
|
62
58
|
'calendar.venue-selection-tool': ConstructorParameters<typeof VenueSelectionToolViewController>[0];
|
|
63
|
-
'calendar.venues-list': ConstructorParameters<typeof VenuesListViewController>[0];
|
|
64
59
|
}
|
|
65
60
|
}
|
|
@@ -17,8 +17,6 @@ export { default as EventDateTimeToolViewController } from './tools/EventDateTim
|
|
|
17
17
|
export * from './tools/EventDateTimeTool.vc.js';
|
|
18
18
|
export { default as VenueSelectionToolViewController } from './tools/VenueSelectionTool.vc.js';
|
|
19
19
|
export * from './tools/VenueSelectionTool.vc.js';
|
|
20
|
-
export { default as VenuesListViewController } from './viewControllers/VenuesList.vc.js';
|
|
21
|
-
export * from './viewControllers/VenuesList.vc.js';
|
|
22
20
|
export { default as EventRepeatingToolViewController } from './tools/EventRepeatingTool.vc.js';
|
|
23
21
|
export * from './tools/EventRepeatingTool.vc.js';
|
|
24
22
|
export { default as EventDurationToolViewController } from './tools/EventDurationTool.vc.js';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AbstractViewController, ViewControllerOptions, Card } from '@sprucelabs/heartwood-view-controllers';
|
|
2
|
+
import { CalendarTool, CalendarToolBeltContext, CalendarToolOptions } from '../types/calendar.types';
|
|
3
|
+
import VenuesListViewController from '../viewControllers/VenuesList.vc';
|
|
4
|
+
export default class VenueSelectionToolViewController extends AbstractViewController<Card> implements CalendarTool {
|
|
5
|
+
static id: string;
|
|
6
|
+
private cardVc;
|
|
7
|
+
protected venueListVc: VenuesListViewController;
|
|
8
|
+
private updateContextHandler;
|
|
9
|
+
private getContext;
|
|
10
|
+
private isLoaded;
|
|
11
|
+
constructor(options: ViewControllerOptions & CalendarToolOptions);
|
|
12
|
+
private VenueListVc;
|
|
13
|
+
private get router();
|
|
14
|
+
private CardVc;
|
|
15
|
+
handleUpdateContext(context: CalendarToolBeltContext): Promise<void>;
|
|
16
|
+
load(): Promise<void>;
|
|
17
|
+
private get event();
|
|
18
|
+
private get scope();
|
|
19
|
+
private get context();
|
|
20
|
+
private get venue();
|
|
21
|
+
setCriticalError(): void;
|
|
22
|
+
render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
|
|
23
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
class VenueSelectionToolViewController extends AbstractViewController {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
super(options);
|
|
14
|
+
this.isLoaded = false;
|
|
15
|
+
const { getContext, updateContext } = options;
|
|
16
|
+
this.getContext = getContext;
|
|
17
|
+
this.updateContextHandler = updateContext;
|
|
18
|
+
this.venueListVc = this.VenueListVc();
|
|
19
|
+
this.cardVc = this.CardVc();
|
|
20
|
+
}
|
|
21
|
+
VenueListVc() {
|
|
22
|
+
return this.Controller('calendar.venues-list', {
|
|
23
|
+
router: this.router,
|
|
24
|
+
onSelect: (venue) => __awaiter(this, void 0, void 0, function* () {
|
|
25
|
+
yield this.updateContextHandler({
|
|
26
|
+
'event.venue': venue,
|
|
27
|
+
});
|
|
28
|
+
}),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
get router() {
|
|
32
|
+
return this.context.router;
|
|
33
|
+
}
|
|
34
|
+
CardVc() {
|
|
35
|
+
return this.Controller('card', {
|
|
36
|
+
body: {
|
|
37
|
+
sections: [
|
|
38
|
+
{
|
|
39
|
+
list: this.venueListVc.render(),
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
handleUpdateContext(context) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
+
var _a;
|
|
48
|
+
const provider = (_a = context.event.venue) === null || _a === void 0 ? void 0 : _a.provider;
|
|
49
|
+
if (provider && this.isLoaded) {
|
|
50
|
+
yield this.venueListVc.selectVenue(provider);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
load() {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
var _a;
|
|
57
|
+
const organization = yield this.scope.getCurrentOrganization();
|
|
58
|
+
this.isLoaded = true;
|
|
59
|
+
yield this.venueListVc.load({
|
|
60
|
+
organizationId: organization.id,
|
|
61
|
+
});
|
|
62
|
+
if ((_a = this.venue) === null || _a === void 0 ? void 0 : _a.provider) {
|
|
63
|
+
yield this.venueListVc.selectVenue(this.venue.provider);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
get event() {
|
|
68
|
+
return this.context.event;
|
|
69
|
+
}
|
|
70
|
+
get scope() {
|
|
71
|
+
return this.context.scope;
|
|
72
|
+
}
|
|
73
|
+
get context() {
|
|
74
|
+
return this.getContext();
|
|
75
|
+
}
|
|
76
|
+
get venue() {
|
|
77
|
+
return this.event.venue;
|
|
78
|
+
}
|
|
79
|
+
setCriticalError() { }
|
|
80
|
+
render() {
|
|
81
|
+
return this.cardVc.render();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
VenueSelectionToolViewController.id = 'venue-selection-tool';
|
|
85
|
+
export default VenueSelectionToolViewController;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AbstractViewController, ViewControllerOptions, List, ListViewController, Router } from '@sprucelabs/heartwood-view-controllers';
|
|
2
|
+
import { Venue } from '../types/calendar.types';
|
|
3
|
+
export default class VenuesListViewController extends AbstractViewController<List> {
|
|
4
|
+
static id: string;
|
|
5
|
+
protected listVc: ListViewController;
|
|
6
|
+
private venues;
|
|
7
|
+
protected onSelectHandler?: (venue: Venue) => void;
|
|
8
|
+
private router;
|
|
9
|
+
constructor(options: ViewControllerOptions & VenuesListConstructorOptions);
|
|
10
|
+
private ListVc;
|
|
11
|
+
load(options: VenuesListLoadOptions): Promise<void>;
|
|
12
|
+
private populateList;
|
|
13
|
+
private renderVenueRow;
|
|
14
|
+
selectVenue(provider: string): Promise<void>;
|
|
15
|
+
private handleOnClickJoinUrl;
|
|
16
|
+
private handleChange;
|
|
17
|
+
render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.List;
|
|
18
|
+
}
|
|
19
|
+
export interface VenuesListLoadOptions {
|
|
20
|
+
organizationId: string;
|
|
21
|
+
}
|
|
22
|
+
export interface VenuesListConstructorOptions {
|
|
23
|
+
router: Router;
|
|
24
|
+
onSelect?: (venue: Venue) => void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
class VenuesListViewController extends AbstractViewController {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
super(options);
|
|
14
|
+
this.venues = [];
|
|
15
|
+
const { router, onSelect } = options;
|
|
16
|
+
this.onSelectHandler = onSelect;
|
|
17
|
+
this.router = router;
|
|
18
|
+
this.listVc = this.ListVc();
|
|
19
|
+
}
|
|
20
|
+
ListVc() {
|
|
21
|
+
return this.Controller('list', {
|
|
22
|
+
id: 'venues-list',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
load(options) {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
const { organizationId } = options;
|
|
28
|
+
const client = yield this.connectToApi();
|
|
29
|
+
try {
|
|
30
|
+
const [{ venues }] = yield client.emitAndFlattenResponses('calendar.register-venues::v2021_05_19', {
|
|
31
|
+
target: {
|
|
32
|
+
organizationId,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
this.venues.push(...venues);
|
|
36
|
+
this.populateList();
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
yield this.alert({
|
|
40
|
+
message: `We had trouble loading your venues. Please try again later. Error: ${err.message}`,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
populateList() {
|
|
46
|
+
this.venues.forEach((venue) => this.listVc.addRow(this.renderVenueRow(venue)));
|
|
47
|
+
}
|
|
48
|
+
renderVenueRow(venue) {
|
|
49
|
+
return {
|
|
50
|
+
id: venue.provider,
|
|
51
|
+
cells: [
|
|
52
|
+
{
|
|
53
|
+
checkboxInput: {
|
|
54
|
+
name: 'isSelected',
|
|
55
|
+
value: false,
|
|
56
|
+
onChange: (value) => {
|
|
57
|
+
if (value) {
|
|
58
|
+
this.handleChange(venue);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{ text: { content: venue.label } },
|
|
64
|
+
(venue.joinUrl
|
|
65
|
+
? {
|
|
66
|
+
button: {
|
|
67
|
+
id: `joinUrl`,
|
|
68
|
+
label: venue.label,
|
|
69
|
+
lineIcon: 'link-angle',
|
|
70
|
+
onClick: this.handleOnClickJoinUrl.bind(this, venue.joinUrl),
|
|
71
|
+
},
|
|
72
|
+
}
|
|
73
|
+
: {}),
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
selectVenue(provider) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
yield this.listVc.getRowVc(provider).setValue('isSelected', true);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
handleOnClickJoinUrl(joinUrl) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
yield this.router.redirect(joinUrl);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
handleChange(venue) {
|
|
88
|
+
var _a;
|
|
89
|
+
this.venues.forEach((v) => __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
if (v.provider === venue.provider) {
|
|
91
|
+
if (venue.details) {
|
|
92
|
+
const index = this.listVc
|
|
93
|
+
.getRowVcs()
|
|
94
|
+
.findIndex((r) => r.getId() === v.provider);
|
|
95
|
+
this.listVc.addRow({
|
|
96
|
+
id: 'details',
|
|
97
|
+
atIndex: index + 1,
|
|
98
|
+
cells: [
|
|
99
|
+
{
|
|
100
|
+
text: {
|
|
101
|
+
markdown: venue.details,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
yield this.listVc.getRowVc(v.provider).setValue('isSelected', false);
|
|
110
|
+
}));
|
|
111
|
+
(_a = this.onSelectHandler) === null || _a === void 0 ? void 0 : _a.call(this, venue);
|
|
112
|
+
}
|
|
113
|
+
render() {
|
|
114
|
+
return this.listVc.render();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
VenuesListViewController.id = 'venues-list';
|
|
118
|
+
export default VenuesListViewController;
|
|
@@ -12,7 +12,6 @@ import EventTitleToolViewController from './tools/EventTitleTool.vc';
|
|
|
12
12
|
import VenueSelectionToolViewController from './tools/VenueSelectionTool.vc';
|
|
13
13
|
import EventControlsCardViewController from './viewControllers/EventControlsCard.vc';
|
|
14
14
|
import RepeatingControlsListViewController from './viewControllers/RepeatingControlsList.vc';
|
|
15
|
-
import VenuesListViewController from './viewControllers/VenuesList.vc';
|
|
16
15
|
export { default as calculateCalendarEventDifferences } from './calendar/calculateCalendarEventDifferences';
|
|
17
16
|
export { default as RepeatingCardViewController } from './tools/EventRepeatingTool.vc';
|
|
18
17
|
export * from './tools/EventRepeatingTool.vc';
|
|
@@ -26,8 +25,6 @@ export { default as EventDateTimeToolViewController } from './tools/EventDateTim
|
|
|
26
25
|
export * from './tools/EventDateTimeTool.vc';
|
|
27
26
|
export { default as VenueSelectionToolViewController } from './tools/VenueSelectionTool.vc';
|
|
28
27
|
export * from './tools/VenueSelectionTool.vc';
|
|
29
|
-
export { default as VenuesListViewController } from './viewControllers/VenuesList.vc';
|
|
30
|
-
export * from './viewControllers/VenuesList.vc';
|
|
31
28
|
export { default as EventRepeatingToolViewController } from './tools/EventRepeatingTool.vc';
|
|
32
29
|
export * from './tools/EventRepeatingTool.vc';
|
|
33
30
|
export { default as EventDurationToolViewController } from './tools/EventDurationTool.vc';
|
|
@@ -50,7 +47,6 @@ declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.typ
|
|
|
50
47
|
'calendar.event-title-tool': EventTitleToolViewController;
|
|
51
48
|
'calendar.event-controls-card': EventControlsCardViewController;
|
|
52
49
|
'calendar.venue-selection-tool': VenueSelectionToolViewController;
|
|
53
|
-
'calendar.venues-list': VenuesListViewController;
|
|
54
50
|
}
|
|
55
51
|
interface ViewControllerOptionsMap {
|
|
56
52
|
'calendar.repeating-controls-list': ConstructorParameters<typeof RepeatingControlsListViewController>[0];
|
|
@@ -60,6 +56,5 @@ declare module '@sprucelabs/heartwood-view-controllers/build/types/heartwood.typ
|
|
|
60
56
|
'calendar.event-repeating-tool': ConstructorParameters<typeof EventRepeatingToolViewController>[0];
|
|
61
57
|
'calendar.event-title-tool': ConstructorParameters<typeof EventTitleToolViewController>[0];
|
|
62
58
|
'calendar.venue-selection-tool': ConstructorParameters<typeof VenueSelectionToolViewController>[0];
|
|
63
|
-
'calendar.venues-list': ConstructorParameters<typeof VenuesListViewController>[0];
|
|
64
59
|
}
|
|
65
60
|
}
|
|
@@ -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.peopleToPeopleWithoutSchedules = exports.draftEventGenerator = exports.AbstractCalendarEventToolBeltState = exports.CalendarToolRegistrar = exports.EventDurationToolViewController = exports.EventRepeatingToolViewController = exports.
|
|
20
|
+
exports.peopleToPeopleWithoutSchedules = exports.draftEventGenerator = exports.AbstractCalendarEventToolBeltState = exports.CalendarToolRegistrar = exports.EventDurationToolViewController = exports.EventRepeatingToolViewController = exports.VenueSelectionToolViewController = exports.EventDateTimeToolViewController = exports.EventControlsCardViewController = exports.CalendarViewController = exports.RepeatingControlsListViewController = exports.RepeatingCardViewController = exports.calculateCalendarEventDifferences = exports.SpyEventManager = exports.calendarToolBeltInteractor = exports.CalendarToolTestFactory = exports.CalendarToolBeltStateMachineTestFactory = exports.calendarSkillAssert = void 0;
|
|
21
21
|
var calendarSkillAssert_1 = require("./__tests__/support/utilities/calendarSkillAssert");
|
|
22
22
|
Object.defineProperty(exports, "calendarSkillAssert", { enumerable: true, get: function () { return __importDefault(calendarSkillAssert_1).default; } });
|
|
23
23
|
var CalendarToolBeltStateMachineTestFactory_1 = require("./__tests__/support/CalendarToolBeltStateMachineTestFactory");
|
|
@@ -49,9 +49,6 @@ __exportStar(require("./tools/EventDateTimeTool.vc"), exports);
|
|
|
49
49
|
var VenueSelectionTool_vc_1 = require("./tools/VenueSelectionTool.vc");
|
|
50
50
|
Object.defineProperty(exports, "VenueSelectionToolViewController", { enumerable: true, get: function () { return __importDefault(VenueSelectionTool_vc_1).default; } });
|
|
51
51
|
__exportStar(require("./tools/VenueSelectionTool.vc"), exports);
|
|
52
|
-
var VenuesList_vc_1 = require("./viewControllers/VenuesList.vc");
|
|
53
|
-
Object.defineProperty(exports, "VenuesListViewController", { enumerable: true, get: function () { return __importDefault(VenuesList_vc_1).default; } });
|
|
54
|
-
__exportStar(require("./viewControllers/VenuesList.vc"), exports);
|
|
55
52
|
var EventRepeatingTool_vc_2 = require("./tools/EventRepeatingTool.vc");
|
|
56
53
|
Object.defineProperty(exports, "EventRepeatingToolViewController", { enumerable: true, get: function () { return __importDefault(EventRepeatingTool_vc_2).default; } });
|
|
57
54
|
__exportStar(require("./tools/EventRepeatingTool.vc"), exports);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AbstractViewController, ViewControllerOptions, Card } from '@sprucelabs/heartwood-view-controllers';
|
|
2
|
+
import { CalendarTool, CalendarToolBeltContext, CalendarToolOptions } from '../types/calendar.types';
|
|
3
|
+
import VenuesListViewController from '../viewControllers/VenuesList.vc';
|
|
4
|
+
export default class VenueSelectionToolViewController extends AbstractViewController<Card> implements CalendarTool {
|
|
5
|
+
static id: string;
|
|
6
|
+
private cardVc;
|
|
7
|
+
protected venueListVc: VenuesListViewController;
|
|
8
|
+
private updateContextHandler;
|
|
9
|
+
private getContext;
|
|
10
|
+
private isLoaded;
|
|
11
|
+
constructor(options: ViewControllerOptions & CalendarToolOptions);
|
|
12
|
+
private VenueListVc;
|
|
13
|
+
private get router();
|
|
14
|
+
private CardVc;
|
|
15
|
+
handleUpdateContext(context: CalendarToolBeltContext): Promise<void>;
|
|
16
|
+
load(): Promise<void>;
|
|
17
|
+
private get event();
|
|
18
|
+
private get scope();
|
|
19
|
+
private get context();
|
|
20
|
+
private get venue();
|
|
21
|
+
setCriticalError(): void;
|
|
22
|
+
render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Card;
|
|
23
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
|
|
4
|
+
class VenueSelectionToolViewController extends heartwood_view_controllers_1.AbstractViewController {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
7
|
+
this.isLoaded = false;
|
|
8
|
+
const { getContext, updateContext } = options;
|
|
9
|
+
this.getContext = getContext;
|
|
10
|
+
this.updateContextHandler = updateContext;
|
|
11
|
+
this.venueListVc = this.VenueListVc();
|
|
12
|
+
this.cardVc = this.CardVc();
|
|
13
|
+
}
|
|
14
|
+
VenueListVc() {
|
|
15
|
+
return this.Controller('calendar.venues-list', {
|
|
16
|
+
router: this.router,
|
|
17
|
+
onSelect: async (venue) => {
|
|
18
|
+
await this.updateContextHandler({
|
|
19
|
+
'event.venue': venue,
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
get router() {
|
|
25
|
+
return this.context.router;
|
|
26
|
+
}
|
|
27
|
+
CardVc() {
|
|
28
|
+
return this.Controller('card', {
|
|
29
|
+
body: {
|
|
30
|
+
sections: [
|
|
31
|
+
{
|
|
32
|
+
list: this.venueListVc.render(),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async handleUpdateContext(context) {
|
|
39
|
+
const provider = context.event.venue?.provider;
|
|
40
|
+
if (provider && this.isLoaded) {
|
|
41
|
+
await this.venueListVc.selectVenue(provider);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async load() {
|
|
45
|
+
const organization = await this.scope.getCurrentOrganization();
|
|
46
|
+
this.isLoaded = true;
|
|
47
|
+
await this.venueListVc.load({
|
|
48
|
+
organizationId: organization.id,
|
|
49
|
+
});
|
|
50
|
+
if (this.venue?.provider) {
|
|
51
|
+
await this.venueListVc.selectVenue(this.venue.provider);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
get event() {
|
|
55
|
+
return this.context.event;
|
|
56
|
+
}
|
|
57
|
+
get scope() {
|
|
58
|
+
return this.context.scope;
|
|
59
|
+
}
|
|
60
|
+
get context() {
|
|
61
|
+
return this.getContext();
|
|
62
|
+
}
|
|
63
|
+
get venue() {
|
|
64
|
+
return this.event.venue;
|
|
65
|
+
}
|
|
66
|
+
setCriticalError() { }
|
|
67
|
+
render() {
|
|
68
|
+
return this.cardVc.render();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
VenueSelectionToolViewController.id = 'venue-selection-tool';
|
|
72
|
+
exports.default = VenueSelectionToolViewController;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AbstractViewController, ViewControllerOptions, List, ListViewController, Router } from '@sprucelabs/heartwood-view-controllers';
|
|
2
|
+
import { Venue } from '../types/calendar.types';
|
|
3
|
+
export default class VenuesListViewController extends AbstractViewController<List> {
|
|
4
|
+
static id: string;
|
|
5
|
+
protected listVc: ListViewController;
|
|
6
|
+
private venues;
|
|
7
|
+
protected onSelectHandler?: (venue: Venue) => void;
|
|
8
|
+
private router;
|
|
9
|
+
constructor(options: ViewControllerOptions & VenuesListConstructorOptions);
|
|
10
|
+
private ListVc;
|
|
11
|
+
load(options: VenuesListLoadOptions): Promise<void>;
|
|
12
|
+
private populateList;
|
|
13
|
+
private renderVenueRow;
|
|
14
|
+
selectVenue(provider: string): Promise<void>;
|
|
15
|
+
private handleOnClickJoinUrl;
|
|
16
|
+
private handleChange;
|
|
17
|
+
render(): import("@sprucelabs/heartwood-view-controllers").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.List;
|
|
18
|
+
}
|
|
19
|
+
export interface VenuesListLoadOptions {
|
|
20
|
+
organizationId: string;
|
|
21
|
+
}
|
|
22
|
+
export interface VenuesListConstructorOptions {
|
|
23
|
+
router: Router;
|
|
24
|
+
onSelect?: (venue: Venue) => void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
|
|
4
|
+
class VenuesListViewController extends heartwood_view_controllers_1.AbstractViewController {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super(options);
|
|
7
|
+
this.venues = [];
|
|
8
|
+
const { router, onSelect } = options;
|
|
9
|
+
this.onSelectHandler = onSelect;
|
|
10
|
+
this.router = router;
|
|
11
|
+
this.listVc = this.ListVc();
|
|
12
|
+
}
|
|
13
|
+
ListVc() {
|
|
14
|
+
return this.Controller('list', {
|
|
15
|
+
id: 'venues-list',
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async load(options) {
|
|
19
|
+
const { organizationId } = options;
|
|
20
|
+
const client = await this.connectToApi();
|
|
21
|
+
try {
|
|
22
|
+
const [{ venues }] = await client.emitAndFlattenResponses('calendar.register-venues::v2021_05_19', {
|
|
23
|
+
target: {
|
|
24
|
+
organizationId,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
this.venues.push(...venues);
|
|
28
|
+
this.populateList();
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
await this.alert({
|
|
32
|
+
message: `We had trouble loading your venues. Please try again later. Error: ${err.message}`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
populateList() {
|
|
37
|
+
this.venues.forEach((venue) => this.listVc.addRow(this.renderVenueRow(venue)));
|
|
38
|
+
}
|
|
39
|
+
renderVenueRow(venue) {
|
|
40
|
+
return {
|
|
41
|
+
id: venue.provider,
|
|
42
|
+
cells: [
|
|
43
|
+
{
|
|
44
|
+
checkboxInput: {
|
|
45
|
+
name: 'isSelected',
|
|
46
|
+
value: false,
|
|
47
|
+
onChange: (value) => {
|
|
48
|
+
if (value) {
|
|
49
|
+
this.handleChange(venue);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
{ text: { content: venue.label } },
|
|
55
|
+
(venue.joinUrl
|
|
56
|
+
? {
|
|
57
|
+
button: {
|
|
58
|
+
id: `joinUrl`,
|
|
59
|
+
label: venue.label,
|
|
60
|
+
lineIcon: 'link-angle',
|
|
61
|
+
onClick: this.handleOnClickJoinUrl.bind(this, venue.joinUrl),
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
: {}),
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
async selectVenue(provider) {
|
|
69
|
+
await this.listVc.getRowVc(provider).setValue('isSelected', true);
|
|
70
|
+
}
|
|
71
|
+
async handleOnClickJoinUrl(joinUrl) {
|
|
72
|
+
await this.router.redirect(joinUrl);
|
|
73
|
+
}
|
|
74
|
+
handleChange(venue) {
|
|
75
|
+
this.venues.forEach(async (v) => {
|
|
76
|
+
if (v.provider === venue.provider) {
|
|
77
|
+
if (venue.details) {
|
|
78
|
+
const index = this.listVc
|
|
79
|
+
.getRowVcs()
|
|
80
|
+
.findIndex((r) => r.getId() === v.provider);
|
|
81
|
+
this.listVc.addRow({
|
|
82
|
+
id: 'details',
|
|
83
|
+
atIndex: index + 1,
|
|
84
|
+
cells: [
|
|
85
|
+
{
|
|
86
|
+
text: {
|
|
87
|
+
markdown: venue.details,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
await this.listVc.getRowVc(v.provider).setValue('isSelected', false);
|
|
96
|
+
});
|
|
97
|
+
this.onSelectHandler?.(venue);
|
|
98
|
+
}
|
|
99
|
+
render() {
|
|
100
|
+
return this.listVc.render();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
VenuesListViewController.id = 'venues-list';
|
|
104
|
+
exports.default = VenuesListViewController;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sprucelabs/spruce-calendar-components",
|
|
3
3
|
"description": "Calendar components for working with calendars and Sprucebot.",
|
|
4
|
-
"version": "38.1.
|
|
4
|
+
"version": "38.1.8",
|
|
5
5
|
"skill": {
|
|
6
6
|
"namespace": "calendar"
|
|
7
7
|
},
|
|
@@ -193,7 +193,18 @@
|
|
|
193
193
|
"build/viewControllers/UniversalCalendarEvent.vc.js",
|
|
194
194
|
"build/viewControllers/UniversalCalendarEvent.vc.d.ts",
|
|
195
195
|
"build/esm/viewControllers/UniversalCalendarEvent.vc.js",
|
|
196
|
-
"build/esm/viewControllers/UniversalCalendarEvent.vc.d.ts"
|
|
196
|
+
"build/esm/viewControllers/UniversalCalendarEvent.vc.d.ts",
|
|
197
|
+
|
|
198
|
+
"build/tools/VenueSelectionTool.vc.js",
|
|
199
|
+
"build/tools/VenueSelectionTool.vc.d.ts",
|
|
200
|
+
"build/esm/tools/VenueSelectionTool.vc.js",
|
|
201
|
+
"build/esm/tools/VenueSelectionTool.vc.d.ts",
|
|
202
|
+
|
|
203
|
+
"build/viewControllers/VenuesList.vc.js",
|
|
204
|
+
"build/viewControllers/VenuesList.vc.d.ts",
|
|
205
|
+
"build/esm/viewControllers/VenuesList.vc.js",
|
|
206
|
+
"build/esm/viewControllers/VenuesList.vc.d.ts"
|
|
207
|
+
|
|
197
208
|
],
|
|
198
209
|
"keywords": [],
|
|
199
210
|
"scripts": {
|