@idea-ionic/agenda 7.2.5 → 7.2.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.
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
2
|
import { Browser } from '@capacitor/browser';
|
|
3
3
|
import { Calendar, ExternalCalendarSources, Suggestion } from 'idea-toolbox';
|
|
4
|
-
import { IDEASuggestionsComponent } from '@idea-ionic/common';
|
|
5
|
-
import { environment as env } from '@env/environment';
|
|
4
|
+
import { IDEAEnvironment, IDEASuggestionsComponent } from '@idea-ionic/common';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "@ionic/angular";
|
|
8
7
|
import * as i2 from "@idea-ionic/common";
|
|
@@ -20,6 +19,7 @@ export class IDEACalendarsService {
|
|
|
20
19
|
this.loading = loading;
|
|
21
20
|
this.API = API;
|
|
22
21
|
this.t = t;
|
|
22
|
+
this.env = inject(IDEAEnvironment);
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Get the ion-icon of an external service from its name.
|
|
@@ -91,27 +91,28 @@ export class IDEACalendarsService {
|
|
|
91
91
|
return new Promise((resolve, reject) => {
|
|
92
92
|
if (!cal.external)
|
|
93
93
|
return reject(new Error('NOT_EXTERNAL'));
|
|
94
|
+
const baseURL = window.location.protocol.concat('//', window.location.hostname);
|
|
94
95
|
let url;
|
|
95
96
|
switch (cal.external.service) {
|
|
96
97
|
case ExternalCalendarSources.GOOGLE:
|
|
97
98
|
url =
|
|
98
99
|
'https://accounts.google.com/o/oauth2/v2/auth?' +
|
|
99
|
-
`client_id=${encodeURIComponent(env.google.apiClientId)}` +
|
|
100
|
+
`client_id=${encodeURIComponent(this.env.google.apiClientId)}` +
|
|
100
101
|
'&response_type=code' +
|
|
101
|
-
`&redirect_uri=${encodeURIComponent(
|
|
102
|
+
`&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/google-calendars-integration'))}` +
|
|
102
103
|
'&include_granted_scopes=true' +
|
|
103
104
|
'&access_type=offline&prompt=consent' +
|
|
104
|
-
`&scope=${encodeURIComponent(env.google.apiScope)}` +
|
|
105
|
+
`&scope=${encodeURIComponent(this.env.google.apiScope)}` +
|
|
105
106
|
`&state=${encodeURIComponent(cal.calendarId)}`;
|
|
106
107
|
break;
|
|
107
108
|
case ExternalCalendarSources.MICROSOFT:
|
|
108
109
|
url =
|
|
109
110
|
'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +
|
|
110
|
-
`client_id=${encodeURIComponent(env.microsoft.apiClientId)}` +
|
|
111
|
+
`client_id=${encodeURIComponent(this.env.microsoft.apiClientId)}` +
|
|
111
112
|
'&response_type=code' +
|
|
112
|
-
`&redirect_uri=${encodeURIComponent(
|
|
113
|
+
`&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/microsoft-calendars-integration'))}` +
|
|
113
114
|
'&response_mode=query' +
|
|
114
|
-
`&scope=${encodeURIComponent(env.microsoft.apiScope)}` +
|
|
115
|
+
`&scope=${encodeURIComponent(this.env.microsoft.apiScope)}` +
|
|
115
116
|
`&state=${encodeURIComponent(cal.calendarId)}`;
|
|
116
117
|
break;
|
|
117
118
|
}
|
|
@@ -251,4 +252,4 @@ export class IDEACalendarsService {
|
|
|
251
252
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: IDEACalendarsService, decorators: [{
|
|
252
253
|
type: Injectable
|
|
253
254
|
}], ctorParameters: () => [{ type: i1.ModalController }, { type: i1.AlertController }, { type: i2.IDEAMessageService }, { type: i2.IDEALoadingService }, { type: i2.IDEAAWSAPIService }, { type: i2.IDEATranslationsService }] });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUtMLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxXQUFXLElBQUksR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFFdEQ7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQ1MsU0FBMEIsRUFDMUIsU0FBMEIsRUFDMUIsT0FBMkIsRUFDM0IsT0FBMkIsRUFDM0IsR0FBc0IsRUFDdEIsQ0FBMEI7UUFMMUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsTUFBQyxHQUFELENBQUMsQ0FBeUI7SUFDaEMsQ0FBQztJQUVKOztPQUVHO0lBQ0ksY0FBYyxDQUFDLE9BQWdDO1FBQ3BELFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDaEIsS0FBSyx1QkFBdUIsQ0FBQyxNQUFNO2dCQUNqQyxPQUFPLGFBQWEsQ0FBQztZQUN2QixLQUFLLHVCQUF1QixDQUFDLFNBQVM7Z0JBQ3BDLE9BQU8sY0FBYyxDQUFDO1lBQ3hCO2dCQUNFLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ0Q7O09BRUc7SUFDSSxhQUFhLENBQUMsUUFBa0I7UUFDckMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWSxDQUFDLEdBQWE7UUFDL0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQ3RFLElBQUksQ0FBQyxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLEdBQWE7UUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQ2pHLElBQUksQ0FBQyxDQUFDLEdBQWEsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLEdBQWE7UUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO2lCQUN6RixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3JCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOztPQUVHO0lBQ0ksbUJBQW1CLENBQUMsR0FBYSxFQUFFLFVBQWtCO1FBQzFELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO2dCQUMxQixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFO2FBQ3RELENBQUM7aUJBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLEdBQWE7UUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLEdBQVcsQ0FBQztZQUNoQixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdCLEtBQUssdUJBQXVCLENBQUMsTUFBTTtvQkFDakMsR0FBRzt3QkFDRCwrQ0FBK0M7NEJBQy9DLGFBQWEsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRTs0QkFDekQscUJBQXFCOzRCQUNyQixpQkFBaUIsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLEVBQUU7NEJBQ3BHLDhCQUE4Qjs0QkFDOUIscUNBQXFDOzRCQUNyQyxVQUFVLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7NEJBQ25ELFVBQVUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pELE1BQU07Z0JBQ1IsS0FBSyx1QkFBdUIsQ0FBQyxTQUFTO29CQUNwQyxHQUFHO3dCQUNELGlFQUFpRTs0QkFDakUsYUFBYSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFOzRCQUM1RCxxQkFBcUI7NEJBQ3JCLGlCQUFpQixrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLHVDQUF1QyxDQUFDLENBQUMsRUFBRTs0QkFDdkcsc0JBQXNCOzRCQUN0QixVQUFVLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7NEJBQ3RELFVBQVUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pELE1BQU07WUFDVixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUc7Z0JBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ3RELHFDQUFxQztZQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM5QixpRUFBaUU7Z0JBQ2pFLElBQUksQ0FBQyxTQUFTO3FCQUNYLE1BQU0sQ0FBQztvQkFDTixNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsd0NBQXdDLENBQUM7b0JBQzFELE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwREFBMEQsQ0FBQztvQkFDN0UsZUFBZSxFQUFFLEtBQUs7b0JBQ3RCLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2lCQUN2RSxDQUFDO3FCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxHQUFhO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsZ0dBQWdHO1lBQ2hHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlDLElBQUksRUFBRSxJQUFJO2dCQUNWLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtnQkFDMUIsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFO2FBQ3JDLENBQUM7aUJBQ0MsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ3BCLDhFQUE4RTtnQkFDOUUsTUFBTSxPQUFPLEdBQUcsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsbUNBQW1DO2dCQUNuQyxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzdCLEtBQUssdUJBQXVCLENBQUMsTUFBTTt3QkFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7NkJBQ2xCLEdBQUcsQ0FBQyw4REFBOEQsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDOzZCQUNoRixTQUFTLEVBQUU7NkJBQ1gsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFnQixDQUFDLENBQUMsQ0FBQzs2QkFDdEcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzdCLE1BQU07b0JBQ1IsS0FBSyx1QkFBdUIsQ0FBQyxTQUFTO3dCQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTs2QkFDbEIsR0FBRyxDQUFDLCtDQUErQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7NkJBQ2pFLFNBQVMsRUFBRTs2QkFDWCxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQWdCLENBQUMsQ0FBQyxDQUFDOzZCQUNuRyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsTUFBTTtnQkFDVixDQUFDO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLDRCQUE0QixDQUFDLEdBQWE7UUFDL0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDO2lCQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2YsNkNBQTZDO2dCQUM3QyxJQUFJLENBQUMsUUFBUTtvQkFBRSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMscURBQXFEO2dCQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztxQkFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ssS0FBSyxDQUFDLGdDQUFnQyxDQUFDLEdBQWE7UUFDMUQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztpQkFDM0IsSUFBSSxDQUFDLENBQUMsT0FBc0IsRUFBRSxFQUFFO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSw0REFBNEQ7Z0JBQzVELElBQUksQ0FBQyxTQUFTO3FCQUNYLE1BQU0sQ0FBQztvQkFDTixTQUFTLEVBQUUsd0JBQXdCO29CQUNuQyxjQUFjLEVBQUU7d0JBQ2QsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDckUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMkRBQTJELENBQUM7d0JBQ3hGLFFBQVEsRUFBRSxJQUFJO3dCQUNkLFlBQVksRUFBRSxJQUFJO3dCQUNsQixlQUFlLEVBQUUsSUFBSTt3QkFDckIsVUFBVSxFQUFFLElBQUk7cUJBQ2pCO29CQUNELGVBQWUsRUFBRSxLQUFLO2lCQUN2QixDQUFDO3FCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDWixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1RSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDekIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxHQUFhO1FBQy9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUNEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsR0FBYSxFQUFFLElBQTJCO1FBQ25FLDRGQUE0RjtRQUM1RixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlDLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1lBQzFCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1NBQzVELENBQUM7YUFDQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNqQixJQUFJLEdBQUcsQ0FBQyxRQUFRO2dCQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O2dCQUNoRCxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7OEdBdk9VLG9CQUFvQjtrSEFBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7IENhbGVuZGFyLCBFeHRlcm5hbENhbGVuZGFyU291cmNlcywgU3VnZ2VzdGlvbiB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQge1xuICBJREVBTG9hZGluZ1NlcnZpY2UsXG4gIElERUFBV1NBUElTZXJ2aWNlLFxuICBJREVBTWVzc2FnZVNlcnZpY2UsXG4gIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICBJREVBU3VnZ2VzdGlvbnNDb21wb25lbnRcbn0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcbmltcG9ydCB7IGVudmlyb25tZW50IGFzIGVudiB9IGZyb20gJ0BlbnYvZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIE5vdGU6IHRvIHRlc3QgbG9jYWxseSwgeW91IG5lZWQgdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZSByZWRpcmVjdCBVUkk6XG4gKiAgLSBpbiB0aGUgbGFtYmRhIGBpZGVhX2NhbGVuZGFyc2AsIGUuZy4gYFNDQVJMRVRUX1VSTGA7XG4gKiAgLSBpbiB0aGUgY2xpZW50IGNvbmZpZyBmaWxlOiBgQVBQX1VSTGAuXG4gKiBJbiBib3RoIGNhc2VzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0byBgaHR0cDovL2xvY2FsaG9zdDo4MTAwYCAob3IgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCBVUkwpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFyc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHVibGljIGFsZXJ0Q3RybDogQWxlcnRDb250cm9sbGVyLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBJREVBTWVzc2FnZVNlcnZpY2UsXG4gICAgcHVibGljIGxvYWRpbmc6IElERUFMb2FkaW5nU2VydmljZSxcbiAgICBwdWJsaWMgQVBJOiBJREVBQVdTQVBJU2VydmljZSxcbiAgICBwdWJsaWMgdDogSURFQVRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlvbi1pY29uIG9mIGFuIGV4dGVybmFsIHNlcnZpY2UgZnJvbSBpdHMgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXRTZXJ2aWNlSWNvbihzZXJ2aWNlOiBFeHRlcm5hbENhbGVuZGFyU291cmNlcyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChzZXJ2aWNlKSB7XG4gICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLkdPT0dMRTpcbiAgICAgICAgcmV0dXJuICdsb2dvLWdvb2dsZSc7XG4gICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLk1JQ1JPU09GVDpcbiAgICAgICAgcmV0dXJuICdsb2dvLXdpbmRvd3MnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdoZWxwJztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZSBVUkwgZm9yIEFQSSByZXF1ZXN0IChzaGFyZWQvcHJpdmF0ZSBjYWxlbmRhcikuXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVxdWVzdFVSTChjYWxlbmRhcjogQ2FsZW5kYXIpOiBzdHJpbmcge1xuICAgIHJldHVybiAoY2FsZW5kYXIudGVhbUlkID8gYHRlYW1zLyR7Y2FsZW5kYXIudGVhbUlkfS9gIDogJycpLmNvbmNhdCgnY2FsZW5kYXJzJyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIHBvc3RDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLkFQSS5wb3N0UmVzb3VyY2UodGhpcy5nZXRSZXF1ZXN0VVJMKGNhbCksIHsgaWRlYTogdHJ1ZSwgYm9keTogY2FsIH0pXG4gICAgICAgIC50aGVuKChyZXM6IENhbGVuZGFyKSA9PiByZXNvbHZlKG5ldyBDYWxlbmRhcihyZXMpKSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBleGlzdGluZyBjYWxlbmRhci5cbiAgICovXG4gIHB1YmxpYyBwdXRDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLkFQSS5wdXRSZXNvdXJjZSh0aGlzLmdldFJlcXVlc3RVUkwoY2FsKSwgeyBpZGVhOiB0cnVlLCByZXNvdXJjZUlkOiBjYWwuY2FsZW5kYXJJZCwgYm9keTogY2FsIH0pXG4gICAgICAgIC50aGVuKChyZXM6IENhbGVuZGFyKSA9PiByZXNvbHZlKG5ldyBDYWxlbmRhcihyZXMpKSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIERlbGV0ZSBhIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUNhbGVuZGFyKGNhbDogQ2FsZW5kYXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5BUEkuZGVsZXRlUmVzb3VyY2UodGhpcy5nZXRSZXF1ZXN0VVJMKGNhbCksIHsgaWRlYTogdHJ1ZSwgcmVzb3VyY2VJZDogY2FsLmNhbGVuZGFySWQgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4gcmVzb2x2ZSgpKVxuICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQXNzb2NpYXRlIGFuIGV4dGVybmFsIGNhbGVuZGFyIHdpdGggdGhlIGdpdmVuIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIHNldEV4dGVybmFsQ2FsZW5kYXIoY2FsOiBDYWxlbmRhciwgZXh0ZXJuYWxJZDogc3RyaW5nKTogUHJvbWlzZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLkFQSS5wYXRjaFJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCB7XG4gICAgICAgIGlkZWE6IHRydWUsXG4gICAgICAgIHJlc291cmNlSWQ6IGNhbC5jYWxlbmRhcklkLFxuICAgICAgICBib2R5OiB7IGFjdGlvbjogJ1NFVF9FWFRFUk5BTF9DQUxFTkRBUicsIGV4dGVybmFsSWQgfVxuICAgICAgfSlcbiAgICAgICAgLnRoZW4ocmVzID0+IHJlc29sdmUobmV3IENhbGVuZGFyKHJlcykpKVxuICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW5rIHRoZSBjYWxlbmRhciB3aXRoIHRoZSBjaG9zZW4gZXh0ZXJuYWwgc2VydmljZSAoYXV0aCBmbG93KS5cbiAgICovXG4gIHB1YmxpYyBsaW5rRXh0U2VydmljZShjYWw6IENhbGVuZGFyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghY2FsLmV4dGVybmFsKSByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTk9UX0VYVEVSTkFMJykpO1xuICAgICAgbGV0IHVybDogc3RyaW5nO1xuICAgICAgc3dpdGNoIChjYWwuZXh0ZXJuYWwuc2VydmljZSkge1xuICAgICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLkdPT0dMRTpcbiAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgJ2h0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi92Mi9hdXRoPycgK1xuICAgICAgICAgICAgYGNsaWVudF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudChlbnYuZ29vZ2xlLmFwaUNsaWVudElkKX1gICtcbiAgICAgICAgICAgICcmcmVzcG9uc2VfdHlwZT1jb2RlJyArXG4gICAgICAgICAgICBgJnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChlbnYuaWRlYS5hcHAudXJsLmNvbmNhdCgnL2VjaG8vZ29vZ2xlLWNhbGVuZGFycy1pbnRlZ3JhdGlvbicpKX1gICtcbiAgICAgICAgICAgICcmaW5jbHVkZV9ncmFudGVkX3Njb3Blcz10cnVlJyArXG4gICAgICAgICAgICAnJmFjY2Vzc190eXBlPW9mZmxpbmUmcHJvbXB0PWNvbnNlbnQnICtcbiAgICAgICAgICAgIGAmc2NvcGU9JHtlbmNvZGVVUklDb21wb25lbnQoZW52Lmdvb2dsZS5hcGlTY29wZSl9YCArXG4gICAgICAgICAgICBgJnN0YXRlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbC5jYWxlbmRhcklkKX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLk1JQ1JPU09GVDpcbiAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vb2F1dGgyL3YyLjAvYXV0aG9yaXplPycgK1xuICAgICAgICAgICAgYGNsaWVudF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudChlbnYubWljcm9zb2Z0LmFwaUNsaWVudElkKX1gICtcbiAgICAgICAgICAgICcmcmVzcG9uc2VfdHlwZT1jb2RlJyArXG4gICAgICAgICAgICBgJnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChlbnYuaWRlYS5hcHAudXJsLmNvbmNhdCgnL2VjaG8vbWljcm9zb2Z0LWNhbGVuZGFycy1pbnRlZ3JhdGlvbicpKX1gICtcbiAgICAgICAgICAgICcmcmVzcG9uc2VfbW9kZT1xdWVyeScgK1xuICAgICAgICAgICAgYCZzY29wZT0ke2VuY29kZVVSSUNvbXBvbmVudChlbnYubWljcm9zb2Z0LmFwaVNjb3BlKX1gICtcbiAgICAgICAgICAgIGAmc3RhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoY2FsLmNhbGVuZGFySWQpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoIXVybCkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ0lOVkFMSURfU0VSVklDRScpKTtcbiAgICAgIC8vIHN0YXJ0IHRoZSBhdXRoIGZsb3cgaW4gdGhlIGJyb3dzZXJcbiAgICAgIEJyb3dzZXIub3Blbih7IHVybCB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGVuL2lmIHRoZSBhdXRoIGZsb3cgd2lsbCBmaW5pc2gsIHdlIHdhaXRcbiAgICAgICAgdGhpcy5hbGVydEN0cmxcbiAgICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy50Ll8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LSU5HX0NBTEVOREFSJyksXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnQuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkxJTktJTkdfQ0FMRU5EQVJfQ09ORklSTV9PTkNFX0RPTkUnKSxcbiAgICAgICAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgICAgICAgICBidXR0b25zOiBbeyB0ZXh0OiB0aGlzLnQuXygnQ09NTU9OLkRPTkUnKSwgaGFuZGxlcjogKCkgPT4gcmVzb2x2ZSgpIH1dXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihhbGVydCA9PiBhbGVydC5wcmVzZW50KCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlcm5hbCBjYWxlbmRhcnMgbGlzdCBvZiB0aGUgZXh0ZXJuYWwgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBnZXRFeHRlcm5hbENhbGVuZGFycyhjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxFeHRDYWxlbmRhcltdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghY2FsLmV4dGVybmFsKSByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTk9UX0VYVEVSTkFMJykpO1xuICAgICAgLy8gZ2V0IHRoZSBhY2Nlc3MgdG9rZW4gdG8gbWFrZSByZXF1ZXN0czsgaW4gY2FzZSBpdCBmYWlscywgcHJvY2VlZCB0byBsaW5rIHRoZSBleHRlcm5hbCBzZXJ2aWNlXG4gICAgICB0aGlzLkFQSS5wYXRjaFJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCB7XG4gICAgICAgIGlkZWE6IHRydWUsXG4gICAgICAgIHJlc291cmNlSWQ6IGNhbC5jYWxlbmRhcklkLFxuICAgICAgICBib2R5OiB7IGFjdGlvbjogJ0dFVF9BQ0NFU1NfVE9LRU4nIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGhlYWRlcnMgKGF1dGhvcml6YXRpb24pIGZvciB0aGUgcmVxdWVzdCB0byB0aGUgZXh0ZXJuYWwgc2VydmljZVxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IEF1dGhvcml6YXRpb246ICdCZWFyZXIgJy5jb25jYXQocmVzdWx0LnRva2VuKSB9O1xuICAgICAgICAgIC8vIGFjcXVpcmUgYW5kIHJldHVybiB0aGUgY2FsZW5kYXJzXG4gICAgICAgICAgc3dpdGNoIChjYWwuZXh0ZXJuYWwuc2VydmljZSkge1xuICAgICAgICAgICAgY2FzZSBFeHRlcm5hbENhbGVuZGFyU291cmNlcy5HT09HTEU6XG4gICAgICAgICAgICAgIHRoaXMuQVBJLnJhd1JlcXVlc3QoKVxuICAgICAgICAgICAgICAgIC5nZXQoJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NhbGVuZGFyL3YzL3VzZXJzL21lL2NhbGVuZGFyTGlzdCcsIHsgaGVhZGVycyB9KVxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzb2x2ZShyZXMuaXRlbXMubWFwKChjOiBhbnkpID0+ICh7IG5hbWU6IGMuc3VtbWFyeSwgaWQ6IGMuaWQgfSkgYXMgRXh0Q2FsZW5kYXIpKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLk1JQ1JPU09GVDpcbiAgICAgICAgICAgICAgdGhpcy5BUEkucmF3UmVxdWVzdCgpXG4gICAgICAgICAgICAgICAgLmdldCgnaHR0cHM6Ly9ncmFwaC5taWNyb3NvZnQuY29tL3YxLjAvbWUvY2FsZW5kYXJzJywgeyBoZWFkZXJzIH0pXG4gICAgICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXNvbHZlKHJlcy52YWx1ZS5tYXAoKGM6IGFueSkgPT4gKHsgbmFtZTogYy5uYW1lLCBpZDogYy5pZCB9KSBhcyBFeHRDYWxlbmRhcikpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBleHRlcm5hbCBzZXJ2aWNlIGlzIGxpbmtlZCwgY2hvb3NlIGFuIGV4dGVybmFsIGNhbGVuZGFyIGFuZCBzZXQgaXQgZm9yIHRoZSBjaG9zZW4gY2FsZW5kYXIuXG4gICAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgY2FsZW5kYXIuXG4gICAqL1xuICBwdWJsaWMgY2hvb3NlQW5kU2V0RXh0ZXJuYWxDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLm9wZW5Nb2RhbEFuZFBpY2tFeHRlcm5hbENhbGVuZGFyKGNhbClcbiAgICAgICAgLnRoZW4oZXh0Q2FsSWQgPT4ge1xuICAgICAgICAgIC8vIHRoZSBleHRlcm5hbCBjYWxlbmRhciB3aWxsIGJlIHNldCBsYXRlciBvblxuICAgICAgICAgIGlmICghZXh0Q2FsSWQpIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIC8vIGFuIGV4dGVybmFsIGNhbGVuZGFyIHdhcyBjaG9zZW46IHNldCBpdCByaWdodCBhd2F5XG4gICAgICAgICAgdGhpcy5zZXRFeHRlcm5hbENhbGVuZGFyKGNhbCwgZXh0Q2FsSWQpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gcmVzb2x2ZShyZXMpKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBPcGVuIHRoZSBtb2RhbCB0byBwaWNrIGEgY2FsZW5kYXIgZnJvbSB0aGUgZXh0ZXJuYWwgc2VydmljZS5cbiAgICogQHJldHVybiB0aGUgaWQgb2YgdGhlIGV4dGVybmFsIGNhbGVuZGFyLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBvcGVuTW9kYWxBbmRQaWNrRXh0ZXJuYWxDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRpbmcuc2hvdygpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmdldEV4dGVybmFsQ2FsZW5kYXJzKGNhbClcbiAgICAgICAgLnRoZW4oKGV4dENhbHM6IEV4dENhbGVuZGFyW10pID0+IHtcbiAgICAgICAgICBpZiAoIWV4dENhbHMubGVuZ3RoKSByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTk9fRVhURVJOQUxfQ0FMRU5EQVJTJykpO1xuICAgICAgICAgIC8vIGxldCB0aGUgdXNlciB0byBjaG9vc2UgdGhlIGV4dGVybmFsIGNhbGVuZGFyIHRvIGFzc29jaWF0ZVxuICAgICAgICAgIHRoaXMubW9kYWxDdHJsXG4gICAgICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICAgICAgY29tcG9uZW50OiBJREVBU3VnZ2VzdGlvbnNDb21wb25lbnQsXG4gICAgICAgICAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgICAgICAgICAgZGF0YTogZXh0Q2Fscy5tYXAoYyA9PiBuZXcgU3VnZ2VzdGlvbih7IHZhbHVlOiBjLmlkLCBuYW1lOiBjLm5hbWUgfSkpLFxuICAgICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiB0aGlzLnQuXygnSURFQV9BR0VOREEuQ0FMRU5EQVJTLkNIT09TRV9BTl9FWFRFUk5BTF9DQUxFTkRBUl9UT19MSU5LJyksXG4gICAgICAgICAgICAgICAgc29ydERhdGE6IHRydWUsXG4gICAgICAgICAgICAgICAgaGlkZUlkRnJvbVVJOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhpZGVDbGVhckJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtdXN0Q2hvb3NlOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihtb2RhbCA9PiB7XG4gICAgICAgICAgICAgIG1vZGFsLm9uRGlkRGlzbWlzcygpLnRoZW4ocmVzID0+IHJlc29sdmUocmVzLmRhdGEgPyByZXMuZGF0YS52YWx1ZSA6IG51bGwpKTtcbiAgICAgICAgICAgICAgbW9kYWwucHJlc2VudCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZy5oaWRlKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcnN0IHN5bmMgb2YgdGhlIGV4dGVuYWwgY2FsZW5kYXIuXG4gICAqL1xuICBwdWJsaWMgc3luY0NhbGVuZGFyKGNhbDogQ2FsZW5kYXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gdGhpcy5zeW5jQ2FsZW5kYXJIZWxwZXIoY2FsLCBlcnIgPT4gKGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgpKSkpO1xuICB9XG4gIC8qKlxuICAgKiBIZWxwZXIgdG8gcmVjdXJzaXZlbHkgc3luYyBhbiB0aGUgZXh0ZW5hbCBjYWxlbmRhci5cbiAgICovXG4gIHByaXZhdGUgc3luY0NhbGVuZGFySGVscGVyKGNhbDogQ2FsZW5kYXIsIGRvbmU6IChlcnI/OiBFcnJvcikgPT4gdm9pZCkge1xuICAgIC8vIHRoaXMgaXMgYSByZWN1cnNpdmUgb3BlcmF0aW9uOiB0aGUgQVBJIHJldHVybnMgaWYgdGhlIHN5bmMgaGFzIHRvIGNvbnRpbnVlIG9yIGl0IGZpbmlzaGVkXG4gICAgdGhpcy5BUEkucGF0Y2hSZXNvdXJjZSh0aGlzLmdldFJlcXVlc3RVUkwoY2FsKSwge1xuICAgICAgaWRlYTogdHJ1ZSxcbiAgICAgIHJlc291cmNlSWQ6IGNhbC5jYWxlbmRhcklkLFxuICAgICAgYm9keTogeyBhY3Rpb246ICdTWU5DX0VYVEVSTkFMX0NBTEVOREFSJywgZmlyc3RTeW5jOiB0cnVlIH1cbiAgICB9KVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMubW9yZURhdGEpIHRoaXMuc3luY0NhbGVuZGFySGVscGVyKGNhbCwgZG9uZSk7XG4gICAgICAgIGVsc2UgZG9uZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnIgPT4gZG9uZShlcnIpKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBzdHJ1Y3R1cmUgdG8gZGVmaW5lIGV4dGVybmFsIHNlcnZpY2VzJyBjYWxlbmRhcnMgKGJhc2ljIGluZm8pLlxuICovXG5pbnRlcmZhY2UgRXh0Q2FsZW5kYXIge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG4iXX0=
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXJzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9zcmMvY2FsZW5kYXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdFLE9BQU8sRUFDTCxlQUFlLEVBS2Ysd0JBQXdCLEVBQ3pCLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFFNUI7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLFlBQ1MsU0FBMEIsRUFDMUIsU0FBMEIsRUFDMUIsT0FBMkIsRUFDM0IsT0FBMkIsRUFDM0IsR0FBc0IsRUFDdEIsQ0FBMEI7UUFMMUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsTUFBQyxHQUFELENBQUMsQ0FBeUI7UUFSekIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQVNyQyxDQUFDO0lBRUo7O09BRUc7SUFDSSxjQUFjLENBQUMsT0FBZ0M7UUFDcEQsUUFBUSxPQUFPLEVBQUUsQ0FBQztZQUNoQixLQUFLLHVCQUF1QixDQUFDLE1BQU07Z0JBQ2pDLE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssdUJBQXVCLENBQUMsU0FBUztnQkFDcEMsT0FBTyxjQUFjLENBQUM7WUFDeEI7Z0JBQ0UsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFD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O2FBQ0MsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxHQUFHLENBQUMsUUFBUTtnQkFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztnQkFDaEQsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDOzhHQTFPVSxvQkFBb0I7a0hBQXBCLG9CQUFvQjs7MkZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7IENhbGVuZGFyLCBFeHRlcm5hbENhbGVuZGFyU291cmNlcywgU3VnZ2VzdGlvbiB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQge1xuICBJREVBRW52aXJvbm1lbnQsXG4gIElERUFMb2FkaW5nU2VydmljZSxcbiAgSURFQUFXU0FQSVNlcnZpY2UsXG4gIElERUFNZXNzYWdlU2VydmljZSxcbiAgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UsXG4gIElERUFTdWdnZXN0aW9uc0NvbXBvbmVudFxufSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG4vKipcbiAqIE5vdGU6IHRvIHRlc3QgbG9jYWxseSwgeW91IG5lZWQgdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZSByZWRpcmVjdCBVUkk6XG4gKiAgLSBpbiB0aGUgbGFtYmRhIGBpZGVhX2NhbGVuZGFyc2AsIGUuZy4gYFNDQVJMRVRUX1VSTGA7XG4gKiAgLSBpbiB0aGUgY2xpZW50IGNvbmZpZyBmaWxlOiBgQVBQX1VSTGAuXG4gKiBJbiBib3RoIGNhc2VzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0byBgaHR0cDovL2xvY2FsaG9zdDo4MTAwYCAob3IgYWNjb3JkaW5nIHRvIHRoZSBsb2NhbCBVUkwpLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSURFQUNhbGVuZGFyc1NlcnZpY2Uge1xuICBwcm90ZWN0ZWQgZW52ID0gaW5qZWN0KElERUFFbnZpcm9ubWVudCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHB1YmxpYyBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwdWJsaWMgbWVzc2FnZTogSURFQU1lc3NhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2FkaW5nOiBJREVBTG9hZGluZ1NlcnZpY2UsXG4gICAgcHVibGljIEFQSTogSURFQUFXU0FQSVNlcnZpY2UsXG4gICAgcHVibGljIHQ6IElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogR2V0IHRoZSBpb24taWNvbiBvZiBhbiBleHRlcm5hbCBzZXJ2aWNlIGZyb20gaXRzIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VydmljZUljb24oc2VydmljZTogRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoc2VydmljZSkge1xuICAgICAgY2FzZSBFeHRlcm5hbENhbGVuZGFyU291cmNlcy5HT09HTEU6XG4gICAgICAgIHJldHVybiAnbG9nby1nb29nbGUnO1xuICAgICAgY2FzZSBFeHRlcm5hbENhbGVuZGFyU291cmNlcy5NSUNST1NPRlQ6XG4gICAgICAgIHJldHVybiAnbG9nby13aW5kb3dzJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnaGVscCc7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2UgVVJMIGZvciBBUEkgcmVxdWVzdCAoc2hhcmVkL3ByaXZhdGUgY2FsZW5kYXIpLlxuICAgKi9cbiAgcHVibGljIGdldFJlcXVlc3RVUkwoY2FsZW5kYXI6IENhbGVuZGFyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNhbGVuZGFyLnRlYW1JZCA/IGB0ZWFtcy8ke2NhbGVuZGFyLnRlYW1JZH0vYCA6ICcnKS5jb25jYXQoJ2NhbGVuZGFycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBjYWxlbmRhci5cbiAgICovXG4gIHB1YmxpYyBwb3N0Q2FsZW5kYXIoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8Q2FsZW5kYXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5BUEkucG9zdFJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCB7IGlkZWE6IHRydWUsIGJvZHk6IGNhbCB9KVxuICAgICAgICAudGhlbigocmVzOiBDYWxlbmRhcikgPT4gcmVzb2x2ZShuZXcgQ2FsZW5kYXIocmVzKSkpXG4gICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgY2FsZW5kYXIuXG4gICAqL1xuICBwdWJsaWMgcHV0Q2FsZW5kYXIoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8Q2FsZW5kYXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5BUEkucHV0UmVzb3VyY2UodGhpcy5nZXRSZXF1ZXN0VVJMKGNhbCksIHsgaWRlYTogdHJ1ZSwgcmVzb3VyY2VJZDogY2FsLmNhbGVuZGFySWQsIGJvZHk6IGNhbCB9KVxuICAgICAgICAudGhlbigocmVzOiBDYWxlbmRhcikgPT4gcmVzb2x2ZShuZXcgQ2FsZW5kYXIocmVzKSkpXG4gICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBEZWxldGUgYSBjYWxlbmRhci5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuQVBJLmRlbGV0ZVJlc291cmNlKHRoaXMuZ2V0UmVxdWVzdFVSTChjYWwpLCB7IGlkZWE6IHRydWUsIHJlc291cmNlSWQ6IGNhbC5jYWxlbmRhcklkIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHJlc29sdmUoKSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEFzc29jaWF0ZSBhbiBleHRlcm5hbCBjYWxlbmRhciB3aXRoIHRoZSBnaXZlbiBjYWxlbmRhci5cbiAgICovXG4gIHB1YmxpYyBzZXRFeHRlcm5hbENhbGVuZGFyKGNhbDogQ2FsZW5kYXIsIGV4dGVybmFsSWQ6IHN0cmluZyk6IFByb21pc2U8Q2FsZW5kYXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5BUEkucGF0Y2hSZXNvdXJjZSh0aGlzLmdldFJlcXVlc3RVUkwoY2FsKSwge1xuICAgICAgICBpZGVhOiB0cnVlLFxuICAgICAgICByZXNvdXJjZUlkOiBjYWwuY2FsZW5kYXJJZCxcbiAgICAgICAgYm9keTogeyBhY3Rpb246ICdTRVRfRVhURVJOQUxfQ0FMRU5EQVInLCBleHRlcm5hbElkIH1cbiAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlcyA9PiByZXNvbHZlKG5ldyBDYWxlbmRhcihyZXMpKSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGluayB0aGUgY2FsZW5kYXIgd2l0aCB0aGUgY2hvc2VuIGV4dGVybmFsIHNlcnZpY2UgKGF1dGggZmxvdykuXG4gICAqL1xuICBwdWJsaWMgbGlua0V4dFNlcnZpY2UoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIWNhbC5leHRlcm5hbCkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05PVF9FWFRFUk5BTCcpKTtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wuY29uY2F0KCcvLycsIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk7XG4gICAgICBsZXQgdXJsOiBzdHJpbmc7XG4gICAgICBzd2l0Y2ggKGNhbC5leHRlcm5hbC5zZXJ2aWNlKSB7XG4gICAgICAgIGNhc2UgRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMuR09PR0xFOlxuICAgICAgICAgIHVybCA9XG4gICAgICAgICAgICAnaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tL28vb2F1dGgyL3YyL2F1dGg/JyArXG4gICAgICAgICAgICBgY2xpZW50X2lkPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52Lmdvb2dsZS5hcGlDbGllbnRJZCl9YCArXG4gICAgICAgICAgICAnJnJlc3BvbnNlX3R5cGU9Y29kZScgK1xuICAgICAgICAgICAgYCZyZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQoYmFzZVVSTC5jb25jYXQoJy9lY2hvL2dvb2dsZS1jYWxlbmRhcnMtaW50ZWdyYXRpb24nKSl9YCArXG4gICAgICAgICAgICAnJmluY2x1ZGVfZ3JhbnRlZF9zY29wZXM9dHJ1ZScgK1xuICAgICAgICAgICAgJyZhY2Nlc3NfdHlwZT1vZmZsaW5lJnByb21wdD1jb25zZW50JyArXG4gICAgICAgICAgICBgJnNjb3BlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52Lmdvb2dsZS5hcGlTY29wZSl9YCArXG4gICAgICAgICAgICBgJnN0YXRlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbC5jYWxlbmRhcklkKX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEV4dGVybmFsQ2FsZW5kYXJTb3VyY2VzLk1JQ1JPU09GVDpcbiAgICAgICAgICB1cmwgPVxuICAgICAgICAgICAgJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vb2F1dGgyL3YyLjAvYXV0aG9yaXplPycgK1xuICAgICAgICAgICAgYGNsaWVudF9pZD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmVudi5taWNyb3NvZnQuYXBpQ2xpZW50SWQpfWAgK1xuICAgICAgICAgICAgJyZyZXNwb25zZV90eXBlPWNvZGUnICtcbiAgICAgICAgICAgIGAmcmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VVUkwuY29uY2F0KCcvZWNoby9taWNyb3NvZnQtY2FsZW5kYXJzLWludGVncmF0aW9uJykpfWAgK1xuICAgICAgICAgICAgJyZyZXNwb25zZV9tb2RlPXF1ZXJ5JyArXG4gICAgICAgICAgICBgJnNjb3BlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52Lm1pY3Jvc29mdC5hcGlTY29wZSl9YCArXG4gICAgICAgICAgICBgJnN0YXRlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNhbC5jYWxlbmRhcklkKX1gO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKCF1cmwpIHJldHVybiByZWplY3QobmV3IEVycm9yKCdJTlZBTElEX1NFUlZJQ0UnKSk7XG4gICAgICAvLyBzdGFydCB0aGUgYXV0aCBmbG93IGluIHRoZSBicm93c2VyXG4gICAgICBCcm93c2VyLm9wZW4oeyB1cmwgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIHNpbmNlIHdlIGRvbid0IGtub3cgd2hlbi9pZiB0aGUgYXV0aCBmbG93IHdpbGwgZmluaXNoLCB3ZSB3YWl0XG4gICAgICAgIHRoaXMuYWxlcnRDdHJsXG4gICAgICAgICAgLmNyZWF0ZSh7XG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudC5fKCdJREVBX0FHRU5EQS5DQUxFTkRBUlMuTElOS0lOR19DQUxFTkRBUicpLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50Ll8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5MSU5LSU5HX0NBTEVOREFSX0NPTkZJUk1fT05DRV9ET05FJyksXG4gICAgICAgICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgICAgICAgICAgYnV0dG9uczogW3sgdGV4dDogdGhpcy50Ll8oJ0NPTU1PTi5ET05FJyksIGhhbmRsZXI6ICgpID0+IHJlc29sdmUoKSB9XVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oYWxlcnQgPT4gYWxlcnQucHJlc2VudCgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZXh0ZXJuYWwgY2FsZW5kYXJzIGxpc3Qgb2YgdGhlIGV4dGVybmFsIHNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0RXh0ZXJuYWxDYWxlbmRhcnMoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8RXh0Q2FsZW5kYXJbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIWNhbC5leHRlcm5hbCkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05PVF9FWFRFUk5BTCcpKTtcbiAgICAgIC8vIGdldCB0aGUgYWNjZXNzIHRva2VuIHRvIG1ha2UgcmVxdWVzdHM7IGluIGNhc2UgaXQgZmFpbHMsIHByb2NlZWQgdG8gbGluayB0aGUgZXh0ZXJuYWwgc2VydmljZVxuICAgICAgdGhpcy5BUEkucGF0Y2hSZXNvdXJjZSh0aGlzLmdldFJlcXVlc3RVUkwoY2FsKSwge1xuICAgICAgICBpZGVhOiB0cnVlLFxuICAgICAgICByZXNvdXJjZUlkOiBjYWwuY2FsZW5kYXJJZCxcbiAgICAgICAgYm9keTogeyBhY3Rpb246ICdHRVRfQUNDRVNTX1RPS0VOJyB9XG4gICAgICB9KVxuICAgICAgICAudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBwcmVwYXJlIHRoZSBoZWFkZXJzIChhdXRob3JpemF0aW9uKSBmb3IgdGhlIHJlcXVlc3QgdG8gdGhlIGV4dGVybmFsIHNlcnZpY2VcbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0geyBBdXRob3JpemF0aW9uOiAnQmVhcmVyICcuY29uY2F0KHJlc3VsdC50b2tlbikgfTtcbiAgICAgICAgICAvLyBhY3F1aXJlIGFuZCByZXR1cm4gdGhlIGNhbGVuZGFyc1xuICAgICAgICAgIHN3aXRjaCAoY2FsLmV4dGVybmFsLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIGNhc2UgRXh0ZXJuYWxDYWxlbmRhclNvdXJjZXMuR09PR0xFOlxuICAgICAgICAgICAgICB0aGlzLkFQSS5yYXdSZXF1ZXN0KClcbiAgICAgICAgICAgICAgICAuZ2V0KCdodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9jYWxlbmRhci92My91c2Vycy9tZS9jYWxlbmRhckxpc3QnLCB7IGhlYWRlcnMgfSlcbiAgICAgICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlc29sdmUocmVzLml0ZW1zLm1hcCgoYzogYW55KSA9PiAoeyBuYW1lOiBjLnN1bW1hcnksIGlkOiBjLmlkIH0pIGFzIEV4dENhbGVuZGFyKSkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFeHRlcm5hbENhbGVuZGFyU291cmNlcy5NSUNST1NPRlQ6XG4gICAgICAgICAgICAgIHRoaXMuQVBJLnJhd1JlcXVlc3QoKVxuICAgICAgICAgICAgICAgIC5nZXQoJ2h0dHBzOi8vZ3JhcGgubWljcm9zb2Z0LmNvbS92MS4wL21lL2NhbGVuZGFycycsIHsgaGVhZGVycyB9KVxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzb2x2ZShyZXMudmFsdWUubWFwKChjOiBhbnkpID0+ICh7IG5hbWU6IGMubmFtZSwgaWQ6IGMuaWQgfSkgYXMgRXh0Q2FsZW5kYXIpKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZXh0ZXJuYWwgc2VydmljZSBpcyBsaW5rZWQsIGNob29zZSBhbiBleHRlcm5hbCBjYWxlbmRhciBhbmQgc2V0IGl0IGZvciB0aGUgY2hvc2VuIGNhbGVuZGFyLlxuICAgKiBAcmV0dXJuIHRoZSB1cGRhdGVkIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIGNob29zZUFuZFNldEV4dGVybmFsQ2FsZW5kYXIoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8Q2FsZW5kYXI+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5vcGVuTW9kYWxBbmRQaWNrRXh0ZXJuYWxDYWxlbmRhcihjYWwpXG4gICAgICAgIC50aGVuKGV4dENhbElkID0+IHtcbiAgICAgICAgICAvLyB0aGUgZXh0ZXJuYWwgY2FsZW5kYXIgd2lsbCBiZSBzZXQgbGF0ZXIgb25cbiAgICAgICAgICBpZiAoIWV4dENhbElkKSByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAvLyBhbiBleHRlcm5hbCBjYWxlbmRhciB3YXMgY2hvc2VuOiBzZXQgaXQgcmlnaHQgYXdheVxuICAgICAgICAgIHRoaXMuc2V0RXh0ZXJuYWxDYWxlbmRhcihjYWwsIGV4dENhbElkKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHJlc29sdmUocmVzKSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogT3BlbiB0aGUgbW9kYWwgdG8gcGljayBhIGNhbGVuZGFyIGZyb20gdGhlIGV4dGVybmFsIHNlcnZpY2UuXG4gICAqIEByZXR1cm4gdGhlIGlkIG9mIHRoZSBleHRlcm5hbCBjYWxlbmRhci5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgb3Blbk1vZGFsQW5kUGlja0V4dGVybmFsQ2FsZW5kYXIoY2FsOiBDYWxlbmRhcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkaW5nLnNob3coKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5nZXRFeHRlcm5hbENhbGVuZGFycyhjYWwpXG4gICAgICAgIC50aGVuKChleHRDYWxzOiBFeHRDYWxlbmRhcltdKSA9PiB7XG4gICAgICAgICAgaWYgKCFleHRDYWxzLmxlbmd0aCkgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ05PX0VYVEVSTkFMX0NBTEVOREFSUycpKTtcbiAgICAgICAgICAvLyBsZXQgdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSBleHRlcm5hbCBjYWxlbmRhciB0byBhc3NvY2lhdGVcbiAgICAgICAgICB0aGlzLm1vZGFsQ3RybFxuICAgICAgICAgICAgLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIGNvbXBvbmVudDogSURFQVN1Z2dlc3Rpb25zQ29tcG9uZW50LFxuICAgICAgICAgICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICAgICAgICAgIGRhdGE6IGV4dENhbHMubWFwKGMgPT4gbmV3IFN1Z2dlc3Rpb24oeyB2YWx1ZTogYy5pZCwgbmFtZTogYy5uYW1lIH0pKSxcbiAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcjogdGhpcy50Ll8oJ0lERUFfQUdFTkRBLkNBTEVOREFSUy5DSE9PU0VfQU5fRVhURVJOQUxfQ0FMRU5EQVJfVE9fTElOSycpLFxuICAgICAgICAgICAgICAgIHNvcnREYXRhOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhpZGVJZEZyb21VSTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoaWRlQ2xlYXJCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgbXVzdENob29zZTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4obW9kYWwgPT4ge1xuICAgICAgICAgICAgICBtb2RhbC5vbkRpZERpc21pc3MoKS50aGVuKHJlcyA9PiByZXNvbHZlKHJlcy5kYXRhID8gcmVzLmRhdGEudmFsdWUgOiBudWxsKSk7XG4gICAgICAgICAgICAgIG1vZGFsLnByZXNlbnQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcuaGlkZSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJzdCBzeW5jIG9mIHRoZSBleHRlbmFsIGNhbGVuZGFyLlxuICAgKi9cbiAgcHVibGljIHN5bmNDYWxlbmRhcihjYWw6IENhbGVuZGFyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHRoaXMuc3luY0NhbGVuZGFySGVscGVyKGNhbCwgZXJyID0+IChlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoKSkpKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIHRvIHJlY3Vyc2l2ZWx5IHN5bmMgYW4gdGhlIGV4dGVuYWwgY2FsZW5kYXIuXG4gICAqL1xuICBwcml2YXRlIHN5bmNDYWxlbmRhckhlbHBlcihjYWw6IENhbGVuZGFyLCBkb25lOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpIHtcbiAgICAvLyB0aGlzIGlzIGEgcmVjdXJzaXZlIG9wZXJhdGlvbjogdGhlIEFQSSByZXR1cm5zIGlmIHRoZSBzeW5jIGhhcyB0byBjb250aW51ZSBvciBpdCBmaW5pc2hlZFxuICAgIHRoaXMuQVBJLnBhdGNoUmVzb3VyY2UodGhpcy5nZXRSZXF1ZXN0VVJMKGNhbCksIHtcbiAgICAgIGlkZWE6IHRydWUsXG4gICAgICByZXNvdXJjZUlkOiBjYWwuY2FsZW5kYXJJZCxcbiAgICAgIGJvZHk6IHsgYWN0aW9uOiAnU1lOQ19FWFRFUk5BTF9DQUxFTkRBUicsIGZpcnN0U3luYzogdHJ1ZSB9XG4gICAgfSlcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzLm1vcmVEYXRhKSB0aGlzLnN5bmNDYWxlbmRhckhlbHBlcihjYWwsIGRvbmUpO1xuICAgICAgICBlbHNlIGRvbmUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IGRvbmUoZXJyKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgc3RydWN0dXJlIHRvIGRlZmluZSBleHRlcm5hbCBzZXJ2aWNlcycgY2FsZW5kYXJzIChiYXNpYyBpbmZvKS5cbiAqL1xuaW50ZXJmYWNlIEV4dENhbGVuZGFyIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, NgModule } from '@angular/core';
|
|
2
|
+
import { Injectable, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, inject, NgModule } from '@angular/core';
|
|
3
3
|
import * as i3$1 from '@angular/common';
|
|
4
4
|
import { formatDate, CommonModule } from '@angular/common';
|
|
5
5
|
import * as i5 from '@angular/forms';
|
|
@@ -10,13 +10,12 @@ import * as i4 from 'angular-calendar';
|
|
|
10
10
|
import { CalendarDateFormatter, CalendarView, DateAdapter, CalendarModule } from 'angular-calendar';
|
|
11
11
|
import { adapterFactory } from 'angular-calendar/date-adapters/date-fns';
|
|
12
12
|
import * as i3 from '@idea-ionic/common';
|
|
13
|
-
import { IDEASuggestionsComponent, IDEATranslationsModule, IDEAColorPickerModule, IDEACheckerModule, IDEAUserAvatarModule } from '@idea-ionic/common';
|
|
13
|
+
import { IDEAEnvironment, IDEASuggestionsComponent, IDEATranslationsModule, IDEAColorPickerModule, IDEACheckerModule, IDEAUserAvatarModule } from '@idea-ionic/common';
|
|
14
14
|
import { Subject, finalize, fromEvent, takeUntil } from 'rxjs';
|
|
15
15
|
import { isFuture, isToday, isSameDay, endOfWeek, addMinutes, addDays } from 'date-fns';
|
|
16
16
|
import ColorParse from 'color-parse';
|
|
17
17
|
import { ExternalCalendarSources, Calendar, Suggestion, Check, ExternalCalendarInfo } from 'idea-toolbox';
|
|
18
18
|
import { Browser } from '@capacitor/browser';
|
|
19
|
-
import { environment } from '@env/environment';
|
|
20
19
|
|
|
21
20
|
class CustomDateFormatter extends CalendarDateFormatter {
|
|
22
21
|
constructor() {
|
|
@@ -397,6 +396,7 @@ class IDEACalendarsService {
|
|
|
397
396
|
this.loading = loading;
|
|
398
397
|
this.API = API;
|
|
399
398
|
this.t = t;
|
|
399
|
+
this.env = inject(IDEAEnvironment);
|
|
400
400
|
}
|
|
401
401
|
/**
|
|
402
402
|
* Get the ion-icon of an external service from its name.
|
|
@@ -468,27 +468,28 @@ class IDEACalendarsService {
|
|
|
468
468
|
return new Promise((resolve, reject) => {
|
|
469
469
|
if (!cal.external)
|
|
470
470
|
return reject(new Error('NOT_EXTERNAL'));
|
|
471
|
+
const baseURL = window.location.protocol.concat('//', window.location.hostname);
|
|
471
472
|
let url;
|
|
472
473
|
switch (cal.external.service) {
|
|
473
474
|
case ExternalCalendarSources.GOOGLE:
|
|
474
475
|
url =
|
|
475
476
|
'https://accounts.google.com/o/oauth2/v2/auth?' +
|
|
476
|
-
`client_id=${encodeURIComponent(
|
|
477
|
+
`client_id=${encodeURIComponent(this.env.google.apiClientId)}` +
|
|
477
478
|
'&response_type=code' +
|
|
478
|
-
`&redirect_uri=${encodeURIComponent(
|
|
479
|
+
`&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/google-calendars-integration'))}` +
|
|
479
480
|
'&include_granted_scopes=true' +
|
|
480
481
|
'&access_type=offline&prompt=consent' +
|
|
481
|
-
`&scope=${encodeURIComponent(
|
|
482
|
+
`&scope=${encodeURIComponent(this.env.google.apiScope)}` +
|
|
482
483
|
`&state=${encodeURIComponent(cal.calendarId)}`;
|
|
483
484
|
break;
|
|
484
485
|
case ExternalCalendarSources.MICROSOFT:
|
|
485
486
|
url =
|
|
486
487
|
'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +
|
|
487
|
-
`client_id=${encodeURIComponent(
|
|
488
|
+
`client_id=${encodeURIComponent(this.env.microsoft.apiClientId)}` +
|
|
488
489
|
'&response_type=code' +
|
|
489
|
-
`&redirect_uri=${encodeURIComponent(
|
|
490
|
+
`&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/microsoft-calendars-integration'))}` +
|
|
490
491
|
'&response_mode=query' +
|
|
491
|
-
`&scope=${encodeURIComponent(
|
|
492
|
+
`&scope=${encodeURIComponent(this.env.microsoft.apiScope)}` +
|
|
492
493
|
`&state=${encodeURIComponent(cal.calendarId)}`;
|
|
493
494
|
break;
|
|
494
495
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idea-ionic-agenda.mjs","sources":["../../../modules/agenda/src/dateFormatter.provider.ts","../../../modules/agenda/src/agenda.component.ts","../../../modules/agenda/src/agenda.component.html","../../../modules/agenda/src/calendars.service.ts","../../../modules/agenda/src/calendar.component.ts","../../../modules/agenda/src/calendar.component.html","../../../modules/agenda/src/calendarItem.component.ts","../../../modules/agenda/src/calendarItem.component.html","../../../modules/agenda/src/calendarCreation.component.ts","../../../modules/agenda/src/calendarCreation.component.html","../../../modules/agenda/src/agenda.module.ts","../../../modules/agenda/idea-ionic-agenda.ts"],"sourcesContent":["import { formatDate } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\n\n@Injectable()\nexport class CustomDateFormatter extends CalendarDateFormatter {\n // MONTH VIEW\n monthViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n monthViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM y', locale);\n\n // WEEK VIEW\n weekViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n weekViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n weekViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM yyyy', locale);\n\n // DAY VIEW\n dayViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n dayViewTitle = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'EEEE, dd MMM yyyy', locale) : formatDate(date, 'EEEE, MMM dd, yyyy', locale);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ChangeDetectorRef\n} from '@angular/core';\nimport { IonContent, Platform } from '@ionic/angular';\nimport { finalize, fromEvent, Subject, takeUntil } from 'rxjs';\nimport {\n CalendarEvent,\n CalendarEventTimesChangedEvent,\n CalendarMonthViewBeforeRenderEvent,\n CalendarView,\n CalendarWeekViewBeforeRenderEvent\n} from 'angular-calendar';\nimport { isFuture, isToday, isSameDay, endOfWeek, addDays, addMinutes } from 'date-fns';\n// @ts-ignore\nimport ColorParse from 'color-parse';\nimport { IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-agenda',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: 'agenda.component.html',\n styleUrls: ['agenda.component.scss']\n})\nexport class IDEAAgendaComponent implements OnInit {\n /**\n * The events to display in the calendar.\n */\n @Input() events: AgendaEvent[] = [];\n /**\n * An array of day indexes (0 = sunday, 1 = monday, etc.) that will be hidden on the view.\n */\n @Input() excludeDays: number[] = [];\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayStartHour = 0;\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayEndHour = 23;\n /**\n * The number of segments in an hour. Must divide equally into 60.\n */\n @Input() hourSegments = 2;\n /**\n * Whether to open the current day's details right away in month view.\n */\n @Input() activeDayIsOpen = false;\n /**\n * The view mode for the agenda.\n */\n @Input() view: CalendarView = CalendarView.Week;\n /**\n * The allowed view mode for the agenda.\n */\n @Input() allowedViews = [CalendarView.Day, CalendarView.Week, CalendarView.Month];\n /**\n * Whether to block any day/slot in the past.\n */\n @Input() onlyFuture = false;\n /**\n * Some notes to show underneath the calendar's header.\n */\n @Input() titleNotes: string;\n /**\n * The template for new events created by drag&drop.\n */\n @Input() newEventTemplate: AgendaEvent = { title: 'New', start: null, meta: {} };\n /**\n * Whether (and how) to allow the creation of events by drag&drop.\n * If enabled, on mobile it requires the `parentContent` to be set for a correct execution.\n */\n @Input() allowDragToCreate: DragToCreateOptions = DragToCreateOptions.DISABLED;\n /**\n * The parent ion-content, in case we want to control its scrollability for drag&drop features.\n */\n @Input() parentContent: IonContent;\n /**\n * Trigger when an event is selected.\n */\n @Output() selectEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when a day is selected.\n */\n @Output() selectDay = new EventEmitter<Date>();\n /**\n * Trigger when a time slot is selected.\n */\n @Output() selectSlot = new EventEmitter<Date>();\n /**\n * Trigger when a new event is added by drag and drop.\n */\n @Output() newEventByDrag = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when an event changed date (drag&drop or resize).\n */\n @Output() changeEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when the view date of reference changed (because we moved inside the calendar).\n */\n @Output() changeDate = new EventEmitter<Date>();\n /**\n * Trigger before the rendering of the week or day view.\n */\n @Output() beforeWeekOrDayViewRenderEmitter = new EventEmitter<CalendarWeekViewBeforeRenderEvent>();\n /**\n * Trigger before the rendering of the month view.\n */\n @Output() beforeMonthViewRenderEmitter = new EventEmitter<CalendarMonthViewBeforeRenderEvent>();\n /**\n * Helper to use the enum in the UX.\n */\n CalendarView = CalendarView;\n /**\n * The currently selected date.\n */\n viewDate: Date = new Date();\n /**\n * A controller to refresh the current view.\n */\n refresh: Subject<void> = new Subject();\n /**\n * The locale used to format dates.\n * @hide\n */\n locale: string;\n /**\n * The starting day for the week, according to the locale (0 = sunday).\n * @hide\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n Attendance = EventAttendance;\n\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n constructor(private cdr: ChangeDetectorRef, private platform: Platform, public t: IDEATranslationsService) {}\n ngOnInit(): void {\n this.locale = this.t.getCurrentLang();\n // in case of Italian locale the starting day for the week is monday (1), otherwise sunday (0)\n this.weekStartsOn = this.locale === 'it' ? 1 : 0;\n }\n isMobile(): boolean {\n return this.platform.is('mobile');\n }\n\n /**\n * Run some checks before the month view is rendered (e.g. disable invalid days).\n */\n beforeMonthViewRender(event: CalendarMonthViewBeforeRenderEvent): void {\n this.beforeMonthViewRenderEmitter.emit(event);\n const { body } = event;\n body.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n }\n /**\n * Run some checks before the week/day view is rendered (e.g. disable invalid days).\n */\n beforeWeekOrDayViewRender(event: CalendarWeekViewBeforeRenderEvent): void {\n this.beforeWeekOrDayViewRenderEmitter.emit(event);\n const { header, hourColumns } = event;\n header.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n hourColumns.forEach(hourCol => {\n hourCol.hours.forEach(hour => {\n hour.segments.forEach(segment => {\n if (!this.dateIsValid(segment.date)) segment.cssClass = 'cal-disabled';\n });\n });\n });\n }\n\n /**\n * Check whether a date is valid based on the configured parameters.\n */\n dateIsValid(date: any, sameDayIsValid?: boolean): boolean {\n if (!this.onlyFuture) return true;\n return isFuture(date) || (sameDayIsValid ? isToday(date) : false);\n }\n\n /**\n * Change the current view for the agenda.\n */\n setView(view: CalendarView): void {\n this.view = view;\n }\n\n /**\n * Emit the change of the view date and close the detail component of the month view, if needed.\n */\n viewDateChanged(newDate: Date): void {\n if (this.view === CalendarView.Month) this.activeDayIsOpen = false;\n this.changeDate.emit(newDate);\n }\n\n /**\n * A day was selected: manage the detailed view.\n */\n changeDay({ date, events }: { date: Date; events: AgendaEvent[] }): void {\n // skip if the date isn't valid\n if (!this.dateIsValid(date, true)) return;\n // if the selected day changed, if the new day has events, open the details in month view (otherwise close them)\n if ((isSameDay(this.viewDate, date) && this.activeDayIsOpen === true) || !events || events.length === 0)\n this.activeDayIsOpen = false;\n else this.activeDayIsOpen = true;\n // update the current date in the agenda\n this.viewDate = date;\n }\n\n /**\n * The time of an event was changed.\n */\n eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n // update the event\n event.start = newStart;\n event.end = newEnd;\n // re-map the array to trigger the UI refresh\n this.events = this.events.slice();\n // trigger the event to the parent component\n this.changeEvent.emit(event);\n }\n\n /**\n * Given a color, it returns an opaque version of it.\n */\n getAlternateColor(color: string, amount: number, opacity?: number): string | undefined {\n if (!color?.trim()) return undefined;\n const alt = ColorParse(color.trim());\n const r = Math.max(Math.min(255, Number(alt.values[0]) + amount), 0);\n const g = Math.max(Math.min(255, Number(alt.values[1]) + amount), 0);\n const b = Math.max(Math.min(255, Number(alt.values[2]) + amount), 0);\n return `rgba(${r}, ${g}, ${b}, ${opacity || 1})`;\n }\n\n /**\n * Get the content of the tooltip based on the event.\n */\n getTooltipContent(event: AgendaEvent): string {\n if (!event) return '';\n let str = event.title ? '<b>' + event.title + '</b>' : '';\n if (event.description) str = str.concat('<br>', event.description);\n if (event.icons) event.icons.forEach(x => (str = str.concat('<br>', '<i>', x.title, '</i>')));\n if (event.avatars && event.avatars.length) {\n str = str.concat('<br><br>~');\n event.avatars.forEach(x => (str = str.concat('<br>', x.title)));\n }\n return str;\n }\n\n /**\n * Get a shortened version of the description as preview.\n */\n getPreviewDescription(description: string): string {\n return description && description.length > 100 ? description.slice(0, 100).concat('...') : description;\n }\n\n /**\n * Handle the drag&drop to create a new event.\n */\n startDragToCreate(event: Event, segmentDate: Date, segmentElement: HTMLElement): void {\n if (!this.allowDragToCreate) return;\n\n if (this.parentContent) this.parentContent.scrollY = false;\n\n const eventByDragAndDrop: AgendaEvent = { ...this.newEventTemplate, start: segmentDate };\n this.events = [...this.events, eventByDragAndDrop];\n\n const segmentPosition = segmentElement.getBoundingClientRect();\n const endOfView = endOfWeek(this.viewDate, { weekStartsOn: this.weekStartsOn });\n\n const whileDragging = (draggingEvent: Event): void => {\n const { clientY, clientX } =\n draggingEvent.type === 'touchmove' ? (draggingEvent as TouchEvent).touches[0] : (draggingEvent as MouseEvent);\n\n const minutesDiff = ceilToNearest(clientY - segmentPosition.top, 30);\n const daysDiff = floorToNearest(clientX - segmentPosition.left, segmentPosition.width) / segmentPosition.width;\n\n let newEnd: Date;\n if (this.allowDragToCreate === DragToCreateOptions.ONLY_SAME_DAY) newEnd = addMinutes(segmentDate, minutesDiff);\n else newEnd = addDays(addMinutes(segmentDate, minutesDiff), daysDiff);\n\n if (newEnd > segmentDate && newEnd < endOfView) eventByDragAndDrop.end = newEnd;\n refreshView();\n };\n\n const endOfDrag = (): void => {\n if (this.parentContent) this.parentContent.scrollY = true;\n eventByDragAndDrop.end = this.getFixedEndDateWithMinimumSegmentDuration(eventByDragAndDrop);\n refreshView();\n this.newEventByDrag.emit(eventByDragAndDrop);\n };\n\n const refreshView = (): void => {\n this.events = [...this.events];\n this.cdr.detectChanges();\n };\n\n if (event.type === 'touchstart') {\n fromEvent(document, 'touchmove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'touchend')))\n .subscribe(whileDragging);\n } else {\n fromEvent(document, 'mousemove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'mouseup')))\n .subscribe(whileDragging);\n }\n }\n private getFixedEndDateWithMinimumSegmentDuration(agendaBooking: AgendaEvent): Date {\n const fixedEnd = new Date(agendaBooking.end ?? agendaBooking.start);\n const segmentSizeInMinutes = 60 / this.hourSegments;\n if (fixedEnd.getTime() <= agendaBooking.start.getTime() + segmentSizeInMinutes * 60 * 1000)\n fixedEnd.setMinutes(agendaBooking.start.getMinutes() + segmentSizeInMinutes);\n return fixedEnd;\n }\n}\n\n/**\n * A richer version of the classic CalendarEvent.\n */\nexport interface AgendaEvent extends CalendarEvent {\n /**\n * A brief description for the event (e.g. customer, address, etc.).\n */\n description?: string;\n /**\n * The location of the event.\n */\n location?: string;\n /**\n * A list of URLs of images to show as small avatars.\n */\n avatars?: { id: string; url: string; title: string }[];\n /**\n * A list of ion-icons to show.\n */\n icons?: { name: string; title: string }[];\n /**\n * The colors of the event displayed.\n */\n color?: { primary: string; secondary?: string } | any;\n /**\n * Whether the event is external; external events are less important UI-wise.\n */\n external?: boolean;\n /**\n * The attendance status to this event, if any.\n */\n attendance?: EventAttendance;\n /**\n * A standard and unique id for the event, valid across multiple sources.\n */\n iCalUID?: string;\n}\n\n/**\n * Possible attendance statuses for the event.\n */\nexport enum EventAttendance {\n DECLINED = -1,\n NEEDS_ACTION = 0,\n TENTATIVE,\n ACCEPTED\n}\n\n/**\n * The options to allow (or not) drag&drop to create a new event.\n */\nexport enum DragToCreateOptions {\n DISABLED = 0,\n ONLY_SAME_DAY = 1,\n FREE = 2\n}\n\nconst floorToNearest = (amount: number, precision: number): number => Math.floor(amount / precision) * precision;\nconst ceilToNearest = (amount: number, precision: number): number => Math.ceil(amount / precision) * precision;\n","<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-item lines=\"none\" class=\"calendarViewSelector\" *ngIf=\"allowedViews.length > 1\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n <ion-select-option *ngFor=\"let view of allowedViews\" [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n </ion-select>\n </ion-item>\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate : view + 'ViewTitle' : locale }}</h2>\n <p *ngIf=\"titleNotes\">{{ titleNotes }}</p>\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y : 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle : view : event }}\n <p *ngIf=\"!event.allDay\">{{ getPreviewDescription(event.description) }}</p>\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y : 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\"></mwl-calendar-event-actions>\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n <div class=\"eventGadgets\" *ngIf=\"!weekEvent.event.allDay\">\n <ion-icon *ngFor=\"let icon of weekEvent.event.icons\" [name]=\"icon.name\" [title]=\"icon.title\"></ion-icon>\n <idea-user-avatar\n size=\"mini\"\n *ngFor=\"let avatar of weekEvent.event.avatars\"\n [src]=\"avatar.url\"\n [name]=\"avatar.title\"\n ></idea-user-avatar>\n </div>\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n <div class=\"cal-time\" *ngIf=\"isTimeLabel\">\n {{ segment.date | calendarDate : 'weekViewHour' : locale }}\n </div>\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div [ngSwitch]=\"view\">\n <mwl-calendar-month-view\n *ngSwitchCase=\"CalendarView.Month\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n <mwl-calendar-week-view\n *ngSwitchCase=\"CalendarView.Week\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n <mwl-calendar-day-view\n *ngSwitchCase=\"CalendarView.Day\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { Calendar, ExternalCalendarSources, Suggestion } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEAMessageService,\n IDEATranslationsService,\n IDEASuggestionsComponent\n} from '@idea-ionic/common';\nimport { environment as env } from '@env/environment';\n\n/**\n * Note: to test locally, you need to temporarily change the redirect URI:\n * - in the lambda `idea_calendars`, e.g. `SCARLETT_URL`;\n * - in the client config file: `APP_URL`.\n * In both cases, the value should be set to `http://localhost:8100` (or according to the local URL).\n */\n@Injectable()\nexport class IDEACalendarsService {\n constructor(\n public modalCtrl: ModalController,\n public alertCtrl: AlertController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public API: IDEAAWSAPIService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Get the ion-icon of an external service from its name.\n */\n public getServiceIcon(service: ExternalCalendarSources): string {\n switch (service) {\n case ExternalCalendarSources.GOOGLE:\n return 'logo-google';\n case ExternalCalendarSources.MICROSOFT:\n return 'logo-windows';\n default:\n return 'help';\n }\n }\n /**\n * Get the base URL for API request (shared/private calendar).\n */\n public getRequestURL(calendar: Calendar): string {\n return (calendar.teamId ? `teams/${calendar.teamId}/` : '').concat('calendars');\n }\n\n /**\n * Create a new calendar.\n */\n public postCalendar(cal: Calendar): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.API.postResource(this.getRequestURL(cal), { idea: true, body: cal })\n .then((res: Calendar) => resolve(new Calendar(res)))\n .catch(err => reject(err));\n });\n }\n /**\n * Update an existing calendar.\n */\n public putCalendar(cal: Calendar): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.API.putResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId, body: cal })\n .then((res: Calendar) => resolve(new Calendar(res)))\n .catch(err => reject(err));\n });\n }\n /**\n * Delete a calendar.\n */\n public deleteCalendar(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject) => {\n this.API.deleteResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId })\n .then(() => resolve())\n .catch(err => reject(err));\n });\n }\n /**\n * Associate an external calendar with the given calendar.\n */\n public setExternalCalendar(cal: Calendar, externalId: string): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.API.patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'SET_EXTERNAL_CALENDAR', externalId }\n })\n .then(res => resolve(new Calendar(res)))\n .catch(err => reject(err));\n });\n }\n\n /**\n * Link the calendar with the chosen external service (auth flow).\n */\n public linkExtService(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!cal.external) return reject(new Error('NOT_EXTERNAL'));\n let url: string;\n switch (cal.external.service) {\n case ExternalCalendarSources.GOOGLE:\n url =\n 'https://accounts.google.com/o/oauth2/v2/auth?' +\n `client_id=${encodeURIComponent(env.google.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(env.idea.app.url.concat('/echo/google-calendars-integration'))}` +\n '&include_granted_scopes=true' +\n '&access_type=offline&prompt=consent' +\n `&scope=${encodeURIComponent(env.google.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n case ExternalCalendarSources.MICROSOFT:\n url =\n 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +\n `client_id=${encodeURIComponent(env.microsoft.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(env.idea.app.url.concat('/echo/microsoft-calendars-integration'))}` +\n '&response_mode=query' +\n `&scope=${encodeURIComponent(env.microsoft.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n }\n if (!url) return reject(new Error('INVALID_SERVICE'));\n // start the auth flow in the browser\n Browser.open({ url }).then(() => {\n // since we don't know when/if the auth flow will finish, we wait\n this.alertCtrl\n .create({\n header: this.t._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR'),\n message: this.t._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR_CONFIRM_ONCE_DONE'),\n backdropDismiss: false,\n buttons: [{ text: this.t._('COMMON.DONE'), handler: () => resolve() }]\n })\n .then(alert => alert.present());\n });\n });\n }\n\n /**\n * Get the external calendars list of the external service.\n */\n public getExternalCalendars(cal: Calendar): Promise<ExtCalendar[]> {\n return new Promise((resolve, reject) => {\n if (!cal.external) return reject(new Error('NOT_EXTERNAL'));\n // get the access token to make requests; in case it fails, proceed to link the external service\n this.API.patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'GET_ACCESS_TOKEN' }\n })\n .then((result: any) => {\n // prepare the headers (authorization) for the request to the external service\n const headers = { Authorization: 'Bearer '.concat(result.token) };\n // acquire and return the calendars\n switch (cal.external.service) {\n case ExternalCalendarSources.GOOGLE:\n this.API.rawRequest()\n .get('https://www.googleapis.com/calendar/v3/users/me/calendarList', { headers })\n .toPromise()\n .then((res: any) => resolve(res.items.map((c: any) => ({ name: c.summary, id: c.id }) as ExtCalendar)))\n .catch(err => reject(err));\n break;\n case ExternalCalendarSources.MICROSOFT:\n this.API.rawRequest()\n .get('https://graph.microsoft.com/v1.0/me/calendars', { headers })\n .toPromise()\n .then((res: any) => resolve(res.value.map((c: any) => ({ name: c.name, id: c.id }) as ExtCalendar)))\n .catch(err => reject(err));\n break;\n }\n })\n .catch(err => reject(err));\n });\n }\n\n /**\n * If the external service is linked, choose an external calendar and set it for the chosen calendar.\n * @return the updated calendar.\n */\n public chooseAndSetExternalCalendar(cal: Calendar): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.openModalAndPickExternalCalendar(cal)\n .then(extCalId => {\n // the external calendar will be set later on\n if (!extCalId) return resolve(null);\n // an external calendar was chosen: set it right away\n this.setExternalCalendar(cal, extCalId)\n .then(res => resolve(res))\n .catch(err => reject(err));\n })\n .catch(err => reject(err));\n });\n }\n /**\n * Open the modal to pick a calendar from the external service.\n * @return the id of the external calendar.\n */\n private async openModalAndPickExternalCalendar(cal: Calendar): Promise<string> {\n await this.loading.show();\n return new Promise((resolve, reject) => {\n this.getExternalCalendars(cal)\n .then((extCals: ExtCalendar[]) => {\n if (!extCals.length) return reject(new Error('NO_EXTERNAL_CALENDARS'));\n // let the user to choose the external calendar to associate\n this.modalCtrl\n .create({\n component: IDEASuggestionsComponent,\n componentProps: {\n data: extCals.map(c => new Suggestion({ value: c.id, name: c.name })),\n searchPlaceholder: this.t._('IDEA_AGENDA.CALENDARS.CHOOSE_AN_EXTERNAL_CALENDAR_TO_LINK'),\n sortData: true,\n hideIdFromUI: true,\n hideClearButton: true,\n mustChoose: true\n },\n backdropDismiss: false\n })\n .then(modal => {\n modal.onDidDismiss().then(res => resolve(res.data ? res.data.value : null));\n modal.present();\n });\n })\n .catch(err => reject(err))\n .finally(() => this.loading.hide());\n });\n }\n\n /**\n * First sync of the extenal calendar.\n */\n public syncCalendar(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject) => this.syncCalendarHelper(cal, err => (err ? reject(err) : resolve())));\n }\n /**\n * Helper to recursively sync an the extenal calendar.\n */\n private syncCalendarHelper(cal: Calendar, done: (err?: Error) => void) {\n // this is a recursive operation: the API returns if the sync has to continue or it finished\n this.API.patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'SYNC_EXTERNAL_CALENDAR', firstSync: true }\n })\n .then((res: any) => {\n if (res.moreData) this.syncCalendarHelper(cal, done);\n else done();\n })\n .catch(err => done(err));\n }\n}\n\n/**\n * Helper structure to define external services' calendars (basic info).\n */\ninterface ExtCalendar {\n id: string;\n name: string;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalController, AlertController } from '@ionic/angular';\nimport { Calendar, Check, Membership } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATinCanService,\n IDEAMessageService,\n IDEATranslationsService\n} from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar',\n templateUrl: 'calendar.component.html',\n styleUrls: ['calendar.component.scss']\n})\nexport class IDEACalendarComponent implements OnInit {\n /**\n * The calendar to manage.\n */\n @Input() public calendar: Calendar;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() public advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() public hideColor: boolean;\n\n /**\n * Working copy of the calendar, to update only when confirmed.\n */\n public _calendar: Calendar;\n /**\n * Helper to allow selecting memberships.\n */\n public membershipsChecks: Check[];\n /**\n * The current membership.\n */\n public membership: Membership;\n /**\n * Errors while validating the entity.\n */\n public errors: Set<string> = new Set<string>();\n /**\n * The default color for a calendar.\n */\n public DEFAULT_COLOR = '#555';\n\n constructor(\n public calendars: IDEACalendarsService,\n public modalCtrl: ModalController,\n public alertCtrl: AlertController,\n public tc: IDEATinCanService,\n public loading: IDEALoadingService,\n public message: IDEAMessageService,\n public API: IDEAAWSAPIService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.membership = this.tc.get('membership');\n // work on a copy\n this._calendar = new Calendar(this.calendar);\n // load the teammates to use for shared calendars permissions\n this.API.getResource(`teams/${this.membership.teamId}/memberships`)\n .then(\n (memberships: Membership[]) =>\n (this.membershipsChecks = memberships.map(\n m =>\n new Check({\n value: m.userId,\n name: m.name,\n checked: (this._calendar.usersCanManageAppointments || []).some(x => x === m.userId)\n })\n ))\n )\n .catch(() => {});\n }\n\n /**\n * Set the support array to display errors in the UI.\n */\n public hasFieldAnError(field: string): boolean {\n return this.errors.has(field);\n }\n\n /**\n * Save a calendar with the new info.\n */\n public async save() {\n // set the default color, in case none was selected\n if (!this._calendar.color) this._calendar.color = this.DEFAULT_COLOR;\n // map the memberships able to manage appointments\n if (this._calendar.isShared() && this.advancedPermissions)\n this._calendar.usersCanManageAppointments = this.membershipsChecks\n .filter(x => x.checked)\n .map(x => String(x.value));\n else delete this._calendar.usersCanManageAppointments;\n // checkings\n this.errors = new Set(this._calendar.validate());\n if (this.errors.size) return this.message.error('COMMON.FORM_HAS_ERROR_TO_CHECK');\n // send a put request\n await this.loading.show();\n this.calendars\n .putCalendar(this._calendar)\n .then((res: Calendar) => {\n this.calendar.load(res);\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_SAVED');\n this.modalCtrl.dismiss(this.calendar);\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Delete the calendar.\n */\n public delete() {\n this.alertCtrl\n .create({\n header: this.t._('COMMON.ARE_YOU_SURE'),\n subHeader: this.t._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR'),\n message: this.t._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT'),\n buttons: [\n { text: this.t._('COMMON.CANCEL'), role: 'cancel' },\n {\n text: this.t._('COMMON.DELETE'),\n handler: async () => {\n await this.loading.show();\n this.calendars\n .deleteCalendar(this._calendar)\n .then(() => {\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_DELETED');\n this.modalCtrl.dismiss(true);\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n }\n ]\n })\n .then(alert => alert.present());\n }\n\n /**\n * Close the component.\n */\n public close() {\n this.modalCtrl.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"t._('COMMON.CLOSE')\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"t._('COMMON.SAVE')\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <div class=\"maxWidthContainer\" *ngIf=\"_calendar\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.NAME_HINT')\"\n >\n <ion-label position=\"stacked\">{{ 'IDEA_AGENDA.CALENDARS.NAME' | translate }} </ion-label>\n <ion-input [placeholder]=\"t._('IDEA_AGENDA.CALENDARS.NAME_HINT')\" [(ngModel)]=\"_calendar.name\"></ion-input>\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT')\"\n >\n <ion-label position=\"stacked\">{{ 'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate }} </ion-label>\n <ion-input\n [placeholder]=\"t._('IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT')\"\n [(ngModel)]=\"_calendar.description\"\n ></ion-input>\n </ion-item>\n <idea-color-picker\n *ngIf=\"!hideColor\"\n [lines]=\"'inset'\"\n [current]=\"_calendar.color\"\n [label]=\"t._('IDEA_AGENDA.CALENDARS.COLOR')\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (_calendar.color = $event) : null\"\n ></idea-color-picker>\n <idea-checker\n *ngIf=\"membershipsChecks && _calendar.isShared() && advancedPermissions\"\n [data]=\"membershipsChecks\"\n [label]=\"t._('IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS')\"\n [searchPlaceholder]=\"t._('IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS')\"\n [noneText]=\"t._('IDEA_AGENDA.CALENDARS.NOBODY')\"\n [allText]=\"t._('IDEA_AGENDA.CALENDARS.EVERYONE')\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n ></idea-checker>\n </ion-list>\n <ion-list class=\"aList\" *ngIf=\"_calendar.external?.service\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\" *ngIf=\"calendar.userId\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\"></ion-icon>\n </ion-item>\n <ion-item lines=\"inset\" *ngIf=\"calendar.teamId\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\"></ion-icon>\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + _calendar.external.service | translate }}\n <p>{{ _calendar.external.name }} ({{ _calendar.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"calendars.getServiceIcon(_calendar.external.service)\"></ion-icon>\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + _calendar.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\"></ion-icon>\n </ion-item>\n </ion-list>\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button color=\"danger\" [title]=\"t._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT')\" (click)=\"delete()\">\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n</ion-content>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Calendar } from 'idea-toolbox';\nimport { IDEALoadingService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\nimport { IDEACalendarComponent } from './calendar.component';\n\n@Component({\n selector: 'idea-calendar-item',\n templateUrl: 'calendarItem.component.html',\n styleUrls: ['calendarItem.component.scss']\n})\nexport class IDEACalendarItemComponent {\n /**\n * The calendar to show.\n */\n @Input() public calendar: Calendar;\n /**\n * Whether the component is disabled.\n */\n @Input() public disabled: boolean;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() public advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() public hideColor: boolean;\n /**\n * Report to parent components a change.\n */\n @Output() public somethingChanged = new EventEmitter<Calendar>();\n\n constructor(\n public calendars: IDEACalendarsService,\n public alertCtrl: AlertController,\n public modalCtrl: ModalController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Open the modal to manage the calendar.\n */\n public manageCalendar() {\n if (this.disabled) return;\n this.modalCtrl\n .create({\n component: IDEACalendarComponent,\n componentProps: {\n calendar: this.calendar,\n advancedPermissions: this.advancedPermissions,\n hideColor: this.hideColor\n }\n })\n .then(modal => {\n modal.onDidDismiss().then(res => {\n const cal = res.data;\n // nothing changed\n if (cal === undefined) return;\n // the calendar was deleted\n else if (cal === null) this.calendar = null;\n // the calendar was updated\n else this.calendar.load(cal);\n // report changes to parent components\n this.somethingChanged.emit();\n });\n modal.present();\n });\n }\n\n /**\n * Continue the auth flow to link an external service and set an external calendar;\n * otherwise, the calendar can be deleted.\n */\n public linkExtCalendarOrDelete() {\n if (this.disabled) return;\n // let the user pick an external calendar, in case the external service is linked\n this.calendars\n .chooseAndSetExternalCalendar(this.calendar)\n .then(async cal => {\n if (!cal) return new Error('NO_EXTERNAL_CALENDAR_CHOSEN');\n this.calendar.load(cal);\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_LINKED');\n // run a first sync for the linked external calendar\n await this.loading.show(this.t._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n this.calendars\n .syncCalendar(this.calendar)\n .then(() => this.message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED'))\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => {\n this.loading.hide();\n // report changes to parent components\n this.somethingChanged.emit();\n });\n })\n .catch(() => {\n // the external service isn't linked yet (we don't have a token): link or delete\n this.alertCtrl\n .create({\n header: this.t._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED'),\n message: this.t._('IDEA_AGENDA.CALENDARS.DO_YOU_WANT_PROCEED_LINKING_OR_DELETE'),\n buttons: [\n {\n text: this.t._('COMMON.DELETE'),\n handler: async () => {\n // request the calendar deletion\n await this.loading.show();\n this.calendars\n .deleteCalendar(this.calendar)\n .then(() => {\n this.message.success('COMMON.OPERATION_COMPLETED');\n // report changes to parent components\n this.somethingChanged.emit();\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n },\n {\n text: this.t._('IDEA_AGENDA.CALENDARS.LINK'),\n handler: () =>\n // try again to link the service\n this.calendars\n .linkExtService(this.calendar)\n // if the service was successfully linked, go recursive to choose and set the external calendar\n .then(() => this.linkExtCalendarOrDelete())\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n }\n ]\n })\n .then(alert => alert.present());\n });\n }\n}\n","<ion-item\n class=\"calendarItem\"\n *ngIf=\"calendar\"\n [button]=\"!disabled\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.EDIT_CALENDAR')\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n>\n <ion-avatar\n slot=\"start\"\n class=\"colorCircle\"\n *ngIf=\"!hideColor\"\n [style.background-color]=\"calendar.color\"\n ></ion-avatar>\n <ion-label>\n {{ calendar.name }}\n <p>\n <ion-text color=\"danger\" *ngIf=\"calendar.external && !calendar.external.calendarId\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n {{ calendar.description }}\n </p>\n </ion-label>\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n *ngIf=\"calendar.external && !calendar.external.calendarId\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT')\"\n ></ion-icon>\n <ion-icon\n slot=\"end\"\n *ngIf=\"calendar.external?.service\"\n [name]=\"calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n t._('IDEA_AGENDA.CALENDARS.LINKED_TO') + ' ' + t._('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service)\n \"\n ></ion-icon>\n</ion-item>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { Calendar, ExternalCalendarInfo, ExternalCalendarSources, Membership } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATinCanService,\n IDEAMessageService,\n IDEATranslationsService\n} from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar-creation',\n templateUrl: 'calendarCreation.component.html',\n styleUrls: ['calendarCreation.component.scss']\n})\nexport class IDEACalendarCreationComponent implements OnInit {\n /**\n * Whether we want to allow the creation of only a particular type of calendar, based on the scope.\n */\n @Input() public fixScope: CalendarScopes;\n /**\n * Whether we want to allow the creation of local calendars.\n */\n @Input() public onlyExternalCalendars: boolean;\n /**\n * The current membership (generic).\n */\n public membership: Membership;\n /**\n * The calendar to create.\n */\n public calendar: Calendar;\n /**\n * The default color for a new calendar.\n */\n public DEFAULT_COLOR = '#555';\n /**\n * The possible external services for the new calendar.\n */\n public SOURCES = Object.keys(ExternalCalendarSources);\n\n constructor(\n public calendars: IDEACalendarsService,\n public modalCtrl: ModalController,\n public tc: IDEATinCanService,\n public loading: IDEALoadingService,\n public message: IDEAMessageService,\n public API: IDEAAWSAPIService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.calendar = new Calendar();\n this.membership = this.tc.get('membership');\n if (this.fixScope === CalendarScopes.SHARED) this.calendar.teamId = this.membership.teamId;\n if (this.fixScope === CalendarScopes.PRIVATE) this.calendar.userId = this.membership.userId;\n }\n\n /**\n * If allowed by the component configuration, reset the scope of the calendar (private/shared).\n */\n public resetScope() {\n if (this.canChangeScope()) this.calendar.teamId = this.calendar.userId = null;\n }\n /**\n * Whether we can change the scope of the calendar (private/shared).\n */\n public canChangeScope(): boolean {\n return !this.fixScope && this.scopeIsSet();\n }\n /**\n * Whether the scope has been set already.\n */\n public scopeIsSet(): boolean {\n return Boolean(this.calendar.userId) || Boolean(this.calendar.teamId);\n }\n\n /**\n * Add a new calendar based on the configuration set.\n */\n public async saveNewCalendar(service?: ExternalCalendarSources) {\n // be sure the scope of the calendar was chosen\n if (!this.scopeIsSet()) return;\n // be sure we are allowed to create the calendar\n if (!service && this.onlyExternalCalendars) return;\n // flag the calendar so it has to be linked to an externals service (the procedure follows the creation)\n if (service) {\n this.calendar.external = new ExternalCalendarInfo({ service });\n this.calendar.name = '-'; // it will be substituted with the external name\n } else {\n // default values for local calendars\n this.calendar.name = this.calendar.userId\n ? this.t._('IDEA_AGENDA.CALENDARS.DEFAULT_PERSONAL_CALENDAR_NAME')\n : this.t._('IDEA_AGENDA.CALENDARS.DEFAULT_TEAM_CALENDAR_NAME');\n this.calendar.color = this.DEFAULT_COLOR;\n }\n // save (create) the new calendar\n await this.loading.show();\n this.calendars\n .postCalendar(this.calendar)\n .then(cal => {\n this.calendar.load(cal);\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_CREATED');\n // if the calendar is local, no further action is needed\n if (!cal.external) return this.modalCtrl.dismiss(this.calendar);\n // if the calendar should be linked to an external service, proceed\n this.calendars\n .linkExtService(this.calendar)\n // if the link was successful, let the user pick an external calendar to set\n .then(() => this.calendars.chooseAndSetExternalCalendar(this.calendar))\n .then(async res => {\n // if a calendar wasn't set, it can be done later on\n if (!res) return this.modalCtrl.dismiss(this.calendar);\n // if an external calendar was set, update the calendar\n this.calendar.load(res);\n // run a first sync for the linked external calendar\n await this.loading.show(this.t._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n this.calendars\n .syncCalendar(this.calendar)\n .then(() => this.message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED'))\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => {\n this.loading.hide();\n // the calendar is ready to go\n this.modalCtrl.dismiss(this.calendar);\n });\n })\n .catch(() => {\n this.message.error('COMMON.OPERATION_FAILED');\n // the operation can be retried later on; close the modal anyway\n this.modalCtrl.dismiss(this.calendar);\n });\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Close the component.\n */\n public close() {\n this.modalCtrl.dismiss();\n }\n}\n\n/**\n * The possible scopes of the calendar.\n */\nexport enum CalendarScopes {\n SHARED = 'shared', // teamId\n PRIVATE = 'private' // userId\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button *ngIf=\"!canChangeScope()\" [title]=\"t._('COMMON.CLOSE')\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button *ngIf=\"canChangeScope()\" (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n <span *ngIf=\"!scopeIsSet()\">{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n <span *ngIf=\"calendar.userId\">{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n <span *ngIf=\"calendar.teamId\">\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: tc.get('team').name } }}\n </span>\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n <ion-grid class=\"ion-padding choiceGrid\" *ngIf=\"!scopeIsSet()\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n <!-- 2nd STEP -->\n <ion-grid class=\"ion-padding choiceGrid\" *ngIf=\"scopeIsSet()\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" *ngIf=\"!onlyExternalCalendars\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" *ngFor=\"let s of SOURCES\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"calendars.getServiceIcon(s)\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\nimport { CalendarDateFormatter, CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { CustomDateFormatter } from './dateFormatter.provider';\n\nimport {\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule\n} from '@idea-ionic/common';\n\nimport { IDEAAgendaComponent } from './agenda.component';\nimport { IDEACalendarComponent } from './calendar.component';\nimport { IDEACalendarItemComponent } from './calendarItem.component';\nimport { IDEACalendarCreationComponent } from './calendarCreation.component';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule,\n CalendarModule.forRoot({ provide: DateAdapter, useFactory: adapterFactory })\n ],\n declarations: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n exports: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n providers: [{ provide: CalendarDateFormatter, useClass: CustomDateFormatter }, IDEACalendarsService]\n})\nexport class IDEAAgendaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","env","i1.IDEACalendarsService","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"idea-ionic-agenda.mjs","sources":["../../../modules/agenda/src/dateFormatter.provider.ts","../../../modules/agenda/src/agenda.component.ts","../../../modules/agenda/src/agenda.component.html","../../../modules/agenda/src/calendars.service.ts","../../../modules/agenda/src/calendar.component.ts","../../../modules/agenda/src/calendar.component.html","../../../modules/agenda/src/calendarItem.component.ts","../../../modules/agenda/src/calendarItem.component.html","../../../modules/agenda/src/calendarCreation.component.ts","../../../modules/agenda/src/calendarCreation.component.html","../../../modules/agenda/src/agenda.module.ts","../../../modules/agenda/idea-ionic-agenda.ts"],"sourcesContent":["import { formatDate } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\n\n@Injectable()\nexport class CustomDateFormatter extends CalendarDateFormatter {\n // MONTH VIEW\n monthViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n monthViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM y', locale);\n\n // WEEK VIEW\n weekViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n weekViewColumnHeader = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'EEE', locale);\n weekViewTitle = ({ date, locale }: DateFormatterParams): string => formatDate(date, 'MMMM yyyy', locale);\n\n // DAY VIEW\n dayViewHour = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);\n dayViewTitle = ({ date, locale }: DateFormatterParams): string =>\n locale === 'it' ? formatDate(date, 'EEEE, dd MMM yyyy', locale) : formatDate(date, 'EEEE, MMM dd, yyyy', locale);\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n OnInit,\n ChangeDetectorRef\n} from '@angular/core';\nimport { IonContent, Platform } from '@ionic/angular';\nimport { finalize, fromEvent, Subject, takeUntil } from 'rxjs';\nimport {\n CalendarEvent,\n CalendarEventTimesChangedEvent,\n CalendarMonthViewBeforeRenderEvent,\n CalendarView,\n CalendarWeekViewBeforeRenderEvent\n} from 'angular-calendar';\nimport { isFuture, isToday, isSameDay, endOfWeek, addDays, addMinutes } from 'date-fns';\n// @ts-ignore\nimport ColorParse from 'color-parse';\nimport { IDEATranslationsService } from '@idea-ionic/common';\n\n@Component({\n selector: 'idea-agenda',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: 'agenda.component.html',\n styleUrls: ['agenda.component.scss']\n})\nexport class IDEAAgendaComponent implements OnInit {\n /**\n * The events to display in the calendar.\n */\n @Input() events: AgendaEvent[] = [];\n /**\n * An array of day indexes (0 = sunday, 1 = monday, etc.) that will be hidden on the view.\n */\n @Input() excludeDays: number[] = [];\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayStartHour = 0;\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayEndHour = 23;\n /**\n * The number of segments in an hour. Must divide equally into 60.\n */\n @Input() hourSegments = 2;\n /**\n * Whether to open the current day's details right away in month view.\n */\n @Input() activeDayIsOpen = false;\n /**\n * The view mode for the agenda.\n */\n @Input() view: CalendarView = CalendarView.Week;\n /**\n * The allowed view mode for the agenda.\n */\n @Input() allowedViews = [CalendarView.Day, CalendarView.Week, CalendarView.Month];\n /**\n * Whether to block any day/slot in the past.\n */\n @Input() onlyFuture = false;\n /**\n * Some notes to show underneath the calendar's header.\n */\n @Input() titleNotes: string;\n /**\n * The template for new events created by drag&drop.\n */\n @Input() newEventTemplate: AgendaEvent = { title: 'New', start: null, meta: {} };\n /**\n * Whether (and how) to allow the creation of events by drag&drop.\n * If enabled, on mobile it requires the `parentContent` to be set for a correct execution.\n */\n @Input() allowDragToCreate: DragToCreateOptions = DragToCreateOptions.DISABLED;\n /**\n * The parent ion-content, in case we want to control its scrollability for drag&drop features.\n */\n @Input() parentContent: IonContent;\n /**\n * Trigger when an event is selected.\n */\n @Output() selectEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when a day is selected.\n */\n @Output() selectDay = new EventEmitter<Date>();\n /**\n * Trigger when a time slot is selected.\n */\n @Output() selectSlot = new EventEmitter<Date>();\n /**\n * Trigger when a new event is added by drag and drop.\n */\n @Output() newEventByDrag = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when an event changed date (drag&drop or resize).\n */\n @Output() changeEvent = new EventEmitter<AgendaEvent>();\n /**\n * Trigger when the view date of reference changed (because we moved inside the calendar).\n */\n @Output() changeDate = new EventEmitter<Date>();\n /**\n * Trigger before the rendering of the week or day view.\n */\n @Output() beforeWeekOrDayViewRenderEmitter = new EventEmitter<CalendarWeekViewBeforeRenderEvent>();\n /**\n * Trigger before the rendering of the month view.\n */\n @Output() beforeMonthViewRenderEmitter = new EventEmitter<CalendarMonthViewBeforeRenderEvent>();\n /**\n * Helper to use the enum in the UX.\n */\n CalendarView = CalendarView;\n /**\n * The currently selected date.\n */\n viewDate: Date = new Date();\n /**\n * A controller to refresh the current view.\n */\n refresh: Subject<void> = new Subject();\n /**\n * The locale used to format dates.\n * @hide\n */\n locale: string;\n /**\n * The starting day for the week, according to the locale (0 = sunday).\n * @hide\n */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n\n Attendance = EventAttendance;\n\n darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;\n\n constructor(private cdr: ChangeDetectorRef, private platform: Platform, public t: IDEATranslationsService) {}\n ngOnInit(): void {\n this.locale = this.t.getCurrentLang();\n // in case of Italian locale the starting day for the week is monday (1), otherwise sunday (0)\n this.weekStartsOn = this.locale === 'it' ? 1 : 0;\n }\n isMobile(): boolean {\n return this.platform.is('mobile');\n }\n\n /**\n * Run some checks before the month view is rendered (e.g. disable invalid days).\n */\n beforeMonthViewRender(event: CalendarMonthViewBeforeRenderEvent): void {\n this.beforeMonthViewRenderEmitter.emit(event);\n const { body } = event;\n body.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n }\n /**\n * Run some checks before the week/day view is rendered (e.g. disable invalid days).\n */\n beforeWeekOrDayViewRender(event: CalendarWeekViewBeforeRenderEvent): void {\n this.beforeWeekOrDayViewRenderEmitter.emit(event);\n const { header, hourColumns } = event;\n header.forEach(day => {\n if (!this.dateIsValid(day.date)) day.cssClass = 'cal-disabled';\n });\n hourColumns.forEach(hourCol => {\n hourCol.hours.forEach(hour => {\n hour.segments.forEach(segment => {\n if (!this.dateIsValid(segment.date)) segment.cssClass = 'cal-disabled';\n });\n });\n });\n }\n\n /**\n * Check whether a date is valid based on the configured parameters.\n */\n dateIsValid(date: any, sameDayIsValid?: boolean): boolean {\n if (!this.onlyFuture) return true;\n return isFuture(date) || (sameDayIsValid ? isToday(date) : false);\n }\n\n /**\n * Change the current view for the agenda.\n */\n setView(view: CalendarView): void {\n this.view = view;\n }\n\n /**\n * Emit the change of the view date and close the detail component of the month view, if needed.\n */\n viewDateChanged(newDate: Date): void {\n if (this.view === CalendarView.Month) this.activeDayIsOpen = false;\n this.changeDate.emit(newDate);\n }\n\n /**\n * A day was selected: manage the detailed view.\n */\n changeDay({ date, events }: { date: Date; events: AgendaEvent[] }): void {\n // skip if the date isn't valid\n if (!this.dateIsValid(date, true)) return;\n // if the selected day changed, if the new day has events, open the details in month view (otherwise close them)\n if ((isSameDay(this.viewDate, date) && this.activeDayIsOpen === true) || !events || events.length === 0)\n this.activeDayIsOpen = false;\n else this.activeDayIsOpen = true;\n // update the current date in the agenda\n this.viewDate = date;\n }\n\n /**\n * The time of an event was changed.\n */\n eventTimesChanged({ event, newStart, newEnd }: CalendarEventTimesChangedEvent): void {\n // update the event\n event.start = newStart;\n event.end = newEnd;\n // re-map the array to trigger the UI refresh\n this.events = this.events.slice();\n // trigger the event to the parent component\n this.changeEvent.emit(event);\n }\n\n /**\n * Given a color, it returns an opaque version of it.\n */\n getAlternateColor(color: string, amount: number, opacity?: number): string | undefined {\n if (!color?.trim()) return undefined;\n const alt = ColorParse(color.trim());\n const r = Math.max(Math.min(255, Number(alt.values[0]) + amount), 0);\n const g = Math.max(Math.min(255, Number(alt.values[1]) + amount), 0);\n const b = Math.max(Math.min(255, Number(alt.values[2]) + amount), 0);\n return `rgba(${r}, ${g}, ${b}, ${opacity || 1})`;\n }\n\n /**\n * Get the content of the tooltip based on the event.\n */\n getTooltipContent(event: AgendaEvent): string {\n if (!event) return '';\n let str = event.title ? '<b>' + event.title + '</b>' : '';\n if (event.description) str = str.concat('<br>', event.description);\n if (event.icons) event.icons.forEach(x => (str = str.concat('<br>', '<i>', x.title, '</i>')));\n if (event.avatars && event.avatars.length) {\n str = str.concat('<br><br>~');\n event.avatars.forEach(x => (str = str.concat('<br>', x.title)));\n }\n return str;\n }\n\n /**\n * Get a shortened version of the description as preview.\n */\n getPreviewDescription(description: string): string {\n return description && description.length > 100 ? description.slice(0, 100).concat('...') : description;\n }\n\n /**\n * Handle the drag&drop to create a new event.\n */\n startDragToCreate(event: Event, segmentDate: Date, segmentElement: HTMLElement): void {\n if (!this.allowDragToCreate) return;\n\n if (this.parentContent) this.parentContent.scrollY = false;\n\n const eventByDragAndDrop: AgendaEvent = { ...this.newEventTemplate, start: segmentDate };\n this.events = [...this.events, eventByDragAndDrop];\n\n const segmentPosition = segmentElement.getBoundingClientRect();\n const endOfView = endOfWeek(this.viewDate, { weekStartsOn: this.weekStartsOn });\n\n const whileDragging = (draggingEvent: Event): void => {\n const { clientY, clientX } =\n draggingEvent.type === 'touchmove' ? (draggingEvent as TouchEvent).touches[0] : (draggingEvent as MouseEvent);\n\n const minutesDiff = ceilToNearest(clientY - segmentPosition.top, 30);\n const daysDiff = floorToNearest(clientX - segmentPosition.left, segmentPosition.width) / segmentPosition.width;\n\n let newEnd: Date;\n if (this.allowDragToCreate === DragToCreateOptions.ONLY_SAME_DAY) newEnd = addMinutes(segmentDate, minutesDiff);\n else newEnd = addDays(addMinutes(segmentDate, minutesDiff), daysDiff);\n\n if (newEnd > segmentDate && newEnd < endOfView) eventByDragAndDrop.end = newEnd;\n refreshView();\n };\n\n const endOfDrag = (): void => {\n if (this.parentContent) this.parentContent.scrollY = true;\n eventByDragAndDrop.end = this.getFixedEndDateWithMinimumSegmentDuration(eventByDragAndDrop);\n refreshView();\n this.newEventByDrag.emit(eventByDragAndDrop);\n };\n\n const refreshView = (): void => {\n this.events = [...this.events];\n this.cdr.detectChanges();\n };\n\n if (event.type === 'touchstart') {\n fromEvent(document, 'touchmove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'touchend')))\n .subscribe(whileDragging);\n } else {\n fromEvent(document, 'mousemove')\n .pipe(finalize(endOfDrag), takeUntil(fromEvent(document, 'mouseup')))\n .subscribe(whileDragging);\n }\n }\n private getFixedEndDateWithMinimumSegmentDuration(agendaBooking: AgendaEvent): Date {\n const fixedEnd = new Date(agendaBooking.end ?? agendaBooking.start);\n const segmentSizeInMinutes = 60 / this.hourSegments;\n if (fixedEnd.getTime() <= agendaBooking.start.getTime() + segmentSizeInMinutes * 60 * 1000)\n fixedEnd.setMinutes(agendaBooking.start.getMinutes() + segmentSizeInMinutes);\n return fixedEnd;\n }\n}\n\n/**\n * A richer version of the classic CalendarEvent.\n */\nexport interface AgendaEvent extends CalendarEvent {\n /**\n * A brief description for the event (e.g. customer, address, etc.).\n */\n description?: string;\n /**\n * The location of the event.\n */\n location?: string;\n /**\n * A list of URLs of images to show as small avatars.\n */\n avatars?: { id: string; url: string; title: string }[];\n /**\n * A list of ion-icons to show.\n */\n icons?: { name: string; title: string }[];\n /**\n * The colors of the event displayed.\n */\n color?: { primary: string; secondary?: string } | any;\n /**\n * Whether the event is external; external events are less important UI-wise.\n */\n external?: boolean;\n /**\n * The attendance status to this event, if any.\n */\n attendance?: EventAttendance;\n /**\n * A standard and unique id for the event, valid across multiple sources.\n */\n iCalUID?: string;\n}\n\n/**\n * Possible attendance statuses for the event.\n */\nexport enum EventAttendance {\n DECLINED = -1,\n NEEDS_ACTION = 0,\n TENTATIVE,\n ACCEPTED\n}\n\n/**\n * The options to allow (or not) drag&drop to create a new event.\n */\nexport enum DragToCreateOptions {\n DISABLED = 0,\n ONLY_SAME_DAY = 1,\n FREE = 2\n}\n\nconst floorToNearest = (amount: number, precision: number): number => Math.floor(amount / precision) * precision;\nconst ceilToNearest = (amount: number, precision: number): number => Math.ceil(amount / precision) * precision;\n","<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-item lines=\"none\" class=\"calendarViewSelector\" *ngIf=\"allowedViews.length > 1\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n <ion-select-option *ngFor=\"let view of allowedViews\" [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n </ion-select>\n </ion-item>\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate : view + 'ViewTitle' : locale }}</h2>\n <p *ngIf=\"titleNotes\">{{ titleNotes }}</p>\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y : 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle : view : event }}\n <p *ngIf=\"!event.allDay\">{{ getPreviewDescription(event.description) }}</p>\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y : 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\"></mwl-calendar-event-actions>\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n <div class=\"eventGadgets\" *ngIf=\"!weekEvent.event.allDay\">\n <ion-icon *ngFor=\"let icon of weekEvent.event.icons\" [name]=\"icon.name\" [title]=\"icon.title\"></ion-icon>\n <idea-user-avatar\n size=\"mini\"\n *ngFor=\"let avatar of weekEvent.event.avatars\"\n [src]=\"avatar.url\"\n [name]=\"avatar.title\"\n ></idea-user-avatar>\n </div>\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n <div class=\"cal-time\" *ngIf=\"isTimeLabel\">\n {{ segment.date | calendarDate : 'weekViewHour' : locale }}\n </div>\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div [ngSwitch]=\"view\">\n <mwl-calendar-month-view\n *ngSwitchCase=\"CalendarView.Month\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n <mwl-calendar-week-view\n *ngSwitchCase=\"CalendarView.Week\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n <mwl-calendar-day-view\n *ngSwitchCase=\"CalendarView.Day\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n </div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Browser } from '@capacitor/browser';\nimport { Calendar, ExternalCalendarSources, Suggestion } from 'idea-toolbox';\nimport {\n IDEAEnvironment,\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEAMessageService,\n IDEATranslationsService,\n IDEASuggestionsComponent\n} from '@idea-ionic/common';\n\n/**\n * Note: to test locally, you need to temporarily change the redirect URI:\n * - in the lambda `idea_calendars`, e.g. `SCARLETT_URL`;\n * - in the client config file: `APP_URL`.\n * In both cases, the value should be set to `http://localhost:8100` (or according to the local URL).\n */\n@Injectable()\nexport class IDEACalendarsService {\n protected env = inject(IDEAEnvironment);\n\n constructor(\n public modalCtrl: ModalController,\n public alertCtrl: AlertController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public API: IDEAAWSAPIService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Get the ion-icon of an external service from its name.\n */\n public getServiceIcon(service: ExternalCalendarSources): string {\n switch (service) {\n case ExternalCalendarSources.GOOGLE:\n return 'logo-google';\n case ExternalCalendarSources.MICROSOFT:\n return 'logo-windows';\n default:\n return 'help';\n }\n }\n /**\n * Get the base URL for API request (shared/private calendar).\n */\n public getRequestURL(calendar: Calendar): string {\n return (calendar.teamId ? `teams/${calendar.teamId}/` : '').concat('calendars');\n }\n\n /**\n * Create a new calendar.\n */\n public postCalendar(cal: Calendar): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.API.postResource(this.getRequestURL(cal), { idea: true, body: cal })\n .then((res: Calendar) => resolve(new Calendar(res)))\n .catch(err => reject(err));\n });\n }\n /**\n * Update an existing calendar.\n */\n public putCalendar(cal: Calendar): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.API.putResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId, body: cal })\n .then((res: Calendar) => resolve(new Calendar(res)))\n .catch(err => reject(err));\n });\n }\n /**\n * Delete a calendar.\n */\n public deleteCalendar(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject) => {\n this.API.deleteResource(this.getRequestURL(cal), { idea: true, resourceId: cal.calendarId })\n .then(() => resolve())\n .catch(err => reject(err));\n });\n }\n /**\n * Associate an external calendar with the given calendar.\n */\n public setExternalCalendar(cal: Calendar, externalId: string): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.API.patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'SET_EXTERNAL_CALENDAR', externalId }\n })\n .then(res => resolve(new Calendar(res)))\n .catch(err => reject(err));\n });\n }\n\n /**\n * Link the calendar with the chosen external service (auth flow).\n */\n public linkExtService(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject) => {\n if (!cal.external) return reject(new Error('NOT_EXTERNAL'));\n const baseURL = window.location.protocol.concat('//', window.location.hostname);\n let url: string;\n switch (cal.external.service) {\n case ExternalCalendarSources.GOOGLE:\n url =\n 'https://accounts.google.com/o/oauth2/v2/auth?' +\n `client_id=${encodeURIComponent(this.env.google.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/google-calendars-integration'))}` +\n '&include_granted_scopes=true' +\n '&access_type=offline&prompt=consent' +\n `&scope=${encodeURIComponent(this.env.google.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n case ExternalCalendarSources.MICROSOFT:\n url =\n 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize?' +\n `client_id=${encodeURIComponent(this.env.microsoft.apiClientId)}` +\n '&response_type=code' +\n `&redirect_uri=${encodeURIComponent(baseURL.concat('/echo/microsoft-calendars-integration'))}` +\n '&response_mode=query' +\n `&scope=${encodeURIComponent(this.env.microsoft.apiScope)}` +\n `&state=${encodeURIComponent(cal.calendarId)}`;\n break;\n }\n if (!url) return reject(new Error('INVALID_SERVICE'));\n // start the auth flow in the browser\n Browser.open({ url }).then(() => {\n // since we don't know when/if the auth flow will finish, we wait\n this.alertCtrl\n .create({\n header: this.t._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR'),\n message: this.t._('IDEA_AGENDA.CALENDARS.LINKING_CALENDAR_CONFIRM_ONCE_DONE'),\n backdropDismiss: false,\n buttons: [{ text: this.t._('COMMON.DONE'), handler: () => resolve() }]\n })\n .then(alert => alert.present());\n });\n });\n }\n\n /**\n * Get the external calendars list of the external service.\n */\n public getExternalCalendars(cal: Calendar): Promise<ExtCalendar[]> {\n return new Promise((resolve, reject) => {\n if (!cal.external) return reject(new Error('NOT_EXTERNAL'));\n // get the access token to make requests; in case it fails, proceed to link the external service\n this.API.patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'GET_ACCESS_TOKEN' }\n })\n .then((result: any) => {\n // prepare the headers (authorization) for the request to the external service\n const headers = { Authorization: 'Bearer '.concat(result.token) };\n // acquire and return the calendars\n switch (cal.external.service) {\n case ExternalCalendarSources.GOOGLE:\n this.API.rawRequest()\n .get('https://www.googleapis.com/calendar/v3/users/me/calendarList', { headers })\n .toPromise()\n .then((res: any) => resolve(res.items.map((c: any) => ({ name: c.summary, id: c.id }) as ExtCalendar)))\n .catch(err => reject(err));\n break;\n case ExternalCalendarSources.MICROSOFT:\n this.API.rawRequest()\n .get('https://graph.microsoft.com/v1.0/me/calendars', { headers })\n .toPromise()\n .then((res: any) => resolve(res.value.map((c: any) => ({ name: c.name, id: c.id }) as ExtCalendar)))\n .catch(err => reject(err));\n break;\n }\n })\n .catch(err => reject(err));\n });\n }\n\n /**\n * If the external service is linked, choose an external calendar and set it for the chosen calendar.\n * @return the updated calendar.\n */\n public chooseAndSetExternalCalendar(cal: Calendar): Promise<Calendar> {\n return new Promise((resolve, reject) => {\n this.openModalAndPickExternalCalendar(cal)\n .then(extCalId => {\n // the external calendar will be set later on\n if (!extCalId) return resolve(null);\n // an external calendar was chosen: set it right away\n this.setExternalCalendar(cal, extCalId)\n .then(res => resolve(res))\n .catch(err => reject(err));\n })\n .catch(err => reject(err));\n });\n }\n /**\n * Open the modal to pick a calendar from the external service.\n * @return the id of the external calendar.\n */\n private async openModalAndPickExternalCalendar(cal: Calendar): Promise<string> {\n await this.loading.show();\n return new Promise((resolve, reject) => {\n this.getExternalCalendars(cal)\n .then((extCals: ExtCalendar[]) => {\n if (!extCals.length) return reject(new Error('NO_EXTERNAL_CALENDARS'));\n // let the user to choose the external calendar to associate\n this.modalCtrl\n .create({\n component: IDEASuggestionsComponent,\n componentProps: {\n data: extCals.map(c => new Suggestion({ value: c.id, name: c.name })),\n searchPlaceholder: this.t._('IDEA_AGENDA.CALENDARS.CHOOSE_AN_EXTERNAL_CALENDAR_TO_LINK'),\n sortData: true,\n hideIdFromUI: true,\n hideClearButton: true,\n mustChoose: true\n },\n backdropDismiss: false\n })\n .then(modal => {\n modal.onDidDismiss().then(res => resolve(res.data ? res.data.value : null));\n modal.present();\n });\n })\n .catch(err => reject(err))\n .finally(() => this.loading.hide());\n });\n }\n\n /**\n * First sync of the extenal calendar.\n */\n public syncCalendar(cal: Calendar): Promise<void> {\n return new Promise((resolve, reject) => this.syncCalendarHelper(cal, err => (err ? reject(err) : resolve())));\n }\n /**\n * Helper to recursively sync an the extenal calendar.\n */\n private syncCalendarHelper(cal: Calendar, done: (err?: Error) => void) {\n // this is a recursive operation: the API returns if the sync has to continue or it finished\n this.API.patchResource(this.getRequestURL(cal), {\n idea: true,\n resourceId: cal.calendarId,\n body: { action: 'SYNC_EXTERNAL_CALENDAR', firstSync: true }\n })\n .then((res: any) => {\n if (res.moreData) this.syncCalendarHelper(cal, done);\n else done();\n })\n .catch(err => done(err));\n }\n}\n\n/**\n * Helper structure to define external services' calendars (basic info).\n */\ninterface ExtCalendar {\n id: string;\n name: string;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalController, AlertController } from '@ionic/angular';\nimport { Calendar, Check, Membership } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATinCanService,\n IDEAMessageService,\n IDEATranslationsService\n} from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar',\n templateUrl: 'calendar.component.html',\n styleUrls: ['calendar.component.scss']\n})\nexport class IDEACalendarComponent implements OnInit {\n /**\n * The calendar to manage.\n */\n @Input() public calendar: Calendar;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() public advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() public hideColor: boolean;\n\n /**\n * Working copy of the calendar, to update only when confirmed.\n */\n public _calendar: Calendar;\n /**\n * Helper to allow selecting memberships.\n */\n public membershipsChecks: Check[];\n /**\n * The current membership.\n */\n public membership: Membership;\n /**\n * Errors while validating the entity.\n */\n public errors: Set<string> = new Set<string>();\n /**\n * The default color for a calendar.\n */\n public DEFAULT_COLOR = '#555';\n\n constructor(\n public calendars: IDEACalendarsService,\n public modalCtrl: ModalController,\n public alertCtrl: AlertController,\n public tc: IDEATinCanService,\n public loading: IDEALoadingService,\n public message: IDEAMessageService,\n public API: IDEAAWSAPIService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.membership = this.tc.get('membership');\n // work on a copy\n this._calendar = new Calendar(this.calendar);\n // load the teammates to use for shared calendars permissions\n this.API.getResource(`teams/${this.membership.teamId}/memberships`)\n .then(\n (memberships: Membership[]) =>\n (this.membershipsChecks = memberships.map(\n m =>\n new Check({\n value: m.userId,\n name: m.name,\n checked: (this._calendar.usersCanManageAppointments || []).some(x => x === m.userId)\n })\n ))\n )\n .catch(() => {});\n }\n\n /**\n * Set the support array to display errors in the UI.\n */\n public hasFieldAnError(field: string): boolean {\n return this.errors.has(field);\n }\n\n /**\n * Save a calendar with the new info.\n */\n public async save() {\n // set the default color, in case none was selected\n if (!this._calendar.color) this._calendar.color = this.DEFAULT_COLOR;\n // map the memberships able to manage appointments\n if (this._calendar.isShared() && this.advancedPermissions)\n this._calendar.usersCanManageAppointments = this.membershipsChecks\n .filter(x => x.checked)\n .map(x => String(x.value));\n else delete this._calendar.usersCanManageAppointments;\n // checkings\n this.errors = new Set(this._calendar.validate());\n if (this.errors.size) return this.message.error('COMMON.FORM_HAS_ERROR_TO_CHECK');\n // send a put request\n await this.loading.show();\n this.calendars\n .putCalendar(this._calendar)\n .then((res: Calendar) => {\n this.calendar.load(res);\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_SAVED');\n this.modalCtrl.dismiss(this.calendar);\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Delete the calendar.\n */\n public delete() {\n this.alertCtrl\n .create({\n header: this.t._('COMMON.ARE_YOU_SURE'),\n subHeader: this.t._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR'),\n message: this.t._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT'),\n buttons: [\n { text: this.t._('COMMON.CANCEL'), role: 'cancel' },\n {\n text: this.t._('COMMON.DELETE'),\n handler: async () => {\n await this.loading.show();\n this.calendars\n .deleteCalendar(this._calendar)\n .then(() => {\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_DELETED');\n this.modalCtrl.dismiss(true);\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n }\n ]\n })\n .then(alert => alert.present());\n }\n\n /**\n * Close the component.\n */\n public close() {\n this.modalCtrl.dismiss();\n }\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"t._('COMMON.CLOSE')\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"t._('COMMON.SAVE')\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <div class=\"maxWidthContainer\" *ngIf=\"_calendar\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.NAME_HINT')\"\n >\n <ion-label position=\"stacked\">{{ 'IDEA_AGENDA.CALENDARS.NAME' | translate }} </ion-label>\n <ion-input [placeholder]=\"t._('IDEA_AGENDA.CALENDARS.NAME_HINT')\" [(ngModel)]=\"_calendar.name\"></ion-input>\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT')\"\n >\n <ion-label position=\"stacked\">{{ 'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate }} </ion-label>\n <ion-input\n [placeholder]=\"t._('IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT')\"\n [(ngModel)]=\"_calendar.description\"\n ></ion-input>\n </ion-item>\n <idea-color-picker\n *ngIf=\"!hideColor\"\n [lines]=\"'inset'\"\n [current]=\"_calendar.color\"\n [label]=\"t._('IDEA_AGENDA.CALENDARS.COLOR')\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (_calendar.color = $event) : null\"\n ></idea-color-picker>\n <idea-checker\n *ngIf=\"membershipsChecks && _calendar.isShared() && advancedPermissions\"\n [data]=\"membershipsChecks\"\n [label]=\"t._('IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS')\"\n [searchPlaceholder]=\"t._('IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS')\"\n [noneText]=\"t._('IDEA_AGENDA.CALENDARS.NOBODY')\"\n [allText]=\"t._('IDEA_AGENDA.CALENDARS.EVERYONE')\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n ></idea-checker>\n </ion-list>\n <ion-list class=\"aList\" *ngIf=\"_calendar.external?.service\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\" *ngIf=\"calendar.userId\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\"></ion-icon>\n </ion-item>\n <ion-item lines=\"inset\" *ngIf=\"calendar.teamId\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\"></ion-icon>\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + _calendar.external.service | translate }}\n <p>{{ _calendar.external.name }} ({{ _calendar.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"calendars.getServiceIcon(_calendar.external.service)\"></ion-icon>\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + _calendar.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\"></ion-icon>\n </ion-item>\n </ion-list>\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button color=\"danger\" [title]=\"t._('IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT')\" (click)=\"delete()\">\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n</ion-content>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { AlertController, ModalController } from '@ionic/angular';\nimport { Calendar } from 'idea-toolbox';\nimport { IDEALoadingService, IDEAMessageService, IDEATranslationsService } from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\nimport { IDEACalendarComponent } from './calendar.component';\n\n@Component({\n selector: 'idea-calendar-item',\n templateUrl: 'calendarItem.component.html',\n styleUrls: ['calendarItem.component.scss']\n})\nexport class IDEACalendarItemComponent {\n /**\n * The calendar to show.\n */\n @Input() public calendar: Calendar;\n /**\n * Whether the component is disabled.\n */\n @Input() public disabled: boolean;\n /**\n * Whether we want to enable advanced permissions (based on the memberships) on the calendar.\n */\n @Input() public advancedPermissions: boolean;\n /**\n * Whether the calendar color is an important detail or it shouldn't be shown.\n */\n @Input() public hideColor: boolean;\n /**\n * Report to parent components a change.\n */\n @Output() public somethingChanged = new EventEmitter<Calendar>();\n\n constructor(\n public calendars: IDEACalendarsService,\n public alertCtrl: AlertController,\n public modalCtrl: ModalController,\n public message: IDEAMessageService,\n public loading: IDEALoadingService,\n public t: IDEATranslationsService\n ) {}\n\n /**\n * Open the modal to manage the calendar.\n */\n public manageCalendar() {\n if (this.disabled) return;\n this.modalCtrl\n .create({\n component: IDEACalendarComponent,\n componentProps: {\n calendar: this.calendar,\n advancedPermissions: this.advancedPermissions,\n hideColor: this.hideColor\n }\n })\n .then(modal => {\n modal.onDidDismiss().then(res => {\n const cal = res.data;\n // nothing changed\n if (cal === undefined) return;\n // the calendar was deleted\n else if (cal === null) this.calendar = null;\n // the calendar was updated\n else this.calendar.load(cal);\n // report changes to parent components\n this.somethingChanged.emit();\n });\n modal.present();\n });\n }\n\n /**\n * Continue the auth flow to link an external service and set an external calendar;\n * otherwise, the calendar can be deleted.\n */\n public linkExtCalendarOrDelete() {\n if (this.disabled) return;\n // let the user pick an external calendar, in case the external service is linked\n this.calendars\n .chooseAndSetExternalCalendar(this.calendar)\n .then(async cal => {\n if (!cal) return new Error('NO_EXTERNAL_CALENDAR_CHOSEN');\n this.calendar.load(cal);\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_LINKED');\n // run a first sync for the linked external calendar\n await this.loading.show(this.t._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n this.calendars\n .syncCalendar(this.calendar)\n .then(() => this.message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED'))\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => {\n this.loading.hide();\n // report changes to parent components\n this.somethingChanged.emit();\n });\n })\n .catch(() => {\n // the external service isn't linked yet (we don't have a token): link or delete\n this.alertCtrl\n .create({\n header: this.t._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED'),\n message: this.t._('IDEA_AGENDA.CALENDARS.DO_YOU_WANT_PROCEED_LINKING_OR_DELETE'),\n buttons: [\n {\n text: this.t._('COMMON.DELETE'),\n handler: async () => {\n // request the calendar deletion\n await this.loading.show();\n this.calendars\n .deleteCalendar(this.calendar)\n .then(() => {\n this.message.success('COMMON.OPERATION_COMPLETED');\n // report changes to parent components\n this.somethingChanged.emit();\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n },\n {\n text: this.t._('IDEA_AGENDA.CALENDARS.LINK'),\n handler: () =>\n // try again to link the service\n this.calendars\n .linkExtService(this.calendar)\n // if the service was successfully linked, go recursive to choose and set the external calendar\n .then(() => this.linkExtCalendarOrDelete())\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n }\n ]\n })\n .then(alert => alert.present());\n });\n }\n}\n","<ion-item\n class=\"calendarItem\"\n *ngIf=\"calendar\"\n [button]=\"!disabled\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.EDIT_CALENDAR')\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n>\n <ion-avatar\n slot=\"start\"\n class=\"colorCircle\"\n *ngIf=\"!hideColor\"\n [style.background-color]=\"calendar.color\"\n ></ion-avatar>\n <ion-label>\n {{ calendar.name }}\n <p>\n <ion-text color=\"danger\" *ngIf=\"calendar.external && !calendar.external.calendarId\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n {{ calendar.description }}\n </p>\n </ion-label>\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n *ngIf=\"calendar.external && !calendar.external.calendarId\"\n [title]=\"t._('IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT')\"\n ></ion-icon>\n <ion-icon\n slot=\"end\"\n *ngIf=\"calendar.external?.service\"\n [name]=\"calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n t._('IDEA_AGENDA.CALENDARS.LINKED_TO') + ' ' + t._('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service)\n \"\n ></ion-icon>\n</ion-item>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { Calendar, ExternalCalendarInfo, ExternalCalendarSources, Membership } from 'idea-toolbox';\nimport {\n IDEALoadingService,\n IDEAAWSAPIService,\n IDEATinCanService,\n IDEAMessageService,\n IDEATranslationsService\n} from '@idea-ionic/common';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@Component({\n selector: 'idea-calendar-creation',\n templateUrl: 'calendarCreation.component.html',\n styleUrls: ['calendarCreation.component.scss']\n})\nexport class IDEACalendarCreationComponent implements OnInit {\n /**\n * Whether we want to allow the creation of only a particular type of calendar, based on the scope.\n */\n @Input() public fixScope: CalendarScopes;\n /**\n * Whether we want to allow the creation of local calendars.\n */\n @Input() public onlyExternalCalendars: boolean;\n /**\n * The current membership (generic).\n */\n public membership: Membership;\n /**\n * The calendar to create.\n */\n public calendar: Calendar;\n /**\n * The default color for a new calendar.\n */\n public DEFAULT_COLOR = '#555';\n /**\n * The possible external services for the new calendar.\n */\n public SOURCES = Object.keys(ExternalCalendarSources);\n\n constructor(\n public calendars: IDEACalendarsService,\n public modalCtrl: ModalController,\n public tc: IDEATinCanService,\n public loading: IDEALoadingService,\n public message: IDEAMessageService,\n public API: IDEAAWSAPIService,\n public t: IDEATranslationsService\n ) {}\n public ngOnInit() {\n this.calendar = new Calendar();\n this.membership = this.tc.get('membership');\n if (this.fixScope === CalendarScopes.SHARED) this.calendar.teamId = this.membership.teamId;\n if (this.fixScope === CalendarScopes.PRIVATE) this.calendar.userId = this.membership.userId;\n }\n\n /**\n * If allowed by the component configuration, reset the scope of the calendar (private/shared).\n */\n public resetScope() {\n if (this.canChangeScope()) this.calendar.teamId = this.calendar.userId = null;\n }\n /**\n * Whether we can change the scope of the calendar (private/shared).\n */\n public canChangeScope(): boolean {\n return !this.fixScope && this.scopeIsSet();\n }\n /**\n * Whether the scope has been set already.\n */\n public scopeIsSet(): boolean {\n return Boolean(this.calendar.userId) || Boolean(this.calendar.teamId);\n }\n\n /**\n * Add a new calendar based on the configuration set.\n */\n public async saveNewCalendar(service?: ExternalCalendarSources) {\n // be sure the scope of the calendar was chosen\n if (!this.scopeIsSet()) return;\n // be sure we are allowed to create the calendar\n if (!service && this.onlyExternalCalendars) return;\n // flag the calendar so it has to be linked to an externals service (the procedure follows the creation)\n if (service) {\n this.calendar.external = new ExternalCalendarInfo({ service });\n this.calendar.name = '-'; // it will be substituted with the external name\n } else {\n // default values for local calendars\n this.calendar.name = this.calendar.userId\n ? this.t._('IDEA_AGENDA.CALENDARS.DEFAULT_PERSONAL_CALENDAR_NAME')\n : this.t._('IDEA_AGENDA.CALENDARS.DEFAULT_TEAM_CALENDAR_NAME');\n this.calendar.color = this.DEFAULT_COLOR;\n }\n // save (create) the new calendar\n await this.loading.show();\n this.calendars\n .postCalendar(this.calendar)\n .then(cal => {\n this.calendar.load(cal);\n this.message.success('IDEA_AGENDA.CALENDARS.CALENDAR_CREATED');\n // if the calendar is local, no further action is needed\n if (!cal.external) return this.modalCtrl.dismiss(this.calendar);\n // if the calendar should be linked to an external service, proceed\n this.calendars\n .linkExtService(this.calendar)\n // if the link was successful, let the user pick an external calendar to set\n .then(() => this.calendars.chooseAndSetExternalCalendar(this.calendar))\n .then(async res => {\n // if a calendar wasn't set, it can be done later on\n if (!res) return this.modalCtrl.dismiss(this.calendar);\n // if an external calendar was set, update the calendar\n this.calendar.load(res);\n // run a first sync for the linked external calendar\n await this.loading.show(this.t._('IDEA_AGENDA.CALENDARS.FIRST_SYNC_MAY_TAKE_A_WHILE'));\n this.calendars\n .syncCalendar(this.calendar)\n .then(() => this.message.success('IDEA_AGENDA.CALENDARS.FIRST_SYNC_COMPLETED'))\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => {\n this.loading.hide();\n // the calendar is ready to go\n this.modalCtrl.dismiss(this.calendar);\n });\n })\n .catch(() => {\n this.message.error('COMMON.OPERATION_FAILED');\n // the operation can be retried later on; close the modal anyway\n this.modalCtrl.dismiss(this.calendar);\n });\n })\n .catch(() => this.message.error('COMMON.OPERATION_FAILED'))\n .finally(() => this.loading.hide());\n }\n\n /**\n * Close the component.\n */\n public close() {\n this.modalCtrl.dismiss();\n }\n}\n\n/**\n * The possible scopes of the calendar.\n */\nexport enum CalendarScopes {\n SHARED = 'shared', // teamId\n PRIVATE = 'private' // userId\n}\n","<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button *ngIf=\"!canChangeScope()\" [title]=\"t._('COMMON.CLOSE')\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <ion-button *ngIf=\"canChangeScope()\" (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-buttons>\n <ion-title>\n <span *ngIf=\"!scopeIsSet()\">{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n <span *ngIf=\"calendar.userId\">{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n <span *ngIf=\"calendar.teamId\">\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: tc.get('team').name } }}\n </span>\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n <ion-grid class=\"ion-padding choiceGrid\" *ngIf=\"!scopeIsSet()\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n <!-- 2nd STEP -->\n <ion-grid class=\"ion-padding choiceGrid\" *ngIf=\"scopeIsSet()\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" *ngIf=\"!onlyExternalCalendars\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" *ngFor=\"let s of SOURCES\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"calendars.getServiceIcon(s)\"></ion-icon>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\nimport { CalendarDateFormatter, CalendarModule, DateAdapter } from 'angular-calendar';\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\nimport { CustomDateFormatter } from './dateFormatter.provider';\n\nimport {\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule\n} from '@idea-ionic/common';\n\nimport { IDEAAgendaComponent } from './agenda.component';\nimport { IDEACalendarComponent } from './calendar.component';\nimport { IDEACalendarItemComponent } from './calendarItem.component';\nimport { IDEACalendarCreationComponent } from './calendarCreation.component';\n\nimport { IDEACalendarsService } from './calendars.service';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n IDEATranslationsModule,\n IDEAColorPickerModule,\n IDEACheckerModule,\n IDEAUserAvatarModule,\n CalendarModule.forRoot({ provide: DateAdapter, useFactory: adapterFactory })\n ],\n declarations: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n exports: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent],\n providers: [{ provide: CalendarDateFormatter, useClass: CustomDateFormatter }, IDEACalendarsService]\n})\nexport class IDEAAgendaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i1.IDEACalendarsService","i4"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -15,6 +15,7 @@ export declare class IDEACalendarsService {
|
|
|
15
15
|
loading: IDEALoadingService;
|
|
16
16
|
API: IDEAAWSAPIService;
|
|
17
17
|
t: IDEATranslationsService;
|
|
18
|
+
protected env: any;
|
|
18
19
|
constructor(modalCtrl: ModalController, alertCtrl: AlertController, message: IDEAMessageService, loading: IDEALoadingService, API: IDEAAWSAPIService, t: IDEATranslationsService);
|
|
19
20
|
/**
|
|
20
21
|
* Get the ion-icon of an external service from its name.
|
package/environment.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The environment variables used by this module.
|
|
3
|
-
*/
|
|
4
|
-
export declare const environment: {
|
|
5
|
-
idea: {
|
|
6
|
-
ionicExtraModules: string[];
|
|
7
|
-
app: {
|
|
8
|
-
url: string;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
microsoft: {
|
|
12
|
-
apiClientId: string;
|
|
13
|
-
apiScope: string;
|
|
14
|
-
};
|
|
15
|
-
google: {
|
|
16
|
-
apiClientId: string;
|
|
17
|
-
apiScope: string;
|
|
18
|
-
};
|
|
19
|
-
};
|
package/esm2022/environment.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The environment variables used by this module.
|
|
3
|
-
*/
|
|
4
|
-
export const environment = {
|
|
5
|
-
idea: {
|
|
6
|
-
ionicExtraModules: ['agenda'],
|
|
7
|
-
app: {
|
|
8
|
-
url: ''
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
microsoft: {
|
|
12
|
-
apiClientId: '',
|
|
13
|
-
apiScope: ''
|
|
14
|
-
},
|
|
15
|
-
google: {
|
|
16
|
-
apiClientId: '',
|
|
17
|
-
apiScope: ''
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2R1bGVzL2FnZW5kYS9lbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixJQUFJLEVBQUU7UUFDSixpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUM3QixHQUFHLEVBQUU7WUFDSCxHQUFHLEVBQUUsRUFBRTtTQUNSO0tBQ0Y7SUFDRCxTQUFTLEVBQUU7UUFDVCxXQUFXLEVBQUUsRUFBRTtRQUNmLFFBQVEsRUFBRSxFQUFFO0tBQ2I7SUFDRCxNQUFNLEVBQUU7UUFDTixXQUFXLEVBQUUsRUFBRTtRQUNmLFFBQVEsRUFBRSxFQUFFO0tBQ2I7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQgYnkgdGhpcyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcbiAgaWRlYToge1xuICAgIGlvbmljRXh0cmFNb2R1bGVzOiBbJ2FnZW5kYSddLFxuICAgIGFwcDoge1xuICAgICAgdXJsOiAnJ1xuICAgIH1cbiAgfSxcbiAgbWljcm9zb2Z0OiB7XG4gICAgYXBpQ2xpZW50SWQ6ICcnLFxuICAgIGFwaVNjb3BlOiAnJ1xuICB9LFxuICBnb29nbGU6IHtcbiAgICBhcGlDbGllbnRJZDogJycsXG4gICAgYXBpU2NvcGU6ICcnXG4gIH1cbn07XG4iXX0=
|