@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
|
@@ -15,16 +15,11 @@ import {
|
|
|
15
15
|
SpaceKind,
|
|
16
16
|
Space,
|
|
17
17
|
PermissionRole,
|
|
18
|
-
HttpCertificate,
|
|
19
18
|
ContextSpaceListOptions,
|
|
20
19
|
IRevision,
|
|
21
20
|
TrashEntry,
|
|
22
21
|
TrashEntryCreate,
|
|
23
22
|
ContextDeleteBulkEvent,
|
|
24
|
-
ICertificate,
|
|
25
|
-
ContextListEvent,
|
|
26
|
-
ContextReadEvent,
|
|
27
|
-
ContextUpdateEvent,
|
|
28
23
|
FileAddOptions,
|
|
29
24
|
FileBreadcrumb,
|
|
30
25
|
IBackendObserveCommand,
|
|
@@ -127,13 +122,17 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
127
122
|
|
|
128
123
|
projectExeChannel = new BroadcastChannel(StoreBroadcast.projectRuns);
|
|
129
124
|
|
|
130
|
-
|
|
125
|
+
initialized = false;
|
|
131
126
|
|
|
132
127
|
async initializeStore(): Promise<void> {
|
|
133
128
|
// ...
|
|
134
129
|
}
|
|
135
130
|
|
|
136
131
|
async initialize(): Promise<void> {
|
|
132
|
+
if (this.initialized) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
this.initialized = true;
|
|
137
136
|
const target = document.body;
|
|
138
137
|
|
|
139
138
|
window.addEventListener(EventTypes.Store.initEnvironment, this.handleInitializeEnvironment.bind(this));
|
|
@@ -156,6 +155,7 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
156
155
|
window.addEventListener(EventTypes.Store.File.delete, this.handleFileDelete.bind(this) as EventListener);
|
|
157
156
|
window.addEventListener(EventTypes.Store.File.patchUsers, this.handleFilePatchUser.bind(this) as EventListener);
|
|
158
157
|
window.addEventListener(EventTypes.Store.File.listUsers, this.handleListFileUsers.bind(this) as EventListener);
|
|
158
|
+
window.addEventListener(EventTypes.Store.File.breadcrumbs, this.handleFileBreadcrumbs.bind(this) as EventListener);
|
|
159
159
|
|
|
160
160
|
// User
|
|
161
161
|
window.addEventListener(EventTypes.Store.User.me, this.handlerMe.bind(this));
|
|
@@ -182,12 +182,6 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
182
182
|
target.addEventListener(EventTypes.Store.ProjectRuns.clearSpace, this.handleProjectExecutionClearSpace.bind(this) as EventListener);
|
|
183
183
|
target.addEventListener(EventTypes.Store.ProjectRuns.clearProject, this.handleProjectExecutionClearProject.bind(this) as EventListener);
|
|
184
184
|
target.addEventListener(EventTypes.Store.ProjectRuns.clearParent, this.handleProjectExecutionClearFolder.bind(this) as EventListener);
|
|
185
|
-
|
|
186
|
-
// certificates
|
|
187
|
-
target.addEventListener(EventTypes.Store.Certificate.list, this.handleCertificateList.bind(this) as EventListener);
|
|
188
|
-
target.addEventListener(EventTypes.Store.Certificate.read, this.handleCertificateRead.bind(this) as EventListener);
|
|
189
|
-
target.addEventListener(EventTypes.Store.Certificate.delete, this.handleCertificateDelete.bind(this) as EventListener);
|
|
190
|
-
target.addEventListener(EventTypes.Store.Certificate.insert, this.handleCertificateInsert.bind(this) as EventListener);
|
|
191
185
|
}
|
|
192
186
|
|
|
193
187
|
abstract environment: EnvironmentSettings;
|
|
@@ -372,6 +366,11 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
372
366
|
event.detail.result = this.getStore().sdk.file.listUsers(this.space, event.detail.key);
|
|
373
367
|
}
|
|
374
368
|
|
|
369
|
+
protected handleFileBreadcrumbs(event: CustomEvent<{ key: string, result: Promise<ContextListResult<FileBreadcrumb>> }>): void {
|
|
370
|
+
event.preventDefault();
|
|
371
|
+
event.detail.result = this.files.breadcrumbs(event.detail.key)
|
|
372
|
+
// this.getStore().sdk.file.breadcrumbs(this.space, event.detail.key);
|
|
373
|
+
}
|
|
375
374
|
|
|
376
375
|
protected handlerMe(input: Event): void {
|
|
377
376
|
const e = input as CustomEvent<{ result: Promise<IUser> }>;
|
|
@@ -613,27 +612,6 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
613
612
|
patchUsers: (space: string, value: IAccessPatchInfo): Promise<void> => this.getStore().sdk.spaces.patchUsers(this.space || space, value),
|
|
614
613
|
}
|
|
615
614
|
|
|
616
|
-
certificates = {
|
|
617
|
-
add: (value: HttpCertificate, space: string): Promise<ContextChangeRecord<HttpCertificate>> => this.getStore().sdk.certificates.add(value, this.space || space),
|
|
618
|
-
addBulk: (values: HttpCertificate[], space: string): Promise<IBulkOperationResult<ContextChangeRecord<HttpCertificate>>> => this.getStore().sdk.certificates.addBulk(values, this.space || space),
|
|
619
|
-
read: (key: string): Promise<HttpCertificate> => this.getStore().sdk.certificates.read(key),
|
|
620
|
-
list: (options?: ContextSpaceListOptions): Promise<ContextListResult<HttpCertificate>> => {
|
|
621
|
-
const cp = { ...options } as ContextSpaceListOptions;
|
|
622
|
-
if (!cp.space) {
|
|
623
|
-
cp.space = this.space;
|
|
624
|
-
}
|
|
625
|
-
return this.getStore().sdk.certificates.list(cp);
|
|
626
|
-
},
|
|
627
|
-
delete: async (key: string): Promise<ContextDeleteRecord> => {
|
|
628
|
-
await this.getStore().sdk.certificates.delete(key);
|
|
629
|
-
return {
|
|
630
|
-
key,
|
|
631
|
-
};
|
|
632
|
-
},
|
|
633
|
-
deleteBulk: (keys: string[]): Promise<IBulkOperationResult<ContextDeleteRecord>> => this.getStore().sdk.certificates.deleteBulk(keys),
|
|
634
|
-
empty: (space: string): Promise<void> => this.getStore().sdk.certificates.empty(this.space || space),
|
|
635
|
-
}
|
|
636
|
-
|
|
637
615
|
trash = {
|
|
638
616
|
add: (entry: TrashEntryCreate, space: string): Promise<ContextChangeRecord<TrashEntry>> => this.getStore().sdk.trash.add(entry, this.space || space),
|
|
639
617
|
list: (options: ContextSpaceListOptions): Promise<ContextListResult<TrashEntry>> => {
|
|
@@ -682,43 +660,7 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
682
660
|
me: (): Promise<IUser> => this.getStore().sdk.user.me(),
|
|
683
661
|
read: (key: string): Promise<IUser> => this.getStore().sdk.user.read(key),
|
|
684
662
|
}
|
|
685
|
-
|
|
686
|
-
protected handleCertificateList(event: Event): void {
|
|
687
|
-
const e = event as ContextListEvent<ICertificate>;
|
|
688
|
-
e.preventDefault();
|
|
689
|
-
const options: ContextSpaceListOptions = {
|
|
690
|
-
...e.detail,
|
|
691
|
-
space: this.space,
|
|
692
|
-
}
|
|
693
|
-
e.detail.result = this.certificates.list(options);
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
protected handleCertificateRead(event: Event): void {
|
|
697
|
-
const e = event as ContextReadEvent<ICertificate>;
|
|
698
|
-
e.preventDefault();
|
|
699
|
-
e.detail.result = this.certificates.read(e.detail.key);
|
|
700
|
-
}
|
|
701
|
-
|
|
702
|
-
protected handleCertificateDelete(event: Event): void {
|
|
703
|
-
const e = event as ContextDeleteEvent;
|
|
704
|
-
e.preventDefault();
|
|
705
|
-
e.detail.result = this.certificates.delete(e.detail.key);
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
protected handleCertificateInsert(event: Event): void {
|
|
709
|
-
const e = event as ContextUpdateEvent<HttpCertificate, HttpCertificate>;
|
|
710
|
-
e.preventDefault();
|
|
711
|
-
e.detail.result = this.certificates.add(e.detail.item, this.space);
|
|
712
|
-
}
|
|
713
|
-
|
|
714
|
-
async observeCertificates(): Promise<void> {
|
|
715
|
-
await this.observePath(RouteBuilder.certificates());
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
async unobserveCertificates(): Promise<void> {
|
|
719
|
-
await this.unobservePath(RouteBuilder.certificates());
|
|
720
|
-
}
|
|
721
|
-
|
|
663
|
+
|
|
722
664
|
async observeSpaces(): Promise<void> {
|
|
723
665
|
await this.observePath(RouteBuilder.spaces());
|
|
724
666
|
}
|
|
@@ -822,10 +764,13 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
822
764
|
protected storeEventHandler(e: MessageEvent): void {
|
|
823
765
|
const event = JSON.parse(e.data) as BroadcastEvent | BackendErrorEvent;
|
|
824
766
|
if (event.type === 'error') {
|
|
825
|
-
// TODO: Report an error somehow
|
|
826
767
|
throw new Error(event.cause);
|
|
827
768
|
}
|
|
828
769
|
if (event.space && event.space !== this.space) {
|
|
770
|
+
// we allow files here to support shared files.
|
|
771
|
+
if (event.path === RouteBuilder.files()) {
|
|
772
|
+
this.filesChannel.postMessage(event);
|
|
773
|
+
}
|
|
829
774
|
return;
|
|
830
775
|
}
|
|
831
776
|
if (event.path === RouteBuilder.spaces()) {
|
|
@@ -845,8 +790,6 @@ export abstract class StoreBindings extends PlatformBindings {
|
|
|
845
790
|
this.historyChannel.postMessage(event);
|
|
846
791
|
} else if (event.path === RouteBuilder.projectExecutions()) {
|
|
847
792
|
this.projectExeChannel.postMessage(event);
|
|
848
|
-
} else if (event.path === RouteBuilder.certificates()) {
|
|
849
|
-
this.certificatesChannel.postMessage(event);
|
|
850
793
|
} else {
|
|
851
794
|
// eslint-disable-next-line no-console
|
|
852
795
|
console.warn(`Broadcast path not handled`, event.path, event)
|
|
@@ -46,7 +46,7 @@ export class WebFileBindings extends FileBindings {
|
|
|
46
46
|
const handles = await window.showOpenFilePicker(dialogOptions);
|
|
47
47
|
const result: string[] = [];
|
|
48
48
|
handles.forEach((handle) => {
|
|
49
|
-
const path = uuidV4()
|
|
49
|
+
const path = `${uuidV4()}/${handle.name}`;
|
|
50
50
|
result.push(path);
|
|
51
51
|
this.handles.set(path, handle);
|
|
52
52
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { customElement } from 'lit/decorators.js';
|
|
2
|
+
import Element from '../../elements/http/CertificateAdd.element.js';
|
|
3
|
+
|
|
4
|
+
@customElement('certificate-add')
|
|
5
|
+
export class CertificateAddElement extends Element {
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
declare global {
|
|
9
|
+
interface HTMLElementTagNameMap {
|
|
10
|
+
'certificate-add': Element;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { customElement } from "lit/decorators.js";
|
|
2
|
+
import Element from "../../elements/store/FilePicker.element.js";
|
|
3
|
+
|
|
4
|
+
@customElement('file-picker')
|
|
5
|
+
export class FilePickerElement extends Element {
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
declare global {
|
|
9
|
+
interface HTMLElementTagNameMap {
|
|
10
|
+
'file-picker': Element;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { customElement } from 'lit/decorators.js';
|
|
2
|
-
import Element from "../../elements/
|
|
3
|
-
import styles from "../../elements/
|
|
2
|
+
import Element from "../../elements/store/ShareFile.element.js";
|
|
3
|
+
import styles from "../../elements/store/ShareFile.styles.js";
|
|
4
4
|
import dialogStyles from '../../ui/dialog/UiDialog.styles.js';
|
|
5
5
|
|
|
6
6
|
@customElement('share-file')
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
2
|
|
|
3
3
|
export default css`
|
|
4
|
-
.cert-meta {
|
|
5
|
-
display: inline-flex;
|
|
6
|
-
align-items: center;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
4
|
:host {
|
|
10
|
-
max-height: 300px;
|
|
11
5
|
display: flex;
|
|
12
6
|
flex-direction: column;
|
|
13
7
|
}
|
|
14
8
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
.certificate-info {
|
|
10
|
+
display: flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
margin-top: 20px;
|
|
18
13
|
}
|
|
19
14
|
`;
|
|
@@ -1,129 +1,69 @@
|
|
|
1
1
|
import { html, nothing, TemplateResult } from "lit";
|
|
2
|
-
import { state } from "lit/decorators.js";
|
|
3
2
|
import {
|
|
4
|
-
ICCAuthorization, HttpCertificate, Events as CoreEvents,
|
|
5
|
-
ICertificate,
|
|
6
|
-
BroadcastEvent,
|
|
7
|
-
BroadcastCreatedEvent,
|
|
8
|
-
DeletedBroadcastEvent,
|
|
3
|
+
ICCAuthorization, HttpCertificate, Events as CoreEvents, CertificateFileKind, ICertificate, IFile,
|
|
9
4
|
} from '@api-client/core/build/browser.js';
|
|
10
|
-
import
|
|
5
|
+
import { state } from "lit/decorators.js";
|
|
11
6
|
import { Authorization } from "./Authorization.js";
|
|
7
|
+
import type { FilePickerClosingReason } from "../../store/FilePicker.element.js";
|
|
12
8
|
import { Events } from "../../../events/Events.js";
|
|
13
|
-
import
|
|
14
|
-
import { StoreBroadcast } from "../../../http-client/store/StoreBroadcast.js";
|
|
9
|
+
import '../../../define/ui/ui-dropdown-list.js';
|
|
15
10
|
import '../../../define/ui/ui-button.js';
|
|
16
|
-
import '../../../define/ui/ui-
|
|
11
|
+
import '../../../define/ui/ui-icon-button.js';
|
|
12
|
+
import '../../../define/ui/ui-icon.js';
|
|
13
|
+
import '../../../define/store/file-picker.js';
|
|
17
14
|
|
|
18
15
|
export default class CcAuthorization extends Authorization {
|
|
19
|
-
@state()
|
|
20
|
-
|
|
21
|
-
@state() querying = false;
|
|
22
|
-
|
|
23
|
-
@state() loadingError?: string;
|
|
24
|
-
|
|
25
|
-
channel = new BroadcastChannel(StoreBroadcast.certificates);
|
|
26
|
-
|
|
27
|
-
constructor() {
|
|
28
|
-
super();
|
|
29
|
-
|
|
30
|
-
this.handleBroadcast = this.handleBroadcast.bind(this);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
override connectedCallback(): void {
|
|
34
|
-
super.connectedCallback();
|
|
35
|
-
this.channel.addEventListener('message', this.handleBroadcast);
|
|
36
|
-
this.queryCertificates();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
override disconnectedCallback(): void {
|
|
40
|
-
super.disconnectedCallback();
|
|
41
|
-
this.channel.removeEventListener('message', this.handleBroadcast);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
protected handleBroadcast(e: MessageEvent): void {
|
|
45
|
-
const event = e.data as BroadcastEvent;
|
|
46
|
-
switch (event.operation) {
|
|
47
|
-
case 'created': this.handleCreated(event as BroadcastCreatedEvent); break;
|
|
48
|
-
case 'deleted': this.handleDeleted(event as DeletedBroadcastEvent); break;
|
|
49
|
-
default:
|
|
50
|
-
}
|
|
51
|
-
}
|
|
16
|
+
@state() selectorRendered = false;
|
|
52
17
|
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
if (!
|
|
56
|
-
|
|
18
|
+
get config(): ICCAuthorization {
|
|
19
|
+
const { authorization } = this;
|
|
20
|
+
if (!authorization) {
|
|
21
|
+
return { };
|
|
57
22
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
this.items[index] = cert;
|
|
61
|
-
} else {
|
|
62
|
-
this.items.push(cert);
|
|
23
|
+
if (!authorization.config) {
|
|
24
|
+
authorization.config = {} as ICCAuthorization;
|
|
63
25
|
}
|
|
64
|
-
|
|
26
|
+
return authorization.config as ICCAuthorization;
|
|
65
27
|
}
|
|
66
28
|
|
|
67
|
-
protected
|
|
68
|
-
|
|
29
|
+
protected handleClose(e: CustomEvent<FilePickerClosingReason>): void {
|
|
30
|
+
const { canceled, file } = e.detail;
|
|
31
|
+
if (canceled) {
|
|
69
32
|
return;
|
|
70
33
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
34
|
+
this.setCertificate((file as IFile).key);
|
|
35
|
+
CoreEvents.Telemetry.event({
|
|
36
|
+
category: 'Certificates',
|
|
37
|
+
action: 'Authorization',
|
|
38
|
+
label: 'selected-certificate'
|
|
39
|
+
}, this);
|
|
77
40
|
}
|
|
78
41
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
this.querying = true;
|
|
42
|
+
async setCertificate(key: string): Promise<void> {
|
|
43
|
+
let result: unknown;
|
|
84
44
|
try {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
throw new Error(`Certificates query not handled by the store.`);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
this.items = data.items;
|
|
92
|
-
} catch (cause) {
|
|
93
|
-
this.loadingError = (cause as Error).message;
|
|
94
|
-
} finally {
|
|
95
|
-
this.querying = false;
|
|
45
|
+
result = await Events.Store.File.read(key, true, this);
|
|
46
|
+
} catch (_) {
|
|
47
|
+
return;
|
|
96
48
|
}
|
|
49
|
+
const { config } = this;
|
|
50
|
+
config.certificate = result as ICertificate;
|
|
51
|
+
this.requestUpdate();
|
|
52
|
+
this.notifyChange();
|
|
97
53
|
}
|
|
98
54
|
|
|
99
|
-
protected
|
|
100
|
-
|
|
101
|
-
if (
|
|
102
|
-
|
|
55
|
+
protected handleDropDownOpen(): void {
|
|
56
|
+
this.selectorRendered = true;
|
|
57
|
+
if (this.isUpdatePending) {
|
|
58
|
+
this.scheduleUpdate();
|
|
103
59
|
}
|
|
60
|
+
}
|
|
104
61
|
|
|
105
|
-
|
|
106
|
-
const {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
const config = authorization.config as ICCAuthorization || {} as ICCAuthorization;
|
|
111
|
-
if (value === '') {
|
|
112
|
-
delete config.certificate;
|
|
113
|
-
} else {
|
|
114
|
-
const cert = this.items?.find(i => i.key === value);
|
|
115
|
-
if (!cert) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
config.certificate = cert;
|
|
119
|
-
}
|
|
62
|
+
protected handleClearCertificate(): void {
|
|
63
|
+
const { config } = this;
|
|
64
|
+
delete config.certificate;
|
|
65
|
+
this.requestUpdate();
|
|
120
66
|
this.notifyChange();
|
|
121
|
-
|
|
122
|
-
CoreEvents.Telemetry.event({
|
|
123
|
-
category: 'Certificates',
|
|
124
|
-
action: 'Authorization',
|
|
125
|
-
label: 'selected-certificate'
|
|
126
|
-
}, this);
|
|
127
67
|
}
|
|
128
68
|
|
|
129
69
|
override render(): TemplateResult {
|
|
@@ -134,81 +74,41 @@ export default class CcAuthorization extends Authorization {
|
|
|
134
74
|
}
|
|
135
75
|
|
|
136
76
|
protected renderEditor(): TemplateResult | typeof nothing {
|
|
137
|
-
const {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
const hasItems = !!items && !!items.length;
|
|
142
|
-
if (!loadingError && !hasItems) {
|
|
143
|
-
return html`
|
|
144
|
-
${this.renderEmptyState()}
|
|
145
|
-
`;
|
|
146
|
-
}
|
|
147
|
-
const config = authorization.config as ICCAuthorization || {} as ICCAuthorization;
|
|
77
|
+
const { config } = this;
|
|
78
|
+
const { certificate } = config;
|
|
79
|
+
// Note, the <form> element is required by the Authorization class for validation.
|
|
148
80
|
return html`
|
|
149
|
-
|
|
150
|
-
${
|
|
151
|
-
|
|
152
|
-
${this.renderList(items, config.certificate)}
|
|
153
|
-
</form>
|
|
154
|
-
` : ''}
|
|
81
|
+
<form autocomplete="on" class="auth-form cc-auth"></form>
|
|
82
|
+
${this.renderSelector()}
|
|
83
|
+
${certificate ? this.renderSelection(certificate) : nothing}
|
|
155
84
|
`;
|
|
156
85
|
}
|
|
157
86
|
|
|
158
|
-
protected
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
protected renderEmptyState(): TemplateResult {
|
|
163
|
-
return html`<p class="empty-screen body-large">There are no certificates installed in this application.</p>`;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
protected renderList(items: HttpCertificate[], current?: ICertificate): TemplateResult {
|
|
167
|
-
const currentKey = current && current.key;
|
|
87
|
+
protected renderSelector(): TemplateResult {
|
|
88
|
+
const { selectorRendered } = this;
|
|
89
|
+
const kinds: typeof CertificateFileKind[] = [CertificateFileKind];
|
|
168
90
|
return html`
|
|
169
|
-
|
|
170
|
-
${
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
protected renderNoneItem(selectedKey?: string): TemplateResult {
|
|
175
|
-
return html`
|
|
176
|
-
<label class="label-medium">
|
|
177
|
-
<ui-radio name="certificate" value="" .checked="${!selectedKey}" @change="${this.handleSelected}"></ui-radio>
|
|
178
|
-
None
|
|
179
|
-
</label>
|
|
180
|
-
`;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* @param item The item to render
|
|
185
|
-
* @returns The template for the dropdown item.
|
|
186
|
-
*/
|
|
187
|
-
protected renderCertItem(item: HttpCertificate, selectedKey?: string): TemplateResult {
|
|
188
|
-
return html`
|
|
189
|
-
<div class="cert-item">
|
|
190
|
-
<label>
|
|
191
|
-
<ui-radio name="certificate" value="${item.key}" .checked="${item.key === selectedKey}" @change="${this.handleSelected}"></ui-radio>
|
|
192
|
-
<div class="cert-meta">
|
|
193
|
-
<span class="label-medium">${item.name}</span>
|
|
194
|
-
<span class="body-small">Added: ${this.renderDateTime(item.created)}</span>
|
|
195
|
-
</div>
|
|
196
|
-
</label>
|
|
91
|
+
<div class="selector">
|
|
92
|
+
<ui-dropdown-list @open="${this.handleDropDownOpen}">
|
|
93
|
+
<ui-button class="dropdown-trigger" type="tonal">Select a certificate</ui-button>
|
|
94
|
+
${selectorRendered ? html`<file-picker slot="dropdown" .kinds="${kinds}" @close="${this.handleClose}"></file-picker>` : nothing}
|
|
95
|
+
</ui-dropdown-list>
|
|
197
96
|
</div>
|
|
198
97
|
`;
|
|
199
98
|
}
|
|
200
99
|
|
|
201
|
-
|
|
202
|
-
* @param created The certificate created time.
|
|
203
|
-
* @returns The template for the cert time element.
|
|
204
|
-
*/
|
|
205
|
-
protected renderDateTime(created?: number): TemplateResult {
|
|
206
|
-
if (!created) {
|
|
207
|
-
return html`<span>Unknown</span>`;
|
|
208
|
-
}
|
|
209
|
-
const d = new Date(created);
|
|
100
|
+
protected renderSelection(certificate: HttpCertificate): TemplateResult {
|
|
210
101
|
return html`
|
|
211
|
-
<
|
|
102
|
+
<div class="certificate-info body-medium">
|
|
103
|
+
Current certificate: ${certificate.name}
|
|
104
|
+
<ui-icon-button
|
|
105
|
+
aria-label="Remove certificate from authorization"
|
|
106
|
+
title="Remove certificate from authorization"
|
|
107
|
+
@click="${this.handleClearCertificate}"
|
|
108
|
+
>
|
|
109
|
+
<ui-icon role="presentation" icon="deleteOutline"></ui-icon>
|
|
110
|
+
</ui-icon-button>
|
|
111
|
+
</div>
|
|
212
112
|
`;
|
|
213
113
|
}
|
|
214
114
|
}
|