@api-client/ui 0.0.10 → 0.0.12

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.
Files changed (176) hide show
  1. package/.eslintrc +16 -1
  2. package/demo/elements/index.html +3 -0
  3. package/demo/elements/store/file-picker.html +15 -0
  4. package/demo/elements/store/file-picker.ts +134 -0
  5. package/demo/elements/store/index.html +19 -0
  6. package/demo/index.html +3 -0
  7. package/demo/layout/index.html +91 -0
  8. package/demo/layout/index.ts +182 -0
  9. package/demo/store/StorePlugin.js +1 -0
  10. package/dist/bindings/base/StoreBindings.d.ts +5 -0
  11. package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
  12. package/dist/bindings/base/StoreBindings.js +15 -1
  13. package/dist/bindings/base/StoreBindings.js.map +1 -1
  14. package/dist/define/store/file-picker.d.ts +9 -0
  15. package/dist/define/store/file-picker.d.ts.map +1 -0
  16. package/dist/define/store/file-picker.js +10 -0
  17. package/dist/define/store/file-picker.js.map +1 -0
  18. package/dist/define/{files → store}/share-file.d.ts +1 -1
  19. package/dist/define/store/share-file.d.ts.map +1 -0
  20. package/dist/define/{files → store}/share-file.js +2 -2
  21. package/dist/define/store/share-file.js.map +1 -0
  22. package/dist/elements/layout/SplitItem.d.ts +1 -9
  23. package/dist/elements/layout/SplitItem.d.ts.map +1 -1
  24. package/dist/elements/layout/SplitItem.js +27 -20
  25. package/dist/elements/layout/SplitItem.js.map +1 -1
  26. package/dist/elements/layout/SplitLayout.d.ts +16 -14
  27. package/dist/elements/layout/SplitLayout.d.ts.map +1 -1
  28. package/dist/elements/layout/SplitLayout.js +47 -42
  29. package/dist/elements/layout/SplitLayout.js.map +1 -1
  30. package/dist/elements/layout/SplitPanel.d.ts +7 -2
  31. package/dist/elements/layout/SplitPanel.d.ts.map +1 -1
  32. package/dist/elements/layout/SplitPanel.js +130 -52
  33. package/dist/elements/layout/SplitPanel.js.map +1 -1
  34. package/dist/elements/layout/SplitView.d.ts.map +1 -1
  35. package/dist/elements/layout/SplitView.js +18 -14
  36. package/dist/elements/layout/SplitView.js.map +1 -1
  37. package/dist/elements/layout/type.d.ts +3 -3
  38. package/dist/elements/layout/type.d.ts.map +1 -1
  39. package/dist/elements/layout/type.js.map +1 -1
  40. package/dist/elements/store/FilePicker.element.d.ts +87 -0
  41. package/dist/elements/store/FilePicker.element.d.ts.map +1 -0
  42. package/dist/elements/store/FilePicker.element.js +263 -0
  43. package/dist/elements/store/FilePicker.element.js.map +1 -0
  44. package/dist/elements/store/FilePicker.styles.d.ts +3 -0
  45. package/dist/elements/store/FilePicker.styles.d.ts.map +1 -0
  46. package/dist/elements/store/FilePicker.styles.js +72 -0
  47. package/dist/elements/store/FilePicker.styles.js.map +1 -0
  48. package/dist/elements/store/FilesLib.d.ts +10 -0
  49. package/dist/elements/store/FilesLib.d.ts.map +1 -0
  50. package/dist/elements/store/FilesLib.js +38 -0
  51. package/dist/elements/store/FilesLib.js.map +1 -0
  52. package/dist/elements/{files/ShareFile.d.ts → store/ShareFile.element.d.ts} +1 -1
  53. package/dist/elements/store/ShareFile.element.d.ts.map +1 -0
  54. package/dist/elements/{files/ShareFile.js → store/ShareFile.element.js} +1 -1
  55. package/dist/elements/store/ShareFile.element.js.map +1 -0
  56. package/dist/elements/store/ShareFile.styles.d.ts.map +1 -0
  57. package/dist/elements/{files → store}/ShareFile.styles.js.map +1 -1
  58. package/dist/events/EventTypes.d.ts +1 -0
  59. package/dist/events/EventTypes.d.ts.map +1 -1
  60. package/dist/events/EventTypes.js +1 -0
  61. package/dist/events/EventTypes.js.map +1 -1
  62. package/dist/events/Events.d.ts +1 -0
  63. package/dist/events/Events.d.ts.map +1 -1
  64. package/dist/events/StoreEvents.d.ts +8 -1
  65. package/dist/events/StoreEvents.d.ts.map +1 -1
  66. package/dist/events/StoreEvents.js +19 -0
  67. package/dist/events/StoreEvents.js.map +1 -1
  68. package/dist/pages/ApplicationScreen.d.ts +1 -1
  69. package/dist/pages/ApplicationScreen.d.ts.map +1 -1
  70. package/dist/pages/ApplicationScreen.js +4 -2
  71. package/dist/pages/ApplicationScreen.js.map +1 -1
  72. package/dist/pages/api-client/ApiClient.screen.d.ts +0 -6
  73. package/dist/pages/api-client/ApiClient.screen.d.ts.map +1 -1
  74. package/dist/pages/api-client/ApiClient.screen.js +16 -29
  75. package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
  76. package/dist/pages/api-client/Authenticate.screen.d.ts +1 -1
  77. package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
  78. package/dist/pages/api-client/Authenticate.screen.js +2 -2
  79. package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
  80. package/dist/pages/api-client/pages/Files.page.d.ts +6 -35
  81. package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
  82. package/dist/pages/api-client/pages/Files.page.js +32 -141
  83. package/dist/pages/api-client/pages/Files.page.js.map +1 -1
  84. package/dist/pages/api-client/pages/Shared.page.d.ts +1 -5
  85. package/dist/pages/api-client/pages/Shared.page.d.ts.map +1 -1
  86. package/dist/pages/api-client/pages/Shared.page.js +1 -40
  87. package/dist/pages/api-client/pages/Shared.page.js.map +1 -1
  88. package/dist/pages/demo/DemoPage.d.ts +7 -0
  89. package/dist/pages/demo/DemoPage.d.ts.map +1 -1
  90. package/dist/pages/demo/DemoPage.js +14 -0
  91. package/dist/pages/demo/DemoPage.js.map +1 -1
  92. package/dist/pages/http-project/HttpClientCommands.d.ts.map +1 -1
  93. package/dist/pages/http-project/HttpClientCommands.js +28 -12
  94. package/dist/pages/http-project/HttpClientCommands.js.map +1 -1
  95. package/dist/store/FileSystem.d.ts +90 -0
  96. package/dist/store/FileSystem.d.ts.map +1 -0
  97. package/dist/store/FileSystem.js +260 -0
  98. package/dist/store/FileSystem.js.map +1 -0
  99. package/dist/styles/global-styles.d.ts.map +1 -1
  100. package/dist/styles/global-styles.js +7 -0
  101. package/dist/styles/global-styles.js.map +1 -1
  102. package/dist/ui/icons/Icons.d.ts +2 -1
  103. package/dist/ui/icons/Icons.d.ts.map +1 -1
  104. package/dist/ui/icons/Icons.js +1 -0
  105. package/dist/ui/icons/Icons.js.map +1 -1
  106. package/dist/ui/list/UiDropdownList.d.ts +9 -1
  107. package/dist/ui/list/UiDropdownList.d.ts.map +1 -1
  108. package/dist/ui/list/UiDropdownList.js +39 -17
  109. package/dist/ui/list/UiDropdownList.js.map +1 -1
  110. package/dist/ui/list/UiList.d.ts +6 -1
  111. package/dist/ui/list/UiList.d.ts.map +1 -1
  112. package/dist/ui/list/UiList.js +24 -9
  113. package/dist/ui/list/UiList.js.map +1 -1
  114. package/dist/ui/table/DataTable.d.ts +4 -0
  115. package/dist/ui/table/DataTable.d.ts.map +1 -1
  116. package/dist/ui/table/DataTable.js +23 -1
  117. package/dist/ui/table/DataTable.js.map +1 -1
  118. package/package.json +2 -1
  119. package/src/bindings/base/StoreBindings.ts +16 -1
  120. package/src/define/store/file-picker.ts +12 -0
  121. package/src/define/{files → store}/share-file.ts +2 -2
  122. package/src/elements/layout/SplitItem.ts +29 -21
  123. package/src/elements/layout/SplitLayout.ts +53 -43
  124. package/src/elements/layout/SplitPanel.ts +140 -57
  125. package/src/elements/layout/SplitView.ts +18 -15
  126. package/src/elements/layout/type.ts +3 -4
  127. package/src/elements/store/FilePicker.element.ts +297 -0
  128. package/src/elements/store/FilePicker.styles.ts +72 -0
  129. package/src/elements/store/FilesLib.ts +32 -0
  130. package/src/events/EventTypes.ts +1 -0
  131. package/src/events/StoreEvents.ts +21 -1
  132. package/src/pages/ApplicationScreen.ts +5 -3
  133. package/src/pages/api-client/ApiClient.screen.ts +16 -31
  134. package/src/pages/api-client/Authenticate.screen.ts +2 -2
  135. package/src/pages/api-client/pages/Files.page.ts +37 -164
  136. package/src/pages/api-client/pages/Shared.page.ts +2 -40
  137. package/src/pages/demo/DemoPage.ts +17 -0
  138. package/src/pages/http-project/HttpClientCommands.ts +28 -12
  139. package/src/store/FileSystem.ts +325 -0
  140. package/src/styles/global-styles.ts +7 -0
  141. package/src/ui/icons/Icons.ts +2 -1
  142. package/src/ui/list/UiDropdownList.ts +44 -17
  143. package/src/ui/list/UiList.ts +26 -10
  144. package/src/ui/table/DataTable.ts +29 -3
  145. package/test/elements/layout/SplitItem.test.ts +76 -75
  146. package/test/elements/layout/SplitLayoutManager.test.ts +70 -69
  147. package/test/elements/layout/SplitPanel.test.ts +10 -7
  148. package/test/elements/store/FilePicker.test.ts +241 -0
  149. package/test/env.js +3 -0
  150. package/test/helpers/StoreHelper.ts +390 -0
  151. package/tsconfig.eslint.json +10 -0
  152. package/web-test-runner.config.mjs +51 -2
  153. package/dist/define/files/share-file.d.ts.map +0 -1
  154. package/dist/define/files/share-file.js.map +0 -1
  155. package/dist/define/layout/layout-panel.d.ts +0 -7
  156. package/dist/define/layout/layout-panel.d.ts.map +0 -1
  157. package/dist/define/layout/layout-panel.js +0 -3
  158. package/dist/define/layout/layout-panel.js.map +0 -1
  159. package/dist/elements/files/ShareFile.d.ts.map +0 -1
  160. package/dist/elements/files/ShareFile.js.map +0 -1
  161. package/dist/elements/files/ShareFile.styles.d.ts.map +0 -1
  162. package/dist/elements/layout/LayoutManager.d.ts +0 -327
  163. package/dist/elements/layout/LayoutManager.d.ts.map +0 -1
  164. package/dist/elements/layout/LayoutManager.js +0 -747
  165. package/dist/elements/layout/LayoutManager.js.map +0 -1
  166. package/dist/elements/layout/LayoutPanelElement.d.ts +0 -62
  167. package/dist/elements/layout/LayoutPanelElement.d.ts.map +0 -1
  168. package/dist/elements/layout/LayoutPanelElement.js +0 -628
  169. package/dist/elements/layout/LayoutPanelElement.js.map +0 -1
  170. package/src/define/layout/layout-panel.ts +0 -9
  171. package/src/elements/layout/LayoutManager.ts +0 -930
  172. package/src/elements/layout/LayoutPanelElement.ts +0 -651
  173. /package/dist/elements/{files → store}/ShareFile.styles.d.ts +0 -0
  174. /package/dist/elements/{files → store}/ShareFile.styles.js +0 -0
  175. /package/src/elements/{files/ShareFile.ts → store/ShareFile.element.ts} +0 -0
  176. /package/src/elements/{files → store}/ShareFile.styles.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Authenticate.screen.js","sourceRoot":"","sources":["../../../src/pages/api-client/Authenticate.screen.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResult } from 'lit';\nimport { ApplicationInit, ApplicationScreen } from '../ApplicationScreen.js';\nimport { reactive } from '../../lib/decorators.js';\nimport styles from './Authenticate.styles.js';\nimport globalStyles from '../../styles/global-styles.js';\nimport typography from '../../styles/m3/typography.module.js';\nimport colors from '../../styles/m3/colors.module.js';\nimport dialog from '../../styles/m3/dialog.module.js';\nimport { IConfigEnvironment } from '../../lib/config/Config.js';\nimport { ISessionInitInfo } from '../../store/HttpStore.js';\nimport { EnvironmentsKey } from '../../bindings/base/ConfigurationBindings.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-button.js';\n\n/**\n * When the user is redirected here it means that the user provided a configuration\n * that requires user authentication.\n */\nexport default class AuthenticateScreen extends ApplicationScreen {\n override async storeChanged(): Promise<void> {\n // ...\n }\n\n static get styles(): CSSResult[] {\n return [styles, globalStyles, typography, colors, dialog];\n }\n\n @reactive() environmentError?: string;\n\n environment?: IConfigEnvironment;\n\n /**\n * Whether the application is performing the store validation.\n */\n @reactive() authenticating = false;\n\n isSessionStore = false;\n\n constructor(init: ApplicationInit) {\n super(init);\n }\n\n async initialize(): Promise<void> {\n try {\n await this.bindings.store.initialize();\n await this.bindings.store.initializeStore();\n await this.bindings.config.initialize();\n const env = await this.readEnvironment();\n if (env) {\n this.environment = env;\n } else {\n this.environmentError = 'Environment information not found. Go back to the previous page.';\n }\n } catch (e) {\n this.environmentError = (e as Error).message;\n }\n }\n\n async readEnvironment(): Promise<IConfigEnvironment | undefined> {\n let env = await this.bindings.config.session.get(`${EnvironmentsKey}.creating`) as IConfigEnvironment | undefined;\n if (!env) {\n env = await this.bindings.config.environment.read();\n } else {\n this.isSessionStore = true;\n }\n return env;\n }\n\n protected handleAuthenticate(): void {\n const { environment } = this;\n if (!environment) {\n this.environmentError = 'Environment information not found. Go back to the previous page.';\n return;\n }\n this.authenticate(environment);\n }\n\n protected handleBack(): void {\n window.history.back();\n }\n\n protected async authenticate(env: IConfigEnvironment): Promise<void> {\n this.authenticating = true;\n let info: ISessionInitInfo | undefined;\n try {\n await this.bindings.store.global.set(env);\n info = await this.bindings.store.auth.authenticate({ force: false });\n } finally {\n this.authenticating = false;\n }\n if (info) {\n if (this.isSessionStore) {\n await this.bindings.config.environment.add(env, { asDefault: true });\n await this.bindings.config.session.delete(`${EnvironmentsKey}.creating`);\n } else {\n await this.bindings.config.environment.update(env);\n }\n }\n }\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n override pageTemplate(): TemplateResult {\n return html`\n <main class=\"config-init\">\n ${this.renderTitle()}\n ${this.renderIntroMessage()}\n ${this.environmentError ? this.initErrorTemplate() : this.contentTemplate()}\n </main>\n `;\n }\n\n initErrorTemplate(): TemplateResult {\n return html`\n <p class=\"general-error error on-error-text body-large\">${this.environmentError}</p>\n <div class=\"action\">\n <ui-button type=\"filled\" @click=\"${this.handleBack}\">Back</ui-button>\n </div>\n `;\n }\n\n contentTemplate(): TemplateResult {\n return html`\n ${this.actionTemplate()}\n ${this.infoTemplate()}\n ${this.progressTemplate()}\n `;\n }\n\n renderTitle(): TemplateResult {\n return html`<h1 class=\"display-large\">Store authentication</h1>`;\n }\n\n renderIntroMessage(): TemplateResult {\n return html`\n <div class=\"description body-medium\">\n <p id=\"authenticationMessage\">The network store requires authentication.</p>\n </div>\n `;\n }\n\n actionTemplate(): TemplateResult {\n return html`\n <div class=\"action\">\n <ui-button \n type=\"filled\"\n @click=\"${this.handleAuthenticate}\"\n >Authenticate</ui-button>\n </div>\n `;\n }\n\n infoTemplate(): TemplateResult {\n return html`\n <p class=\"description body-medium\" id=\"authenticationMessage\">This will open a new tab with the authentication options.</p>\n `;\n }\n\n progressTemplate(): TemplateResult | string {\n const { authenticating } = this;\n if (!authenticating) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"Authenticate.screen.js","sourceRoot":"","sources":["../../../src/pages/api-client/Authenticate.screen.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResult } from 'lit';\nimport { ApplicationInit, ApplicationScreen } from '../ApplicationScreen.js';\nimport { reactive } from '../../lib/decorators.js';\nimport styles from './Authenticate.styles.js';\nimport globalStyles from '../../styles/global-styles.js';\nimport typography from '../../styles/m3/typography.module.js';\nimport colors from '../../styles/m3/colors.module.js';\nimport dialog from '../../styles/m3/dialog.module.js';\nimport { IConfigEnvironment } from '../../lib/config/Config.js';\nimport { ISessionInitInfo } from '../../store/HttpStore.js';\nimport { EnvironmentsKey } from '../../bindings/base/ConfigurationBindings.js';\nimport '../../define/ui/ui-progress.js';\nimport '../../define/ui/ui-button.js';\n\n/**\n * When the user is redirected here it means that the user provided a configuration\n * that requires user authentication.\n */\nexport default class AuthenticateScreen extends ApplicationScreen {\n override async storeChanged(): Promise<void> {\n // ...\n }\n\n static get styles(): CSSResult[] {\n return [styles, globalStyles, typography, colors, dialog];\n }\n\n @reactive() environmentError?: string;\n\n environment?: IConfigEnvironment;\n\n /**\n * Whether the application is performing the store validation.\n */\n @reactive() authenticating = false;\n\n isSessionStore = false;\n\n constructor(init: ApplicationInit) {\n super(init);\n }\n\n async initialize(): Promise<void> {\n try {\n await this.bindings.store.initialize();\n await this.bindings.store.initializeStore();\n await this.bindings.config.initialize();\n const env = await this.readEnvironment();\n if (env) {\n this.environment = env;\n } else {\n this.environmentError = 'Environment information not found. Go back to the previous page.';\n }\n } catch (e) {\n this.environmentError = (e as Error).message;\n }\n }\n\n async readEnvironment(): Promise<IConfigEnvironment | undefined> {\n let env = await this.bindings.config.session.get(`${EnvironmentsKey}.creating`) as IConfigEnvironment | undefined;\n if (!env) {\n env = await this.bindings.config.environment.read();\n } else {\n this.isSessionStore = true;\n }\n return env;\n }\n\n protected async handleAuth(): Promise<void> {\n const { environment } = this;\n if (!environment) {\n this.environmentError = 'Environment information not found. Go back to the previous page.';\n return;\n }\n this.authenticate(environment);\n }\n\n protected handleBack(): void {\n window.history.back();\n }\n\n protected async authenticate(env: IConfigEnvironment): Promise<void> {\n this.authenticating = true;\n let info: ISessionInitInfo | undefined;\n try {\n await this.bindings.store.global.set(env);\n info = await this.bindings.store.auth.authenticate({ force: false });\n } finally {\n this.authenticating = false;\n }\n if (info) {\n if (this.isSessionStore) {\n await this.bindings.config.environment.add(env, { asDefault: true });\n await this.bindings.config.session.delete(`${EnvironmentsKey}.creating`);\n } else {\n await this.bindings.config.environment.update(env);\n }\n }\n }\n\n /**\n * This to be used by the child classes to render page template.\n * @returns Application page template\n */\n override pageTemplate(): TemplateResult {\n return html`\n <main class=\"config-init\">\n ${this.renderTitle()}\n ${this.renderIntroMessage()}\n ${this.environmentError ? this.initErrorTemplate() : this.contentTemplate()}\n </main>\n `;\n }\n\n initErrorTemplate(): TemplateResult {\n return html`\n <p class=\"general-error error on-error-text body-large\">${this.environmentError}</p>\n <div class=\"action\">\n <ui-button type=\"filled\" @click=\"${this.handleBack}\">Back</ui-button>\n </div>\n `;\n }\n\n contentTemplate(): TemplateResult {\n return html`\n ${this.actionTemplate()}\n ${this.infoTemplate()}\n ${this.progressTemplate()}\n `;\n }\n\n renderTitle(): TemplateResult {\n return html`<h1 class=\"display-large\">Store authentication</h1>`;\n }\n\n renderIntroMessage(): TemplateResult {\n return html`\n <div class=\"description body-medium\">\n <p id=\"authenticationMessage\">The network store requires authentication.</p>\n </div>\n `;\n }\n\n actionTemplate(): TemplateResult {\n return html`\n <div class=\"action\">\n <ui-button \n type=\"filled\"\n @click=\"${this.handleAuth}\"\n >Authenticate</ui-button>\n </div>\n `;\n }\n\n infoTemplate(): TemplateResult {\n return html`\n <p class=\"description body-medium\" id=\"authenticationMessage\">This will open a new tab with the authentication options.</p>\n `;\n }\n\n progressTemplate(): TemplateResult | string {\n const { authenticating } = this;\n if (!authenticating) {\n return '';\n }\n return html`\n <ui-progress indeterminate></ui-progress>\n `;\n }\n}\n"]}
@@ -1,8 +1,9 @@
1
- import { IFile, FileBreadcrumb, ContextSpaceListOptions, BroadcastEvent, DeletedBroadcastEvent, FilePatchBroadcastEvent, ContextListResult, ICapabilities } from "@api-client/core/build/browser.js";
1
+ import { IFile, ICapabilities } from "@api-client/core/build/browser.js";
2
2
  import { nothing, TemplateResult } from "lit";
3
3
  import type ApiClientScreen from "../ApiClient.screen.js";
4
4
  import { DataTable } from "../../../ui/table/DataTable.js";
5
5
  import { DataImportProcessor } from "../../../http-client/store/DataImportProcessor.js";
6
+ import { FileSystem } from "../../../store/FileSystem.js";
6
7
  import '@github/relative-time-element';
7
8
  import '../../../define/ui/ui-list.js';
8
9
  import '../../../define/ui/ui-list-item.js';
@@ -13,7 +14,7 @@ import '../../../define/ui/ui-button.js';
13
14
  import '../../../define/ui/ui-divider.js';
14
15
  import '../../../define/ui/ui-text-field.js';
15
16
  import '../../../define/dialog/rename-dialog.js';
16
- import '../../../define/files/share-file.js';
17
+ import '../../../define/store/share-file.js';
17
18
  declare enum ImportState {
18
19
  Analyzing = 0,
19
20
  Analyzed = 1,
@@ -26,48 +27,17 @@ declare enum ImportState {
26
27
  */
27
28
  export declare class FilesPage {
28
29
  protected screen: ApiClientScreen;
29
- /**
30
- * The list of files to render.
31
- * Do not overwrite this property or when you must then update the DataTable's `items` as well.
32
- */
33
- files: IFile[];
34
- /**
35
- * The pagination cursor for files.
36
- * As long there's a cursor, there are more files to request.
37
- */
38
- cursor?: string;
39
- /**
40
- * The key of the currently rendered folder.
41
- */
42
- folder?: string;
43
- breadcrumbs?: FileBreadcrumb[];
30
+ fs: FileSystem;
44
31
  dt: DataTable<IFile>;
45
32
  importProcessor?: DataImportProcessor;
46
33
  importState?: ImportState;
47
- /**
48
- * Whether the UI is reading files
49
- */
50
- readingFiles?: boolean;
51
34
  /**
52
35
  * A selected in the table item.
53
36
  */
54
37
  selectedItem?: string;
38
+ errorMessage?: string;
55
39
  constructor(screen: ApiClientScreen);
56
40
  refresh(): Promise<void>;
57
- resetList(): void;
58
- readFiles(): Promise<void>;
59
- protected listFiles(opts: ContextSpaceListOptions): Promise<ContextListResult<IFile>>;
60
- /**
61
- * Sorts files on the list.
62
- *
63
- * Folders are always on top.
64
- */
65
- filesSortFunction(a: IFile, b: IFile): number;
66
- handleFileEvent(event: BroadcastEvent): void;
67
- handleFileCreated(file: IFile): void;
68
- handleFileDeleted(event: DeletedBroadcastEvent): void;
69
- removeFileFromList(key: string): void;
70
- handleFilePatch(event: FilePatchBroadcastEvent): void;
71
41
  protected cancelCreateProjectDialog(): void;
72
42
  protected cancelCreateFolderDialog(): void;
73
43
  protected cancelImportDialog(): void;
@@ -88,6 +58,7 @@ export declare class FilesPage {
88
58
  protected itemActivateHandler(item: IFile): void;
89
59
  protected handleTableRender(): void;
90
60
  protected handleTableSelect(item: string | string[]): void;
61
+ protected handleTableScrollEnd(): void;
91
62
  openProject(key: string): void;
92
63
  openDataSchema(key: string): void;
93
64
  openFolder(folder: IFile): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Files.page.d.ts","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Files.page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Files.page.d.ts","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Files.page.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ import { html, nothing } from "lit";
3
3
  import { join } from "lit/directives/join.js";
4
4
  import { map } from "lit/directives/map.js";
5
5
  import { until } from 'lit/directives/until.js';
6
- import { Patch } from "@api-client/json";
7
6
  import { DataTable } from "../../../ui/table/DataTable.js";
8
7
  import { NavigationEvents } from "../../../events/NavigationEvents.js";
9
8
  import { navigate } from "../../../lib/route.js";
@@ -11,6 +10,8 @@ import { DataImportProcessor } from "../../../http-client/store/DataImportProces
11
10
  import { SnackNotifications } from "../../../ui/notification/SnackNotifications.js";
12
11
  import UserCache from '../../../store/UserCache.js';
13
12
  import AppInfo from '../AppInfo.js';
13
+ import { fileIcon } from "../../../elements/store/FilesLib.js";
14
+ import { FileSystem } from "../../../store/FileSystem.js";
14
15
  import '@github/relative-time-element';
15
16
  import '../../../define/ui/ui-list.js';
16
17
  import '../../../define/ui/ui-list-item.js';
@@ -21,7 +22,7 @@ import '../../../define/ui/ui-button.js';
21
22
  import '../../../define/ui/ui-divider.js';
22
23
  import '../../../define/ui/ui-text-field.js';
23
24
  import '../../../define/dialog/rename-dialog.js';
24
- import '../../../define/files/share-file.js';
25
+ import '../../../define/store/share-file.js';
25
26
  var ImportState;
26
27
  (function (ImportState) {
27
28
  ImportState[ImportState["Analyzing"] = 0] = "Analyzing";
@@ -36,12 +37,8 @@ var ImportState;
36
37
  export class FilesPage {
37
38
  constructor(screen) {
38
39
  this.screen = screen;
39
- /**
40
- * The list of files to render.
41
- * Do not overwrite this property or when you must then update the DataTable's `items` as well.
42
- */
43
- this.files = [];
44
- this.dt = new DataTable(() => this.files, { ariaLabel: 'Your files', active: true, selection: 'single' });
40
+ this.fs = new FileSystem();
41
+ this.dt = new DataTable(() => this.fs.files, { ariaLabel: 'Your files', active: true, selection: 'single' });
45
42
  this.createProjectHandler = this.createProjectHandler.bind(this);
46
43
  this.createFolderHandler = this.createFolderHandler.bind(this);
47
44
  this.createSelectHandler = this.createSelectHandler.bind(this);
@@ -61,119 +58,22 @@ export class FilesPage {
61
58
  this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));
62
59
  this.dt.addEventListener('render', this.handleTableRender.bind(this));
63
60
  this.dt.addEventListener('select', this.handleTableSelect.bind(this));
61
+ this.dt.addEventListener('scrollend', this.handleTableScrollEnd.bind(this));
62
+ this.fs.observe();
63
+ this.fs.addEventListener('change', () => this.screen.render());
64
+ this.fs.addEventListener('error', (e) => {
65
+ const event = e;
66
+ this.errorMessage = event.detail;
67
+ });
68
+ this.fs.addEventListener('querycomplete', () => {
69
+ document.body.dispatchEvent(new Event('querycomplete', { bubbles: true }));
70
+ });
64
71
  }
65
72
  async refresh() {
66
- this.resetList();
67
- this.screen.render();
68
- await this.readFiles();
69
- }
70
- resetList() {
71
- this.files = [];
72
- this.cursor = undefined;
73
- this.breadcrumbs = undefined;
74
- }
75
- async readFiles() {
76
- const { selectedSpace } = this.screen;
77
- if (!selectedSpace) {
78
- return;
79
- }
80
- if (this.readingFiles) {
81
- return;
82
- }
83
- this.readingFiles = true;
84
- const { cursor: filesCursor, folder } = this;
85
- const opts = {
86
- space: selectedSpace,
87
- descending: true,
88
- };
89
- if (filesCursor) {
90
- opts.cursor = filesCursor;
91
- }
92
- if (folder) {
93
- opts.parent = folder;
94
- }
95
- try {
96
- const result = await this.listFiles(opts);
97
- const { items, cursor } = result;
98
- this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));
99
- this.cursor = cursor;
100
- if (folder) {
101
- const br = await this.screen.bindings.store.files.breadcrumbs(folder);
102
- this.breadcrumbs = br.items.reverse();
103
- }
104
- }
105
- finally {
106
- this.readingFiles = false;
107
- }
108
- this.screen.render();
109
- }
110
- async listFiles(opts) {
111
- return this.screen.bindings.store.files.list(opts);
112
- }
113
- /**
114
- * Sorts files on the list.
115
- *
116
- * Folders are always on top.
117
- */
118
- filesSortFunction(a, b) {
119
- if (a.kind !== b.kind) {
120
- if (a.kind === FolderKind) {
121
- return -1;
122
- }
123
- return 1;
124
- }
125
- if (a.kind === b.kind && a.kind === FolderKind) {
126
- return (a.info.name || '').localeCompare(b.info.name || '');
127
- }
128
- return b.lastModified.time - a.lastModified.time;
129
- }
130
- handleFileEvent(event) {
131
- const typed = event;
132
- if (typed.parent && typed.parent !== this.folder) {
133
- return;
134
- }
135
- if (typed.alt !== 'meta') {
136
- return;
137
- }
138
- switch (event.operation) {
139
- case 'created':
140
- this.handleFileCreated(typed.data);
141
- break;
142
- case 'deleted':
143
- this.handleFileDeleted(typed);
144
- break;
145
- case 'patch':
146
- this.handleFilePatch(typed);
147
- break;
148
- default:
149
- }
150
- }
151
- handleFileCreated(file) {
152
- this.files.push(file);
153
- this.files.sort(this.filesSortFunction.bind(this));
154
- this.screen.render();
155
- }
156
- handleFileDeleted(event) {
157
- this.removeFileFromList(event.key);
158
- }
159
- removeFileFromList(key) {
160
- const index = this.files.findIndex(i => i.key === key);
161
- if (index === -1) {
162
- return;
163
- }
164
- this.files.splice(index, 1);
165
- this.screen.render();
166
- }
167
- handleFilePatch(event) {
168
- const { data, key } = event;
169
- const index = this.files.findIndex(i => i.key === key);
170
- if (index === -1) {
171
- return;
172
- }
173
- const file = this.files[index];
174
- const result = Patch.apply(file, data.patch);
175
- this.files[index] = result.doc;
73
+ this.fs.resetList();
176
74
  this.screen.render();
75
+ await this.fs.queryPage();
76
+ await this.fs.queryBreadcrumbs();
177
77
  }
178
78
  cancelCreateProjectDialog() {
179
79
  this.screen.closeDialog('createProjectDialog');
@@ -273,8 +173,8 @@ export class FilesPage {
273
173
  throw new Error('You need to select a space first');
274
174
  }
275
175
  const opts = {};
276
- if (this.folder) {
277
- opts.parent = this.folder;
176
+ if (this.fs.parent) {
177
+ opts.parent = this.fs.parent;
278
178
  }
279
179
  const result = await this.screen.bindings.store.files.add(file, opts);
280
180
  if (media) {
@@ -359,7 +259,7 @@ export class FilesPage {
359
259
  this.importState = ImportState.Importing;
360
260
  this.screen.render();
361
261
  try {
362
- await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.folder);
262
+ await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.fs.parent);
363
263
  this.importState = ImportState.Done;
364
264
  this.screen.render();
365
265
  }
@@ -401,8 +301,11 @@ export class FilesPage {
401
301
  this.selectedItem = item;
402
302
  this.screen.render();
403
303
  }
304
+ handleTableScrollEnd() {
305
+ this.fs.debounceQuery();
306
+ }
404
307
  openProject(key) {
405
- const file = this.files.find(i => i.key === key);
308
+ const file = this.fs.files.find(i => i.key === key);
406
309
  if (!file) {
407
310
  throw new Error(`Invalid state: file not found`);
408
311
  }
@@ -483,7 +386,7 @@ export class FilesPage {
483
386
  await files.writeFile(path, data, { dispose: true });
484
387
  }
485
388
  renameFile(key) {
486
- const file = this.files.find(i => i.key === key);
389
+ const file = this.fs.files.find(i => i.key === key);
487
390
  if (!file) {
488
391
  return;
489
392
  }
@@ -503,7 +406,7 @@ export class FilesPage {
503
406
  });
504
407
  }
505
408
  shareFile(key) {
506
- const file = this.files.find(i => i.key === key);
409
+ const file = this.fs.files.find(i => i.key === key);
507
410
  if (!file) {
508
411
  return;
509
412
  }
@@ -514,7 +417,7 @@ export class FilesPage {
514
417
  dialog.modal = true;
515
418
  document.body.appendChild(dialog);
516
419
  dialog.open = true;
517
- dialog.addEventListener('closed', () => {
420
+ dialog.addEventListener('close', () => {
518
421
  document.body.removeChild(dialog);
519
422
  });
520
423
  }
@@ -554,7 +457,7 @@ export class FilesPage {
554
457
  if (!selectedItem) {
555
458
  return nothing;
556
459
  }
557
- const file = this.files.find(i => i.key === selectedItem);
460
+ const file = this.fs.files.find(i => i.key === selectedItem);
558
461
  if (!file) {
559
462
  return nothing;
560
463
  }
@@ -649,7 +552,7 @@ export class FilesPage {
649
552
  `;
650
553
  }
651
554
  renderBreadcrumbs() {
652
- const { breadcrumbs = [] } = this;
555
+ const { breadcrumbs = [] } = this.fs;
653
556
  if (!breadcrumbs.length) {
654
557
  return html ``;
655
558
  }
@@ -777,22 +680,10 @@ export class FilesPage {
777
680
  `;
778
681
  }
779
682
  nameCell(item) {
780
- let icon;
781
- switch (item.kind) {
782
- case DataFileKind:
783
- icon = 'schema';
784
- break;
785
- case FolderKind:
786
- icon = 'folder';
787
- break;
788
- case ProjectKind:
789
- icon = 'collectionsBookmark';
790
- break;
791
- default:
792
- }
683
+ const icon = fileIcon(item);
793
684
  return this.dt.cell(html `
794
685
  ${icon ? html `<ui-icon icon="${icon}" class="cell-icon"></ui-icon>` : nothing}
795
- ${item.info.name || 'Unnamed project'}
686
+ ${item.info.name || 'Unnamed file'}
796
687
  `, { class: 'name-cell', data: { kind: item.kind } });
797
688
  }
798
689
  ownerCell(item) {