@idea-ionic/agenda 8.5.12 → 8.6.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.
- package/fesm2022/idea-ionic-agenda.mjs +27 -27
- package/fesm2022/idea-ionic-agenda.mjs.map +1 -1
- package/index.d.ts +417 -3
- package/package.json +15 -17
- package/esm2022/idea-ionic-agenda.mjs +0 -5
- package/esm2022/public-api.mjs +0 -8
- package/esm2022/src/agenda.component.mjs +0 -323
- package/esm2022/src/agenda.module.mjs +0 -53
- package/esm2022/src/calendar.component.mjs +0 -110
- package/esm2022/src/calendarCreation.component.mjs +0 -121
- package/esm2022/src/calendarItem.component.mjs +0 -120
- package/esm2022/src/calendars.service.mjs +0 -212
- package/esm2022/src/dateFormatter.provider.mjs +0 -25
- package/public-api.d.ts +0 -7
- package/src/agenda.component.d.ts +0 -202
- package/src/agenda.module.d.ts +0 -16
- package/src/calendar.component.d.ts +0 -38
- package/src/calendarCreation.component.d.ts +0 -44
- package/src/calendarItem.component.d.ts +0 -40
- package/src/calendars.service.d.ts +0 -77
- package/src/dateFormatter.provider.d.ts +0 -13
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { AlertController, ModalController } from '@ionic/angular/standalone';
|
|
3
|
-
import { Browser } from '@capacitor/browser';
|
|
4
|
-
import { Calendar, ExternalCalendarSources, Suggestion } from 'idea-toolbox';
|
|
5
|
-
import { IDEAEnvironment, IDEALoadingService, IDEATranslationsService, IDEASuggestionsComponent } from '@idea-ionic/common';
|
|
6
|
-
import { IDEAAWSAPIService } from '@idea-ionic/uncommon';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* Note: to test locally, you need to temporarily change the redirect URI:
|
|
10
|
-
* - in the lambda `idea_calendars`, e.g. `SCARLETT_URL`;
|
|
11
|
-
* - in the client config file: `APP_URL`.
|
|
12
|
-
* In both cases, the value should be set to `http://localhost:8100` (or according to the local URL).
|
|
13
|
-
*/
|
|
14
|
-
export class IDEACalendarsService {
|
|
15
|
-
constructor() {
|
|
16
|
-
this._env = inject(IDEAEnvironment);
|
|
17
|
-
this._modal = inject(ModalController);
|
|
18
|
-
this._alert = inject(AlertController);
|
|
19
|
-
this._loading = inject(IDEALoadingService);
|
|
20
|
-
this._API = inject(IDEAAWSAPIService);
|
|
21
|
-
this._translate = inject(IDEATranslationsService);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Get the ion-icon of an external service from its name.
|
|
25
|
-
*/
|
|
26
|
-
getServiceIcon(service) {
|
|
27
|
-
switch (service) {
|
|
28
|
-
case ExternalCalendarSources.GOOGLE:
|
|
29
|
-
return 'logo-google';
|
|
30
|
-
case ExternalCalendarSources.MICROSOFT:
|
|
31
|
-
return 'logo-windows';
|
|
32
|
-
default:
|
|
33
|
-
return 'help';
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Get the base URL for API request (shared/private calendar).
|
|
38
|
-
*/
|
|
39
|
-
getRequestURL(calendar) {
|
|
40
|
-
return (calendar.teamId ? `teams/${calendar.teamId}/` : '').concat('calendars');
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Create a new calendar.
|
|
44
|
-
*/
|
|
45
|
-
async postCalendar(cal) {
|
|
46
|
-
const calendar = await this._API.postResource(this.getRequestURL(cal), { idea: true, body: cal });
|
|
47
|
-
return new Calendar(calendar);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Update an existing calendar.
|
|
51
|
-
*/
|
|
52
|
-
async putCalendar(cal) {
|
|
53
|
-
const body = { idea: true, resourceId: cal.calendarId, body: cal };
|
|
54
|
-
const calendar = await this._API.putResource(this.getRequestURL(cal), body);
|
|
55
|
-
return new Calendar(calendar);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Delete a calendar.
|
|
59
|
-
*/
|
|
60
|
-
async deleteCalendar(cal) {
|
|
61
|
-
await this._API.deleteResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId });
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Associate an external calendar with the given calendar.
|
|
65
|
-
*/
|
|
66
|
-
async setExternalCalendar(cal, externalId) {
|
|
67
|
-
const body = { idea: true, resourceId: cal.calendarId, body: { action: 'SET_EXTERNAL_CALENDAR', externalId } };
|
|
68
|
-
const calendar = await this._API.patchResource(this.getRequestURL(cal), body);
|
|
69
|
-
return new Calendar(calendar);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Link the calendar with the chosen external service (auth flow).
|
|
73
|
-
*/
|
|
74
|
-
async linkExtService(cal, baseURL) {
|
|
75
|
-
if (!cal.external)
|
|
76
|
-
throw new Error('NOT_EXTERNAL');
|
|
77
|
-
if (!baseURL)
|
|
78
|
-
baseURL = window.location.protocol.concat('//', window.location.hostname);
|
|
79
|
-
let url;
|
|
80
|
-
switch (cal.external.service) {
|
|
81
|
-
case ExternalCalendarSources.GOOGLE:
|
|
82
|
-
url =
|
|
83
|
-
'https://accounts.google.com/o/oauth2/v2/auth?' +
|
|
84
|
-
`client_id=${encodeURIComponent(this._env.google.apiClientId)}` +
|
|
85
|
-
'&response_type=code' +
|
|
86
|
-
`&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/google-calendars-integration'))}` +
|
|
87
|
-
'&include_granted_scopes=true' +
|
|
88
|
-
'&access_type=offline&prompt=consent' +
|
|
89
|
-
`&scope=${encodeURIComponent(this._env.google.apiScope)}` +
|
|
90
|
-
`&state=${encodeURIComponent(cal.calendarId)}`;
|
|
91
|
-
break;
|
|
92
|
-
case ExternalCalendarSources.MICROSOFT:
|
|
93
|
-
url =
|
|
94
|
-
'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +
|
|
95
|
-
`client_id=${encodeURIComponent(this._env.microsoft.apiClientId)}` +
|
|
96
|
-
'&response_type=code' +
|
|
97
|
-
`&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/microsoft-calendars-integration'))}` +
|
|
98
|
-
'&response_mode=query' +
|
|
99
|
-
`&scope=${encodeURIComponent(this._env.microsoft.apiScope)}` +
|
|
100
|
-
`&state=${encodeURIComponent(cal.calendarId)}`;
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
103
|
-
if (!url)
|
|
104
|
-
throw new Error('INVALID_SERVICE');
|
|
105
|
-
await Browser.open({ url });
|
|
106
|
-
// since we don't know when/if the auth flow will finish, we wait
|
|
107
|
-
await this.showAlertLinkingCalendar();
|
|
108
|
-
}
|
|
109
|
-
async showAlertLinkingCalendar() {
|
|
110
|
-
return new Promise(async (resolve) => {
|
|
111
|
-
const header = this._translate._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR');
|
|
112
|
-
const message = this._translate._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR_CONFIRM_ONCE_DONE');
|
|
113
|
-
const buttons = [{ text: this._translate._('COMMON.DONE'), handler: resolve }];
|
|
114
|
-
const alert = await this._alert.create({ header, message, buttons, backdropDismiss: false });
|
|
115
|
-
alert.present();
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Get the external calendars list of the external service.
|
|
120
|
-
*/
|
|
121
|
-
async getExternalCalendars(cal) {
|
|
122
|
-
if (!cal.external)
|
|
123
|
-
throw new Error('NOT_EXTERNAL');
|
|
124
|
-
// get the access token to make requests; in case it fails, proceed to link the external service
|
|
125
|
-
const body = { idea: true, resourceId: cal.calendarId, body: { action: 'GET_ACCESS_TOKEN' } };
|
|
126
|
-
const result = await this._API.patchResource(this.getRequestURL(cal), body);
|
|
127
|
-
const headers = { Authorization: 'Bearer '.concat(result.token) };
|
|
128
|
-
if (cal.external.service === ExternalCalendarSources.GOOGLE) {
|
|
129
|
-
const res = await (await fetch('https://www.googleapis.com/calendar/v3/users/me/calendarList', { headers })).json();
|
|
130
|
-
return res.items.map((c) => ({ name: c.summary, id: c.id }));
|
|
131
|
-
}
|
|
132
|
-
else if (cal.external.service === ExternalCalendarSources.MICROSOFT) {
|
|
133
|
-
const res = await (await fetch('https://graph.microsoft.com/v1.0/me/calendars', { headers })).json();
|
|
134
|
-
return res.value.map((c) => ({ name: c.name, id: c.id }));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* If the external service is linked, choose an external calendar and set it for the chosen calendar.
|
|
139
|
-
* @return the updated calendar.
|
|
140
|
-
*/
|
|
141
|
-
async chooseAndSetExternalCalendar(cal) {
|
|
142
|
-
const extCalId = await this.openModalAndPickExternalCalendar(cal);
|
|
143
|
-
if (!extCalId)
|
|
144
|
-
return;
|
|
145
|
-
return await this.setExternalCalendar(cal, extCalId);
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Open the modal to pick a calendar from the external service.
|
|
149
|
-
* @return the id of the external calendar.
|
|
150
|
-
*/
|
|
151
|
-
async openModalAndPickExternalCalendar(cal) {
|
|
152
|
-
let extCals;
|
|
153
|
-
try {
|
|
154
|
-
await this._loading.show();
|
|
155
|
-
extCals = await this.getExternalCalendars(cal);
|
|
156
|
-
if (!extCals.length)
|
|
157
|
-
throw new Error('NO_EXTERNAL_CALENDARS');
|
|
158
|
-
}
|
|
159
|
-
catch (error) {
|
|
160
|
-
throw error;
|
|
161
|
-
}
|
|
162
|
-
finally {
|
|
163
|
-
this._loading.hide();
|
|
164
|
-
}
|
|
165
|
-
const modal = await this._modal.create({
|
|
166
|
-
component: IDEASuggestionsComponent,
|
|
167
|
-
componentProps: {
|
|
168
|
-
data: extCals.map(c => new Suggestion({ value: c.id, name: c.name })),
|
|
169
|
-
searchPlaceholder: this._translate._('IDEA_AGENDA.CALENDARS.CHOOSE_AN_EXTERNAL_CALENDAR_TO_LINK'),
|
|
170
|
-
sortData: true,
|
|
171
|
-
hideIdFromUI: true,
|
|
172
|
-
hideClearButton: true,
|
|
173
|
-
mustChoose: true
|
|
174
|
-
},
|
|
175
|
-
backdropDismiss: false
|
|
176
|
-
});
|
|
177
|
-
modal.present();
|
|
178
|
-
const res = await modal.onDidDismiss();
|
|
179
|
-
return res.data ? res.data.value : null;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* First sync of the extenal calendar.
|
|
183
|
-
*/
|
|
184
|
-
syncCalendar(cal) {
|
|
185
|
-
return new Promise((resolve, reject) => this.syncCalendarHelper(cal, err => (err ? reject(err) : resolve())));
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Helper to recursively sync an the extenal calendar.
|
|
189
|
-
*/
|
|
190
|
-
syncCalendarHelper(cal, done) {
|
|
191
|
-
// this is a recursive operation: the API returns if the sync has to continue or it finished
|
|
192
|
-
this._API
|
|
193
|
-
.patchResource(this.getRequestURL(cal), {
|
|
194
|
-
idea: true,
|
|
195
|
-
resourceId: cal.calendarId,
|
|
196
|
-
body: { action: 'SYNC_EXTERNAL_CALENDAR', firstSync: true }
|
|
197
|
-
})
|
|
198
|
-
.then((res) => {
|
|
199
|
-
if (res.moreData)
|
|
200
|
-
this.syncCalendarHelper(cal, done);
|
|
201
|
-
else
|
|
202
|
-
done();
|
|
203
|
-
})
|
|
204
|
-
.catch(err => done(err));
|
|
205
|
-
}
|
|
206
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEACalendarsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
207
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEACalendarsService }); }
|
|
208
|
-
}
|
|
209
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IDEACalendarsService, decorators: [{
|
|
210
|
-
type: Injectable
|
|
211
|
-
}] });
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUNMLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUV6RDs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFWSxTQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pDLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqQyxhQUFRLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pDLGVBQVUsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztLQXFMdEQ7SUFuTEM7O09BRUc7SUFDSCxjQUFjLENBQUMsT0FBeUM7UUFDdEQsUUFBUSxPQUFPLEVBQUUsQ0FBQztZQUNoQixLQUFLLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssdUJBQXVCLENBQUMsU0FBUztnQkFDcEMsT0FBTyxjQUFjLENBQUM7WUFDeEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFDRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxRQUFrQjtRQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQWE7UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsRyxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRDs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBYTtRQUM3QixNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RSxPQUFPLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRDs7T0FFRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBYTtRQUNoQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBYSxFQUFFLFVBQWtCO1FBQ3pELE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUMvRyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUUsT0FBTyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQWEsRUFBRSxPQUFlO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hGLElBQUksR0FBVyxDQUFDO1FBQ2hCLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixLQUFLLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2pDLEdBQUc7b0JBQ0QsK0NBQStDO3dCQUMvQyxhQUFhLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUMvRCxxQkFBcUI7d0JBQ3JCLGlCQUFpQixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsRUFBRTt3QkFDM0YsOEJBQThCO3dCQUM5QixxQ0FBcUM7d0JBQ3JDLFVBQVUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ3pELFVBQVUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE1BQU07WUFDUixLQUFLLHVCQUF1QixDQUFDLFNBQVM7Z0JBQ3BDLEdBQUc7b0JBQ0QsaUVBQWlFO3dCQUNqRSxhQUFhLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUNsRSxxQkFBcUI7d0JBQ3JCLGlCQUFpQixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLHVDQUF1QyxDQUFDLENBQUMsRUFBRTt3QkFDOUYsc0JBQXNCO3dCQUN0QixVQUFVLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUM1RCxVQUFVLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNqRCxNQUFNO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsaUVBQWlFO1FBQ2pFLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUNPLEtBQUssQ0FBQyx3QkFBd0I7UUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDL0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFhO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsZ0dBQWdHO1FBQ2hHLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1FBQzlGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RSxNQUFNLE9BQU8sR0FBRyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssdUJBQXVCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUNoQixNQUFNLEtBQUssQ0FBQyw4REFBOEQsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQ3pGLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBZ0IsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQywrQ0FBK0MsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyRyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFlLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBZ0IsQ0FBQyxDQUFDO1FBQzdGLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDRCQUE0QixDQUFDLEdBQWE7UUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsR0FBYTtRQUMxRCxJQUFJLE9BQXNCLENBQUM7UUFDM0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3JDLFNBQVMsRUFBRSx3QkFBd0I7WUFDbkMsY0FBYyxFQUFFO2dCQUNkLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDJEQUEyRCxDQUFDO2dCQUNqRyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2FBQ2pCO1lBQ0QsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsR0FBYTtRQUN4QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RILENBQUM7SUFDRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEdBQWEsRUFBRSxJQUEyQjtRQUNuRSw0RkFBNEY7UUFDNUYsSUFBSSxDQUFDLElBQUk7YUFDTixhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QyxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtZQUMxQixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtTQUM1RCxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFRLEVBQUU7WUFDdkIsSUFBSSxHQUFHLENBQUMsUUFBUTtnQkFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztnQkFDaEQsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDOzhHQTFMVSxvQkFBb0I7a0hBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IEJyb3dzZXIgfSBmcm9tICdAY2FwYWNpdG9yL2Jyb3dzZXInO1xuaW1wb3J0IHsgQ2FsZW5kYXIsIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLCBTdWdnZXN0aW9uIH0gZnJvbSAnaWRlYS10b29sYm94JztcbmltcG9ydCB7XG4gIElERUFFbnZpcm9ubWVudCxcbiAgSURFQUxvYWRpbmdTZXJ2aWNlLFxuICBJREVBVHJhbnNsYXRpb25zU2VydmljZSxcbiAgSURFQVN1Z2dlc3Rpb25zQ29tcG9uZW50XG59IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5pbXBvcnQgeyBJREVBQVdTQVBJU2VydmljZSB9IGZyb20gJ0BpZGVhLWlvbmljL3VuY29tbW9uJztcblxuLyoqXG4gKiBOb3RlOiB0byB0ZXN0IGxvY2FsbHksIHlvdSBuZWVkIHRvIHRlbXBvcmFyaWx5IGNoYW5nZSB0aGUgcmVkaXJlY3QgVVJJOlxuICogIC0gaW4gdGhlIGxhbWJkYSBgaWRlYV9jYWxlbmRhcnNgLCBlLmcuIGBTQ0FSTEVUVF9VUkxgO1xuICogIC0gaW4gdGhlIGNsaWVudCBjb25maWcgZmlsZTogYEFQUF9VUkxgLlxuICogSW4gYm90aCBjYXNlcywgdGhlIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gYGh0dHA6Ly9sb2NhbGhvc3Q6ODEwMGAgKG9yIGFjY29yZGluZyB0byB0aGUgbG9jYWwgVVJMKS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElERUFDYWxlbmRhcnNTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIF9lbnYgPSBpbmplY3QoSURFQUVudmlyb25tZW50KTtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfYWxlcnQgPSBpbmplY3QoQWxlcnRDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGluamVjdChJREVBTG9hZGluZ1NlcnZpY2UpO1xuICBwcml2YXRlIF9BUEkgPSBpbmplY3QoSURFQUFXU0FQSVNlcnZpY2UpO1xuICBwcml2YXRlIF90cmFuc2xhdGUgPSBpbmplY3QoSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlvbi1pY29uIG9mIGFuIGV4dGVybmFsIHNlcnZpY2UgZnJvbSBpdHMgbmFtZS5cbiAgICovXG4gIGdldFNlcnZpY2VJY29uKHNlcnZpY2U6IEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHNlcnZpY2UpIHtcbiAgICAgIGNhc2UgRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMuR09PR0xFOlxuICAgICAgICByZXR1cm4gJ2xvZ28tZ29vZ2xlJztcbiAgICAgIGNhc2UgRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMuTUlDUk9TT0ZUOlxuICAgICAgICByZXR1cm4gJ2xvZ28td2luZG93cyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2hlbHAnO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlIFVSTCBmb3IgQVBJIHJlcXVlc3QgKHNoYXJlZC9wcml2YXRlIGNhbGVuZGFyKS5cbiAgICovXG4gIGdldFJlcXVlc3RVUkwoY2FsZW5kYXI6IENhbGVuZGFyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNhbGVuZGFyLnRlYW1JZCA/IGB0ZWFtcy8ke2NhbGVuZGFyLnRlYW1JZH0vYCA6ICcnKS5jb25jYXQoJ2NhbGVuZGFycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBjYWxlbmRhci5cbiAgICovXG4gIGFzeW5jIHBvc3RDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxDYWxlbmRhcj4ge1xuICAgIGNvbnN0IGNhbGVuZGFyID0gYXdhaXQgdGhpcy5fQVBJLnBvc3RSZXNvdXJjZSh0aGlzLmdldFJlcXVlc3RVUkwoY2FsKSwgeyBpZGVhOiB0cnVlLCBib2R5OiBjYWwgfSk7XG4gICAgcmV0dXJuIG5ldyBDYWxlbmRhcihjYWxlbmRhcik7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBleGlzdGluZyBjYWxlbmRhci5cbiAgICovXG4gIGFzeW5jIHB1dENhbGVuZGFyKGNhbDogQ2FsZW5kYXIpOiBQcm9taXNlPENhbGVuZGFyPiB7XG4gICAgY29uc3QgYm9keSA9IHsgaWRlYTogdHJ1ZSwgcmVzb3VyY2VJZDogY2FsLmNhbGVuZGFySWQsIGJvZHk6IGNhbCB9O1xuICAgIGNvbnN0IGNhbGVuZGFyID0gYXdhaXQgdGhpcy5fQVBJLnB1dFJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCBib2R5KTtcbiAgICByZXR1cm4gbmV3IENhbGVuZGFyKGNhbGVuZGFyKTtcbiAgfVxuICAvKipcbiAgICogRGVsZXRlIGEgY2FsZW5kYXIuXG4gICAqL1xuICBhc3luYyBkZWxldGVDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fQVBJLmRlbGV0ZVJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCB7IGlkZWE6IHRydWUsIHJlc291cmNlSWQ6IGNhbC5jYWxlbmRhcklkIH0pO1xuICB9XG4gIC8qKlxuICAgKiBBc3NvY2lhdGUgYW4gZXh0ZXJuYWwgY2FsZW5kYXIgd2l0aCB0aGUgZ2l2ZW4gY2FsZW5kYXIuXG4gICAqL1xuICBhc3luYyBzZXRFeHRlcm5hbENhbGVuZGFyKGNhbDogQ2FsZW5kYXIsIGV4dGVybmFsSWQ6IHN0cmluZyk6IFByb21pc2U8Q2FsZW5kYXI+IHtcbiAgICBjb25zdCBib2R5ID0geyBpZGVhOiB0cnVlLCByZXNvdXJjZUlkOiBjYWwuY2FsZW5kYXJJZCwgYm9keTogeyBhY3Rpb246ICdTRVRfRVhURVJOQUxfQ0FMRU5EQVInLCBleHRlcm5hbElkIH0gfTtcbiAgICBjb25zdCBjYWxlbmRhciA9IGF3YWl0IHRoaXMuX0FQSS5wYXRjaFJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCBib2R5KTtcbiAgICByZXR1cm4gbmV3IENhbGVuZGFyKGNhbGVuZGFyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5rIHRoZSBjYWxlbmRhciB3aXRoIHRoZSBjaG9zZW4gZXh0ZXJuYWwgc2VydmljZSAoYXV0aCBmbG93KS5cbiAgICovXG4gIGFzeW5jIGxpbmtFeHRTZXJ2aWNlKGNhbDogQ2FsZW5kYXIsIGJhc2VVUkw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghY2FsLmV4dGVybmFsKSB0aHJvdyBuZXcgRXJyb3IoJ05PVF9FWFRFUk5BTCcpO1xuICAgIGlmICghYmFzZVVSTCkgYmFzZVVSTCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5jb25jYXQoJy8vJywgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTtcbiAgICBsZXQgdXJsOiBzdHJpbmc7XG4gICAgc3dpdGNoIChjYWwuZXh0ZXJuYWwuc2VydmljZSkge1xuICAgICAgY2FzZSBFeHRlcm5hbENhbGVuZGFyU291cmNlcy5HT09HTEU6XG4gICAgICAgIHVybCA9XG4gICAgICAgICAgJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi92Mi9hdXRoPycgK1xuICAgICAgICAgIGBjbGllbnRfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5fZW52Lmdvb2dsZS5hcGlDbGllbnRJZCl9YCArXG4gICAgICAgICAgJyZyZXNwb25zZV90eXBlPWNvZGUnICtcbiAgICAgICAgICBgJnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChiYXNlVVJMLmNvbmNhdCgnL2VjaG8vZ29vZ2xlLWNhbGVuZGFycy1pbnRlZ3JhdGlvbicpKX1gICtcbiAgICAgICAgICAnJmluY2x1ZGVfZ3JhbnRlZF9zY29wZXM9dHJ1ZScgK1xuICAgICAgICAgICcmYWNjZXNzX3R5cGU9b2ZmbGluZSZwcm9tcHQ9Y29uc2VudCcgK1xuICAgICAgICAgIGAmc2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5fZW52Lmdvb2dsZS5hcGlTY29wZSl9YCArXG4gICAgICAgICAgYCZzdGF0ZT0ke2VuY29kZVVSSUNvbXBvbmVudChjYWwuY2FsZW5kYXJJZCl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLk1JQ1JPU09GVDpcbiAgICAgICAgdXJsID1cbiAgICAgICAgICAnaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL2NvbW1vbi9vYXV0aDIvdjIuMC9hdXRob3JpemU/JyArXG4gICAgICAgICAgYGNsaWVudF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9lbnYubWljcm9zb2Z0LmFwaUNsaWVudElkKX1gICtcbiAgICAgICAgICAnJnJlc3BvbnNlX3R5cGU9Y29kZScgK1xuICAgICAgICAgIGAmcmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VVUkwuY29uY2F0KCcvZWNoby9taWNyb3NvZnQtY2FsZW5kYXJzLWludGVncmF0aW9uJykpfWAgK1xuICAgICAgICAgICcmcmVzcG9uc2VfbW9kZT1xdWVyeScgK1xuICAgICAgICAgIGAmc2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5fZW52Lm1pY3Jvc29mdC5hcGlTY29wZSl9YCArXG4gICAgICAgICAgYCZzdGF0ZT0ke2VuY29kZVVSSUNvbXBvbmVudChjYWwuY2FsZW5kYXJJZCl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoJ0lOVkFMSURfU0VSVklDRScpO1xuICAgIGF3YWl0IEJyb3dzZXIub3Blbih7IHVybCB9KTtcbiAgICAvLyBzaW5jZSB3ZSBkb24ndCBrbm93IHdoZW4vaWYgdGhlIGF1dGggZmxvdyB3aWxsIGZpbmlzaCwgd2Ugd2FpdFxuICAgIGF3YWl0IHRoaXMuc2hvd0FsZXJ0TGlua2luZ0NhbGVuZGFyKCk7XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBzaG93QWxlcnRMaW5raW5nQ2FsZW5kYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LSU5HX0NBTEVOREFSJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LSU5HX0NBTEVOREFSX0NPTkZJUk1fT05DRV9ET05FJyk7XG4gICAgICBjb25zdCBidXR0b25zID0gW3sgdGV4dDogdGhpcy5fdHJhbnNsYXRlLl8oJ0NPTU1PTi5ET05FJyksIGhhbmRsZXI6IHJlc29sdmUgfV07XG4gICAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuX2FsZXJ0LmNyZWF0ZSh7IGhlYWRlciwgbWVzc2FnZSwgYnV0dG9ucywgYmFja2Ryb3BEaXNtaXNzOiBmYWxzZSB9KTtcbiAgICAgIGFsZXJ0LnByZXNlbnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsIGNhbGVuZGFycyBsaXN0IG9mIHRoZSBleHRlcm5hbCBzZXJ2aWNlLlxuICAgKi9cbiAgYXN5bmMgZ2V0RXh0ZXJuYWxDYWxlbmRhcnMoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8RXh0Q2FsZW5kYXJbXT4ge1xuICAgIGlmICghY2FsLmV4dGVybmFsKSB0aHJvdyBuZXcgRXJyb3IoJ05PVF9FWFRFUk5BTCcpO1xuICAgIC8vIGdldCB0aGUgYWNjZXNzIHRva2VuIHRvIG1ha2UgcmVxdWVzdHM7IGluIGNhc2UgaXQgZmFpbHMsIHByb2NlZWQgdG8gbGluayB0aGUgZXh0ZXJuYWwgc2VydmljZVxuICAgIGNvbnN0IGJvZHkgPSB7IGlkZWE6IHRydWUsIHJlc291cmNlSWQ6IGNhbC5jYWxlbmRhcklkLCBib2R5OiB7IGFjdGlvbjogJ0dFVF9BQ0NFU1NfVE9LRU4nIH0gfTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9BUEkucGF0Y2hSZXNvdXJjZSh0aGlzLmdldFJlcXVlc3RVUkwoY2FsKSwgYm9keSk7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnLmNvbmNhdChyZXN1bHQudG9rZW4pIH07XG4gICAgaWYgKGNhbC5leHRlcm5hbC5zZXJ2aWNlID09PSBFeHRlcm5hbENhbGVuZGFyU291cmNlcy5HT09HTEUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IChcbiAgICAgICAgYXdhaXQgZmV0Y2goJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NhbGVuZGFyL3YzL3VzZXJzL21lL2NhbGVuZGFyTGlzdCcsIHsgaGVhZGVycyB9KVxuICAgICAgKS5qc29uKCk7XG4gICAgICByZXR1cm4gcmVzLml0ZW1zLm1hcCgoYzogYW55KTogRXh0Q2FsZW5kYXIgPT4gKHsgbmFtZTogYy5zdW1tYXJ5LCBpZDogYy5pZCB9KSBhcyBFeHRDYWxlbmRhcik7XG4gICAgfSBlbHNlIGlmIChjYWwuZXh0ZXJuYWwuc2VydmljZSA9PT0gRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMuTUlDUk9TT0ZUKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCAoYXdhaXQgZmV0Y2goJ2h0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS92MS4wL21lL2NhbGVuZGFycycsIHsgaGVhZGVycyB9KSkuanNvbigpO1xuICAgICAgcmV0dXJuIHJlcy52YWx1ZS5tYXAoKGM6IGFueSk6IEV4dENhbGVuZGFyID0+ICh7IG5hbWU6IGMubmFtZSwgaWQ6IGMuaWQgfSkgYXMgRXh0Q2FsZW5kYXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZXh0ZXJuYWwgc2VydmljZSBpcyBsaW5rZWQsIGNob29zZSBhbiBleHRlcm5hbCBjYWxlbmRhciBhbmQgc2V0IGl0IGZvciB0aGUgY2hvc2VuIGNhbGVuZGFyLlxuICAgKiBAcmV0dXJuIHRoZSB1cGRhdGVkIGNhbGVuZGFyLlxuICAgKi9cbiAgYXN5bmMgY2hvb3NlQW5kU2V0RXh0ZXJuYWxDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxDYWxlbmRhcj4ge1xuICAgIGNvbnN0IGV4dENhbElkID0gYXdhaXQgdGhpcy5vcGVuTW9kYWxBbmRQaWNrRXh0ZXJuYWxDYWxlbmRhcihjYWwpO1xuICAgIGlmICghZXh0Q2FsSWQpIHJldHVybjtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRFeHRlcm5hbENhbGVuZGFyKGNhbCwgZXh0Q2FsSWQpO1xuICB9XG4gIC8qKlxuICAgKiBPcGVuIHRoZSBtb2RhbCB0byBwaWNrIGEgY2FsZW5kYXIgZnJvbSB0aGUgZXh0ZXJuYWwgc2VydmljZS5cbiAgICogQHJldHVybiB0aGUgaWQgb2YgdGhlIGV4dGVybmFsIGNhbGVuZGFyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBvcGVuTW9kYWxBbmRQaWNrRXh0ZXJuYWxDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgZXh0Q2FsczogRXh0Q2FsZW5kYXJbXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fbG9hZGluZy5zaG93KCk7XG4gICAgICBleHRDYWxzID0gYXdhaXQgdGhpcy5nZXRFeHRlcm5hbENhbGVuZGFycyhjYWwpO1xuICAgICAgaWYgKCFleHRDYWxzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdOT19FWFRFUk5BTF9DQUxFTkRBUlMnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMuX21vZGFsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IElERUFTdWdnZXN0aW9uc0NvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIGRhdGE6IGV4dENhbHMubWFwKGMgPT4gbmV3IFN1Z2dlc3Rpb24oeyB2YWx1ZTogYy5pZCwgbmFtZTogYy5uYW1lIH0pKSxcbiAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuQ0hPT1NFX0FOX0VYVEVSTkFMX0NBTEVOREFSX1RPX0xJTksnKSxcbiAgICAgICAgc29ydERhdGE6IHRydWUsXG4gICAgICAgIGhpZGVJZEZyb21VSTogdHJ1ZSxcbiAgICAgICAgaGlkZUNsZWFyQnV0dG9uOiB0cnVlLFxuICAgICAgICBtdXN0Q2hvb3NlOiB0cnVlXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiBmYWxzZVxuICAgIH0pO1xuICAgIG1vZGFsLnByZXNlbnQoKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcbiAgICByZXR1cm4gcmVzLmRhdGEgPyByZXMuZGF0YS52YWx1ZSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmlyc3Qgc3luYyBvZiB0aGUgZXh0ZW5hbCBjYWxlbmRhci5cbiAgICovXG4gIHN5bmNDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHRoaXMuc3luY0NhbGVuZGFySGVscGVyKGNhbCwgZXJyID0+IChlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKSkpKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIHRvIHJlY3Vyc2l2ZWx5IHN5bmMgYW4gdGhlIGV4dGVuYWwgY2FsZW5kYXIuXG4gICAqL1xuICBwcml2YXRlIHN5bmNDYWxlbmRhckhlbHBlcihjYWw6IENhbGVuZGFyLCBkb25lOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAvLyB0aGlzIGlzIGEgcmVjdXJzaXZlIG9wZXJhdGlvbjogdGhlIEFQSSByZXR1cm5zIGlmIHRoZSBzeW5jIGhhcyB0byBjb250aW51ZSBvciBpdCBmaW5pc2hlZFxuICAgIHRoaXMuX0FQSVxuICAgICAgLnBhdGNoUmVzb3VyY2UodGhpcy5nZXRSZXF1ZXN0VVJMKGNhbCksIHtcbiAgICAgICAgaWRlYTogdHJ1ZSxcbiAgICAgICAgcmVzb3VyY2VJZDogY2FsLmNhbGVuZGFySWQsXG4gICAgICAgIGJvZHk6IHsgYWN0aW9uOiAnU1lOQ19FWFRFUk5BTF9DQUxFTkRBUicsIGZpcnN0U3luYzogdHJ1ZSB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlczogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChyZXMubW9yZURhdGEpIHRoaXMuc3luY0NhbGVuZGFySGVscGVyKGNhbCwgZG9uZSk7XG4gICAgICAgIGVsc2UgZG9uZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4gZG9uZShlcnIpKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBzdHJ1Y3R1cmUgdG8gZGVmaW5lIGV4dGVybmFsIHNlcnZpY2VzJyBjYWxlbmRhcnMgKGJhc2ljIGluZm8pLlxuICovXG5pbnRlcmZhY2UgRXh0Q2FsZW5kYXIge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { formatDate } from '@angular/common';
|
|
2
|
-
import { Injectable } from '@angular/core';
|
|
3
|
-
import { CalendarDateFormatter } from 'angular-calendar';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class CustomDateFormatter extends CalendarDateFormatter {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
// MONTH VIEW
|
|
9
|
-
this.monthViewColumnHeader = ({ date, locale }) => formatDate(date, 'EEE', locale);
|
|
10
|
-
this.monthViewTitle = ({ date, locale }) => formatDate(date, 'MMMM y', locale);
|
|
11
|
-
// WEEK VIEW
|
|
12
|
-
this.weekViewHour = ({ date, locale }) => locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);
|
|
13
|
-
this.weekViewColumnHeader = ({ date, locale }) => formatDate(date, 'EEE', locale);
|
|
14
|
-
this.weekViewTitle = ({ date, locale }) => formatDate(date, 'MMMM yyyy', locale);
|
|
15
|
-
// DAY VIEW
|
|
16
|
-
this.dayViewHour = ({ date, locale }) => locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);
|
|
17
|
-
this.dayViewTitle = ({ date, locale }) => locale === 'it' ? formatDate(date, 'EEEE, dd MMM yyyy', locale) : formatDate(date, 'EEEE, MMM dd, yyyy', locale);
|
|
18
|
-
}
|
|
19
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomDateFormatter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomDateFormatter }); }
|
|
21
|
-
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomDateFormatter, decorators: [{
|
|
23
|
-
type: Injectable
|
|
24
|
-
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZUZvcm1hdHRlci5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL21vZHVsZXMvYWdlbmRhL3NyYy9kYXRlRm9ybWF0dGVyLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHOUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHFCQUFxQjtJQUQ5RDs7UUFFRSxhQUFhO1FBQ2IsMEJBQXFCLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXVCLEVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNHLG1CQUFjLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXVCLEVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZHLFlBQVk7UUFDWixpQkFBWSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUF1QixFQUFVLEVBQUUsQ0FDL0QsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pGLHlCQUFvQixHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUF1QixFQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxRyxrQkFBYSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUF1QixFQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV6RyxXQUFXO1FBQ1gsZ0JBQVcsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBdUIsRUFBVSxFQUFFLENBQzlELE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RixpQkFBWSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUF1QixFQUFVLEVBQUUsQ0FDL0QsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwSDs4R0FoQlksbUJBQW1CO2tIQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZUZvcm1hdHRlciwgRGF0ZUZvcm1hdHRlclBhcmFtcyB9IGZyb20gJ2FuZ3VsYXItY2FsZW5kYXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZUZvcm1hdHRlciBleHRlbmRzIENhbGVuZGFyRGF0ZUZvcm1hdHRlciB7XG4gIC8vIE1PTlRIIFZJRVdcbiAgbW9udGhWaWV3Q29sdW1uSGVhZGVyID0gKHsgZGF0ZSwgbG9jYWxlIH06IERhdGVGb3JtYXR0ZXJQYXJhbXMpOiBzdHJpbmcgPT4gZm9ybWF0RGF0ZShkYXRlLCAnRUVFJywgbG9jYWxlKTtcbiAgbW9udGhWaWV3VGl0bGUgPSAoeyBkYXRlLCBsb2NhbGUgfTogRGF0ZUZvcm1hdHRlclBhcmFtcyk6IHN0cmluZyA9PiBmb3JtYXREYXRlKGRhdGUsICdNTU1NIHknLCBsb2NhbGUpO1xuXG4gIC8vIFdFRUsgVklFV1xuICB3ZWVrVmlld0hvdXIgPSAoeyBkYXRlLCBsb2NhbGUgfTogRGF0ZUZvcm1hdHRlclBhcmFtcyk6IHN0cmluZyA9PlxuICAgIGxvY2FsZSA9PT0gJ2l0JyA/IGZvcm1hdERhdGUoZGF0ZSwgJ0hIOm1tJywgbG9jYWxlKSA6IGZvcm1hdERhdGUoZGF0ZSwgJ2ggYWEnLCBsb2NhbGUpO1xuICB3ZWVrVmlld0NvbHVtbkhlYWRlciA9ICh7IGRhdGUsIGxvY2FsZSB9OiBEYXRlRm9ybWF0dGVyUGFyYW1zKTogc3RyaW5nID0+IGZvcm1hdERhdGUoZGF0ZSwgJ0VFRScsIGxvY2FsZSk7XG4gIHdlZWtWaWV3VGl0bGUgPSAoeyBkYXRlLCBsb2NhbGUgfTogRGF0ZUZvcm1hdHRlclBhcmFtcyk6IHN0cmluZyA9PiBmb3JtYXREYXRlKGRhdGUsICdNTU1NIHl5eXknLCBsb2NhbGUpO1xuXG4gIC8vIERBWSBWSUVXXG4gIGRheVZpZXdIb3VyID0gKHsgZGF0ZSwgbG9jYWxlIH06IERhdGVGb3JtYXR0ZXJQYXJhbXMpOiBzdHJpbmcgPT5cbiAgICBsb2NhbGUgPT09ICdpdCcgPyBmb3JtYXREYXRlKGRhdGUsICdISDptbScsIGxvY2FsZSkgOiBmb3JtYXREYXRlKGRhdGUsICdoIGFhJywgbG9jYWxlKTtcbiAgZGF5Vmlld1RpdGxlID0gKHsgZGF0ZSwgbG9jYWxlIH06IERhdGVGb3JtYXR0ZXJQYXJhbXMpOiBzdHJpbmcgPT5cbiAgICBsb2NhbGUgPT09ICdpdCcgPyBmb3JtYXREYXRlKGRhdGUsICdFRUVFLCBkZCBNTU0geXl5eScsIGxvY2FsZSkgOiBmb3JtYXREYXRlKGRhdGUsICdFRUVFLCBNTU0gZGQsIHl5eXknLCBsb2NhbGUpO1xufVxuIl19
|
package/public-api.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export * from './src/agenda.module';
|
|
2
|
-
export * from './src/agenda.component';
|
|
3
|
-
export * from './src/calendar.component';
|
|
4
|
-
export * from './src/calendarCreation.component';
|
|
5
|
-
export * from './src/calendarItem.component';
|
|
6
|
-
export * from './src/calendars.service';
|
|
7
|
-
export * from './src/dateFormatter.provider';
|
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
-
import { IonContent } from '@ionic/angular/standalone';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { CalendarEvent, CalendarEventTimesChangedEvent, CalendarMonthViewBeforeRenderEvent, CalendarView, CalendarWeekViewBeforeRenderEvent } from 'angular-calendar';
|
|
5
|
-
import { IDEATranslationsService } from '@idea-ionic/common';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class IDEAAgendaComponent implements OnInit {
|
|
8
|
-
private _cdr;
|
|
9
|
-
private _platform;
|
|
10
|
-
_translate: IDEATranslationsService;
|
|
11
|
-
/**
|
|
12
|
-
* The events to display in the calendar.
|
|
13
|
-
*/
|
|
14
|
-
events: AgendaEvent[];
|
|
15
|
-
/**
|
|
16
|
-
* An array of day indexes (0 = sunday, 1 = monday, etc.) that will be hidden on the view.
|
|
17
|
-
*/
|
|
18
|
-
excludeDays: number[];
|
|
19
|
-
/**
|
|
20
|
-
* The day start hours in 24 hour time. Must be 0-23
|
|
21
|
-
*/
|
|
22
|
-
dayStartHour: number;
|
|
23
|
-
/**
|
|
24
|
-
* The day start hours in 24 hour time. Must be 0-23
|
|
25
|
-
*/
|
|
26
|
-
dayEndHour: number;
|
|
27
|
-
/**
|
|
28
|
-
* The number of segments in an hour. Must divide equally into 60.
|
|
29
|
-
*/
|
|
30
|
-
hourSegments: number;
|
|
31
|
-
/**
|
|
32
|
-
* Whether to open the current day's details right away in month view.
|
|
33
|
-
*/
|
|
34
|
-
activeDayIsOpen: boolean;
|
|
35
|
-
/**
|
|
36
|
-
* The view mode for the agenda.
|
|
37
|
-
*/
|
|
38
|
-
view: CalendarView;
|
|
39
|
-
/**
|
|
40
|
-
* The allowed view mode for the agenda.
|
|
41
|
-
*/
|
|
42
|
-
allowedViews: CalendarView[];
|
|
43
|
-
/**
|
|
44
|
-
* Whether to block any day/slot in the past.
|
|
45
|
-
*/
|
|
46
|
-
onlyFuture: boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Some notes to show underneath the calendar's header.
|
|
49
|
-
*/
|
|
50
|
-
titleNotes: string;
|
|
51
|
-
/**
|
|
52
|
-
* The template for new events created by drag&drop.
|
|
53
|
-
*/
|
|
54
|
-
newEventTemplate: AgendaEvent;
|
|
55
|
-
/**
|
|
56
|
-
* Whether (and how) to allow the creation of events by drag&drop.
|
|
57
|
-
* If enabled, on mobile it requires the `parentContent` to be set for a correct execution.
|
|
58
|
-
*/
|
|
59
|
-
allowDragToCreate: DragToCreateOptions;
|
|
60
|
-
/**
|
|
61
|
-
* The parent ion-content, in case we want to control its scrollability for drag&drop features.
|
|
62
|
-
*/
|
|
63
|
-
parentContent: IonContent;
|
|
64
|
-
/**
|
|
65
|
-
* Trigger when an event is selected.
|
|
66
|
-
*/
|
|
67
|
-
selectEvent: EventEmitter<AgendaEvent>;
|
|
68
|
-
/**
|
|
69
|
-
* Trigger when a day is selected.
|
|
70
|
-
*/
|
|
71
|
-
selectDay: EventEmitter<Date>;
|
|
72
|
-
/**
|
|
73
|
-
* Trigger when a time slot is selected.
|
|
74
|
-
*/
|
|
75
|
-
selectSlot: EventEmitter<Date>;
|
|
76
|
-
/**
|
|
77
|
-
* Trigger when a new event is added by drag and drop.
|
|
78
|
-
*/
|
|
79
|
-
newEventByDrag: EventEmitter<AgendaEvent>;
|
|
80
|
-
/**
|
|
81
|
-
* Trigger when an event changed date (drag&drop or resize).
|
|
82
|
-
*/
|
|
83
|
-
changeEvent: EventEmitter<AgendaEvent>;
|
|
84
|
-
/**
|
|
85
|
-
* Trigger when the view date of reference changed (because we moved inside the calendar).
|
|
86
|
-
*/
|
|
87
|
-
changeDate: EventEmitter<Date>;
|
|
88
|
-
/**
|
|
89
|
-
* Trigger before the rendering of the week or day view.
|
|
90
|
-
*/
|
|
91
|
-
beforeWeekOrDayViewRenderEmitter: EventEmitter<CalendarWeekViewBeforeRenderEvent>;
|
|
92
|
-
/**
|
|
93
|
-
* Trigger before the rendering of the month view.
|
|
94
|
-
*/
|
|
95
|
-
beforeMonthViewRenderEmitter: EventEmitter<CalendarMonthViewBeforeRenderEvent>;
|
|
96
|
-
CalendarView: typeof CalendarView;
|
|
97
|
-
Attendance: typeof EventAttendance;
|
|
98
|
-
viewDate: Date;
|
|
99
|
-
refresh: Subject<void>;
|
|
100
|
-
/**
|
|
101
|
-
* @hide
|
|
102
|
-
*/
|
|
103
|
-
locale: string;
|
|
104
|
-
/**
|
|
105
|
-
* @hide
|
|
106
|
-
*/
|
|
107
|
-
weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
108
|
-
darkMode: boolean;
|
|
109
|
-
ngOnInit(): void;
|
|
110
|
-
isMobile(): boolean;
|
|
111
|
-
/**
|
|
112
|
-
* Run some checks before the month view is rendered (e.g. disable invalid days).
|
|
113
|
-
*/
|
|
114
|
-
beforeMonthViewRender(event: CalendarMonthViewBeforeRenderEvent): void;
|
|
115
|
-
/**
|
|
116
|
-
* Run some checks before the week/day view is rendered (e.g. disable invalid days).
|
|
117
|
-
*/
|
|
118
|
-
beforeWeekOrDayViewRender(event: CalendarWeekViewBeforeRenderEvent): void;
|
|
119
|
-
dateIsValid(date: any, sameDayIsValid?: boolean): boolean;
|
|
120
|
-
setView(view: CalendarView): void;
|
|
121
|
-
viewDateChanged(newDate: Date): void;
|
|
122
|
-
changeDay({ date, events }: {
|
|
123
|
-
date: Date;
|
|
124
|
-
events: AgendaEvent[];
|
|
125
|
-
}): void;
|
|
126
|
-
eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void;
|
|
127
|
-
getAlternateColor(color: string, amount: number, opacity?: number): string | undefined;
|
|
128
|
-
getTooltipContent(event: AgendaEvent): string;
|
|
129
|
-
getPreviewDescription(description: string): string;
|
|
130
|
-
startDragToCreate(event: Event, segmentDate: Date, segmentElement: HTMLElement): void;
|
|
131
|
-
private getFixedEndDateWithMinimumSegmentDuration;
|
|
132
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<IDEAAgendaComponent, never>;
|
|
133
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<IDEAAgendaComponent, "idea-agenda", never, { "events": { "alias": "events"; "required": false; }; "excludeDays": { "alias": "excludeDays"; "required": false; }; "dayStartHour": { "alias": "dayStartHour"; "required": false; }; "dayEndHour": { "alias": "dayEndHour"; "required": false; }; "hourSegments": { "alias": "hourSegments"; "required": false; }; "activeDayIsOpen": { "alias": "activeDayIsOpen"; "required": false; }; "view": { "alias": "view"; "required": false; }; "allowedViews": { "alias": "allowedViews"; "required": false; }; "onlyFuture": { "alias": "onlyFuture"; "required": false; }; "titleNotes": { "alias": "titleNotes"; "required": false; }; "newEventTemplate": { "alias": "newEventTemplate"; "required": false; }; "allowDragToCreate": { "alias": "allowDragToCreate"; "required": false; }; "parentContent": { "alias": "parentContent"; "required": false; }; }, { "selectEvent": "selectEvent"; "selectDay": "selectDay"; "selectSlot": "selectSlot"; "newEventByDrag": "newEventByDrag"; "changeEvent": "changeEvent"; "changeDate": "changeDate"; "beforeWeekOrDayViewRenderEmitter": "beforeWeekOrDayViewRenderEmitter"; "beforeMonthViewRenderEmitter": "beforeMonthViewRenderEmitter"; }, never, never, false, never>;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* A richer version of the classic CalendarEvent.
|
|
137
|
-
*/
|
|
138
|
-
export interface AgendaEvent extends CalendarEvent {
|
|
139
|
-
/**
|
|
140
|
-
* A brief description for the event.
|
|
141
|
-
*/
|
|
142
|
-
description?: string;
|
|
143
|
-
/**
|
|
144
|
-
* The customer/stakeholder/target of the event.
|
|
145
|
-
*/
|
|
146
|
-
target?: string;
|
|
147
|
-
/**
|
|
148
|
-
* The location of the event.
|
|
149
|
-
*/
|
|
150
|
-
location?: string;
|
|
151
|
-
/**
|
|
152
|
-
* A list of URLs of images to show as small avatars.
|
|
153
|
-
*/
|
|
154
|
-
avatars?: {
|
|
155
|
-
id: string;
|
|
156
|
-
url: string;
|
|
157
|
-
title: string;
|
|
158
|
-
}[];
|
|
159
|
-
/**
|
|
160
|
-
* A list of ion-icons to show.
|
|
161
|
-
*/
|
|
162
|
-
icons?: {
|
|
163
|
-
name: string;
|
|
164
|
-
title: string;
|
|
165
|
-
}[];
|
|
166
|
-
/**
|
|
167
|
-
* The colors of the event displayed.
|
|
168
|
-
*/
|
|
169
|
-
color?: {
|
|
170
|
-
primary: string;
|
|
171
|
-
secondary?: string;
|
|
172
|
-
} | any;
|
|
173
|
-
/**
|
|
174
|
-
* Whether the event is external; external events are less important UI-wise.
|
|
175
|
-
*/
|
|
176
|
-
external?: boolean;
|
|
177
|
-
/**
|
|
178
|
-
* The attendance status to this event, if any.
|
|
179
|
-
*/
|
|
180
|
-
attendance?: EventAttendance;
|
|
181
|
-
/**
|
|
182
|
-
* A standard and unique id for the event, valid across multiple sources.
|
|
183
|
-
*/
|
|
184
|
-
iCalUID?: string;
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Possible attendance statuses for the event.
|
|
188
|
-
*/
|
|
189
|
-
export declare enum EventAttendance {
|
|
190
|
-
DECLINED = -1,
|
|
191
|
-
NEEDS_ACTION = 0,
|
|
192
|
-
TENTATIVE = 1,
|
|
193
|
-
ACCEPTED = 2
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* The options to allow (or not) drag&drop to create a new event.
|
|
197
|
-
*/
|
|
198
|
-
export declare enum DragToCreateOptions {
|
|
199
|
-
DISABLED = 0,
|
|
200
|
-
ONLY_SAME_DAY = 1,
|
|
201
|
-
FREE = 2
|
|
202
|
-
}
|
package/src/agenda.module.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
import * as i1 from "./agenda.component";
|
|
3
|
-
import * as i2 from "./calendar.component";
|
|
4
|
-
import * as i3 from "./calendarItem.component";
|
|
5
|
-
import * as i4 from "./calendarCreation.component";
|
|
6
|
-
import * as i5 from "@angular/common";
|
|
7
|
-
import * as i6 from "@angular/forms";
|
|
8
|
-
import * as i7 from "@ionic/angular";
|
|
9
|
-
import * as i8 from "@idea-ionic/common";
|
|
10
|
-
import * as i9 from "@idea-ionic/uncommon";
|
|
11
|
-
import * as i10 from "angular-calendar";
|
|
12
|
-
export declare class IDEAAgendaModule {
|
|
13
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<IDEAAgendaModule, never>;
|
|
14
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<IDEAAgendaModule, [typeof i1.IDEAAgendaComponent, typeof i2.IDEACalendarComponent, typeof i3.IDEACalendarItemComponent, typeof i4.IDEACalendarCreationComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i7.IonicModule, typeof i8.IDEATranslationsModule, typeof i9.IDEAColorPickerComponent, typeof i8.IDEACheckerComponent, typeof i8.IDEAUserAvatarComponent, typeof i10.CalendarModule], [typeof i1.IDEAAgendaComponent, typeof i2.IDEACalendarComponent, typeof i3.IDEACalendarItemComponent, typeof i4.IDEACalendarCreationComponent]>;
|
|
15
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<IDEAAgendaModule>;
|
|
16
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { Calendar, Check, Membership } from 'idea-toolbox';
|
|
3
|
-
import { IDEACalendarsService } from './calendars.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class IDEACalendarComponent implements OnInit {
|
|
6
|
-
private _modal;
|
|
7
|
-
private _alert;
|
|
8
|
-
private _tc;
|
|
9
|
-
private _loading;
|
|
10
|
-
private _message;
|
|
11
|
-
private _API;
|
|
12
|
-
private _translate;
|
|
13
|
-
_calendars: IDEACalendarsService;
|
|
14
|
-
/**
|
|
15
|
-
* The calendar to manage.
|
|
16
|
-
*/
|
|
17
|
-
calendar: Calendar;
|
|
18
|
-
/**
|
|
19
|
-
* Whether we want to enable advanced permissions (based on the memberships) on the calendar.
|
|
20
|
-
*/
|
|
21
|
-
advancedPermissions: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Whether the calendar color is an important detail or it shouldn't be shown.
|
|
24
|
-
*/
|
|
25
|
-
hideColor: boolean;
|
|
26
|
-
calendarWC: Calendar;
|
|
27
|
-
membershipsChecks: Check[];
|
|
28
|
-
membership: Membership;
|
|
29
|
-
errors: Set<string>;
|
|
30
|
-
DEFAULT_COLOR: string;
|
|
31
|
-
ngOnInit(): Promise<void>;
|
|
32
|
-
hasFieldAnError(field: string): boolean;
|
|
33
|
-
save(): Promise<void>;
|
|
34
|
-
delete(): Promise<void>;
|
|
35
|
-
close(): void;
|
|
36
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<IDEACalendarComponent, never>;
|
|
37
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<IDEACalendarComponent, "idea-calendar", never, { "calendar": { "alias": "calendar"; "required": false; }; "advancedPermissions": { "alias": "advancedPermissions"; "required": false; }; "hideColor": { "alias": "hideColor"; "required": false; }; }, {}, never, never, false, never>;
|
|
38
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { Calendar, ExternalCalendarSources, Membership, Team } from 'idea-toolbox';
|
|
3
|
-
import { IDEACalendarsService } from './calendars.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class IDEACalendarCreationComponent implements OnInit {
|
|
6
|
-
private _modal;
|
|
7
|
-
private _loading;
|
|
8
|
-
private _message;
|
|
9
|
-
private _translate;
|
|
10
|
-
private _tc;
|
|
11
|
-
_calendars: IDEACalendarsService;
|
|
12
|
-
/**
|
|
13
|
-
* Whether we want to allow the creation of only a particular type of calendar, based on the scope.
|
|
14
|
-
*/
|
|
15
|
-
fixScope: CalendarScopes;
|
|
16
|
-
/**
|
|
17
|
-
* Whether we want to allow the creation of local calendars.
|
|
18
|
-
*/
|
|
19
|
-
onlyExternalCalendars: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* The URL to be used on the redirect calls.
|
|
22
|
-
*/
|
|
23
|
-
baseURL: string;
|
|
24
|
-
team: Team;
|
|
25
|
-
membership: Membership;
|
|
26
|
-
calendar: Calendar;
|
|
27
|
-
DEFAULT_COLOR: string;
|
|
28
|
-
SOURCES: string[];
|
|
29
|
-
ngOnInit(): void;
|
|
30
|
-
resetScope(): void;
|
|
31
|
-
canChangeScope(): boolean;
|
|
32
|
-
scopeIsSet(): boolean;
|
|
33
|
-
saveNewCalendar(service?: ExternalCalendarSources | string): Promise<void>;
|
|
34
|
-
close(): void;
|
|
35
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<IDEACalendarCreationComponent, never>;
|
|
36
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<IDEACalendarCreationComponent, "idea-calendar-creation", never, { "fixScope": { "alias": "fixScope"; "required": false; }; "onlyExternalCalendars": { "alias": "onlyExternalCalendars"; "required": false; }; "baseURL": { "alias": "baseURL"; "required": false; }; }, {}, never, never, false, never>;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* The possible scopes of the calendar.
|
|
40
|
-
*/
|
|
41
|
-
export declare enum CalendarScopes {
|
|
42
|
-
SHARED = "shared",// teamId
|
|
43
|
-
PRIVATE = "private"
|
|
44
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import { Calendar } from 'idea-toolbox';
|
|
3
|
-
import { IDEACalendarsService } from './calendars.service';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class IDEACalendarItemComponent {
|
|
6
|
-
private _alert;
|
|
7
|
-
private _modal;
|
|
8
|
-
private _message;
|
|
9
|
-
private _loading;
|
|
10
|
-
private _translate;
|
|
11
|
-
_calendars: IDEACalendarsService;
|
|
12
|
-
/**
|
|
13
|
-
* The calendar to show.
|
|
14
|
-
*/
|
|
15
|
-
calendar: Calendar;
|
|
16
|
-
/**
|
|
17
|
-
* Whether the component is disabled.
|
|
18
|
-
*/
|
|
19
|
-
disabled: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Whether we want to enable advanced permissions (based on the memberships) on the calendar.
|
|
22
|
-
*/
|
|
23
|
-
advancedPermissions: boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Whether the calendar color is an important detail or it shouldn't be shown.
|
|
26
|
-
*/
|
|
27
|
-
hideColor: boolean;
|
|
28
|
-
/**
|
|
29
|
-
* The URL to be used on the redirect calls.
|
|
30
|
-
*/
|
|
31
|
-
baseURL: string;
|
|
32
|
-
/**
|
|
33
|
-
* Report to parent components a change.
|
|
34
|
-
*/
|
|
35
|
-
somethingChanged: EventEmitter<Calendar>;
|
|
36
|
-
manageCalendar(): Promise<void>;
|
|
37
|
-
linkExtCalendarOrDelete(): Promise<void>;
|
|
38
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<IDEACalendarItemComponent, never>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<IDEACalendarItemComponent, "idea-calendar-item", never, { "calendar": { "alias": "calendar"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "advancedPermissions": { "alias": "advancedPermissions"; "required": false; }; "hideColor": { "alias": "hideColor"; "required": false; }; "baseURL": { "alias": "baseURL"; "required": false; }; }, { "somethingChanged": "somethingChanged"; }, never, never, false, never>;
|
|
40
|
-
}
|