@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
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IFile, HttpProject, Project, Folder, ProjectKind, FolderKind,
|
|
3
3
|
EventUtils, DataNamespace, DataFile, DataFileKind,
|
|
4
|
-
FileAddOptions, FileBreadcrumb,
|
|
5
|
-
BroadcastEvent, BroadcastFileData,
|
|
6
|
-
FileMetaCreatedBroadcastEvent,
|
|
7
|
-
DeletedBroadcastEvent,
|
|
8
|
-
FilePatchBroadcastEvent,
|
|
9
|
-
ContextListResult,
|
|
4
|
+
FileAddOptions, FileBreadcrumb,
|
|
10
5
|
ICapabilities,
|
|
11
6
|
} from "@api-client/core/build/browser.js";
|
|
12
7
|
import { html, nothing, TemplateResult } from "lit";
|
|
13
8
|
import { join } from "lit/directives/join.js";
|
|
14
9
|
import { map } from "lit/directives/map.js";
|
|
15
10
|
import { until } from 'lit/directives/until.js';
|
|
16
|
-
import { Patch } from "@api-client/json";
|
|
17
11
|
import type ApiClientScreen from "../ApiClient.screen.js";
|
|
18
12
|
import { DataTable } from "../../../ui/table/DataTable.js";
|
|
19
13
|
import { NavigationEvents } from "../../../events/NavigationEvents.js";
|
|
@@ -22,9 +16,10 @@ import { DataImportProcessor } from "../../../http-client/store/DataImportProces
|
|
|
22
16
|
import { SnackNotifications } from "../../../ui/notification/SnackNotifications.js";
|
|
23
17
|
import { UiDialogClosingReason } from "../../../ui/dialog/UiDialog.js";
|
|
24
18
|
import { FileBindings } from "../../../bindings/base/FileBindings.js";
|
|
25
|
-
import { IconType } from "../../../ui/icons/Icons.js";
|
|
26
19
|
import UserCache from '../../../store/UserCache.js';
|
|
27
20
|
import AppInfo from '../AppInfo.js';
|
|
21
|
+
import { fileIcon } from "../../../elements/store/FilesLib.js";
|
|
22
|
+
import { FileSystem } from "../../../store/FileSystem.js";
|
|
28
23
|
import '@github/relative-time-element';
|
|
29
24
|
import '../../../define/ui/ui-list.js';
|
|
30
25
|
import '../../../define/ui/ui-list-item.js';
|
|
@@ -35,7 +30,7 @@ import '../../../define/ui/ui-button.js';
|
|
|
35
30
|
import '../../../define/ui/ui-divider.js';
|
|
36
31
|
import '../../../define/ui/ui-text-field.js';
|
|
37
32
|
import '../../../define/dialog/rename-dialog.js';
|
|
38
|
-
import '../../../define/
|
|
33
|
+
import '../../../define/store/share-file.js';
|
|
39
34
|
|
|
40
35
|
enum ImportState {
|
|
41
36
|
Analyzing,
|
|
@@ -49,41 +44,20 @@ enum ImportState {
|
|
|
49
44
|
* A class that specializes in rendering the list of files in HTTP Client.
|
|
50
45
|
*/
|
|
51
46
|
export class FilesPage {
|
|
47
|
+
fs = new FileSystem();
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
* The list of files to render.
|
|
55
|
-
* Do not overwrite this property or when you must then update the DataTable's `items` as well.
|
|
56
|
-
*/
|
|
57
|
-
files: IFile[] = [];
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* The pagination cursor for files.
|
|
61
|
-
* As long there's a cursor, there are more files to request.
|
|
62
|
-
*/
|
|
63
|
-
cursor?: string;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* The key of the currently rendered folder.
|
|
67
|
-
*/
|
|
68
|
-
folder?: string;
|
|
69
|
-
|
|
70
|
-
breadcrumbs?: FileBreadcrumb[];
|
|
71
|
-
|
|
72
|
-
dt = new DataTable(() => this.files, { ariaLabel: 'Your files', active: true, selection: 'single' });
|
|
49
|
+
dt = new DataTable(() => this.fs.files, { ariaLabel: 'Your files', active: true, selection: 'single' });
|
|
73
50
|
|
|
74
51
|
importProcessor?: DataImportProcessor;
|
|
75
52
|
|
|
76
53
|
importState?: ImportState;
|
|
77
54
|
|
|
78
|
-
/**
|
|
79
|
-
* Whether the UI is reading files
|
|
80
|
-
*/
|
|
81
|
-
readingFiles?: boolean;
|
|
82
|
-
|
|
83
55
|
/**
|
|
84
56
|
* A selected in the table item.
|
|
85
57
|
*/
|
|
86
58
|
selectedItem?: string;
|
|
59
|
+
|
|
60
|
+
errorMessage?: string;
|
|
87
61
|
|
|
88
62
|
constructor(protected screen: ApiClientScreen) {
|
|
89
63
|
this.createProjectHandler = this.createProjectHandler.bind(this);
|
|
@@ -105,122 +79,24 @@ export class FilesPage {
|
|
|
105
79
|
this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));
|
|
106
80
|
this.dt.addEventListener('render', this.handleTableRender.bind(this));
|
|
107
81
|
this.dt.addEventListener('select', this.handleTableSelect.bind(this));
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
async refresh(): Promise<void> {
|
|
111
|
-
this.resetList();
|
|
112
|
-
this.screen.render();
|
|
113
|
-
await this.readFiles();
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
resetList(): void {
|
|
117
|
-
this.files = [];
|
|
118
|
-
this.cursor = undefined;
|
|
119
|
-
this.breadcrumbs = undefined;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
async readFiles(): Promise<void> {
|
|
123
|
-
const { selectedSpace } = this.screen;
|
|
124
|
-
if (!selectedSpace) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if (this.readingFiles) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
this.readingFiles = true;
|
|
131
|
-
const { cursor: filesCursor, folder } = this;
|
|
132
|
-
const opts: ContextSpaceListOptions = {
|
|
133
|
-
space: selectedSpace,
|
|
134
|
-
descending: true,
|
|
135
|
-
};
|
|
136
|
-
if (filesCursor) {
|
|
137
|
-
opts.cursor = filesCursor;
|
|
138
|
-
}
|
|
139
|
-
if (folder) {
|
|
140
|
-
opts.parent = folder;
|
|
141
|
-
}
|
|
142
|
-
try {
|
|
143
|
-
const result = await this.listFiles(opts);
|
|
144
|
-
const { items, cursor } = result;
|
|
145
|
-
this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));
|
|
146
|
-
this.cursor = cursor;
|
|
147
|
-
if (folder) {
|
|
148
|
-
const br = await this.screen.bindings.store.files.breadcrumbs(folder);
|
|
149
|
-
this.breadcrumbs = br.items.reverse();
|
|
150
|
-
}
|
|
151
|
-
} finally {
|
|
152
|
-
this.readingFiles = false;
|
|
153
|
-
}
|
|
154
|
-
this.screen.render();
|
|
155
|
-
}
|
|
82
|
+
this.dt.addEventListener('scrollend', this.handleTableScrollEnd.bind(this));
|
|
156
83
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
filesSortFunction(a: IFile, b:IFile): number {
|
|
167
|
-
if (a.kind !== b.kind) {
|
|
168
|
-
if (a.kind === FolderKind) {
|
|
169
|
-
return -1;
|
|
170
|
-
}
|
|
171
|
-
return 1;
|
|
172
|
-
}
|
|
173
|
-
if (a.kind === b.kind && a.kind === FolderKind) {
|
|
174
|
-
return (a.info.name || '').localeCompare(b.info.name || '');
|
|
175
|
-
}
|
|
176
|
-
return b.lastModified.time - a.lastModified.time;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
handleFileEvent(event: BroadcastEvent): void {
|
|
180
|
-
const typed = event as BroadcastEvent & BroadcastFileData;
|
|
181
|
-
if (typed.parent && typed.parent !== this.folder) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
if (typed.alt !== 'meta') {
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
switch (event.operation) {
|
|
188
|
-
case 'created': this.handleFileCreated((typed as FileMetaCreatedBroadcastEvent).data); break;
|
|
189
|
-
case 'deleted': this.handleFileDeleted(typed as DeletedBroadcastEvent); break;
|
|
190
|
-
case 'patch': this.handleFilePatch(typed as FilePatchBroadcastEvent); break;
|
|
191
|
-
default:
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
handleFileCreated(file: IFile): void {
|
|
196
|
-
this.files.push(file);
|
|
197
|
-
this.files.sort(this.filesSortFunction.bind(this));
|
|
198
|
-
this.screen.render();
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
handleFileDeleted(event: DeletedBroadcastEvent): void {
|
|
202
|
-
this.removeFileFromList(event.key);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
removeFileFromList(key: string): void {
|
|
206
|
-
const index = this.files.findIndex(i => i.key === key);
|
|
207
|
-
if (index === -1) {
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
this.files.splice(index, 1);
|
|
211
|
-
this.screen.render();
|
|
84
|
+
this.fs.observe();
|
|
85
|
+
this.fs.addEventListener('change', () => this.screen.render());
|
|
86
|
+
this.fs.addEventListener('error', (e: Event) => {
|
|
87
|
+
const event = e as CustomEvent<string>;
|
|
88
|
+
this.errorMessage = event.detail;
|
|
89
|
+
});
|
|
90
|
+
this.fs.addEventListener('querycomplete', () => {
|
|
91
|
+
document.body.dispatchEvent(new Event('querycomplete', { bubbles: true }));
|
|
92
|
+
});
|
|
212
93
|
}
|
|
213
94
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
const index = this.files.findIndex(i => i.key === key);
|
|
217
|
-
if (index === -1) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const file = this.files[index];
|
|
221
|
-
const result = Patch.apply(file, data.patch);
|
|
222
|
-
this.files[index] = result.doc as IFile;
|
|
95
|
+
async refresh(): Promise<void> {
|
|
96
|
+
this.fs.resetList();
|
|
223
97
|
this.screen.render();
|
|
98
|
+
await this.fs.queryPage();
|
|
99
|
+
await this.fs.queryBreadcrumbs();
|
|
224
100
|
}
|
|
225
101
|
|
|
226
102
|
protected cancelCreateProjectDialog(): void {
|
|
@@ -331,8 +207,8 @@ export class FilesPage {
|
|
|
331
207
|
throw new Error('You need to select a space first');
|
|
332
208
|
}
|
|
333
209
|
const opts: FileAddOptions = {};
|
|
334
|
-
if (this.
|
|
335
|
-
opts.parent = this.
|
|
210
|
+
if (this.fs.parent) {
|
|
211
|
+
opts.parent = this.fs.parent;
|
|
336
212
|
}
|
|
337
213
|
const result = await this.screen.bindings.store.files.add(file, opts);
|
|
338
214
|
if (media) {
|
|
@@ -365,6 +241,13 @@ export class FilesPage {
|
|
|
365
241
|
this.screen.openDialog('createProjectDialog');
|
|
366
242
|
} else if (option === 'schema') {
|
|
367
243
|
this.screen.openDialog('createSchemaDialog');
|
|
244
|
+
} else if (option === 'certificate') {
|
|
245
|
+
const { parent } = this.fs;
|
|
246
|
+
if (parent) {
|
|
247
|
+
navigate('certificates', 'add', parent);
|
|
248
|
+
} else {
|
|
249
|
+
navigate('certificates', 'add');
|
|
250
|
+
}
|
|
368
251
|
}
|
|
369
252
|
}
|
|
370
253
|
|
|
@@ -422,7 +305,7 @@ export class FilesPage {
|
|
|
422
305
|
this.importState = ImportState.Importing;
|
|
423
306
|
this.screen.render();
|
|
424
307
|
try {
|
|
425
|
-
await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.
|
|
308
|
+
await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.fs.parent);
|
|
426
309
|
this.importState = ImportState.Done;
|
|
427
310
|
this.screen.render();
|
|
428
311
|
} catch (e) {
|
|
@@ -465,8 +348,12 @@ export class FilesPage {
|
|
|
465
348
|
this.screen.render();
|
|
466
349
|
}
|
|
467
350
|
|
|
351
|
+
protected handleTableScrollEnd(): void {
|
|
352
|
+
this.fs.debounceQuery();
|
|
353
|
+
}
|
|
354
|
+
|
|
468
355
|
openProject(key: string): void {
|
|
469
|
-
const file = this.files.find(i => i.key === key);
|
|
356
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
470
357
|
if (!file) {
|
|
471
358
|
throw new Error(`Invalid state: file not found`);
|
|
472
359
|
}
|
|
@@ -550,7 +437,7 @@ export class FilesPage {
|
|
|
550
437
|
}
|
|
551
438
|
|
|
552
439
|
protected renameFile(key: string): void {
|
|
553
|
-
const file = this.files.find(i => i.key === key);
|
|
440
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
554
441
|
if (!file) {
|
|
555
442
|
return;
|
|
556
443
|
}
|
|
@@ -571,7 +458,7 @@ export class FilesPage {
|
|
|
571
458
|
}
|
|
572
459
|
|
|
573
460
|
protected shareFile(key: string): void {
|
|
574
|
-
const file = this.files.find(i => i.key === key);
|
|
461
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
575
462
|
if (!file) {
|
|
576
463
|
return;
|
|
577
464
|
}
|
|
@@ -582,7 +469,7 @@ export class FilesPage {
|
|
|
582
469
|
dialog.modal = true;
|
|
583
470
|
document.body.appendChild(dialog);
|
|
584
471
|
dialog.open = true;
|
|
585
|
-
dialog.addEventListener('
|
|
472
|
+
dialog.addEventListener('close', () => {
|
|
586
473
|
document.body.removeChild(dialog);
|
|
587
474
|
});
|
|
588
475
|
}
|
|
@@ -626,7 +513,7 @@ export class FilesPage {
|
|
|
626
513
|
if (!selectedItem) {
|
|
627
514
|
return nothing
|
|
628
515
|
}
|
|
629
|
-
const file = this.files.find(i => i.key === selectedItem);
|
|
516
|
+
const file = this.fs.files.find(i => i.key === selectedItem);
|
|
630
517
|
if (!file) {
|
|
631
518
|
return nothing;
|
|
632
519
|
}
|
|
@@ -693,6 +580,10 @@ export class FilesPage {
|
|
|
693
580
|
<ui-icon icon="schema" slot="start"></ui-icon>
|
|
694
581
|
Data schema
|
|
695
582
|
</ui-list-item>
|
|
583
|
+
<ui-list-item image="icon" data-option="certificate" role="menuitem">
|
|
584
|
+
<ui-icon icon="certificate" slot="start"></ui-icon>
|
|
585
|
+
Certificate
|
|
586
|
+
</ui-list-item>
|
|
696
587
|
<ui-divider></ui-divider>
|
|
697
588
|
<ui-list-item image="icon" data-option="folder" role="menuitem">
|
|
698
589
|
<ui-icon icon="folder" slot="start"></ui-icon>
|
|
@@ -726,7 +617,7 @@ export class FilesPage {
|
|
|
726
617
|
}
|
|
727
618
|
|
|
728
619
|
protected renderBreadcrumbs(): TemplateResult {
|
|
729
|
-
const { breadcrumbs=[] } = this;
|
|
620
|
+
const { breadcrumbs = [] } = this.fs;
|
|
730
621
|
if (!breadcrumbs.length) {
|
|
731
622
|
return html``;
|
|
732
623
|
}
|
|
@@ -868,17 +759,10 @@ export class FilesPage {
|
|
|
868
759
|
}
|
|
869
760
|
|
|
870
761
|
protected nameCell(item: IFile): TemplateResult {
|
|
871
|
-
|
|
872
|
-
switch (item.kind) {
|
|
873
|
-
case DataFileKind: icon = 'schema'; break;
|
|
874
|
-
case FolderKind: icon = 'folder'; break;
|
|
875
|
-
case ProjectKind: icon = 'collectionsBookmark'; break;
|
|
876
|
-
default:
|
|
877
|
-
}
|
|
878
|
-
|
|
762
|
+
const icon = fileIcon(item);
|
|
879
763
|
return this.dt.cell(html`
|
|
880
764
|
${icon ? html`<ui-icon icon="${icon}" class="cell-icon"></ui-icon>` : nothing}
|
|
881
|
-
${item.info.name || 'Unnamed
|
|
765
|
+
${item.info.name || 'Unnamed file'}
|
|
882
766
|
`, { class: 'name-cell', data: { kind: item.kind } });
|
|
883
767
|
}
|
|
884
768
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IFile } from "@api-client/core/build/browser.js";
|
|
2
2
|
import { html, TemplateResult } from "lit";
|
|
3
3
|
import type ApiClientScreen from "../ApiClient.screen.js";
|
|
4
4
|
import { FilesPage } from "./Files.page.js";
|
|
@@ -7,45 +7,7 @@ export class SharedPage extends FilesPage {
|
|
|
7
7
|
constructor(screen: ApiClientScreen) {
|
|
8
8
|
super(screen);
|
|
9
9
|
this.dt.options.ariaLabel = 'Shared with you';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
protected override async listFiles(opts: ContextSpaceListOptions): Promise<ContextListResult<IFile>> {
|
|
13
|
-
return this.screen.bindings.store.shared.list(opts);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
override handleFileEvent(event: BroadcastEvent): void {
|
|
17
|
-
const typed = event as BroadcastEvent & BroadcastFileData;
|
|
18
|
-
if (typed.parent && typed.parent !== this.folder) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
// if (typed.alt !== 'meta') {
|
|
22
|
-
// return;
|
|
23
|
-
// }
|
|
24
|
-
switch (event.operation) {
|
|
25
|
-
case 'access-granted': this.handleFileAccessGranted(typed as FileAccessBroadcastEvent); break;
|
|
26
|
-
case 'access-removed': this.handleFileAccessRemoved(typed as FileAccessBroadcastEvent); break;
|
|
27
|
-
default: super.handleFileEvent(event);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async handleFileAccessGranted(event: FileAccessBroadcastEvent): Promise<void> {
|
|
32
|
-
const { key } = event;
|
|
33
|
-
try {
|
|
34
|
-
const file = await this.screen.bindings.store.files.read(key);
|
|
35
|
-
const index = this.files.findIndex(i => i.key === key);
|
|
36
|
-
if (index >= 0) {
|
|
37
|
-
this.files.splice(index, 1);
|
|
38
|
-
}
|
|
39
|
-
this.handleFileCreated(file);
|
|
40
|
-
} catch (e) {
|
|
41
|
-
// eslint-disable-next-line no-console
|
|
42
|
-
console.warn(e);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
handleFileAccessRemoved(event: FileAccessBroadcastEvent): void {
|
|
47
|
-
const { key } = event;
|
|
48
|
-
this.removeFileFromList(key);
|
|
10
|
+
this.fs.source = 'shared';
|
|
49
11
|
}
|
|
50
12
|
|
|
51
13
|
override render(): TemplateResult {
|
|
@@ -8,6 +8,7 @@ import CheckboxElement from '../../ui/input/CheckboxElement.js';
|
|
|
8
8
|
import typography from "../../styles/m3/typography.module.js";
|
|
9
9
|
import surface from "../../styles/m3/surface.module.js";
|
|
10
10
|
import '../../define/ui/ui-icon.js';
|
|
11
|
+
import '../../define/ui/ui-button.js';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* A base class for demo pages in the API Client ecosystem.
|
|
@@ -33,6 +34,11 @@ export abstract class DemoPage extends RouteMixin(RenderableMixin(EventTarget))
|
|
|
33
34
|
*/
|
|
34
35
|
@reactive() darkThemeActive = false;
|
|
35
36
|
|
|
37
|
+
/**
|
|
38
|
+
* For some demo pages, whether the user is authenticated in the store.
|
|
39
|
+
*/
|
|
40
|
+
authenticated = false;
|
|
41
|
+
|
|
36
42
|
constructor() {
|
|
37
43
|
super();
|
|
38
44
|
this.handleMediaQuery = this.handleMediaQuery.bind(this);
|
|
@@ -151,4 +157,15 @@ export abstract class DemoPage extends RouteMixin(RenderableMixin(EventTarget))
|
|
|
151
157
|
* ```
|
|
152
158
|
*/
|
|
153
159
|
abstract contentTemplate(): TemplateResult;
|
|
160
|
+
|
|
161
|
+
handleAuthenticate(): void {
|
|
162
|
+
// ...
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
authenticateTemplate(): TemplateResult {
|
|
166
|
+
return html`
|
|
167
|
+
<p>Store authorization required.</p>
|
|
168
|
+
<ui-button @click="${this.handleAuthenticate}">Authenticate</ui-button>
|
|
169
|
+
`;
|
|
170
|
+
}
|
|
154
171
|
}
|