@api-client/ui 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc +8 -0
- package/demo/elements/authorization/cc.ts +56 -27
- package/demo/elements/index.html +3 -0
- package/demo/elements/store/file-picker.html +15 -0
- package/demo/elements/store/file-picker.ts +134 -0
- package/demo/elements/store/index.html +19 -0
- package/demo/store/StorePlugin.js +1 -0
- package/dist/bindings/base/FileBindings.d.ts +4 -0
- package/dist/bindings/base/FileBindings.d.ts.map +1 -1
- package/dist/bindings/base/FileBindings.js +21 -1
- package/dist/bindings/base/FileBindings.js.map +1 -1
- package/dist/bindings/base/StoreBindings.d.ts +6 -17
- package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
- package/dist/bindings/base/StoreBindings.js +15 -60
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/bindings/web/WebFileBindings.js +1 -1
- package/dist/bindings/web/WebFileBindings.js.map +1 -1
- package/dist/define/http/certificate-add.d.ts +9 -0
- package/dist/define/http/certificate-add.d.ts.map +1 -0
- package/dist/define/http/certificate-add.js +10 -0
- package/dist/define/http/certificate-add.js.map +1 -0
- package/dist/define/store/file-picker.d.ts +9 -0
- package/dist/define/store/file-picker.d.ts.map +1 -0
- package/dist/define/store/file-picker.js +10 -0
- package/dist/define/store/file-picker.js.map +1 -0
- package/dist/define/{files → store}/share-file.d.ts +1 -1
- package/dist/define/store/share-file.d.ts.map +1 -0
- package/dist/define/{files → store}/share-file.js +2 -2
- package/dist/define/store/share-file.js.map +1 -0
- package/dist/define/ui/ui-segmented-button-set.d.ts +1 -1
- package/dist/define/ui/ui-segmented-button-set.d.ts.map +1 -1
- package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
- package/dist/elements/authorization/ui/CC.styles.d.ts.map +1 -1
- package/dist/elements/authorization/ui/CC.styles.js +4 -9
- package/dist/elements/authorization/ui/CC.styles.js.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.d.ts +14 -29
- package/dist/elements/authorization/ui/CcAuthorization.d.ts.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.js +67 -158
- package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/dist/elements/http/CertificateAdd.element.d.ts +91 -0
- package/dist/elements/http/CertificateAdd.element.d.ts.map +1 -0
- package/dist/elements/http/CertificateAdd.element.js +389 -0
- package/dist/elements/http/CertificateAdd.element.js.map +1 -0
- package/dist/elements/http/CertificateAdd.styles.d.ts +3 -0
- package/dist/elements/http/CertificateAdd.styles.d.ts.map +1 -0
- package/dist/elements/http/CertificateAdd.styles.js +61 -0
- package/dist/elements/http/CertificateAdd.styles.js.map +1 -0
- package/dist/elements/project/ProjectRunReport.d.ts +2 -1
- package/dist/elements/project/ProjectRunReport.d.ts.map +1 -1
- package/dist/elements/project/ProjectRunReport.js.map +1 -1
- package/dist/elements/store/FilePicker.element.d.ts +87 -0
- package/dist/elements/store/FilePicker.element.d.ts.map +1 -0
- package/dist/elements/store/FilePicker.element.js +263 -0
- package/dist/elements/store/FilePicker.element.js.map +1 -0
- package/dist/elements/store/FilePicker.styles.d.ts +3 -0
- package/dist/elements/store/FilePicker.styles.d.ts.map +1 -0
- package/dist/elements/store/FilePicker.styles.js +73 -0
- package/dist/elements/store/FilePicker.styles.js.map +1 -0
- package/dist/elements/store/FilesLib.d.ts +10 -0
- package/dist/elements/store/FilesLib.d.ts.map +1 -0
- package/dist/elements/store/FilesLib.js +38 -0
- package/dist/elements/store/FilesLib.js.map +1 -0
- package/dist/elements/{files/ShareFile.d.ts → store/ShareFile.element.d.ts} +1 -1
- package/dist/elements/store/ShareFile.element.d.ts.map +1 -0
- package/dist/elements/{files/ShareFile.js → store/ShareFile.element.js} +1 -1
- package/dist/elements/store/ShareFile.element.js.map +1 -0
- package/dist/elements/store/ShareFile.styles.d.ts.map +1 -0
- package/dist/elements/{files → store}/ShareFile.styles.js.map +1 -1
- package/dist/events/EventTypes.d.ts +7 -7
- package/dist/events/EventTypes.d.ts.map +1 -1
- package/dist/events/EventTypes.js +8 -7
- package/dist/events/EventTypes.js.map +1 -1
- package/dist/events/Events.d.ts +7 -1
- package/dist/events/Events.d.ts.map +1 -1
- package/dist/events/Events.js +2 -0
- package/dist/events/Events.js.map +1 -1
- package/dist/events/FilesystemEvents.d.ts +8 -0
- package/dist/events/FilesystemEvents.d.ts.map +1 -0
- package/dist/events/FilesystemEvents.js +59 -0
- package/dist/events/FilesystemEvents.js.map +1 -0
- package/dist/events/HttpClientEvents.d.ts +0 -2
- package/dist/events/HttpClientEvents.d.ts.map +1 -1
- package/dist/events/HttpClientEvents.js +0 -2
- package/dist/events/HttpClientEvents.js.map +1 -1
- package/dist/events/StoreEvents.d.ts +8 -1
- package/dist/events/StoreEvents.d.ts.map +1 -1
- package/dist/events/StoreEvents.js +19 -0
- package/dist/events/StoreEvents.js.map +1 -1
- package/dist/http-client/idb/Arc18DataUpgrade.d.ts +0 -8
- package/dist/http-client/idb/Arc18DataUpgrade.d.ts.map +1 -1
- package/dist/http-client/idb/Arc18DataUpgrade.js +11 -206
- package/dist/http-client/idb/Arc18DataUpgrade.js.map +1 -1
- package/dist/http-client/store/StoreBroadcast.d.ts +0 -5
- package/dist/http-client/store/StoreBroadcast.d.ts.map +1 -1
- package/dist/http-client/store/StoreBroadcast.js +0 -7
- package/dist/http-client/store/StoreBroadcast.js.map +1 -1
- package/dist/lib/files/FileUtils.d.ts +9 -0
- package/dist/lib/files/FileUtils.d.ts.map +1 -0
- package/dist/lib/files/FileUtils.js +13 -0
- package/dist/lib/files/FileUtils.js.map +1 -0
- package/dist/mixins/RouteMixin.d.ts +4 -0
- package/dist/mixins/RouteMixin.d.ts.map +1 -1
- package/dist/mixins/RouteMixin.js +1 -0
- package/dist/mixins/RouteMixin.js.map +1 -1
- package/dist/pages/ApplicationScreen.d.ts +1 -1
- package/dist/pages/ApplicationScreen.d.ts.map +1 -1
- package/dist/pages/ApplicationScreen.js +4 -2
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.d.ts +4 -6
- package/dist/pages/api-client/ApiClient.screen.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +39 -31
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.styles.js +0 -12
- package/dist/pages/api-client/ApiClient.styles.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +2 -2
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.d.ts +6 -35
- package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +45 -141
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Shared.page.d.ts +1 -5
- package/dist/pages/api-client/pages/Shared.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Shared.page.js +1 -40
- package/dist/pages/api-client/pages/Shared.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.d.ts +7 -0
- package/dist/pages/demo/DemoPage.d.ts.map +1 -1
- package/dist/pages/demo/DemoPage.js +14 -0
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/store/FileSystem.d.ts +90 -0
- package/dist/store/FileSystem.d.ts.map +1 -0
- package/dist/store/FileSystem.js +260 -0
- package/dist/store/FileSystem.js.map +1 -0
- package/dist/styles/global-styles.d.ts.map +1 -1
- package/dist/styles/global-styles.js +7 -0
- package/dist/styles/global-styles.js.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.d.ts +14 -0
- package/dist/ui/button/SegmentedButtonsSet.d.ts.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
- package/dist/ui/icons/Icons.d.ts +2 -1
- package/dist/ui/icons/Icons.d.ts.map +1 -1
- package/dist/ui/icons/Icons.js +1 -0
- package/dist/ui/icons/Icons.js.map +1 -1
- package/dist/ui/list/UiDropdownList.d.ts +9 -1
- package/dist/ui/list/UiDropdownList.d.ts.map +1 -1
- package/dist/ui/list/UiDropdownList.js +39 -17
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.d.ts +6 -1
- package/dist/ui/list/UiList.d.ts.map +1 -1
- package/dist/ui/list/UiList.js +24 -9
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/notification/SnackNotifications.d.ts +1 -0
- package/dist/ui/notification/SnackNotifications.d.ts.map +1 -1
- package/dist/ui/notification/SnackNotifications.js +7 -0
- package/dist/ui/notification/SnackNotifications.js.map +1 -1
- package/dist/ui/table/DataTable.d.ts +4 -0
- package/dist/ui/table/DataTable.d.ts.map +1 -1
- package/dist/ui/table/DataTable.js +23 -1
- package/dist/ui/table/DataTable.js.map +1 -1
- package/package.json +1 -1
- package/src/bindings/base/FileBindings.ts +25 -1
- package/src/bindings/base/StoreBindings.ts +16 -73
- package/src/bindings/web/WebFileBindings.ts +1 -1
- package/src/define/http/certificate-add.ts +12 -0
- package/src/define/store/file-picker.ts +12 -0
- package/src/define/{files → store}/share-file.ts +2 -2
- package/src/define/ui/ui-segmented-button-set.ts +1 -1
- package/src/elements/authorization/ui/CC.styles.ts +4 -9
- package/src/elements/authorization/ui/CcAuthorization.ts +67 -167
- package/src/elements/http/CertificateAdd.element.ts +443 -0
- package/src/elements/http/CertificateAdd.styles.ts +61 -0
- package/src/elements/project/ProjectRunReport.ts +2 -1
- package/src/elements/store/FilePicker.element.ts +297 -0
- package/src/elements/store/FilePicker.styles.ts +73 -0
- package/src/elements/store/FilesLib.ts +32 -0
- package/src/events/EventTypes.ts +8 -7
- package/src/events/Events.ts +2 -0
- package/src/events/FilesystemEvents.ts +63 -0
- package/src/events/HttpClientEvents.ts +0 -2
- package/src/events/StoreEvents.ts +21 -1
- package/src/http-client/idb/Arc18DataUpgrade.ts +84 -84
- package/src/http-client/store/StoreBroadcast.ts +0 -8
- package/src/lib/files/FileUtils.ts +12 -0
- package/src/mixins/RouteMixin.ts +8 -1
- package/src/pages/ApplicationScreen.ts +5 -3
- package/src/pages/api-client/ApiClient.screen.ts +42 -33
- package/src/pages/api-client/ApiClient.styles.ts +0 -12
- package/src/pages/api-client/Authenticate.screen.ts +2 -2
- package/src/pages/api-client/pages/Files.page.ts +48 -164
- package/src/pages/api-client/pages/Shared.page.ts +2 -40
- package/src/pages/demo/DemoPage.ts +17 -0
- package/src/store/FileSystem.ts +325 -0
- package/src/styles/global-styles.ts +7 -0
- package/src/ui/button/SegmentedButtonsSet.ts +16 -1
- package/src/ui/icons/Icons.ts +2 -1
- package/src/ui/list/UiDropdownList.ts +44 -17
- package/src/ui/list/UiList.ts +26 -10
- package/src/ui/notification/SnackNotifications.ts +8 -0
- package/src/ui/table/DataTable.ts +29 -3
- package/test/elements/http/BodyFormdataEditorElement.test.ts +458 -454
- package/test/elements/http/BodyMultipartEditorElement.test.ts +609 -605
- package/test/elements/http/BodyRawEditorElement.test.ts +60 -56
- package/test/elements/http/CertificateAdd.test.ts +430 -0
- package/test/elements/store/FilePicker.test.ts +241 -0
- package/test/env.js +3 -0
- package/test/events/EventTypes.test.ts +0 -22
- package/test/helpers/StoreHelper.ts +390 -0
- package/test/helpers/UiMock.ts +19 -2
- package/tsconfig.eslint.json +3 -1
- package/web-test-runner.config.mjs +50 -3
- package/dist/define/files/share-file.d.ts.map +0 -1
- package/dist/define/files/share-file.js.map +0 -1
- package/dist/elements/files/ShareFile.d.ts.map +0 -1
- package/dist/elements/files/ShareFile.js.map +0 -1
- package/dist/elements/files/ShareFile.styles.d.ts.map +0 -1
- package/dist/events/http-client/models/CertificatesEvents.d.ts +0 -12
- package/dist/events/http-client/models/CertificatesEvents.d.ts.map +0 -1
- package/dist/events/http-client/models/CertificatesEvents.js +0 -18
- package/dist/events/http-client/models/CertificatesEvents.js.map +0 -1
- package/dist/http-client/idb/AuthDataModel.d.ts +0 -60
- package/dist/http-client/idb/AuthDataModel.d.ts.map +0 -1
- package/dist/http-client/idb/AuthDataModel.js +0 -150
- package/dist/http-client/idb/AuthDataModel.js.map +0 -1
- package/dist/http-client/idb/HostsModel.d.ts +0 -25
- package/dist/http-client/idb/HostsModel.d.ts.map +0 -1
- package/dist/http-client/idb/HostsModel.js +0 -82
- package/dist/http-client/idb/HostsModel.js.map +0 -1
- package/dist/http-client/idb/LegacyMockedStore.d.ts +0 -214
- package/dist/http-client/idb/LegacyMockedStore.d.ts.map +0 -1
- package/dist/http-client/idb/LegacyMockedStore.js +0 -486
- package/dist/http-client/idb/LegacyMockedStore.js.map +0 -1
- package/src/events/http-client/models/CertificatesEvents.ts +0 -23
- package/src/http-client/idb/AuthDataModel.ts +0 -175
- package/src/http-client/idb/HostsModel.ts +0 -125
- package/src/http-client/idb/LegacyMockedStore.ts +0 -544
- package/test/apic-ui.test.ts +0 -31
- /package/dist/elements/{files → store}/ShareFile.styles.d.ts +0 -0
- /package/dist/elements/{files → store}/ShareFile.styles.js +0 -0
- /package/src/elements/{files/ShareFile.ts → store/ShareFile.element.ts} +0 -0
- /package/src/elements/{files → store}/ShareFile.styles.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../../../src/lib/files/FileUtils.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAKzC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class FileUtils {
|
|
2
|
+
/**
|
|
3
|
+
* Reads the last segment of the file path and returns it as a file name.
|
|
4
|
+
*
|
|
5
|
+
* @param path THe file path.
|
|
6
|
+
*/
|
|
7
|
+
static getFileName(path) {
|
|
8
|
+
const delimiter = path.includes('/') ? '/' : '\\';
|
|
9
|
+
const last = path.split(delimiter).pop();
|
|
10
|
+
return last || '';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=FileUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUtils.js","sourceRoot":"","sources":["../../../src/lib/files/FileUtils.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IACpB;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;QACzC,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;CACF","sourcesContent":["export class FileUtils {\n /**\n * Reads the last segment of the file path and returns it as a file name.\n * \n * @param path THe file path.\n */\n static getFileName(path: string): string {\n const delimiter = path.includes('/') ? '/' : '\\\\';\n const last = path.split(delimiter).pop();\n return last || '';\n }\n}\n"]}
|
|
@@ -41,6 +41,10 @@ export declare class RouteMixinInterface {
|
|
|
41
41
|
* The list of routes to handle.
|
|
42
42
|
*/
|
|
43
43
|
static get routes(): IRoute[];
|
|
44
|
+
/**
|
|
45
|
+
* The current route parameters. This is the same what is passed to the route handler.
|
|
46
|
+
*/
|
|
47
|
+
protected currentRoute?: IRouteResult;
|
|
44
48
|
/**
|
|
45
49
|
* Initializes the routing.
|
|
46
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMixin.d.ts","sourceRoot":"","sources":["../../src/mixins/RouteMixin.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAErD,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAuDD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC;;OAEG;IACH,MAAM,KAAK,MAAM,IAAI,MAAM,EAAE,CAAC;IAE9B;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAEzB;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;CAChC;AAGD,wBAAgB,UAAU,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"RouteMixin.d.ts","sourceRoot":"","sources":["../../src/mixins/RouteMixin.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAErD,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAC,MAAM,EAAE,CAAC,CAAC;CAC1C;AAuDD,MAAM,CAAC,OAAO,OAAO,mBAAmB;IACtC;;OAEG;IACH,MAAM,KAAK,MAAM,IAAI,MAAM,EAAE,CAAC;IAE9B;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAEtC;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAEzB;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;CAChC;AAGD,wBAAgB,UAAU,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,CA6E7G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteMixin.js","sourceRoot":"","sources":["../../src/mixins/RouteMixin.ts"],"names":[],"mappings":"AA4CA;;GAEG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,OAAe;IAC7C,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe,EAAE,GAAW;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAW,CAAC;YAClC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBACpB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC5B;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;aAClE;iBAAM;gBACL,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,4CAA4C,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY;IACnB,sCAAsC;IACtC,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;AACxF,CAAC;
|
|
1
|
+
{"version":3,"file":"RouteMixin.js","sourceRoot":"","sources":["../../src/mixins/RouteMixin.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable max-classes-per-file */\ntype Constructor<T = {}> = new (...args: any[]) => T;\n\nexport interface IRoute {\n /**\n * The route pattern to evaluate\n */\n pattern?: string;\n /**\n * Whether to call this method when a navigation occurs \n * and the router function couldn't find a match.\n * \n * Can be combined with a patter to define a default route.\n * Setting this multiple times on different route won't change\n * the fallback route. The first matched route will be called.\n */\n fallback?: boolean;\n /**\n * Optional name to pass to the route callback.\n */\n name?: string;\n /**\n * When set it automatically updated the document title on route.\n */\n title?: string;\n /**\n * The class method to call when the route is matched.\n */\n method: string;\n}\n\nexport interface IRouteResult {\n /**\n * The matched route\n */\n route: IRoute;\n /**\n * Captured parameters\n */\n params?: Record<string, string|string[]>;\n}\n\n/**\n * @param value The pattern to evaluate\n */\nfunction getPattern(value: string): RegExp {\n return new RegExp(`^${value}$`);\n}\n\n/**\n * @param uri The path value of the current URL.\n * @param pattern The pattern to evaluate\n */\nfunction testRoute(uri: string, pattern: string): boolean {\n return getPattern(pattern).test(uri);\n}\n\n/**\n * @param pattern The pattern to evaluate\n * @param uri The path value of the current URL.\n */\nfunction parseParams(pattern: string, uri: string): Record<string, string|string[]> | undefined {\n const r = getPattern(pattern);\n const match = r.exec(uri);\n if (!match) {\n return undefined;\n }\n const { groups } = match;\n const result: Record<string, string|string[]> = {};\n if (groups) {\n Object.keys(groups).forEach((key) => {\n let value = groups[key] as string;\n if (value[0] === '/') {\n value = value.substring(1);\n }\n if (value.includes('/')) {\n result[key] = value.split('/').map((i) => decodeURIComponent(i));\n } else {\n result[key] = decodeURIComponent(value);\n }\n });\n }\n return result\n}\n\nfunction warnNoFallback(path: string): void {\n // eslint-disable-next-line no-console\n console.warn(`Unable to find a fallback route for path ${path || '/'}.`);\n}\n\nfunction warnNoRoutes(): void {\n // eslint-disable-next-line no-console\n console.warn('The route callback was called but no routes are defined on the class.');\n}\n\nexport declare class RouteMixinInterface {\n /**\n * The list of routes to handle.\n */\n static get routes(): IRoute[];\n\n /**\n * The current route parameters. This is the same what is passed to the route handler.\n */\n protected currentRoute?: IRouteResult;\n\n /**\n * Initializes the routing.\n */\n initializeRouting(): void;\n\n /**\n * A handler when route change.\n */\n protected _routeHandler(): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function RouteMixin<T extends Constructor<Object>>(superClass: T): Constructor<RouteMixinInterface> & T {\n class RouteMixinClass extends superClass {\n static get routes(): IRoute[] {\n return []\n }\n\n protected currentRoute?: IRouteResult;\n\n constructor(...args: any[]) {\n super(...args);\n this._routeHandler = this._routeHandler.bind(this);\n }\n \n initializeRouting(): void {\n window.onpopstate = (): void => this._routeHandler();\n requestAnimationFrame(() => {\n this._routeHandler();\n });\n }\n\n protected _routeHandler(): void {\n const routes = Reflect.get(this.constructor, 'routes') as IRoute[];\n if (!Array.isArray(routes) || !routes.length) {\n warnNoRoutes();\n return;\n }\n const url = new URL(window.location.href);\n const path = url.hash.replace('#', '');\n const patternRoutes = routes.filter(r => !!r.pattern && r.pattern !== '*');\n const requiredRoutes = routes.filter(r => r.pattern === '*');\n let activeRoute = patternRoutes.find((r) => testRoute(path, r.pattern as string));\n if (!activeRoute) {\n activeRoute = routes.find((r) => r.fallback);\n if (!activeRoute) {\n warnNoFallback(path);\n return;\n }\n }\n const routeCopy = { ...activeRoute };\n const argument: IRouteResult = {\n route: routeCopy,\n };\n if (activeRoute.pattern) {\n const params = parseParams(activeRoute.pattern, path);\n if (params) {\n argument.params = params;\n }\n }\n this.currentRoute = argument;\n this._callRoute(activeRoute, argument);\n if (activeRoute.title) {\n document.title = activeRoute.title;\n }\n requiredRoutes.forEach((r) => {\n this._callRoute(r, argument)\n });\n }\n\n protected _callRoute(route: IRoute, argument: IRouteResult): void {\n if (typeof route.method !== 'string') {\n // eslint-disable-next-line no-console\n console.warn('The route method is not a string.');\n return;\n }\n // @ts-ignore\n const fn = this[route.method] as Function;\n // @ts-ignore\n if (typeof fn !== 'function') {\n // eslint-disable-next-line no-console\n console.warn('The route method is not defined.');\n return;\n }\n fn.apply(this, [argument]);\n }\n }\n // @ts-ignore\n return RouteMixinClass as Constructor<RouteMixinInterface> & T;\n}\n"]}
|
|
@@ -142,7 +142,7 @@ export declare abstract class ApplicationScreen extends ApplicationScreen_base {
|
|
|
142
142
|
* Called from the initialize store init flow when the user is not authenticated
|
|
143
143
|
* and the auth screen is rendered.
|
|
144
144
|
*/
|
|
145
|
-
protected
|
|
145
|
+
protected handleAuthenticate(): Promise<void>;
|
|
146
146
|
protected handleOpenStoreConfig(): void;
|
|
147
147
|
/**
|
|
148
148
|
* Initializes the flow where an environment is required.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationScreen.d.ts","sourceRoot":"","sources":["../../src/pages/ApplicationScreen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAwB,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAM9F,OAAO,EAA2C,kBAAkB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGjH,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,2BAA2B,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,UAAU,mBAAmB;IAC3B;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjC;;;;;AAED;;;;;;;;;;;;GAYG;AACH,8BAAsB,iBAAkB,SAAQ,sBAAwC;IAC1E,WAAW,EAAE,WAAW,CAAU;IAE9C;;OAEG;IACS,QAAQ,UAAS;IAE7B;;OAEG;IACS,aAAa,SAAqC;IAE9D;;;;;OAKG;IACS,WAAW,UAAS;IAEhC;;OAEG;IACS,IAAI,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACS,IAAI,CAAC,EAAE,KAAK,CAAC;IAEzB;;OAEG;IACS,SAAS,CAAC,WAAW,UAAS;IAE9B,SAAS,CAAC,aAAa,UAAS;IAE5C;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;IAEnC;;;OAGG;IACH,IAAI,YAAY,IAAI,OAAO,CAM1B;IAED,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAEtE;;OAEG;IACH,WAAW,EAAE,OAAO,GAAG,MAAM,CAAW;IAExC;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAa;IAEjC;;OAEG;IACH,eAAe,mBAAgD;IAE/D,QAAQ,EAAE,mBAAmB,CAAC;IAE9B;;;OAGG;IACH,GAAG,CAAC,EAAE,kBAAkB,CAAC;gBAEb,IAAI,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"ApplicationScreen.d.ts","sourceRoot":"","sources":["../../src/pages/ApplicationScreen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAwB,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAM9F,OAAO,EAA2C,kBAAkB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGjH,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,2BAA2B,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,UAAU,mBAAmB;IAC3B;;OAEG;IACH,KAAK,EAAE,aAAa,CAAC;IACrB;;OAEG;IACH,MAAM,EAAE,qBAAqB,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACjC;;;;;AAED;;;;;;;;;;;;GAYG;AACH,8BAAsB,iBAAkB,SAAQ,sBAAwC;IAC1E,WAAW,EAAE,WAAW,CAAU;IAE9C;;OAEG;IACS,QAAQ,UAAS;IAE7B;;OAEG;IACS,aAAa,SAAqC;IAE9D;;;;;OAKG;IACS,WAAW,UAAS;IAEhC;;OAEG;IACS,IAAI,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACS,IAAI,CAAC,EAAE,KAAK,CAAC;IAEzB;;OAEG;IACS,SAAS,CAAC,WAAW,UAAS;IAE9B,SAAS,CAAC,aAAa,UAAS;IAE5C;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;IAEnC;;;OAGG;IACH,IAAI,YAAY,IAAI,OAAO,CAM1B;IAED,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAEtE;;OAEG;IACH,WAAW,EAAE,OAAO,GAAG,MAAM,CAAW;IAExC;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAa;IAEjC;;OAEG;IACH,eAAe,mBAAgD;IAE/D,QAAQ,EAAE,mBAAmB,CAAC;IAE9B;;;OAGG;IACH,GAAG,CAAC,EAAE,kBAAkB,CAAC;gBAEb,IAAI,EAAE,eAAe;IAcjC;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAiBxB,SAAS,CAAC,mBAAmB,IAAI,IAAI;IAWrC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAgB/C,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ7C,eAAe,IAAI,IAAI;IAQvB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjD;;;OAGG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAwC1C,yBAAyB,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAMzD,SAAS,CAAC,qBAAqB,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI;IAYtD,SAAS,CAAC,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAOrE,SAAS,CAAC,2BAA2B,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAUpE,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,GAAE,wBAA6B,GAAG,IAAI;IAOlG;;;OAGG;cACa,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnD,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAIvC;;;;;;;;;;;;OAYG;cACa,eAAe,CAAC,YAAY,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC7D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,+BAA+B;IAQvC;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;cAOjB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAerD,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,cAAc,IAAI,cAAc;IASvB,YAAY,IAAI,cAAc;IAavC,SAAS,CAAC,cAAc,IAAI,cAAc;IAM1C,SAAS,CAAC,YAAY,IAAI,cAAc;IAIxC,SAAS,CAAC,cAAc,IAAI,cAAc;IAI1C,SAAS,CAAC,kBAAkB,IAAI,cAAc;IAI9C,SAAS,CAAC,kBAAkB,IAAI,cAAc;IAU9C;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,cAAc;IAU9C,SAAS,CAAC,iBAAiB,IAAI,cAAc;IAa7C,SAAS,CAAC,0BAA0B,IAAI,cAAc;IAYtD,SAAS,CAAC,sBAAsB,IAAI,cAAc;CAenD"}
|
|
@@ -82,6 +82,8 @@ export class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget))
|
|
|
82
82
|
this.initMediaQueries();
|
|
83
83
|
this.initStoreChange();
|
|
84
84
|
this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this));
|
|
85
|
+
// this will use the system-default theme until config is read.
|
|
86
|
+
this.themeActiveCallback();
|
|
85
87
|
}
|
|
86
88
|
/**
|
|
87
89
|
* Initializes configuration that is relevant to all application windows.
|
|
@@ -239,7 +241,7 @@ export class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget))
|
|
|
239
241
|
* Called from the initialize store init flow when the user is not authenticated
|
|
240
242
|
* and the auth screen is rendered.
|
|
241
243
|
*/
|
|
242
|
-
async
|
|
244
|
+
async handleAuthenticate() {
|
|
243
245
|
const { store } = this.bindings;
|
|
244
246
|
await store.auth.authenticate({ updateEnvironment: true });
|
|
245
247
|
this.authenticated = true;
|
|
@@ -411,7 +413,7 @@ export class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget))
|
|
|
411
413
|
<div class="auth-required-screen">
|
|
412
414
|
<h1 class="display-large">Authentication required</h1>
|
|
413
415
|
<p class="body-large">You are not authenticated. To continue, please, authenticate your account.</p>
|
|
414
|
-
<ui-button type="tonal" @click="${this.
|
|
416
|
+
<ui-button type="tonal" @click="${this.handleAuthenticate}">Authenticate</ui-button>
|
|
415
417
|
</div>
|
|
416
418
|
`;
|
|
417
419
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationScreen.js","sourceRoot":"","sources":["../../src/pages/ApplicationScreen.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult } from 'lit';\nimport { IUser, Events as CoreEvents, IBackendInfo } from '@api-client/core/build/browser.js';\nimport { RenderableMixin } from '../mixins/RenderableMixin.js';\nimport { RouteMixin } from '../mixins/RouteMixin.js';\nimport { reactive } from '../lib/decorators.js';\nimport { Events } from '../events/Events.js';\nimport { EventTypes } from '../events/EventTypes.js';\nimport { ConfigBroadcast, ConfigBroadcastChannel, IConfigEnvironment, ThemeType } from '../lib/config/Config.js';\nimport supportedPlatform from '../lib/SupportedPlatform.js';\nimport { ButtonType } from '../ui/button/UiButton.js';\nimport { StoreBindings } from '../bindings/base/StoreBindings.js';\nimport type { AddConfigEnvironmentInit, ConfigurationBindings } from '../bindings/base/ConfigurationBindings.js';\nimport { PlatformBindings } from '../bindings/base/PlatformBindings.js';\nimport { SnackNotifications } from '../ui/notification/SnackNotifications.js';\nimport '../define/ui/ui-button.js';\n\nexport interface ApplicationInit {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n}\n\ninterface ApplicationBindings {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n [key: string]: PlatformBindings;\n}\n\n/**\n * A base class for pages build outside the LitElement. It uses `lit-html` \n * as the template renderer.\n * \n * The implementation (extending this class) should override the `pageTemplate()`\n * function that returns the `TemplateResult` from the `lit-html` library.\n * \n * To reflect the changed state call the `render()` function. The function schedules\n * a micro task (through `requestAnimationFrame`) to call the render function on the template.\n * \n * Use the `@reactive()` decorator from `src/lib/decorators.js` to mark a property as reactive,\n * meaning, when the property change it calls the `render()` function.\n */\nexport abstract class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget)) {\n @reactive() eventTarget: EventTarget = window;\n\n /** \n * True when the app should render mobile friendly view.\n */\n @reactive() isMobile = false;\n\n /** \n * The loading state information.\n */\n @reactive() loadingStatus = 'Initializing the application...';\n\n /**\n * A flag telling the application screen that the logic is initialized.\n * \n * The page can request different initialization logics. When the logic is\n * loaded the flag is set to true.\n */\n @reactive() initialized = false;\n\n /**\n * The page on the screen currently being rendered.\n */\n @reactive() page?: string;\n\n /**\n * The current user.\n * Call the `loadUser()` to populate this.\n */\n @reactive() user?: IUser;\n\n /**\n * True when the user meta is being loaded.\n */\n @reactive() protected loadingUser = false;\n \n @reactive() protected authenticated = false;\n\n /**\n * This is automatically set when initializing the store.\n * Basic information about the store.\n */\n protected storeInfo?: IBackendInfo;\n\n /**\n * Checks whether the store is in the single user mode.\n * It also returns true when the store info is not set (before the backend was initialized).\n */\n get isSingleUser(): boolean {\n const { storeInfo } = this;\n if (!storeInfo) {\n return true;\n }\n return storeInfo.mode === 'single-user';\n }\n\n protected pendingResolver?: (value: void | PromiseLike<void>) => void;\n\n /**\n * Detected system theme.\n */\n systemTheme: 'light' | 'dark' = 'light';\n\n /**\n * The theme to use as selected by the user.\n * Default to system default.\n */\n userTheme: ThemeType = 'default';\n\n /**\n * Application configuration broadcast channel.\n */\n configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);\n\n bindings: ApplicationBindings;\n\n /**\n * The store environment in use.\n * This is set after the `initializeStore()` was called.\n */\n env?: IConfigEnvironment;\n\n constructor(init: ApplicationInit) {\n super();\n this.bindings = {\n config: init.config,\n store: init.store,\n };\n window.onunhandledrejection = this.unhandledRejectionHandler.bind(this);\n this.initMediaQueries();\n this.initStoreChange();\n this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this))\n }\n\n /**\n * Called once when the page is being initialized.\n */\n abstract initialize(): Promise<void>;\n\n /**\n * Initializes configuration that is relevant to all application windows.\n */\n async initializeConfig(): Promise<void> {\n const { config } = this.bindings;\n const theme = await config.local.get('theme') as ThemeType | undefined;\n if (theme) {\n this.userTheme = theme;\n }\n this.themeActiveCallback();\n }\n\n /**\n * Initializes media queries and observers.\n */\n initMediaQueries(): void {\n const mql = window.matchMedia('(max-width: 600px)');\n this.isMobile = mql.matches;\n mql.addEventListener('change', (e) => {\n this.isMobile = e.matches;\n });\n\n const dark = window.matchMedia('(prefers-color-scheme: dark)');\n if (dark.matches) {\n this.systemTheme = 'dark';\n }\n dark.addEventListener('change', (e) => {\n this.systemTheme = e.matches ? 'dark' : 'light';\n this.themeActiveCallback();\n });\n }\n\n protected themeActiveCallback(): void {\n const { systemTheme, userTheme } = this;\n let theme: 'light' | 'dark';\n if (userTheme === 'default') {\n theme = systemTheme;\n } else {\n theme = userTheme;\n }\n this.activateTheme(theme);\n }\n\n protected activateTheme(type: 'light' | 'dark'): void {\n const root = document.querySelector('html');\n if (!root) {\n return;\n }\n const { classList } = root;\n // clear all themes\n classList.forEach((value) => {\n if (value.startsWith('theme-')) {\n classList.remove(value);\n }\n });\n const name = `theme-${type}`;\n classList.add(name);\n }\n\n async isPlatformSupported(): Promise<boolean> {\n const result = await supportedPlatform();\n if (!result) {\n this.page = 'unsupported-platform';\n }\n return result;\n }\n\n initStoreChange(): void {\n window.addEventListener(EventTypes.Config.Environment.State.defaultChange, (e: Event) => {\n const event = e as CustomEvent;\n const id = event.detail.id as string;\n this.storeChanged(id);\n });\n }\n\n /**\n * Override in a child class to implement a logic that runs when the default \n * store change in the configuration.\n * \n * @param id The id of the activated environment. When missing it means there's no default environment.\n */\n abstract storeChanged(id?: string): Promise<void>;\n\n /**\n * Creates a modal dialog with the error details.\n * @param message The message to render\n */\n reportCriticalError(message: string): void {\n try {\n const dialog = document.createElement('dialog');\n const form = document.createElement('form');\n const title = document.createElement('h2');\n const content = document.createElement('div');\n const messageContainer = document.createElement('p');\n const buttons = document.createElement('div');\n const button = document.createElement('ui-button');\n dialog.classList.add('error-dialog');\n form.method = 'method';\n title.innerText = `An error ocurred`;\n messageContainer.classList.add('body-medium');\n messageContainer.textContent = message;\n content.appendChild(messageContainer);\n button.textContent = 'Dismiss';\n button.type = ButtonType.filled;\n button.value = 'submit';\n button.submit = true;\n buttons.classList.add('dialog-buttons');\n buttons.appendChild(button);\n form.appendChild(title);\n form.appendChild(content);\n form.appendChild(buttons);\n dialog.appendChild(form);\n document.body.appendChild(dialog);\n dialog.showModal();\n form.addEventListener('submit', (e: SubmitEvent) => {\n e.preventDefault();\n dialog.close();\n });\n dialog.addEventListener('close', () => {\n dialog.parentElement?.removeChild(dialog);\n });\n } catch (e) {\n /* eslint-disable-next-line no-console */ \n console.error(e);\n }\n }\n\n unhandledRejectionHandler(e: PromiseRejectionEvent): void {\n /* eslint-disable-next-line no-console */\n console.error(e);\n this.reportCriticalError(e.reason);\n }\n\n protected handleConfigBroadcast(e: MessageEvent): void {\n const event = e.data as ConfigBroadcast;\n const { path } = event;\n if (path === 'local.set') {\n this.handleLocalConfigUpdated(event.key as string, event.value as unknown);\n } else if (path === 'environment.setDefault') {\n this.handleDefaultEnvironmentSet(event.env as IConfigEnvironment);\n } else if (path === 'environment.add') {\n this.handleEnvironmentAdd(event.env as IConfigEnvironment, event.init as AddConfigEnvironmentInit);\n }\n }\n\n protected handleLocalConfigUpdated(key: string, value: unknown): void {\n if (key === 'theme') {\n this.userTheme = value as ThemeType;\n this.themeActiveCallback();\n }\n }\n\n protected handleDefaultEnvironmentSet(env: IConfigEnvironment): void {\n const { initialized, bindings } = this;\n this.env = env;\n bindings.store.global.set(env);\n this.resolvePending();\n if (initialized) {\n this.storeChanged(env.key);\n }\n }\n\n protected handleEnvironmentAdd(env: IConfigEnvironment, init: AddConfigEnvironmentInit = {}): void {\n if (!init.asDefault) {\n return;\n }\n this.handleDefaultEnvironmentSet(env);\n }\n\n /**\n * Called from the initialize store init flow when the user is not authenticated\n * and the auth screen is rendered.\n */\n protected async _authHandler(): Promise<void> {\n const { store } = this.bindings;\n await store.auth.authenticate({ updateEnvironment: true });\n this.authenticated = true;\n this.resolvePending();\n }\n\n protected handleOpenStoreConfig(): void {\n Events.Navigation.Store.config();\n }\n\n /**\n * Initializes the flow where an environment is required.\n * This checks for the default environment.\n * When it doesn't exists it asks the user to pick existing environment \n * or to create one.\n * When a default environment exists, it performs authentication\n * when necessary. \n * \n * Eventually it returns the HTTP store with an authenticated environment.\n * \n * @param defaultFlows When set to `true` is renders default pages for env selector \n * or when to authenticate. When false it throws errors instead. Default to `true`.\n */\n protected async initializeStore(defaultFlows = true): Promise<void> {\n const { store, config } = this.bindings;\n let env: IConfigEnvironment | undefined;\n try {\n env = await config.environment.read();\n } catch (e) { \n if (!defaultFlows) {\n throw e;\n }\n }\n if (!env || !env.location) {\n await this.enterEnvironmentMissingFlow();\n }\n if (!env || !env.location) {\n return;\n }\n this.env = env;\n await store.global.set(env);\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n } catch (e) {\n if (!defaultFlows) {\n throw e;\n }\n await this.enterStoreUnavailableFlow();\n }\n const authStatus = await store.auth.isAuthenticated();\n if (!authStatus) {\n if (!defaultFlows) {\n throw new Error(`Not authenticated.`);\n }\n await this.enterAuthenticationRequiredFlow();\n }\n this.authenticated = true;\n }\n\n async loadUser(): Promise<void> {\n this.loadingUser = true;\n try {\n this.user = await this.bindings.store.users.me();\n } catch (e) {\n CoreEvents.Telemetry.exception(`Loading user: ${(e as Error).message}`, undefined, this.eventTarget || window);\n } finally {\n this.loadingUser = false;\n }\n }\n\n private enterEnvironmentMissingFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'env-required';\n });\n }\n\n private enterAuthenticationRequiredFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'auth-required';\n });\n }\n \n\n /**\n * Enters into the flow where the application is unable to connect to the data store.\n * It asks user to retry or re-configure.\n * \n * Note, this is called from withing the `initializeStore()` method and this is expected to\n * eventually finish.\n */\n private enterStoreUnavailableFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'store-unavailable';\n });\n }\n\n protected async handleRetryStoreInfo(): Promise<void> {\n const { bindings, env } = this;\n const { store } = bindings;\n if (!env) {\n // this should not happen as we enter this flow after the env is set.\n return;\n }\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n this.resolvePending();\n } catch (_) {\n SnackNotifications.notify(`Unable to connect.`);\n }\n }\n\n private resolvePending(): void {\n const { pendingResolver } = this;\n if (pendingResolver) {\n this.pendingResolver = undefined;\n pendingResolver();\n }\n }\n\n /**\n * @returns A template for the page loader\n */\n loaderTemplate(): TemplateResult {\n return html`\n <div class=\"app-loader body-large\">\n <p class=\"message\">Preparing something spectacular</p>\n <p class=\"sub-message\">${this.loadingStatus}</p>\n </div>\n `;\n }\n\n override pageTemplate(): TemplateResult {\n const { initialized } = this;\n if (!initialized) {\n if (this.page) {\n return html`\n ${this.renderInitFlowPage()}\n `;\n }\n return this.loaderTemplate();\n }\n return html``;\n }\n\n protected headerTemplate(): TemplateResult {\n return html`\n <header>Welcome</header>\n `;\n }\n\n protected mainTemplate(): TemplateResult {\n return html`<main></main>`;\n }\n\n protected footerTemplate(): TemplateResult {\n return html`<footer>Credits: Pawel Uchida-Psztyc</footer>`;\n }\n\n protected navigationTemplate(): TemplateResult {\n return html`<nav></nav>`;\n }\n\n protected renderInitFlowPage(): TemplateResult {\n switch (this.page) {\n case 'auth-required': return this.renderAuthRequired();\n case 'env-required': return this.renderEnvRequired();\n case 'unsupported-platform': return this.renderPlatformNotSupported();\n case 'store-unavailable': return this.renderStoreUnavailable();\n default: return html`<p class=\"general-error\">Unknown state. Did you set the <i>initialized</i> flag?</p>`;\n }\n }\n\n /**\n * Renders a full page overlay with the authentication required message.\n */\n protected renderAuthRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Authentication required</h1>\n <p class=\"body-large\">You are not authenticated. To continue, please, authenticate your account.</p>\n <ui-button type=\"tonal\" @click=\"${this._authHandler}\">Authenticate</ui-button>\n </div>\n `;\n }\n\n protected renderEnvRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Environment configuration missing</h1>\n <p class=\"body-large\">\n The application is unable to determine which environment to use.\n Open the <b>store configuration</b> screen to configure the connection.\n </p>\n <ui-button type=\"tonal\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n `;\n }\n\n protected renderPlatformNotSupported(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unsupported platform</h1>\n <p class=\"body-large\">\n It looks like your browser does not support one of the crucial features needed to run\n this application. Accept our apologies, we work hard to support as many browsers as possible. \n </p>\n </div>\n `;\n }\n\n protected renderStoreUnavailable(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unable to connect</h1>\n <p class=\"body-large\">\n It looks like you or the data store are offline. The application is unable to continue\n without a connection to the backend.\n </p>\n <div class=\"actions\">\n <ui-button type=\"tonal\" @click=\"${this.handleRetryStoreInfo}\">Retry</ui-button>\n <ui-button type=\"outlined\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ApplicationScreen.js","sourceRoot":"","sources":["../../src/pages/ApplicationScreen.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,2CAA2C;AAC3C,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAS,MAAM,IAAI,UAAU,EAAgB,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAmB,sBAAsB,EAAiC,MAAM,yBAAyB,CAAC;AACjH,OAAO,iBAAiB,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAItD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,2BAA2B,CAAC;AAyBnC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,iBAAkB,SAAQ,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IA6CtF;;;OAGG;IACH,IAAI,YAAY;QACd,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE;YACd,OAAO,IAAI,CAAC;SACb;QACD,OAAO,SAAS,CAAC,IAAI,KAAK,aAAa,CAAC;IAC1C,CAAC;IA4BD,YAAY,IAAqB;QAC/B,KAAK,EAAE,CAAC;QAnFE,gBAAW,GAAgB,MAAM,CAAC;QAE9C;;WAEG;QACS,aAAQ,GAAG,KAAK,CAAC;QAE7B;;WAEG;QACS,kBAAa,GAAG,iCAAiC,CAAC;QAE9D;;;;;WAKG;QACS,gBAAW,GAAG,KAAK,CAAC;QAahC;;WAEG;QACmB,gBAAW,GAAG,KAAK,CAAC;QAEpB,kBAAa,GAAG,KAAK,CAAC;QAsB5C;;WAEG;QACH,gBAAW,GAAqB,OAAO,CAAC;QAExC;;;WAGG;QACH,cAAS,GAAc,SAAS,CAAC;QAEjC;;WAEG;QACH,oBAAe,GAAG,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAY7D,IAAI,CAAC,QAAQ,GAAG;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;QACF,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,+DAA+D;QAC/D,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAOD;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAA0B,CAAC;QACvE,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,GAAG,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;SAC3B;QACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAChD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB;QAC3B,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACxC,IAAI,KAAuB,CAAC;QAC5B,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,KAAK,GAAG,WAAW,CAAC;SACrB;aAAM;YACL,KAAK,GAAG,SAAS,CAAC;SACnB;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAES,aAAa,CAAC,IAAsB;QAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC3B,mBAAmB;QACnB,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC9B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,IAAI,EAAE,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;SACpC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,eAAe;QACb,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtF,MAAM,KAAK,GAAG,CAAgB,CAAC;YAC/B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAY,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAUD;;;OAGG;IACH,mBAAmB,CAAC,OAAe;QACjC,IAAI;YACF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;YACrC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9C,gBAAgB,CAAC,WAAW,GAAG,OAAO,CAAC;YACvC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;YAC/B,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;YAChC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;YACxB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAc,EAAE,EAAE;gBACjD,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;YACV,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClB;IACH,CAAC;IAED,yBAAyB,CAAC,CAAwB;QAChD,yCAAyC;QACzC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAES,qBAAqB,CAAC,CAAe;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAuB,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,GAAa,EAAE,KAAK,CAAC,KAAgB,CAAC,CAAC;SAC5E;aAAM,IAAI,IAAI,KAAK,wBAAwB,EAAE;YAC5C,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,GAAyB,CAAC,CAAC;SACnE;aAAM,IAAI,IAAI,KAAK,iBAAiB,EAAE;YACrC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAyB,EAAE,KAAK,CAAC,IAAgC,CAAC,CAAC;SACpG;IACH,CAAC;IAES,wBAAwB,CAAC,GAAW,EAAE,KAAc;QAC5D,IAAI,GAAG,KAAK,OAAO,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,KAAkB,CAAC;YACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;IACH,CAAC;IAES,2BAA2B,CAAC,GAAuB;QAC3D,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC5B;IACH,CAAC;IAES,oBAAoB,CAAC,GAAuB,EAAE,OAAiC,EAAE;QACzF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,kBAAkB;QAChC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAES,qBAAqB;QAC7B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;OAYG;IACO,KAAK,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI;QACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,GAAmC,CAAC;QACxC,IAAI;YACF,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACvC;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,CAAC,CAAC;aACT;SACF;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,OAAO;SACR;QACD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SACtE;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,CAAC,CAAC;aACT;YACD,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACxC;QACD,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE;YACf,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACvC;YACD,MAAM,IAAI,CAAC,+BAA+B,EAAE,CAAC;SAC9C;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI;YACF,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;SAClD;QAAC,OAAO,CAAC,EAAE;YACV,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAkB,CAAW,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;SAChH;gBAAS;YACR,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B;IACH,CAAC;IAEO,2BAA2B;QACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,+BAA+B;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAGD;;;;;;OAMG;IACK,yBAAyB;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,oBAAoB;QAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE;YACR,qEAAqE;YACrE,OAAO;SACR;QACD,IAAI;YACF,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrE,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;QAAC,OAAO,CAAC,EAAE;YACV,kBAAkB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;SACjD;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,eAAe,EAAE,CAAC;SACnB;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAA;;;+BAGgB,IAAI,CAAC,aAAa;;KAE5C,CAAC;IACJ,CAAC;IAEQ,YAAY;QACnB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,OAAO,IAAI,CAAA;UACT,IAAI,CAAC,kBAAkB,EAAE;SAC1B,CAAC;aACH;YACD,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;SAC9B;QACD,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAES,cAAc;QACtB,OAAO,IAAI,CAAA;;KAEV,CAAC;IACJ,CAAC;IAES,YAAY;QACpB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;IAES,cAAc;QACtB,OAAO,IAAI,CAAA,+CAA+C,CAAC;IAC7D,CAAC;IAES,kBAAkB;QAC1B,OAAO,IAAI,CAAA,aAAa,CAAC;IAC3B,CAAC;IAES,kBAAkB;QAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,eAAe,CAAC,CAAC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACvD,KAAK,cAAc,CAAC,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrD,KAAK,sBAAsB,CAAC,CAAC,OAAO,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACtE,KAAK,mBAAmB,CAAC,CAAC,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC/D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA,sFAAsF,CAAC;SAC5G;IACH,CAAC;IAED;;OAEG;IACO,kBAAkB;QAC1B,OAAO,IAAI,CAAA;;;;wCAIyB,IAAI,CAAC,kBAAkB;;KAE1D,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,OAAO,IAAI,CAAA;;;;;;;wCAOyB,IAAI,CAAC,qBAAqB;;KAE7D,CAAC;IACJ,CAAC;IAES,0BAA0B;QAClC,OAAO,IAAI,CAAA;;;;;;;;KAQV,CAAC;IACJ,CAAC;IAES,sBAAsB;QAC9B,OAAO,IAAI,CAAA;;;;;;;;0CAQ2B,IAAI,CAAC,oBAAoB;6CACtB,IAAI,CAAC,qBAAqB;;;KAGlE,CAAC;IACJ,CAAC;CACF;AAvfa;IAAX,QAAQ,EAAE;sDAAmC;AAKlC;IAAX,QAAQ,EAAE;mDAAkB;AAKjB;IAAX,QAAQ,EAAE;wDAAmD;AAQlD;IAAX,QAAQ,EAAE;sDAAqB;AAKpB;IAAX,QAAQ,EAAE;+CAAe;AAMd;IAAX,QAAQ,EAAE;+CAAc;AAKb;IAAX,QAAQ,EAAE;sDAA+B;AAE9B;IAAX,QAAQ,EAAE;wDAAiC","sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable class-methods-use-this */\nimport { html, TemplateResult } from 'lit';\nimport { IUser, Events as CoreEvents, IBackendInfo } from '@api-client/core/build/browser.js';\nimport { RenderableMixin } from '../mixins/RenderableMixin.js';\nimport { RouteMixin } from '../mixins/RouteMixin.js';\nimport { reactive } from '../lib/decorators.js';\nimport { Events } from '../events/Events.js';\nimport { EventTypes } from '../events/EventTypes.js';\nimport { ConfigBroadcast, ConfigBroadcastChannel, IConfigEnvironment, ThemeType } from '../lib/config/Config.js';\nimport supportedPlatform from '../lib/SupportedPlatform.js';\nimport { ButtonType } from '../ui/button/UiButton.js';\nimport { StoreBindings } from '../bindings/base/StoreBindings.js';\nimport type { AddConfigEnvironmentInit, ConfigurationBindings } from '../bindings/base/ConfigurationBindings.js';\nimport { PlatformBindings } from '../bindings/base/PlatformBindings.js';\nimport { SnackNotifications } from '../ui/notification/SnackNotifications.js';\nimport '../define/ui/ui-button.js';\n\nexport interface ApplicationInit {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n}\n\ninterface ApplicationBindings {\n /**\n * A reference to the store bindings.\n */\n store: StoreBindings;\n /**\n * A reference to the config bindings.\n */\n config: ConfigurationBindings;\n [key: string]: PlatformBindings;\n}\n\n/**\n * A base class for pages build outside the LitElement. It uses `lit-html` \n * as the template renderer.\n * \n * The implementation (extending this class) should override the `pageTemplate()`\n * function that returns the `TemplateResult` from the `lit-html` library.\n * \n * To reflect the changed state call the `render()` function. The function schedules\n * a micro task (through `requestAnimationFrame`) to call the render function on the template.\n * \n * Use the `@reactive()` decorator from `src/lib/decorators.js` to mark a property as reactive,\n * meaning, when the property change it calls the `render()` function.\n */\nexport abstract class ApplicationScreen extends RouteMixin(RenderableMixin(EventTarget)) {\n @reactive() eventTarget: EventTarget = window;\n\n /** \n * True when the app should render mobile friendly view.\n */\n @reactive() isMobile = false;\n\n /** \n * The loading state information.\n */\n @reactive() loadingStatus = 'Initializing the application...';\n\n /**\n * A flag telling the application screen that the logic is initialized.\n * \n * The page can request different initialization logics. When the logic is\n * loaded the flag is set to true.\n */\n @reactive() initialized = false;\n\n /**\n * The page on the screen currently being rendered.\n */\n @reactive() page?: string;\n\n /**\n * The current user.\n * Call the `loadUser()` to populate this.\n */\n @reactive() user?: IUser;\n\n /**\n * True when the user meta is being loaded.\n */\n @reactive() protected loadingUser = false;\n \n @reactive() protected authenticated = false;\n\n /**\n * This is automatically set when initializing the store.\n * Basic information about the store.\n */\n protected storeInfo?: IBackendInfo;\n\n /**\n * Checks whether the store is in the single user mode.\n * It also returns true when the store info is not set (before the backend was initialized).\n */\n get isSingleUser(): boolean {\n const { storeInfo } = this;\n if (!storeInfo) {\n return true;\n }\n return storeInfo.mode === 'single-user';\n }\n\n protected pendingResolver?: (value: void | PromiseLike<void>) => void;\n\n /**\n * Detected system theme.\n */\n systemTheme: 'light' | 'dark' = 'light';\n\n /**\n * The theme to use as selected by the user.\n * Default to system default.\n */\n userTheme: ThemeType = 'default';\n\n /**\n * Application configuration broadcast channel.\n */\n configBroadcast = new BroadcastChannel(ConfigBroadcastChannel);\n\n bindings: ApplicationBindings;\n\n /**\n * The store environment in use.\n * This is set after the `initializeStore()` was called.\n */\n env?: IConfigEnvironment;\n\n constructor(init: ApplicationInit) {\n super();\n this.bindings = {\n config: init.config,\n store: init.store,\n };\n window.onunhandledrejection = this.unhandledRejectionHandler.bind(this);\n this.initMediaQueries();\n this.initStoreChange();\n this.configBroadcast.addEventListener('message', this.handleConfigBroadcast.bind(this));\n // this will use the system-default theme until config is read.\n this.themeActiveCallback();\n }\n\n /**\n * Called once when the page is being initialized.\n */\n abstract initialize(): Promise<void>;\n\n /**\n * Initializes configuration that is relevant to all application windows.\n */\n async initializeConfig(): Promise<void> {\n const { config } = this.bindings;\n const theme = await config.local.get('theme') as ThemeType | undefined;\n if (theme) {\n this.userTheme = theme;\n }\n this.themeActiveCallback();\n }\n\n /**\n * Initializes media queries and observers.\n */\n initMediaQueries(): void {\n const mql = window.matchMedia('(max-width: 600px)');\n this.isMobile = mql.matches;\n mql.addEventListener('change', (e) => {\n this.isMobile = e.matches;\n });\n\n const dark = window.matchMedia('(prefers-color-scheme: dark)');\n if (dark.matches) {\n this.systemTheme = 'dark';\n }\n dark.addEventListener('change', (e) => {\n this.systemTheme = e.matches ? 'dark' : 'light';\n this.themeActiveCallback();\n });\n }\n\n protected themeActiveCallback(): void {\n const { systemTheme, userTheme } = this;\n let theme: 'light' | 'dark';\n if (userTheme === 'default') {\n theme = systemTheme;\n } else {\n theme = userTheme;\n }\n this.activateTheme(theme);\n }\n\n protected activateTheme(type: 'light' | 'dark'): void {\n const root = document.querySelector('html');\n if (!root) {\n return;\n }\n const { classList } = root;\n // clear all themes\n classList.forEach((value) => {\n if (value.startsWith('theme-')) {\n classList.remove(value);\n }\n });\n const name = `theme-${type}`;\n classList.add(name);\n }\n\n async isPlatformSupported(): Promise<boolean> {\n const result = await supportedPlatform();\n if (!result) {\n this.page = 'unsupported-platform';\n }\n return result;\n }\n\n initStoreChange(): void {\n window.addEventListener(EventTypes.Config.Environment.State.defaultChange, (e: Event) => {\n const event = e as CustomEvent;\n const id = event.detail.id as string;\n this.storeChanged(id);\n });\n }\n\n /**\n * Override in a child class to implement a logic that runs when the default \n * store change in the configuration.\n * \n * @param id The id of the activated environment. When missing it means there's no default environment.\n */\n abstract storeChanged(id?: string): Promise<void>;\n\n /**\n * Creates a modal dialog with the error details.\n * @param message The message to render\n */\n reportCriticalError(message: string): void {\n try {\n const dialog = document.createElement('dialog');\n const form = document.createElement('form');\n const title = document.createElement('h2');\n const content = document.createElement('div');\n const messageContainer = document.createElement('p');\n const buttons = document.createElement('div');\n const button = document.createElement('ui-button');\n dialog.classList.add('error-dialog');\n form.method = 'method';\n title.innerText = `An error ocurred`;\n messageContainer.classList.add('body-medium');\n messageContainer.textContent = message;\n content.appendChild(messageContainer);\n button.textContent = 'Dismiss';\n button.type = ButtonType.filled;\n button.value = 'submit';\n button.submit = true;\n buttons.classList.add('dialog-buttons');\n buttons.appendChild(button);\n form.appendChild(title);\n form.appendChild(content);\n form.appendChild(buttons);\n dialog.appendChild(form);\n document.body.appendChild(dialog);\n dialog.showModal();\n form.addEventListener('submit', (e: SubmitEvent) => {\n e.preventDefault();\n dialog.close();\n });\n dialog.addEventListener('close', () => {\n dialog.parentElement?.removeChild(dialog);\n });\n } catch (e) {\n /* eslint-disable-next-line no-console */ \n console.error(e);\n }\n }\n\n unhandledRejectionHandler(e: PromiseRejectionEvent): void {\n /* eslint-disable-next-line no-console */\n console.error(e);\n this.reportCriticalError(e.reason);\n }\n\n protected handleConfigBroadcast(e: MessageEvent): void {\n const event = e.data as ConfigBroadcast;\n const { path } = event;\n if (path === 'local.set') {\n this.handleLocalConfigUpdated(event.key as string, event.value as unknown);\n } else if (path === 'environment.setDefault') {\n this.handleDefaultEnvironmentSet(event.env as IConfigEnvironment);\n } else if (path === 'environment.add') {\n this.handleEnvironmentAdd(event.env as IConfigEnvironment, event.init as AddConfigEnvironmentInit);\n }\n }\n\n protected handleLocalConfigUpdated(key: string, value: unknown): void {\n if (key === 'theme') {\n this.userTheme = value as ThemeType;\n this.themeActiveCallback();\n }\n }\n\n protected handleDefaultEnvironmentSet(env: IConfigEnvironment): void {\n const { initialized, bindings } = this;\n this.env = env;\n bindings.store.global.set(env);\n this.resolvePending();\n if (initialized) {\n this.storeChanged(env.key);\n }\n }\n\n protected handleEnvironmentAdd(env: IConfigEnvironment, init: AddConfigEnvironmentInit = {}): void {\n if (!init.asDefault) {\n return;\n }\n this.handleDefaultEnvironmentSet(env);\n }\n\n /**\n * Called from the initialize store init flow when the user is not authenticated\n * and the auth screen is rendered.\n */\n protected async handleAuthenticate(): Promise<void> {\n const { store } = this.bindings;\n await store.auth.authenticate({ updateEnvironment: true });\n this.authenticated = true;\n this.resolvePending();\n }\n\n protected handleOpenStoreConfig(): void {\n Events.Navigation.Store.config();\n }\n\n /**\n * Initializes the flow where an environment is required.\n * This checks for the default environment.\n * When it doesn't exists it asks the user to pick existing environment \n * or to create one.\n * When a default environment exists, it performs authentication\n * when necessary. \n * \n * Eventually it returns the HTTP store with an authenticated environment.\n * \n * @param defaultFlows When set to `true` is renders default pages for env selector \n * or when to authenticate. When false it throws errors instead. Default to `true`.\n */\n protected async initializeStore(defaultFlows = true): Promise<void> {\n const { store, config } = this.bindings;\n let env: IConfigEnvironment | undefined;\n try {\n env = await config.environment.read();\n } catch (e) { \n if (!defaultFlows) {\n throw e;\n }\n }\n if (!env || !env.location) {\n await this.enterEnvironmentMissingFlow();\n }\n if (!env || !env.location) {\n return;\n }\n this.env = env;\n await store.global.set(env);\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n } catch (e) {\n if (!defaultFlows) {\n throw e;\n }\n await this.enterStoreUnavailableFlow();\n }\n const authStatus = await store.auth.isAuthenticated();\n if (!authStatus) {\n if (!defaultFlows) {\n throw new Error(`Not authenticated.`);\n }\n await this.enterAuthenticationRequiredFlow();\n }\n this.authenticated = true;\n }\n\n async loadUser(): Promise<void> {\n this.loadingUser = true;\n try {\n this.user = await this.bindings.store.users.me();\n } catch (e) {\n CoreEvents.Telemetry.exception(`Loading user: ${(e as Error).message}`, undefined, this.eventTarget || window);\n } finally {\n this.loadingUser = false;\n }\n }\n\n private enterEnvironmentMissingFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'env-required';\n });\n }\n\n private enterAuthenticationRequiredFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'auth-required';\n });\n }\n \n\n /**\n * Enters into the flow where the application is unable to connect to the data store.\n * It asks user to retry or re-configure.\n * \n * Note, this is called from withing the `initializeStore()` method and this is expected to\n * eventually finish.\n */\n private enterStoreUnavailableFlow(): Promise<void> {\n return new Promise((resolve) => {\n this.pendingResolver = resolve;\n this.page = 'store-unavailable';\n });\n }\n\n protected async handleRetryStoreInfo(): Promise<void> {\n const { bindings, env } = this;\n const { store } = bindings;\n if (!env) {\n // this should not happen as we enter this flow after the env is set.\n return;\n }\n try {\n this.storeInfo = await store.environment.readStoreInfo(env.location);\n this.resolvePending();\n } catch (_) {\n SnackNotifications.notify(`Unable to connect.`);\n }\n }\n\n private resolvePending(): void {\n const { pendingResolver } = this;\n if (pendingResolver) {\n this.pendingResolver = undefined;\n pendingResolver();\n }\n }\n\n /**\n * @returns A template for the page loader\n */\n loaderTemplate(): TemplateResult {\n return html`\n <div class=\"app-loader body-large\">\n <p class=\"message\">Preparing something spectacular</p>\n <p class=\"sub-message\">${this.loadingStatus}</p>\n </div>\n `;\n }\n\n override pageTemplate(): TemplateResult {\n const { initialized } = this;\n if (!initialized) {\n if (this.page) {\n return html`\n ${this.renderInitFlowPage()}\n `;\n }\n return this.loaderTemplate();\n }\n return html``;\n }\n\n protected headerTemplate(): TemplateResult {\n return html`\n <header>Welcome</header>\n `;\n }\n\n protected mainTemplate(): TemplateResult {\n return html`<main></main>`;\n }\n\n protected footerTemplate(): TemplateResult {\n return html`<footer>Credits: Pawel Uchida-Psztyc</footer>`;\n }\n\n protected navigationTemplate(): TemplateResult {\n return html`<nav></nav>`;\n }\n\n protected renderInitFlowPage(): TemplateResult {\n switch (this.page) {\n case 'auth-required': return this.renderAuthRequired();\n case 'env-required': return this.renderEnvRequired();\n case 'unsupported-platform': return this.renderPlatformNotSupported();\n case 'store-unavailable': return this.renderStoreUnavailable();\n default: return html`<p class=\"general-error\">Unknown state. Did you set the <i>initialized</i> flag?</p>`;\n }\n }\n\n /**\n * Renders a full page overlay with the authentication required message.\n */\n protected renderAuthRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Authentication required</h1>\n <p class=\"body-large\">You are not authenticated. To continue, please, authenticate your account.</p>\n <ui-button type=\"tonal\" @click=\"${this.handleAuthenticate}\">Authenticate</ui-button>\n </div>\n `;\n }\n\n protected renderEnvRequired(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Environment configuration missing</h1>\n <p class=\"body-large\">\n The application is unable to determine which environment to use.\n Open the <b>store configuration</b> screen to configure the connection.\n </p>\n <ui-button type=\"tonal\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n `;\n }\n\n protected renderPlatformNotSupported(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unsupported platform</h1>\n <p class=\"body-large\">\n It looks like your browser does not support one of the crucial features needed to run\n this application. Accept our apologies, we work hard to support as many browsers as possible. \n </p>\n </div>\n `;\n }\n\n protected renderStoreUnavailable(): TemplateResult {\n return html`\n <div class=\"auth-required-screen\">\n <h1 class=\"display-large\">Unable to connect</h1>\n <p class=\"body-large\">\n It looks like you or the data store are offline. The application is unable to continue\n without a connection to the backend.\n </p>\n <div class=\"actions\">\n <ui-button type=\"tonal\" @click=\"${this.handleRetryStoreInfo}\">Retry</ui-button>\n <ui-button type=\"outlined\" @click=\"${this.handleOpenStoreConfig}\">Configure store</ui-button>\n </div>\n </div>\n `;\n }\n}\n"]}
|
|
@@ -16,6 +16,7 @@ import '../../define/ui/ui-icon-button.js';
|
|
|
16
16
|
import '../../define/ui/ui-text-field.js';
|
|
17
17
|
import '../../define/ui/ui-dropdown-list.js';
|
|
18
18
|
import '../../define/ui/ui-divider.js';
|
|
19
|
+
import '../../define/http/certificate-add.js';
|
|
19
20
|
export interface PageInit extends ApplicationInit {
|
|
20
21
|
idb: HttpClientStoreBindings;
|
|
21
22
|
navigation: NavigationBindings;
|
|
@@ -56,7 +57,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
56
57
|
protected shared: SharedPage;
|
|
57
58
|
protected trash: TrashPage;
|
|
58
59
|
protected settings: SettingsPage;
|
|
59
|
-
filesChannel: BroadcastChannel;
|
|
60
60
|
spacesChannel: BroadcastChannel;
|
|
61
61
|
trashChannel: BroadcastChannel;
|
|
62
62
|
constructor(init: PageInit);
|
|
@@ -72,11 +72,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
72
72
|
selectWorkspace(key?: string): void;
|
|
73
73
|
resetStoreObservers(): Promise<void>;
|
|
74
74
|
protected readSpaces(): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* A handler for the broadcast channel message which informs about changes to files meta.
|
|
77
|
-
* The function distributes changes between pages
|
|
78
|
-
*/
|
|
79
|
-
protected fileMetaMessageHandler(e: MessageEvent): void;
|
|
80
75
|
protected trashMessageHandler(e: MessageEvent): void;
|
|
81
76
|
protected spacesMessageHandler(e: MessageEvent): void;
|
|
82
77
|
handleSpaceCreated(space: ISpace): void;
|
|
@@ -86,6 +81,8 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
86
81
|
protected sharedRoute(info: IRouteResult): void;
|
|
87
82
|
protected trashRoute(): void;
|
|
88
83
|
protected settingsRoute(): void;
|
|
84
|
+
protected addCertRoute(): void;
|
|
85
|
+
protected handleCertificateClose(): void;
|
|
89
86
|
protected mainNavHandler(e: Event): void;
|
|
90
87
|
protected workspaceCreateFormHandler(e: SubmitEvent): void;
|
|
91
88
|
protected addWorkspace(name: string): Promise<void>;
|
|
@@ -114,5 +111,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
114
111
|
protected spacesSetupTemplate(): TemplateResult;
|
|
115
112
|
protected renderCreateWorkspaceDialog(): TemplateResult;
|
|
116
113
|
protected renderDeleteWorkspaceDialog(): TemplateResult;
|
|
114
|
+
protected renderAddCertificate(): TemplateResult;
|
|
117
115
|
}
|
|
118
116
|
//# sourceMappingURL=ApiClient.screen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiClient.screen.d.ts","sourceRoot":"","sources":["../../../src/pages/api-client/ApiClient.screen.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,cAAc,EAAE,SAAS,EAAW,MAAM,KAAK,CAAC;AAC/D,OAAO,EAAyC,KAAK,EAAE,MAAM,EAAU,MAAM,mCAAmC,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiClient.screen.d.ts","sourceRoot":"","sources":["../../../src/pages/api-client/ApiClient.screen.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import { ApplicationScreen } from '../ApplicationScreen.js';
|
|
|
6
6
|
import pageStyles from './ApiClient.styles.js';
|
|
7
7
|
import globalStyles from '../../styles/global-styles.js';
|
|
8
8
|
import typography from '../../styles/m3/typography.module.js';
|
|
9
|
+
import surface from '../../styles/m3/surface.module.js';
|
|
9
10
|
import dialogStyles from '../../styles/m3/dialog.module.js';
|
|
10
11
|
import { navigate } from '../../lib/route.js';
|
|
11
12
|
import { reactive } from '../../lib/decorators.js';
|
|
@@ -23,6 +24,7 @@ import '../../define/ui/ui-icon-button.js';
|
|
|
23
24
|
import '../../define/ui/ui-text-field.js';
|
|
24
25
|
import '../../define/ui/ui-dropdown-list.js';
|
|
25
26
|
import '../../define/ui/ui-divider.js';
|
|
27
|
+
import '../../define/http/certificate-add.js';
|
|
26
28
|
/**
|
|
27
29
|
* API Client is the entry point to the suite.
|
|
28
30
|
* It renders the list of user files, allows to configure a connection to a store,
|
|
@@ -37,10 +39,11 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
37
39
|
{ pattern: '/shared/(?<key>.*)', method: 'sharedRoute', name: 'Shares', title: 'Shared with you' },
|
|
38
40
|
{ pattern: '/trash', method: 'trashRoute', name: 'Trash', title: 'Trash' },
|
|
39
41
|
{ pattern: '/settings', method: 'settingsRoute', name: 'Settings', title: 'Settings' },
|
|
42
|
+
{ pattern: '/certificates/add/?(?<parent>.*)', method: 'addCertRoute', name: 'Add certificate', title: 'Add certificate' },
|
|
40
43
|
];
|
|
41
44
|
}
|
|
42
45
|
static get styles() {
|
|
43
|
-
return [globalStyles, pageStyles, typography, dialogStyles, DataTable.styles];
|
|
46
|
+
return [globalStyles, pageStyles, typography, dialogStyles, DataTable.styles, surface];
|
|
44
47
|
}
|
|
45
48
|
/**
|
|
46
49
|
* Whether the current user has spaces defined in the store.
|
|
@@ -70,7 +73,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
70
73
|
this.shared = new SharedPage(this);
|
|
71
74
|
this.trash = new TrashPage(this);
|
|
72
75
|
this.settings = new SettingsPage(this);
|
|
73
|
-
this.filesChannel = new BroadcastChannel(StoreBroadcast.files);
|
|
74
76
|
this.spacesChannel = new BroadcastChannel(StoreBroadcast.spaces);
|
|
75
77
|
this.trashChannel = new BroadcastChannel(StoreBroadcast.trash);
|
|
76
78
|
this.bindings.idb = init.idb;
|
|
@@ -99,7 +101,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
99
101
|
await this.bindings.store.observeTrash();
|
|
100
102
|
}
|
|
101
103
|
await this.loadUser();
|
|
102
|
-
this.filesChannel.addEventListener('message', this.fileMetaMessageHandler.bind(this));
|
|
103
104
|
this.spacesChannel.addEventListener('message', this.spacesMessageHandler.bind(this));
|
|
104
105
|
this.trashChannel.addEventListener('message', this.trashMessageHandler.bind(this));
|
|
105
106
|
this.initializeRouting();
|
|
@@ -108,8 +109,8 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
108
109
|
reset() {
|
|
109
110
|
this.spaces = [];
|
|
110
111
|
this.spacesCursor = undefined;
|
|
111
|
-
this.files.resetList();
|
|
112
|
-
this.shared.resetList();
|
|
112
|
+
this.files.fs.resetList();
|
|
113
|
+
this.shared.fs.resetList();
|
|
113
114
|
this.trash.resetList();
|
|
114
115
|
}
|
|
115
116
|
async storeChanged() {
|
|
@@ -205,18 +206,18 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
205
206
|
}
|
|
206
207
|
this.bindings.store.space = this.selectedSpace;
|
|
207
208
|
this.render();
|
|
208
|
-
this.files.resetList();
|
|
209
|
-
this.shared.resetList();
|
|
209
|
+
this.files.fs.resetList();
|
|
210
|
+
this.shared.fs.resetList();
|
|
210
211
|
this.trash.resetList();
|
|
211
212
|
if (this.page === 'files') {
|
|
212
|
-
this.files.
|
|
213
|
+
this.files.fs.debounceQuery();
|
|
213
214
|
navigate('files'); // remove any folder info
|
|
214
215
|
}
|
|
215
216
|
else if (this.page === 'trash') {
|
|
216
217
|
this.trash.readFiles();
|
|
217
218
|
}
|
|
218
219
|
else if (this.page === 'shared') {
|
|
219
|
-
this.shared.
|
|
220
|
+
this.shared.fs.debounceQuery();
|
|
220
221
|
}
|
|
221
222
|
this.storeLastSpaceKey(this.selectedSpace);
|
|
222
223
|
}
|
|
@@ -234,17 +235,6 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
234
235
|
this.spaces = items;
|
|
235
236
|
this.spacesCursor = cursor;
|
|
236
237
|
}
|
|
237
|
-
/**
|
|
238
|
-
* A handler for the broadcast channel message which informs about changes to files meta.
|
|
239
|
-
* The function distributes changes between pages
|
|
240
|
-
*/
|
|
241
|
-
fileMetaMessageHandler(e) {
|
|
242
|
-
const event = e.data;
|
|
243
|
-
if (event.space === this.selectedSpace) {
|
|
244
|
-
this.files.handleFileEvent(event);
|
|
245
|
-
}
|
|
246
|
-
this.shared.handleFileEvent(event);
|
|
247
|
-
}
|
|
248
238
|
trashMessageHandler(e) {
|
|
249
239
|
const event = e.data;
|
|
250
240
|
if (event.space !== this.selectedSpace) {
|
|
@@ -296,26 +286,26 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
296
286
|
this.resetRoute();
|
|
297
287
|
this.page = 'files';
|
|
298
288
|
const folder = info.params && info.params.key;
|
|
299
|
-
const folderChanged = this.files.
|
|
289
|
+
const folderChanged = this.files.fs.parent !== folder;
|
|
300
290
|
if (folderChanged) {
|
|
301
|
-
this.files.
|
|
302
|
-
this.files.resetList();
|
|
291
|
+
this.files.fs.parent = folder;
|
|
292
|
+
this.files.fs.resetList();
|
|
303
293
|
}
|
|
304
|
-
if (!this.files.files.length || folderChanged) {
|
|
305
|
-
this.files.
|
|
294
|
+
if (!this.files.fs.files.length || folderChanged) {
|
|
295
|
+
this.files.fs.debounceQuery();
|
|
306
296
|
}
|
|
307
297
|
}
|
|
308
298
|
sharedRoute(info) {
|
|
309
299
|
this.resetRoute();
|
|
310
300
|
this.page = 'shared';
|
|
311
301
|
const folder = info.params && info.params.key;
|
|
312
|
-
const folderChanged = this.shared.
|
|
302
|
+
const folderChanged = this.shared.fs.parent !== folder;
|
|
313
303
|
if (folderChanged) {
|
|
314
|
-
this.shared.
|
|
315
|
-
this.shared.resetList();
|
|
304
|
+
this.shared.fs.parent = folder;
|
|
305
|
+
this.shared.fs.resetList();
|
|
316
306
|
}
|
|
317
|
-
if (!this.shared.files.length || folderChanged) {
|
|
318
|
-
this.shared.
|
|
307
|
+
if (!this.shared.fs.files.length || folderChanged) {
|
|
308
|
+
this.shared.fs.debounceQuery();
|
|
319
309
|
}
|
|
320
310
|
}
|
|
321
311
|
trashRoute() {
|
|
@@ -329,6 +319,13 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
329
319
|
this.resetRoute();
|
|
330
320
|
this.page = 'settings';
|
|
331
321
|
}
|
|
322
|
+
addCertRoute() {
|
|
323
|
+
this.resetRoute();
|
|
324
|
+
this.page = 'add-cert';
|
|
325
|
+
}
|
|
326
|
+
handleCertificateClose() {
|
|
327
|
+
window.history.back();
|
|
328
|
+
}
|
|
332
329
|
mainNavHandler(e) {
|
|
333
330
|
const target = e.target;
|
|
334
331
|
const { page } = target.dataset;
|
|
@@ -569,7 +566,7 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
569
566
|
mainTemplate() {
|
|
570
567
|
return html `
|
|
571
568
|
<main class="body-medium">
|
|
572
|
-
<div class="content">
|
|
569
|
+
<div class="content surface1">
|
|
573
570
|
${this.renderPage()}
|
|
574
571
|
</div>
|
|
575
572
|
</main>
|
|
@@ -584,6 +581,7 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
584
581
|
case 'shared': return this.shared.render();
|
|
585
582
|
case 'trash': return this.trash.render();
|
|
586
583
|
case 'settings': return this.settings.render();
|
|
584
|
+
case 'add-cert': return this.renderAddCertificate();
|
|
587
585
|
default: return this.render404();
|
|
588
586
|
}
|
|
589
587
|
}
|
|
@@ -665,6 +663,16 @@ export default class ApiClientScreen extends ApplicationScreen {
|
|
|
665
663
|
</dialog>
|
|
666
664
|
`;
|
|
667
665
|
}
|
|
666
|
+
renderAddCertificate() {
|
|
667
|
+
const { currentRoute, currentSpace } = this;
|
|
668
|
+
const parent = currentRoute && currentRoute.params && currentRoute.params.parent;
|
|
669
|
+
const space = currentSpace && currentSpace.key;
|
|
670
|
+
return html `
|
|
671
|
+
<h2 class="headline-small">Add Certificate</h2>
|
|
672
|
+
<p class="body-medium">Import a certificate to use it in your HTTP projects. Note, imported certificate cannot be changed.</p>
|
|
673
|
+
<certificate-add .folder="${parent}" .space="${space}" @close="${this.handleCertificateClose}"></certificate-add>
|
|
674
|
+
`;
|
|
675
|
+
}
|
|
668
676
|
}
|
|
669
677
|
__decorate([
|
|
670
678
|
reactive()
|