@api-client/ui 0.0.4 → 0.0.5
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/dist/amf/lib/AmfParameters.js +0 -4
- package/dist/amf/lib/AmfParameters.js.map +1 -1
- package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
- package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
- package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
- package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
- package/dist/amf/store/AmfGraphStore.js +0 -2
- package/dist/amf/store/AmfGraphStore.js.map +1 -1
- package/dist/amf/store/AmfStore.js +0 -7
- package/dist/amf/store/AmfStore.js.map +1 -1
- package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
- package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/base/PlatformBindings.js +6 -10
- package/dist/bindings/base/PlatformBindings.js.map +1 -1
- package/dist/bindings/base/ProxyBindings.js +9 -6
- package/dist/bindings/base/ProxyBindings.js.map +1 -1
- package/dist/bindings/base/SharedWorkerThread.js +4 -1
- package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
- package/dist/bindings/base/StoreBindings.js +162 -170
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/bindings/web/WebConfigurationBindings.js +22 -24
- package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
- package/dist/bindings/web/WebFileBindings.js +7 -4
- package/dist/bindings/web/WebFileBindings.js.map +1 -1
- package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
- package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/web/WebNavigationBindings.js +4 -1
- package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
- package/dist/bindings/web/WebProxyBindings.js +5 -6
- package/dist/bindings/web/WebProxyBindings.js.map +1 -1
- package/dist/bindings/web/WebStoreBindings.js +39 -44
- package/dist/bindings/web/WebStoreBindings.js.map +1 -1
- package/dist/contextual-menu/ContextualMenu.js +10 -19
- package/dist/contextual-menu/ContextualMenu.js.map +1 -1
- package/dist/contextual-menu/ContextualMenuElement.js +4 -32
- package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
- package/dist/contextual-menu/MenuItem.js +0 -12
- package/dist/contextual-menu/MenuItem.js.map +1 -1
- package/dist/define/amf/api-annotation-document.js +1 -1
- package/dist/define/amf/api-annotation-document.js.map +1 -1
- package/dist/define/amf/api-authorization-editor.js +1 -1
- package/dist/define/amf/api-authorization-editor.js.map +1 -1
- package/dist/define/amf/api-channel-document.js +1 -1
- package/dist/define/amf/api-channel-document.js.map +1 -1
- package/dist/define/amf/api-documentation-document.js +1 -1
- package/dist/define/amf/api-documentation-document.js.map +1 -1
- package/dist/define/amf/api-documentation.js +1 -1
- package/dist/define/amf/api-documentation.js.map +1 -1
- package/dist/define/amf/api-navigation.js +1 -1
- package/dist/define/amf/api-navigation.js.map +1 -1
- package/dist/define/amf/api-operation-document.js +1 -1
- package/dist/define/amf/api-operation-document.js.map +1 -1
- package/dist/define/amf/api-parameter-document.js +1 -1
- package/dist/define/amf/api-parameter-document.js.map +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
- package/dist/define/amf/api-payload-document.js +1 -1
- package/dist/define/amf/api-payload-document.js.map +1 -1
- package/dist/define/amf/api-request-document.js +1 -1
- package/dist/define/amf/api-request-document.js.map +1 -1
- package/dist/define/amf/api-request-editor.js +1 -1
- package/dist/define/amf/api-request-editor.js.map +1 -1
- package/dist/define/amf/api-request.js +1 -1
- package/dist/define/amf/api-request.js.map +1 -1
- package/dist/define/amf/api-resource-document.js +1 -1
- package/dist/define/amf/api-resource-document.js.map +1 -1
- package/dist/define/amf/api-response-document.js +1 -1
- package/dist/define/amf/api-response-document.js.map +1 -1
- package/dist/define/amf/api-schema-document.js +1 -1
- package/dist/define/amf/api-schema-document.js.map +1 -1
- package/dist/define/amf/api-security-document.js +1 -1
- package/dist/define/amf/api-security-document.js.map +1 -1
- package/dist/define/amf/api-security-requirement-document.js +1 -1
- package/dist/define/amf/api-security-requirement-document.js.map +1 -1
- package/dist/define/amf/api-server-picker.js +1 -1
- package/dist/define/amf/api-server-picker.js.map +1 -1
- package/dist/define/amf/api-summary.js +1 -1
- package/dist/define/amf/api-summary.js.map +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
- package/dist/define/authorization/apikey-authorization.js +1 -1
- package/dist/define/authorization/apikey-authorization.js.map +1 -1
- package/dist/define/authorization/basic-authorization.js +1 -1
- package/dist/define/authorization/basic-authorization.js.map +1 -1
- package/dist/define/authorization/bearer-authorization.js +1 -1
- package/dist/define/authorization/bearer-authorization.js.map +1 -1
- package/dist/define/authorization/cc-authorization.js +1 -1
- package/dist/define/authorization/cc-authorization.js.map +1 -1
- package/dist/define/authorization/ntlm-authorization.js +1 -1
- package/dist/define/authorization/ntlm-authorization.js.map +1 -1
- package/dist/define/authorization/oauth2-authorization.js +1 -1
- package/dist/define/authorization/oauth2-authorization.js.map +1 -1
- package/dist/define/authorization/oidc-authorization.js +1 -1
- package/dist/define/authorization/oidc-authorization.js.map +1 -1
- package/dist/define/contextual-menu/contextual-menu.js +1 -1
- package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
- package/dist/define/dialog/rename-dialog.js +1 -1
- package/dist/define/dialog/rename-dialog.js.map +1 -1
- package/dist/define/files/share-file.js +1 -1
- package/dist/define/files/share-file.js.map +1 -1
- package/dist/define/har/har-viewer.js +1 -1
- package/dist/define/har/har-viewer.js.map +1 -1
- package/dist/define/highlight/marked-highlight.js +1 -1
- package/dist/define/highlight/marked-highlight.js.map +1 -1
- package/dist/define/highlight/prism-highlight.js +1 -1
- package/dist/define/highlight/prism-highlight.js.map +1 -1
- package/dist/define/http/http-assertions.js +1 -1
- package/dist/define/http/http-assertions.js.map +1 -1
- package/dist/define/http/http-body-editor.js +1 -1
- package/dist/define/http/http-body-editor.js.map +1 -1
- package/dist/define/http/http-body-multipart-editor.js +1 -1
- package/dist/define/http/http-body-multipart-editor.js.map +1 -1
- package/dist/define/http/http-body-text-editor.js +1 -1
- package/dist/define/http/http-body-text-editor.js.map +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
- package/dist/define/http/http-headers-form.js +1 -1
- package/dist/define/http/http-headers-form.js.map +1 -1
- package/dist/define/http/http-log-body.js +1 -1
- package/dist/define/http/http-log-body.js.map +1 -1
- package/dist/define/http/http-log-headers.js +1 -1
- package/dist/define/http/http-log-headers.js.map +1 -1
- package/dist/define/http/http-log-timings.js +1 -1
- package/dist/define/http/http-log-timings.js.map +1 -1
- package/dist/define/http/http-request-config.js +1 -1
- package/dist/define/http/http-request-config.js.map +1 -1
- package/dist/define/http/http-request-editor.js +1 -1
- package/dist/define/http/http-request-editor.js.map +1 -1
- package/dist/define/http/http-request-log.js +1 -1
- package/dist/define/http/http-request-log.js.map +1 -1
- package/dist/define/http/http-snippets.js +1 -1
- package/dist/define/http/http-snippets.js.map +1 -1
- package/dist/define/http/http-url-input.js +1 -1
- package/dist/define/http/http-url-input.js.map +1 -1
- package/dist/define/http/http-url-params-form.js +1 -1
- package/dist/define/http/http-url-params-form.js.map +1 -1
- package/dist/define/http-project/http-project-request-history.js +1 -1
- package/dist/define/http-project/http-project-request-history.js.map +1 -1
- package/dist/define/http-project/http-project-request.js +2 -2
- package/dist/define/http-project/http-project-request.js.map +1 -1
- package/dist/define/http-project/project-navigation.js +1 -1
- package/dist/define/http-project/project-navigation.js.map +1 -1
- package/dist/define/http-project/project-run-report.js +1 -1
- package/dist/define/http-project/project-run-report.js.map +1 -1
- package/dist/define/http-project/project-runner.js +2 -2
- package/dist/define/http-project/project-runner.js.map +1 -1
- package/dist/define/layout/split-view.js +1 -1
- package/dist/define/layout/split-view.js.map +1 -1
- package/dist/define/schema-design/schema-design-navigation.js +1 -1
- package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
- package/dist/define/ui/ui-button.js +1 -1
- package/dist/define/ui/ui-button.js.map +1 -1
- package/dist/define/ui/ui-chip.js +1 -1
- package/dist/define/ui/ui-chip.js.map +1 -1
- package/dist/define/ui/ui-collapse.js +1 -1
- package/dist/define/ui/ui-collapse.js.map +1 -1
- package/dist/define/ui/ui-dialog.js +1 -1
- package/dist/define/ui/ui-dialog.js.map +1 -1
- package/dist/define/ui/ui-dropdown-list.js +1 -1
- package/dist/define/ui/ui-dropdown-list.js.map +1 -1
- package/dist/define/ui/ui-icon-button.js +1 -1
- package/dist/define/ui/ui-icon-button.js.map +1 -1
- package/dist/define/ui/ui-icon.js +1 -1
- package/dist/define/ui/ui-icon.js.map +1 -1
- package/dist/define/ui/ui-list-item.js +1 -1
- package/dist/define/ui/ui-list-item.js.map +1 -1
- package/dist/define/ui/ui-list.js +1 -1
- package/dist/define/ui/ui-list.js.map +1 -1
- package/dist/define/ui/ui-listbox.js +1 -1
- package/dist/define/ui/ui-listbox.js.map +1 -1
- package/dist/define/ui/ui-progress.js +1 -1
- package/dist/define/ui/ui-progress.js.map +1 -1
- package/dist/define/ui/ui-segmented-button-set.js +1 -1
- package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
- package/dist/define/ui/ui-segmented-button.js +1 -1
- package/dist/define/ui/ui-segmented-button.js.map +1 -1
- package/dist/define/ui/ui-snackbar.js +1 -1
- package/dist/define/ui/ui-snackbar.js.map +1 -1
- package/dist/define/ui/ui-tab.js +1 -1
- package/dist/define/ui/ui-tab.js.map +1 -1
- package/dist/define/ui/ui-tabs.js +1 -1
- package/dist/define/ui/ui-tabs.js.map +1 -1
- package/dist/directives/data-attr.js +0 -1
- package/dist/directives/data-attr.js.map +1 -1
- package/dist/elements/ApiElement.js +0 -7
- package/dist/elements/ApiElement.js.map +1 -1
- package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
- package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
- package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentation.element.js +0 -91
- package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationBase.js +0 -9
- package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiNavigation.element.js +0 -97
- package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
- package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
- package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
- package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequest.element.js +0 -78
- package/dist/elements/amf/ApiRequest.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
- package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
- package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
- package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
- package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
- package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
- package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiServerPicker.element.js +2 -65
- package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
- package/dist/elements/amf/ApiSummary.element.js +0 -26
- package/dist/elements/amf/ApiSummary.element.js.map +1 -1
- package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
- package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBasic.js +0 -4
- package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBearer.js +0 -4
- package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
- package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOidc.js +0 -4
- package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
- package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
- package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
- package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
- package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
- package/dist/elements/authorization/OAuth2Authorize.js +0 -14
- package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
- package/dist/elements/authorization/OidcAuthorize.js +0 -14
- package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/Authorization.js +18 -32
- package/dist/elements/authorization/ui/Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
- package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
- package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
- package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
- package/dist/elements/code/HttpSnippets.js +9 -8
- package/dist/elements/code/HttpSnippets.js.map +1 -1
- package/dist/elements/dialog/ConfirmDelete.js +0 -12
- package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
- package/dist/elements/dialog/Rename.js +0 -6
- package/dist/elements/dialog/Rename.js.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.js +8 -11
- package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
- package/dist/elements/environment/ServerEditor.js +7 -45
- package/dist/elements/environment/ServerEditor.js.map +1 -1
- package/dist/elements/environment/VariablesEditor.js +7 -12
- package/dist/elements/environment/VariablesEditor.js.map +1 -1
- package/dist/elements/files/ShareFile.js +19 -57
- package/dist/elements/files/ShareFile.js.map +1 -1
- package/dist/elements/har/HarViewer.js +6 -7
- package/dist/elements/har/HarViewer.js.map +1 -1
- package/dist/elements/highlight/MarkedHighlight.js +4 -56
- package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlight.js +9 -18
- package/dist/elements/highlight/PrismHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlighter.js +4 -6
- package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
- package/dist/elements/http/BodyEditor.js +21 -33
- package/dist/elements/http/BodyEditor.js.map +1 -1
- package/dist/elements/http/BodyMultipartEditor.js +17 -18
- package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
- package/dist/elements/http/BodyTextEditor.js +2 -15
- package/dist/elements/http/BodyTextEditor.js.map +1 -1
- package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
- package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/dist/elements/http/HeadersForm.js +16 -17
- package/dist/elements/http/HeadersForm.js.map +1 -1
- package/dist/elements/http/HttpAssertions.js +8 -6
- package/dist/elements/http/HttpAssertions.js.map +1 -1
- package/dist/elements/http/LogBody.js +10 -21
- package/dist/elements/http/LogBody.js.map +1 -1
- package/dist/elements/http/LogHeaders.js +4 -23
- package/dist/elements/http/LogHeaders.js.map +1 -1
- package/dist/elements/http/LogTimings.js +11 -13
- package/dist/elements/http/LogTimings.js.map +1 -1
- package/dist/elements/http/RequestConfigElement.js +7 -4
- package/dist/elements/http/RequestConfigElement.js.map +1 -1
- package/dist/elements/http/RequestEditor.js +54 -88
- package/dist/elements/http/RequestEditor.js.map +1 -1
- package/dist/elements/http/RequestLog.js +9 -14
- package/dist/elements/http/RequestLog.js.map +1 -1
- package/dist/elements/http/UrlInput.js +15 -25
- package/dist/elements/http/UrlInput.js.map +1 -1
- package/dist/elements/http/UrlParamsForm.js +16 -13
- package/dist/elements/http/UrlParamsForm.js.map +1 -1
- package/dist/elements/layout/LayoutManager.js +16 -24
- package/dist/elements/layout/LayoutManager.js.map +1 -1
- package/dist/elements/layout/LayoutPanelElement.js +17 -23
- package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
- package/dist/elements/layout/SplitItem.js +4 -12
- package/dist/elements/layout/SplitItem.js.map +1 -1
- package/dist/elements/layout/SplitLayout.js +18 -24
- package/dist/elements/layout/SplitLayout.js.map +1 -1
- package/dist/elements/layout/SplitPanel.js +10 -16
- package/dist/elements/layout/SplitPanel.js.map +1 -1
- package/dist/elements/layout/SplitView.js +17 -26
- package/dist/elements/layout/SplitView.js.map +1 -1
- package/dist/elements/navigation/AppNavigationElement.js +8 -47
- package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
- package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
- package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
- package/dist/elements/project/HttpProjectRequest.js +0 -38
- package/dist/elements/project/HttpProjectRequest.js.map +1 -1
- package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
- package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
- package/dist/elements/project/ProjectNavigation.js +0 -4
- package/dist/elements/project/ProjectNavigation.js.map +1 -1
- package/dist/elements/project/ProjectRunReport.js +4 -15
- package/dist/elements/project/ProjectRunReport.js.map +1 -1
- package/dist/elements/project/ProjectRunner.js +2 -47
- package/dist/elements/project/ProjectRunner.js.map +1 -1
- package/dist/elements/schema-design/AssociationFormElement.js +0 -13
- package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
- package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
- package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
- package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
- package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
- package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
- package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
- package/dist/elements/schema-design/EntityFormElement.js +0 -18
- package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
- package/dist/elements/schema-design/PropertyFormElement.js +0 -12
- package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
- package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
- package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
- package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
- package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
- package/dist/elements/user/UserAvatarElement.js +0 -9
- package/dist/elements/user/UserAvatarElement.js.map +1 -1
- package/dist/events/http-client/models/CertificatesEvents.js +2 -2
- package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
- package/dist/http-client/idb/Base.js +5 -10
- package/dist/http-client/idb/Base.js.map +1 -1
- package/dist/http-client/idb/LegacyMockedStore.js +0 -1
- package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
- package/dist/http-client/idb/MockedStore.js +3 -1
- package/dist/http-client/idb/MockedStore.js.map +1 -1
- package/dist/http-client/store/DataImportProcessor.js +0 -3
- package/dist/http-client/store/DataImportProcessor.js.map +1 -1
- package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
- package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
- package/dist/http-client/store/IdbThread.js +23 -20
- package/dist/http-client/store/IdbThread.js.map +1 -1
- package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
- package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
- package/dist/http-client/store/idb/IdbStore.js +0 -2
- package/dist/http-client/store/idb/IdbStore.js.map +1 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
- package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
- package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
- package/dist/lib/chart/HttpHistoryChart.js +7 -8
- package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
- package/dist/mixins/FileDropMixin.js +0 -1
- package/dist/mixins/FileDropMixin.js.map +1 -1
- package/dist/mixins/RenderableMixin.js +11 -15
- package/dist/mixins/RenderableMixin.js.map +1 -1
- package/dist/pages/ApplicationScreen.js +34 -55
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +11 -20
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +4 -6
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/StoreConfig.screen.js +21 -37
- package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
- package/dist/pages/api-client/Telemetry.screen.js +1 -2
- package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +6 -27
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Settings.page.js +2 -4
- package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
- package/dist/pages/api-client/pages/Trash.page.js +2 -13
- package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.js +13 -13
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/pages/http-project/HttpProject.screen.js +25 -35
- package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
- package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
- package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
- package/dist/store/HttpStore.js +0 -3
- package/dist/store/HttpStore.js.map +1 -1
- package/dist/store/UserCache.js +5 -5
- package/dist/store/UserCache.js.map +1 -1
- package/dist/ui/UiElement.js +4 -5
- package/dist/ui/UiElement.js.map +1 -1
- package/dist/ui/button/SegmentedButton.js +9 -11
- package/dist/ui/button/SegmentedButton.js.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.js +6 -7
- package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
- package/dist/ui/button/UiButton.js +17 -39
- package/dist/ui/button/UiButton.js.map +1 -1
- package/dist/ui/button/UiIconButton.js +9 -35
- package/dist/ui/button/UiIconButton.js.map +1 -1
- package/dist/ui/chip/UiChip.js +9 -49
- package/dist/ui/chip/UiChip.js.map +1 -1
- package/dist/ui/collapse/UiCollapse.js +15 -20
- package/dist/ui/collapse/UiCollapse.js.map +1 -1
- package/dist/ui/controllers/ActionController.js +143 -144
- package/dist/ui/controllers/ActionController.js.map +1 -1
- package/dist/ui/controllers/RadioSelectionController.js +0 -1
- package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
- package/dist/ui/date/DateTime.js +3 -3
- package/dist/ui/date/DateTime.js.map +1 -1
- package/dist/ui/dialog/UiDialog.js +14 -38
- package/dist/ui/dialog/UiDialog.js.map +1 -1
- package/dist/ui/effects/ripple.js +20 -18
- package/dist/ui/effects/ripple.js.map +1 -1
- package/dist/ui/effects/rippleDirective.js +6 -7
- package/dist/ui/effects/rippleDirective.js.map +1 -1
- package/dist/ui/icons/UiIcon.js +4 -3
- package/dist/ui/icons/UiIcon.js.map +1 -1
- package/dist/ui/input/CheckboxElement.js +12 -10
- package/dist/ui/input/CheckboxElement.js.map +1 -1
- package/dist/ui/input/CheckedElement.js +2 -13
- package/dist/ui/input/CheckedElement.js.map +1 -1
- package/dist/ui/input/Input.js +169 -234
- package/dist/ui/input/Input.js.map +1 -1
- package/dist/ui/input/RadioElement.js +13 -11
- package/dist/ui/input/RadioElement.js.map +1 -1
- package/dist/ui/input/SwitchElement.js +0 -18
- package/dist/ui/input/SwitchElement.js.map +1 -1
- package/dist/ui/input/TextAreaElement.js +0 -15
- package/dist/ui/input/TextAreaElement.js.map +1 -1
- package/dist/ui/list/DividerElement.js +5 -10
- package/dist/ui/list/DividerElement.js.map +1 -1
- package/dist/ui/list/UiDropdownList.js +7 -48
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.js +3 -15
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/list/UiListItem.js +4 -17
- package/dist/ui/list/UiListItem.js.map +1 -1
- package/dist/ui/list/UiListbox.js +0 -1
- package/dist/ui/list/UiListbox.js.map +1 -1
- package/dist/ui/notification/SnackNotifications.js +1 -2
- package/dist/ui/notification/SnackNotifications.js.map +1 -1
- package/dist/ui/notification/Snackbar.js +27 -51
- package/dist/ui/notification/Snackbar.js.map +1 -1
- package/dist/ui/progress/Range.js +24 -23
- package/dist/ui/progress/Range.js.map +1 -1
- package/dist/ui/progress/UiProgress.js +0 -11
- package/dist/ui/progress/UiProgress.js.map +1 -1
- package/dist/ui/table/DataTable.js +7 -12
- package/dist/ui/table/DataTable.js.map +1 -1
- package/dist/ui/tabs/UiTab.js +24 -25
- package/dist/ui/tabs/UiTab.js.map +1 -1
- package/dist/ui/tabs/UiTabs.js +21 -35
- package/dist/ui/tabs/UiTabs.js.map +1 -1
- package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
- package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
- package/dist/visualization/lib/AssociationAnchors.js +16 -28
- package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
- package/dist/visualization/lib/Point.js +0 -2
- package/dist/visualization/lib/Point.js.map +1 -1
- package/dist/visualization/lib/SelectionManager.js +10 -11
- package/dist/visualization/lib/SelectionManager.js.map +1 -1
- package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
- package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
- package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
- package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
- package/dist/visualization/lib/WorkspaceEdges.js +17 -19
- package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
- package/dist/visualization/lib/WorkspaceGestures.js +0 -3
- package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
- package/dist/visualization/lib/WorkspaceSizing.js +4 -6
- package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
- package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
- package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
- package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
- package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
- package/dist/visualization/lib/tips/TipArtist.js +0 -3
- package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
- package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
- package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
- package/package.json +3 -2
- package/tsconfig.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Files.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Files.page.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n IFile, HttpProject, Project, Folder, ProjectKind, FolderKind, \n EventUtils, DataNamespace, DataFile, DataFileKind, \n FileAddOptions, FileBreadcrumb, ContextSpaceListOptions, \n BroadcastEvent, BroadcastFileData, \n FileMetaCreatedBroadcastEvent,\n DeletedBroadcastEvent,\n FilePatchBroadcastEvent,\n ContextListResult,\n ICapabilities,\n} from \"@api-client/core/build/browser.js\";\nimport { html, nothing, TemplateResult } from \"lit\";\nimport { join } from \"lit/directives/join.js\";\nimport { map } from \"lit/directives/map.js\";\nimport { until } from 'lit/directives/until.js';\nimport { Patch } from \"@api-client/json\";\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport { DataTable } from \"../../../ui/table/DataTable.js\";\nimport { NavigationEvents } from \"../../../events/NavigationEvents.js\";\nimport { navigate } from \"../../../lib/route.js\";\nimport { DataImportProcessor } from \"../../../http-client/store/DataImportProcessor.js\";\nimport { SnackNotifications } from \"../../../ui/notification/SnackNotifications.js\";\nimport { UiDialogClosingReason } from \"../../../ui/dialog/UiDialog.js\";\nimport { FileBindings } from \"../../../bindings/base/FileBindings.js\";\nimport { IconType } from \"../../../ui/icons/Icons.js\";\nimport UserCache from '../../../store/UserCache.js';\nimport AppInfo from '../AppInfo.js';\nimport '@github/relative-time-element';\nimport '../../../define/ui/ui-list.js';\nimport '../../../define/ui/ui-list-item.js';\nimport '../../../define/ui/ui-dropdown-list.js';\nimport '../../../define/ui/ui-icon.js';\nimport '../../../define/ui/ui-icon-button.js';\nimport '../../../define/ui/ui-button.js';\nimport '../../../define/ui/ui-divider.js';\nimport '../../../define/dialog/rename-dialog.js';\nimport '../../../define/files/share-file.js';\n\nenum ImportState {\n Analyzing,\n Analyzed,\n Importing,\n Done,\n Error\n}\n\n/**\n * A class that specializes in rendering the list of files in HTTP Client.\n */\nexport class FilesPage {\n\n /**\n * The list of files to render.\n * Do not overwrite this property or when you must then update the DataTable's `items` as well.\n */\n files: IFile[] = [];\n\n /**\n * The pagination cursor for files.\n * As long there's a cursor, there are more files to request.\n */\n cursor?: string;\n\n /**\n * The key of the currently rendered folder.\n */\n folder?: string;\n\n breadcrumbs?: FileBreadcrumb[];\n\n dt = new DataTable(() => this.files, { ariaLabel: 'Your files', active: true, selection: 'single' });\n\n importProcessor?: DataImportProcessor;\n\n importState?: ImportState;\n\n /**\n * Whether the UI is reading files \n */\n readingFiles?: boolean;\n\n /**\n * A selected in the table item.\n */\n selectedItem?: string;\n \n constructor(protected screen: ApiClientScreen) {\n this.createProjectHandler = this.createProjectHandler.bind(this);\n this.createFolderHandler = this.createFolderHandler.bind(this);\n this.createSelectHandler = this.createSelectHandler.bind(this);\n this.pageOptionsSelectHandler = this.pageOptionsSelectHandler.bind(this);\n this.importHandler = this.importHandler.bind(this);\n this.cancelImportDialog = this.cancelImportDialog.bind(this);\n this.cancelCreateProjectDialog = this.cancelCreateProjectDialog.bind(this);\n this.cancelCreateFolderDialog = this.cancelCreateFolderDialog.bind(this);\n this.handleFileOptionSelect = this.handleFileOptionSelect.bind(this);\n this.cancelCreateSchemaDialog = this.cancelCreateSchemaDialog.bind(this);\n this.createSchemaHandler = this.createSchemaHandler.bind(this);\n this.handleSelectedShare = this.handleSelectedShare.bind(this);\n this.handleSelectedTrash = this.handleSelectedTrash.bind(this);\n this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));\n this.dt.addEventListener('header', this.renderTableHeader.bind(this));\n this.dt.addEventListener('item', this.renderTableItem.bind(this));\n this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));\n this.dt.addEventListener('render', this.handleTableRender.bind(this));\n this.dt.addEventListener('select', this.handleTableSelect.bind(this));\n }\n\n async refresh(): Promise<void> {\n this.resetList();\n this.screen.render();\n await this.readFiles();\n }\n\n resetList(): void {\n this.files = [];\n this.cursor = undefined;\n this.breadcrumbs = undefined;\n }\n\n async readFiles(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n return;\n }\n if (this.readingFiles) {\n return;\n }\n this.readingFiles = true;\n const { cursor: filesCursor, folder } = this;\n const opts: ContextSpaceListOptions = {\n space: selectedSpace,\n descending: true,\n };\n if (filesCursor) {\n opts.cursor = filesCursor;\n }\n if (folder) {\n opts.parent = folder;\n }\n try {\n const result = await this.listFiles(opts);\n const { items, cursor } = result;\n this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));\n this.cursor = cursor;\n if (folder) {\n const br = await this.screen.bindings.store.files.breadcrumbs(folder);\n this.breadcrumbs = br.items.reverse();\n }\n } finally {\n this.readingFiles = false;\n }\n this.screen.render();\n }\n\n protected async listFiles(opts: ContextSpaceListOptions): Promise<ContextListResult<IFile>> {\n return this.screen.bindings.store.files.list(opts);\n }\n\n /**\n * Sorts files on the list.\n * \n * Folders are always on top.\n */\n filesSortFunction(a: IFile, b:IFile): number {\n if (a.kind !== b.kind) {\n if (a.kind === FolderKind) {\n return -1;\n }\n return 1;\n }\n if (a.kind === b.kind && a.kind === FolderKind) {\n return (a.info.name || '').localeCompare(b.info.name || '');\n }\n return b.lastModified.time - a.lastModified.time;\n }\n\n handleFileEvent(event: BroadcastEvent): void {\n const typed = event as BroadcastEvent & BroadcastFileData;\n if (typed.parent && typed.parent !== this.folder) {\n return;\n }\n if (typed.alt !== 'meta') {\n return;\n }\n switch (event.operation) {\n case 'created': this.handleFileCreated((typed as FileMetaCreatedBroadcastEvent).data); break;\n case 'deleted': this.handleFileDeleted(typed as DeletedBroadcastEvent); break;\n case 'patch': this.handleFilePatch(typed as FilePatchBroadcastEvent); break;\n default:\n }\n }\n\n handleFileCreated(file: IFile): void {\n this.files.push(file);\n this.files.sort(this.filesSortFunction.bind(this));\n this.screen.render();\n }\n\n handleFileDeleted(event: DeletedBroadcastEvent): void {\n this.removeFileFromList(event.key);\n }\n\n removeFileFromList(key: string): void {\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.files.splice(index, 1);\n this.screen.render();\n }\n\n handleFilePatch(event: FilePatchBroadcastEvent): void {\n const { data, key } = event;\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n const file = this.files[index];\n const result = Patch.apply(file, data.patch);\n this.files[index] = result.doc as IFile;\n this.screen.render();\n }\n\n protected cancelCreateProjectDialog(): void {\n this.screen.closeDialog('createProjectDialog');\n }\n\n protected cancelCreateFolderDialog(): void {\n this.screen.closeDialog('createFolderDialog');\n }\n\n protected cancelImportDialog(): void {\n this.screen.closeDialog('importProjectDialog');\n }\n\n protected cancelCreateSchemaDialog(): void {\n this.screen.closeDialog('createSchemaDialog');\n }\n\n protected createProjectHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addProject(value);\n }\n\n protected createFolderHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addFolder(value);\n }\n\n protected createSchemaHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addSchema(value);\n }\n\n protected async addProject(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = HttpProject.fromName(name);\n const meta = Project.fromProject(media, selectedSpace);\n await this.addFile(meta.toJSON(), media.toJSON());\n }\n\n protected async addFolder(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const space = Folder.fromName(name, selectedSpace);\n await this.addFile(space.toJSON());\n }\n\n protected async addSchema(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = DataNamespace.fromName(name);\n const file = DataFile.fromDataNamespace(media, selectedSpace);\n await this.addFile(file.toJSON(), media.toJSON());\n }\n\n protected async addFile(file: IFile, media?: unknown): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const opts: FileAddOptions = {};\n if (this.folder) {\n opts.parent = this.folder;\n }\n const result = await this.screen.bindings.store.files.add(file, opts);\n if (media) {\n await this.screen.bindings.store.media.add(result.key, media, 'application/json');\n }\n }\n\n protected pageOptionsSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'import-project') {\n this.screen.openDialog('importProjectDialog');\n } else if (option === 'refresh-list') {\n this.refresh();\n }\n }\n\n protected createSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'folder') {\n this.screen.openDialog('createFolderDialog');\n } else if (option === 'project') {\n this.screen.openDialog('createProjectDialog');\n } else if (option === 'schema') {\n this.screen.openDialog('createSchemaDialog');\n }\n }\n\n protected importHandler(e: SubmitEvent): void {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n this.cancelImportDialog();\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n this.cancelImportDialog();\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'import') {\n this.cancelImportDialog();\n return;\n }\n const { files } = input;\n if (!files || !files[0]) {\n this.cancelImportDialog();\n return;\n }\n this.processImportFile(files[0]);\n }\n\n protected async processImportFile(file: File): Promise<void> {\n this.importState = ImportState.Analyzing;\n this.screen.render();\n\n const processor = new DataImportProcessor();\n const analysis = await processor.fromFile(file);\n this.importState = ImportState.Analyzed;\n this.screen.render();\n\n this.importProcessor = processor;\n\n if (!analysis.error) {\n this.continueDataImport();\n }\n }\n\n protected async continueDataImport(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a Folder first');\n }\n const { importProcessor } = this;\n if (!importProcessor) {\n throw new Error('Invalid state. Import processor not activated.');\n }\n this.importState = ImportState.Importing;\n this.screen.render();\n try {\n await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.folder);\n this.importState = ImportState.Done;\n this.screen.render();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n this.importState = ImportState.Error;\n }\n }\n\n protected importDialogCloseHandler(): void {\n if (this.importProcessor) {\n this.importProcessor.abort();\n this.importProcessor = undefined;\n }\n this.importState = undefined;\n }\n\n protected itemActivateHandler(item: IFile): void {\n const { kind } = item;\n if (kind === ProjectKind) {\n this.openProject(item.key);\n } else if (kind === FolderKind) {\n this.openFolder(item);\n } else if (kind === DataFileKind) {\n this.openDataSchema(item.key);\n } else {\n throw new Error(`Unknown activation item: ${kind}`);\n }\n }\n\n protected handleTableRender(): void {\n this.screen.render();\n }\n\n protected handleTableSelect(item: string | string[]): void {\n if (Array.isArray(item)) {\n return;\n }\n this.selectedItem = item;\n this.screen.render();\n }\n\n openProject(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n throw new Error(`Invalid state: file not found`);\n }\n NavigationEvents.App.runHttpProject({\n space: file.space,\n key,\n });\n }\n\n openDataSchema(key: string): void {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('The Folder is not set.');\n }\n NavigationEvents.App.runSchemaDesigner({\n key,\n space: selectedSpace,\n });\n }\n\n async openFolder(folder: IFile): Promise<void> {\n navigate('files', folder.key);\n this.selectedItem = undefined;\n }\n\n protected handleFileOptionSelect(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const list = e.target as HTMLElement;\n const operation = item.dataset.option as string;\n const key = list.dataset.key as string;\n if (!key || !operation) {\n return;\n }\n if (operation === 'delete') {\n this.deleteFile(key);\n } else if (operation === 'save-file') {\n this.saveFile(key);\n } else if (operation === 'rename') {\n this.renameFile(key);\n } else if (operation === 'share') {\n this.shareFile(key);\n }\n }\n\n async deleteFile(key: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Space is not selected.`);\n }\n const trashKey = await this.screen.bindings.store.files.delete(key);\n SnackNotifications.notify('The file was moved to trash.', { \n close: true,\n actionLabel: 'Undo',\n actionCallback: async () => {\n await this.screen.bindings.store.trash.restore(trashKey);\n }\n });\n }\n\n async saveFile(key: string): Promise<void> {\n const files = this.screen.bindings.files as FileBindings;\n const content = await this.screen.bindings.store.media.read(key);\n const queryResult = await files.saveFileDialog({\n excludeAcceptAllOption: true,\n title: 'Save file as...',\n filters: [\n {\n description: 'HTTP Client files',\n accept: {\n 'application/json': ['.json'],\n },\n }\n ],\n });\n if (queryResult.canceled) {\n return;\n }\n const data = JSON.stringify(content);\n const path = queryResult.filePath as string;\n await files.writeFile(path, data, { dispose: true });\n }\n\n protected renameFile(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const name = file.info.name || '';\n const dialog = document.createElement('rename-dialog');\n dialog.name = name;\n dialog.modal = true;\n dialog.open = true;\n document.body.appendChild(dialog);\n dialog.addEventListener('close', async (ev: Event) => {\n document.body.removeChild(dialog);\n const event = ev as CustomEvent<UiDialogClosingReason>;\n const { cancelled, value } = event.detail;\n if (!cancelled && value) {\n this.screen.renameFile(file, value as string);\n }\n });\n }\n\n protected shareFile(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const dialog = document.createElement('share-file');\n dialog.file = file;\n dialog.user = this.screen.user;\n dialog.appInfo = AppInfo;\n dialog.modal = true;\n document.body.appendChild(dialog);\n dialog.open = true;\n dialog.addEventListener('closed', () => {\n document.body.removeChild(dialog);\n });\n }\n\n protected handleSelectedShare(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.shareFile(selectedItem);\n }\n\n protected handleSelectedTrash(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.deleteFile(selectedItem);\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Your files</h2>\n ${this.renderBreadcrumbs()}\n <div class=\"spacer\"></div>\n ${this.renderSelectedToolbar()}\n ${this.renderCreateButton()}\n ${this.renderPageMoreOptions()}\n </div>\n ${this.renderFilesTable()}\n ${this.renderCreateProjectDialog()}\n ${this.renderCreateFolderDialog()}\n ${this.renderImportDialog()}\n ${this.renderCreateSchemaDialog()}\n `;\n }\n\n protected renderSelectedToolbar(): TemplateResult | typeof nothing {\n const { selectedItem } = this;\n if (!selectedItem) {\n return nothing\n }\n const file = this.files.find(i => i.key === selectedItem);\n if (!file) {\n return nothing;\n }\n return html`\n ${this.renderSelectionShareButton(file)}\n ${this.renderSelectionDeleteButton(file)}\n <ui-divider horizontal type=\"middle\"></ui-divider>\n `;\n }\n\n protected renderSelectionShareButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canShare = false;\n if (capabilities) {\n canShare = capabilities.canShare;\n }\n return html`\n <ui-icon-button\n title=\"Share selected file\"\n aria-label=\"Share selected file\"\n ?disabled=\"${!canShare}\"\n @click=\"${this.handleSelectedShare}\"\n >\n <ui-icon icon=\"personAdd\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderSelectionDeleteButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canDelete = false;\n if (capabilities) {\n canDelete = capabilities.canDelete;\n }\n return html`\n <ui-icon-button\n title=\"Move selected file to trash\"\n aria-label=\"Move selected file to trash\"\n ?disabled=\"${!canDelete}\"\n @click=\"${this.handleSelectedTrash}\"\n >\n <ui-icon icon=\"deleteFile\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderCreateButton(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.createSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-button type=\"outlined\" class=\"new-button\">\n <ui-icon icon=\"add\" slot=\"icon\"></ui-icon>\n New\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item image=\"icon\" data-option=\"project\" role=\"menuitem\">\n <ui-icon icon=\"collectionsBookmark\" slot=\"start\"></ui-icon>\n Project\n </ui-list-item>\n <ui-list-item image=\"icon\" data-option=\"schema\" role=\"menuitem\">\n <ui-icon icon=\"schema\" slot=\"start\"></ui-icon>\n Data schema\n </ui-list-item>\n <ui-divider></ui-divider>\n <ui-list-item image=\"icon\" data-option=\"folder\" role=\"menuitem\">\n <ui-icon icon=\"folder\" slot=\"start\"></ui-icon>\n Folder\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderPageMoreOptions(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.pageOptionsSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-icon-button title=\"More options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item data-option=\"import-project\" role=\"menuitem\">\n Import project\n </ui-list-item>\n <ui-list-item data-option=\"refresh-list\" role=\"menuitem\">\n Refresh list\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderBreadcrumbs(): TemplateResult {\n const { breadcrumbs=[] } = this;\n if (!breadcrumbs.length) {\n return html``;\n }\n const items: FileBreadcrumb[] = [{\n key: '',\n kind: '',\n name: 'root',\n }].concat(breadcrumbs);\n return html`\n <nav class=\"breadcrumbs body-medium\" aria-label=\"Breadcrumbs\">\n <ol>\n ${join(\n map(items, (i) => html`<li><a href=\"#/files${i.key ? `/${i.key}` : ''}\">${i.name}</a></li>`),\n html`<li aria-hidden=\"true\"><span class=\"separator\">/</span></li>`\n )}\n </ol>\n </nav>\n `;\n }\n\n protected renderFilesTable(): TemplateResult {\n return this.dt.render();\n }\n\n protected renderEmptyTable(): TemplateResult {\n return html`\n <p>You have no files.</p>\n <p>An HTTP project is a set of HTTP request related to an API. Use it to organize and document your HTTP requests.</p>\n `;\n }\n\n protected renderTableHeader(): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.dt.header('Name', { class: 'name-cell' }));\n if (!this.screen.isSingleUser) {\n result.push(this.dt.header('Owner', { class: 'owner-cell' }));\n }\n result.push(this.dt.header('Updated', { class: 'updated-cell' }));\n result.push(this.dt.header(html`<span hidden aria-label=\"Row options\">Menu</span>`, { class: 'menu-cell' }));\n return result;\n }\n\n protected renderTableItem(item: IFile): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.nameCell(item));\n if (!this.screen.isSingleUser) {\n result.push(this.ownerCell(item));\n }\n result.push(this.updatedCell(item));\n result.push(this.optionsCell(item));\n return result;\n }\n\n protected saveFileOption(): TemplateResult {\n return html`\n <ui-list-item image=\"icon\" data-option=\"save-file\" role=\"menuitem\" title=\"Saves the file on the computer\">\n <ui-icon icon=\"save\" slot=\"start\"></ui-icon>\n Save to file\n </ui-list-item>\n `;\n }\n\n protected openFileOption(): TemplateResult | typeof nothing {\n return html`\n <ui-list-item image=\"icon\" data-option=\"open\" role=\"menuitem\" title=\"Opens the file\">\n <ui-icon icon=\"openInNew\" slot=\"start\"></ui-icon>\n Open\n </ui-list-item>\n `;\n }\n\n protected deleteFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canDelete) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"delete\" role=\"menuitem\" title=\"Moves the file to Trash\">\n <ui-icon icon=\"deleteFile\" slot=\"start\"></ui-icon>\n Delete\n </ui-list-item>\n `;\n }\n\n protected renameFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canRename) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"rename\" role=\"menuitem\" title=\"Renames the file\">\n <ui-icon icon=\"rename\" slot=\"start\"></ui-icon>\n Rename\n </ui-list-item>\n `;\n }\n\n protected shareFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canShare) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"share\" role=\"menuitem\" title=\"Share the file\">\n <ui-icon icon=\"personAdd\" slot=\"start\"></ui-icon>\n Share\n </ui-list-item>\n `;\n }\n\n protected renderFileOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"File options\" aria-label=\"Activate for file options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.openFileOption()}\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.saveFileOption()}\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected nameCell(item: IFile): TemplateResult {\n let icon: IconType | undefined;\n switch (item.kind) {\n case DataFileKind: icon = 'schema'; break;\n case FolderKind: icon = 'folder'; break;\n case ProjectKind: icon = 'collectionsBookmark'; break;\n default: \n }\n\n return this.dt.cell(html`\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"cell-icon\"></ui-icon>` : nothing}\n ${item.info.name || 'Unnamed project'}\n `, { class: 'name-cell', data: { kind: item.kind } });\n }\n\n protected ownerCell(item: IFile): TemplateResult {\n const { user } = this.screen;\n if (!user) {\n return this.dt.cell(html`--`, { class: 'owner-cell' });\n }\n if (item.owner === user.key) {\n return this.dt.cell(html`<span aria-label=\"Owned by me\">me</span>`, { class: 'owner-cell' });\n }\n const content = this.ownerCellAsync(item.owner);\n const loader = html`<span class=\"owner-loading\">loading...</span>`;\n return this.dt.cell(html`${until(content, loader)}`, { class: 'owner-cell' });\n }\n\n protected async ownerCellAsync(key: string): Promise<TemplateResult> {\n const user = await UserCache.getUser(key);\n if (!user) {\n return html`\n <span aria-label=\"Owned by unknown user\">unknown</span>\n `;\n }\n return html`<span aria-label=\"Owned by ${user.name}\">${user.name}</span>`;\n }\n\n protected updatedCell(item: IFile): TemplateResult {\n const { lastModified } = item;\n\n return this.dt.cell(html`\n <relative-time datetime=\"${new Date(lastModified.time).toISOString()}\"></relative-time>\n `, { class: 'updated-cell' });\n }\n\n protected optionsCell(item: IFile): TemplateResult {\n const content = item.kind === FolderKind ? this.renderFolderOptions(item) : this.renderFileOptions(item);\n return this.dt.cell(content, { class: 'menu-cell' });\n }\n\n protected renderFolderOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"Folder options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderCreateProjectDialog(): TemplateResult {\n return html`\n <dialog id=\"createProjectDialog\">\n <form method=\"dialog\" @submit=\"${this.createProjectHandler}\">\n <h3>New Project</h3>\n <div>\n <p class=\"body-medium\">Enter new project name</p>\n <ui-text-field \n class=\"input\" \n label=\"Project name\" \n name=\"name\" \n required \n invalidText=\"Project name is required\" \n @keydown=\"${this.screen.submitOnEnter}\"\n ></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateProjectDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateSchemaDialog(): TemplateResult {\n return html`\n <dialog id=\"createSchemaDialog\">\n <form method=\"dialog\" @submit=\"${this.createSchemaHandler}\">\n <h3>New Schema</h3>\n <div>\n <p class=\"body-medium\">Enter new schema name</p>\n <ui-text-field class=\"input\" label=\"Schema name\" name=\"name\" required invalidText=\"Schema name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateSchemaDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateFolderDialog(): TemplateResult {\n return html`\n <dialog id=\"createFolderDialog\">\n <form method=\"dialog\" @submit=\"${this.createFolderHandler}\">\n <h3>New Folder</h3>\n <div>\n <p class=\"body-medium\">Enter new folder name</p>\n <ui-text-field class=\"input\" label=\"Folder name\" name=\"name\" required invalidText=\"Folder name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateFolderDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportDialog(): TemplateResult {\n const { importState } = this;\n const submitDisabled = !!importState && [ImportState.Analyzing, ImportState.Importing].includes(importState);\n const cancelLabel = importState === ImportState.Done ? 'Close' : 'Cancel';\n const hasSubmit = importState !== ImportState.Done;\n return html`\n <dialog id=\"importProjectDialog\" @close=\"${this.importDialogCloseHandler}\">\n <form @submit=\"${this.importHandler}\">\n <h3>Import Project</h3>\n <div class=\"dialog-contents\">\n ${this.renderImportPage()}\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelImportDialog}\">${cancelLabel}</ui-button>\n ${hasSubmit ? html`<ui-button type=\"text\" value=\"import\" submit ?disabled=\"${submitDisabled}\">Import</ui-button>` : ''}\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportPage(): TemplateResult {\n const { importState } = this;\n switch (importState) {\n case ImportState.Importing: return this.renderImportWait();\n case ImportState.Done: return this.renderImportDone();\n case ImportState.Analyzed:\n case ImportState.Analyzing:\n default: return this.renderImportInput();\n }\n }\n\n protected renderImportInput(): TemplateResult {\n const { importProcessor } = this;\n const errorMessage = importProcessor && importProcessor.analysis && importProcessor.analysis.message;\n return html`\n <p class=\"body-medium\">Import projects from HTTP Client, Advanced REST Client, or a Postman collection.</p>\n <ui-text-field type=\"file\" class=\"input\" label=\"Project file\" name=\"file\" required invalidText=\"Project file is required\"></ui-text-field>\n ${errorMessage ? html`<div class=\"import-error\">${errorMessage}</div>` : ''}\n `;\n }\n\n protected renderImportWait(): TemplateResult {\n return html`\n <p class=\"body-medium\">Importing project...</p>\n `;\n }\n\n protected renderImportDone(): TemplateResult {\n return html`\n <p class=\"body-medium\">Import succeeded.</p>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Files.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Files.page.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n IFile, HttpProject, Project, Folder, ProjectKind, FolderKind, \n EventUtils, DataNamespace, DataFile, DataFileKind, \n FileAddOptions, FileBreadcrumb, ContextSpaceListOptions, \n BroadcastEvent, BroadcastFileData, \n FileMetaCreatedBroadcastEvent,\n DeletedBroadcastEvent,\n FilePatchBroadcastEvent,\n ContextListResult,\n ICapabilities,\n} from \"@api-client/core/build/browser.js\";\nimport { html, nothing, TemplateResult } from \"lit\";\nimport { join } from \"lit/directives/join.js\";\nimport { map } from \"lit/directives/map.js\";\nimport { until } from 'lit/directives/until.js';\nimport { Patch } from \"@api-client/json\";\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport { DataTable } from \"../../../ui/table/DataTable.js\";\nimport { NavigationEvents } from \"../../../events/NavigationEvents.js\";\nimport { navigate } from \"../../../lib/route.js\";\nimport { DataImportProcessor } from \"../../../http-client/store/DataImportProcessor.js\";\nimport { SnackNotifications } from \"../../../ui/notification/SnackNotifications.js\";\nimport { UiDialogClosingReason } from \"../../../ui/dialog/UiDialog.js\";\nimport { FileBindings } from \"../../../bindings/base/FileBindings.js\";\nimport { IconType } from \"../../../ui/icons/Icons.js\";\nimport UserCache from '../../../store/UserCache.js';\nimport AppInfo from '../AppInfo.js';\nimport '@github/relative-time-element';\nimport '../../../define/ui/ui-list.js';\nimport '../../../define/ui/ui-list-item.js';\nimport '../../../define/ui/ui-dropdown-list.js';\nimport '../../../define/ui/ui-icon.js';\nimport '../../../define/ui/ui-icon-button.js';\nimport '../../../define/ui/ui-button.js';\nimport '../../../define/ui/ui-divider.js';\nimport '../../../define/dialog/rename-dialog.js';\nimport '../../../define/files/share-file.js';\n\nenum ImportState {\n Analyzing,\n Analyzed,\n Importing,\n Done,\n Error\n}\n\n/**\n * A class that specializes in rendering the list of files in HTTP Client.\n */\nexport class FilesPage {\n\n /**\n * The list of files to render.\n * Do not overwrite this property or when you must then update the DataTable's `items` as well.\n */\n files: IFile[] = [];\n\n /**\n * The pagination cursor for files.\n * As long there's a cursor, there are more files to request.\n */\n cursor?: string;\n\n /**\n * The key of the currently rendered folder.\n */\n folder?: string;\n\n breadcrumbs?: FileBreadcrumb[];\n\n dt = new DataTable(() => this.files, { ariaLabel: 'Your files', active: true, selection: 'single' });\n\n importProcessor?: DataImportProcessor;\n\n importState?: ImportState;\n\n /**\n * Whether the UI is reading files \n */\n readingFiles?: boolean;\n\n /**\n * A selected in the table item.\n */\n selectedItem?: string;\n \n constructor(protected screen: ApiClientScreen) {\n this.createProjectHandler = this.createProjectHandler.bind(this);\n this.createFolderHandler = this.createFolderHandler.bind(this);\n this.createSelectHandler = this.createSelectHandler.bind(this);\n this.pageOptionsSelectHandler = this.pageOptionsSelectHandler.bind(this);\n this.importHandler = this.importHandler.bind(this);\n this.cancelImportDialog = this.cancelImportDialog.bind(this);\n this.cancelCreateProjectDialog = this.cancelCreateProjectDialog.bind(this);\n this.cancelCreateFolderDialog = this.cancelCreateFolderDialog.bind(this);\n this.handleFileOptionSelect = this.handleFileOptionSelect.bind(this);\n this.cancelCreateSchemaDialog = this.cancelCreateSchemaDialog.bind(this);\n this.createSchemaHandler = this.createSchemaHandler.bind(this);\n this.handleSelectedShare = this.handleSelectedShare.bind(this);\n this.handleSelectedTrash = this.handleSelectedTrash.bind(this);\n this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));\n this.dt.addEventListener('header', this.renderTableHeader.bind(this));\n this.dt.addEventListener('item', this.renderTableItem.bind(this));\n this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));\n this.dt.addEventListener('render', this.handleTableRender.bind(this));\n this.dt.addEventListener('select', this.handleTableSelect.bind(this));\n }\n\n async refresh(): Promise<void> {\n this.resetList();\n this.screen.render();\n await this.readFiles();\n }\n\n resetList(): void {\n this.files = [];\n this.cursor = undefined;\n this.breadcrumbs = undefined;\n }\n\n async readFiles(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n return;\n }\n if (this.readingFiles) {\n return;\n }\n this.readingFiles = true;\n const { cursor: filesCursor, folder } = this;\n const opts: ContextSpaceListOptions = {\n space: selectedSpace,\n descending: true,\n };\n if (filesCursor) {\n opts.cursor = filesCursor;\n }\n if (folder) {\n opts.parent = folder;\n }\n try {\n const result = await this.listFiles(opts);\n const { items, cursor } = result;\n this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));\n this.cursor = cursor;\n if (folder) {\n const br = await this.screen.bindings.store.files.breadcrumbs(folder);\n this.breadcrumbs = br.items.reverse();\n }\n } finally {\n this.readingFiles = false;\n }\n this.screen.render();\n }\n\n protected async listFiles(opts: ContextSpaceListOptions): Promise<ContextListResult<IFile>> {\n return this.screen.bindings.store.files.list(opts);\n }\n\n /**\n * Sorts files on the list.\n * \n * Folders are always on top.\n */\n filesSortFunction(a: IFile, b:IFile): number {\n if (a.kind !== b.kind) {\n if (a.kind === FolderKind) {\n return -1;\n }\n return 1;\n }\n if (a.kind === b.kind && a.kind === FolderKind) {\n return (a.info.name || '').localeCompare(b.info.name || '');\n }\n return b.lastModified.time - a.lastModified.time;\n }\n\n handleFileEvent(event: BroadcastEvent): void {\n const typed = event as BroadcastEvent & BroadcastFileData;\n if (typed.parent && typed.parent !== this.folder) {\n return;\n }\n if (typed.alt !== 'meta') {\n return;\n }\n switch (event.operation) {\n case 'created': this.handleFileCreated((typed as FileMetaCreatedBroadcastEvent).data); break;\n case 'deleted': this.handleFileDeleted(typed as DeletedBroadcastEvent); break;\n case 'patch': this.handleFilePatch(typed as FilePatchBroadcastEvent); break;\n default:\n }\n }\n\n handleFileCreated(file: IFile): void {\n this.files.push(file);\n this.files.sort(this.filesSortFunction.bind(this));\n this.screen.render();\n }\n\n handleFileDeleted(event: DeletedBroadcastEvent): void {\n this.removeFileFromList(event.key);\n }\n\n removeFileFromList(key: string): void {\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.files.splice(index, 1);\n this.screen.render();\n }\n\n handleFilePatch(event: FilePatchBroadcastEvent): void {\n const { data, key } = event;\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n const file = this.files[index];\n const result = Patch.apply(file, data.patch);\n this.files[index] = result.doc as IFile;\n this.screen.render();\n }\n\n protected cancelCreateProjectDialog(): void {\n this.screen.closeDialog('createProjectDialog');\n }\n\n protected cancelCreateFolderDialog(): void {\n this.screen.closeDialog('createFolderDialog');\n }\n\n protected cancelImportDialog(): void {\n this.screen.closeDialog('importProjectDialog');\n }\n\n protected cancelCreateSchemaDialog(): void {\n this.screen.closeDialog('createSchemaDialog');\n }\n\n protected createProjectHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addProject(value);\n }\n\n protected createFolderHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addFolder(value);\n }\n\n protected createSchemaHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addSchema(value);\n }\n\n protected async addProject(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = HttpProject.fromName(name);\n const meta = Project.fromProject(media, selectedSpace);\n await this.addFile(meta.toJSON(), media.toJSON());\n }\n\n protected async addFolder(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const space = Folder.fromName(name, selectedSpace);\n await this.addFile(space.toJSON());\n }\n\n protected async addSchema(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = DataNamespace.fromName(name);\n const file = DataFile.fromDataNamespace(media, selectedSpace);\n await this.addFile(file.toJSON(), media.toJSON());\n }\n\n protected async addFile(file: IFile, media?: unknown): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const opts: FileAddOptions = {};\n if (this.folder) {\n opts.parent = this.folder;\n }\n const result = await this.screen.bindings.store.files.add(file, opts);\n if (media) {\n await this.screen.bindings.store.media.add(result.key, media, 'application/json');\n }\n }\n\n protected pageOptionsSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'import-project') {\n this.screen.openDialog('importProjectDialog');\n } else if (option === 'refresh-list') {\n this.refresh();\n }\n }\n\n protected createSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'folder') {\n this.screen.openDialog('createFolderDialog');\n } else if (option === 'project') {\n this.screen.openDialog('createProjectDialog');\n } else if (option === 'schema') {\n this.screen.openDialog('createSchemaDialog');\n }\n }\n\n protected importHandler(e: SubmitEvent): void {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n this.cancelImportDialog();\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n this.cancelImportDialog();\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'import') {\n this.cancelImportDialog();\n return;\n }\n const { files } = input;\n if (!files || !files[0]) {\n this.cancelImportDialog();\n return;\n }\n this.processImportFile(files[0]);\n }\n\n protected async processImportFile(file: File): Promise<void> {\n this.importState = ImportState.Analyzing;\n this.screen.render();\n\n const processor = new DataImportProcessor();\n const analysis = await processor.fromFile(file);\n this.importState = ImportState.Analyzed;\n this.screen.render();\n\n this.importProcessor = processor;\n\n if (!analysis.error) {\n this.continueDataImport();\n }\n }\n\n protected async continueDataImport(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a Folder first');\n }\n const { importProcessor } = this;\n if (!importProcessor) {\n throw new Error('Invalid state. Import processor not activated.');\n }\n this.importState = ImportState.Importing;\n this.screen.render();\n try {\n await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.folder);\n this.importState = ImportState.Done;\n this.screen.render();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n this.importState = ImportState.Error;\n }\n }\n\n protected importDialogCloseHandler(): void {\n if (this.importProcessor) {\n this.importProcessor.abort();\n this.importProcessor = undefined;\n }\n this.importState = undefined;\n }\n\n protected itemActivateHandler(item: IFile): void {\n const { kind } = item;\n if (kind === ProjectKind) {\n this.openProject(item.key);\n } else if (kind === FolderKind) {\n this.openFolder(item);\n } else if (kind === DataFileKind) {\n this.openDataSchema(item.key);\n } else {\n throw new Error(`Unknown activation item: ${kind}`);\n }\n }\n\n protected handleTableRender(): void {\n this.screen.render();\n }\n\n protected handleTableSelect(item: string | string[]): void {\n if (Array.isArray(item)) {\n return;\n }\n this.selectedItem = item;\n this.screen.render();\n }\n\n openProject(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n throw new Error(`Invalid state: file not found`);\n }\n NavigationEvents.App.runHttpProject({\n space: file.space,\n key,\n });\n }\n\n openDataSchema(key: string): void {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('The Folder is not set.');\n }\n NavigationEvents.App.runSchemaDesigner({\n key,\n space: selectedSpace,\n });\n }\n\n async openFolder(folder: IFile): Promise<void> {\n navigate('files', folder.key);\n this.selectedItem = undefined;\n }\n\n protected handleFileOptionSelect(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const list = e.target as HTMLElement;\n const operation = item.dataset.option as string;\n const key = list.dataset.key as string;\n if (!key || !operation) {\n return;\n }\n if (operation === 'delete') {\n this.deleteFile(key);\n } else if (operation === 'save-file') {\n this.saveFile(key);\n } else if (operation === 'rename') {\n this.renameFile(key);\n } else if (operation === 'share') {\n this.shareFile(key);\n }\n }\n\n async deleteFile(key: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Space is not selected.`);\n }\n const trashKey = await this.screen.bindings.store.files.delete(key);\n SnackNotifications.notify('The file was moved to trash.', { \n close: true,\n actionLabel: 'Undo',\n actionCallback: async () => {\n await this.screen.bindings.store.trash.restore(trashKey);\n }\n });\n }\n\n async saveFile(key: string): Promise<void> {\n const files = this.screen.bindings.files as FileBindings;\n const content = await this.screen.bindings.store.media.read(key);\n const queryResult = await files.saveFileDialog({\n excludeAcceptAllOption: true,\n title: 'Save file as...',\n filters: [\n {\n description: 'HTTP Client files',\n accept: {\n 'application/json': ['.json'],\n },\n }\n ],\n });\n if (queryResult.canceled) {\n return;\n }\n const data = JSON.stringify(content);\n const path = queryResult.filePath as string;\n await files.writeFile(path, data, { dispose: true });\n }\n\n protected renameFile(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const name = file.info.name || '';\n const dialog = document.createElement('rename-dialog');\n dialog.name = name;\n dialog.modal = true;\n dialog.open = true;\n document.body.appendChild(dialog);\n dialog.addEventListener('close', async (ev: Event) => {\n document.body.removeChild(dialog);\n const event = ev as CustomEvent<UiDialogClosingReason>;\n const { cancelled, value } = event.detail;\n if (!cancelled && value) {\n this.screen.renameFile(file, value as string);\n }\n });\n }\n\n protected shareFile(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const dialog = document.createElement('share-file');\n dialog.file = file;\n dialog.user = this.screen.user;\n dialog.appInfo = AppInfo;\n dialog.modal = true;\n document.body.appendChild(dialog);\n dialog.open = true;\n dialog.addEventListener('closed', () => {\n document.body.removeChild(dialog);\n });\n }\n\n protected handleSelectedShare(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.shareFile(selectedItem);\n }\n\n protected handleSelectedTrash(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.deleteFile(selectedItem);\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Your files</h2>\n ${this.renderBreadcrumbs()}\n <div class=\"spacer\"></div>\n ${this.renderSelectedToolbar()}\n ${this.renderCreateButton()}\n ${this.renderPageMoreOptions()}\n </div>\n ${this.renderFilesTable()}\n ${this.renderCreateProjectDialog()}\n ${this.renderCreateFolderDialog()}\n ${this.renderImportDialog()}\n ${this.renderCreateSchemaDialog()}\n `;\n }\n\n protected renderSelectedToolbar(): TemplateResult | typeof nothing {\n const { selectedItem } = this;\n if (!selectedItem) {\n return nothing\n }\n const file = this.files.find(i => i.key === selectedItem);\n if (!file) {\n return nothing;\n }\n return html`\n ${this.renderSelectionShareButton(file)}\n ${this.renderSelectionDeleteButton(file)}\n <ui-divider horizontal type=\"middle\"></ui-divider>\n `;\n }\n\n protected renderSelectionShareButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canShare = false;\n if (capabilities) {\n canShare = capabilities.canShare;\n }\n return html`\n <ui-icon-button\n title=\"Share selected file\"\n aria-label=\"Share selected file\"\n ?disabled=\"${!canShare}\"\n @click=\"${this.handleSelectedShare}\"\n >\n <ui-icon icon=\"personAdd\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderSelectionDeleteButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canDelete = false;\n if (capabilities) {\n canDelete = capabilities.canDelete;\n }\n return html`\n <ui-icon-button\n title=\"Move selected file to trash\"\n aria-label=\"Move selected file to trash\"\n ?disabled=\"${!canDelete}\"\n @click=\"${this.handleSelectedTrash}\"\n >\n <ui-icon icon=\"deleteFile\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderCreateButton(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.createSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-button type=\"outlined\" class=\"new-button\">\n <ui-icon icon=\"add\" slot=\"icon\"></ui-icon>\n New\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item image=\"icon\" data-option=\"project\" role=\"menuitem\">\n <ui-icon icon=\"collectionsBookmark\" slot=\"start\"></ui-icon>\n Project\n </ui-list-item>\n <ui-list-item image=\"icon\" data-option=\"schema\" role=\"menuitem\">\n <ui-icon icon=\"schema\" slot=\"start\"></ui-icon>\n Data schema\n </ui-list-item>\n <ui-divider></ui-divider>\n <ui-list-item image=\"icon\" data-option=\"folder\" role=\"menuitem\">\n <ui-icon icon=\"folder\" slot=\"start\"></ui-icon>\n Folder\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderPageMoreOptions(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.pageOptionsSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-icon-button title=\"More options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item data-option=\"import-project\" role=\"menuitem\">\n Import project\n </ui-list-item>\n <ui-list-item data-option=\"refresh-list\" role=\"menuitem\">\n Refresh list\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderBreadcrumbs(): TemplateResult {\n const { breadcrumbs=[] } = this;\n if (!breadcrumbs.length) {\n return html``;\n }\n const items: FileBreadcrumb[] = [{\n key: '',\n kind: '',\n name: 'root',\n }].concat(breadcrumbs);\n return html`\n <nav class=\"breadcrumbs body-medium\" aria-label=\"Breadcrumbs\">\n <ol>\n ${join(\n map(items, (i) => html`<li><a href=\"#/files${i.key ? `/${i.key}` : ''}\">${i.name}</a></li>`),\n html`<li aria-hidden=\"true\"><span class=\"separator\">/</span></li>`\n )}\n </ol>\n </nav>\n `;\n }\n\n protected renderFilesTable(): TemplateResult {\n return this.dt.render();\n }\n\n protected renderEmptyTable(): TemplateResult {\n return html`\n <p>You have no files.</p>\n <p>An HTTP project is a set of HTTP request related to an API. Use it to organize and document your HTTP requests.</p>\n `;\n }\n\n protected renderTableHeader(): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.dt.header('Name', { class: 'name-cell' }));\n if (!this.screen.isSingleUser) {\n result.push(this.dt.header('Owner', { class: 'owner-cell' }));\n }\n result.push(this.dt.header('Updated', { class: 'updated-cell' }));\n result.push(this.dt.header(html`<span hidden aria-label=\"Row options\">Menu</span>`, { class: 'menu-cell' }));\n return result;\n }\n\n protected renderTableItem(item: IFile): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.nameCell(item));\n if (!this.screen.isSingleUser) {\n result.push(this.ownerCell(item));\n }\n result.push(this.updatedCell(item));\n result.push(this.optionsCell(item));\n return result;\n }\n\n protected saveFileOption(): TemplateResult {\n return html`\n <ui-list-item image=\"icon\" data-option=\"save-file\" role=\"menuitem\" title=\"Saves the file on the computer\">\n <ui-icon icon=\"save\" slot=\"start\"></ui-icon>\n Save to file\n </ui-list-item>\n `;\n }\n\n protected openFileOption(): TemplateResult | typeof nothing {\n return html`\n <ui-list-item image=\"icon\" data-option=\"open\" role=\"menuitem\" title=\"Opens the file\">\n <ui-icon icon=\"openInNew\" slot=\"start\"></ui-icon>\n Open\n </ui-list-item>\n `;\n }\n\n protected deleteFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canDelete) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"delete\" role=\"menuitem\" title=\"Moves the file to Trash\">\n <ui-icon icon=\"deleteFile\" slot=\"start\"></ui-icon>\n Delete\n </ui-list-item>\n `;\n }\n\n protected renameFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canRename) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"rename\" role=\"menuitem\" title=\"Renames the file\">\n <ui-icon icon=\"rename\" slot=\"start\"></ui-icon>\n Rename\n </ui-list-item>\n `;\n }\n\n protected shareFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canShare) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"share\" role=\"menuitem\" title=\"Share the file\">\n <ui-icon icon=\"personAdd\" slot=\"start\"></ui-icon>\n Share\n </ui-list-item>\n `;\n }\n\n protected renderFileOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"File options\" aria-label=\"Activate for file options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.openFileOption()}\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.saveFileOption()}\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected nameCell(item: IFile): TemplateResult {\n let icon: IconType | undefined;\n switch (item.kind) {\n case DataFileKind: icon = 'schema'; break;\n case FolderKind: icon = 'folder'; break;\n case ProjectKind: icon = 'collectionsBookmark'; break;\n default: \n }\n\n return this.dt.cell(html`\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"cell-icon\"></ui-icon>` : nothing}\n ${item.info.name || 'Unnamed project'}\n `, { class: 'name-cell', data: { kind: item.kind } });\n }\n\n protected ownerCell(item: IFile): TemplateResult {\n const { user } = this.screen;\n if (!user) {\n return this.dt.cell(html`--`, { class: 'owner-cell' });\n }\n if (item.owner === user.key) {\n return this.dt.cell(html`<span aria-label=\"Owned by me\">me</span>`, { class: 'owner-cell' });\n }\n const content = this.ownerCellAsync(item.owner);\n const loader = html`<span class=\"owner-loading\">loading...</span>`;\n return this.dt.cell(html`${until(content, loader)}`, { class: 'owner-cell' });\n }\n\n protected async ownerCellAsync(key: string): Promise<TemplateResult> {\n const user = await UserCache.getUser(key);\n if (!user) {\n return html`\n <span aria-label=\"Owned by unknown user\">unknown</span>\n `;\n }\n return html`<span aria-label=\"Owned by ${user.name}\">${user.name}</span>`;\n }\n\n protected updatedCell(item: IFile): TemplateResult {\n const { lastModified } = item;\n\n return this.dt.cell(html`\n <relative-time datetime=\"${new Date(lastModified.time).toISOString()}\"></relative-time>\n `, { class: 'updated-cell' });\n }\n\n protected optionsCell(item: IFile): TemplateResult {\n const content = item.kind === FolderKind ? this.renderFolderOptions(item) : this.renderFileOptions(item);\n return this.dt.cell(content, { class: 'menu-cell' });\n }\n\n protected renderFolderOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"Folder options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderCreateProjectDialog(): TemplateResult {\n return html`\n <dialog id=\"createProjectDialog\">\n <form method=\"dialog\" @submit=\"${this.createProjectHandler}\">\n <h3>New Project</h3>\n <div>\n <p class=\"body-medium\">Enter new project name</p>\n <ui-text-field \n class=\"input\" \n label=\"Project name\" \n name=\"name\" \n required \n invalidText=\"Project name is required\" \n @keydown=\"${this.screen.submitOnEnter}\"\n ></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateProjectDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateSchemaDialog(): TemplateResult {\n return html`\n <dialog id=\"createSchemaDialog\">\n <form method=\"dialog\" @submit=\"${this.createSchemaHandler}\">\n <h3>New Schema</h3>\n <div>\n <p class=\"body-medium\">Enter new schema name</p>\n <ui-text-field class=\"input\" label=\"Schema name\" name=\"name\" required invalidText=\"Schema name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateSchemaDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateFolderDialog(): TemplateResult {\n return html`\n <dialog id=\"createFolderDialog\">\n <form method=\"dialog\" @submit=\"${this.createFolderHandler}\">\n <h3>New Folder</h3>\n <div>\n <p class=\"body-medium\">Enter new folder name</p>\n <ui-text-field class=\"input\" label=\"Folder name\" name=\"name\" required invalidText=\"Folder name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateFolderDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportDialog(): TemplateResult {\n const { importState } = this;\n const submitDisabled = !!importState && [ImportState.Analyzing, ImportState.Importing].includes(importState);\n const cancelLabel = importState === ImportState.Done ? 'Close' : 'Cancel';\n const hasSubmit = importState !== ImportState.Done;\n return html`\n <dialog id=\"importProjectDialog\" @close=\"${this.importDialogCloseHandler}\">\n <form @submit=\"${this.importHandler}\">\n <h3>Import Project</h3>\n <div class=\"dialog-contents\">\n ${this.renderImportPage()}\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelImportDialog}\">${cancelLabel}</ui-button>\n ${hasSubmit ? html`<ui-button type=\"text\" value=\"import\" submit ?disabled=\"${submitDisabled}\">Import</ui-button>` : ''}\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportPage(): TemplateResult {\n const { importState } = this;\n switch (importState) {\n case ImportState.Importing: return this.renderImportWait();\n case ImportState.Done: return this.renderImportDone();\n case ImportState.Analyzed:\n case ImportState.Analyzing:\n default: return this.renderImportInput();\n }\n }\n\n protected renderImportInput(): TemplateResult {\n const { importProcessor } = this;\n const errorMessage = importProcessor && importProcessor.analysis && importProcessor.analysis.message;\n return html`\n <p class=\"body-medium\">Import projects from HTTP Client, Advanced REST Client, or a Postman collection.</p>\n <ui-text-field type=\"file\" class=\"input\" label=\"Project file\" name=\"file\" required invalidText=\"Project file is required\"></ui-text-field>\n ${errorMessage ? html`<div class=\"import-error\">${errorMessage}</div>` : ''}\n `;\n }\n\n protected renderImportWait(): TemplateResult {\n return html`\n <p class=\"body-medium\">Importing project...</p>\n `;\n }\n\n protected renderImportDone(): TemplateResult {\n return html`\n <p class=\"body-medium\">Import succeeded.</p>\n `;\n }\n}\n"]}
|
|
@@ -12,12 +12,10 @@ var PageState;
|
|
|
12
12
|
* A page for suite settings
|
|
13
13
|
*/
|
|
14
14
|
export class SettingsPage {
|
|
15
|
-
screen;
|
|
16
|
-
state = PageState.default;
|
|
17
|
-
theme = 'default';
|
|
18
|
-
env;
|
|
19
15
|
constructor(screen) {
|
|
20
16
|
this.screen = screen;
|
|
17
|
+
this.state = PageState.default;
|
|
18
|
+
this.theme = 'default';
|
|
21
19
|
this.handleTheme = this.handleTheme.bind(this);
|
|
22
20
|
}
|
|
23
21
|
async initialize() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Settings.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAI3C,OAAO,gCAAgC,CAAC;AACxC,OAAO,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnD,IAAK,SAIJ;AAJD,WAAK,SAAS;IACZ,+CAAO,CAAA;IACP,yDAAY,CAAA;IACZ,uDAAW,CAAA;AACb,CAAC,EAJI,SAAS,KAAT,SAAS,QAIb;AAED;;GAEG;AACH,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"Settings.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Settings.page.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from \"lit\";\nimport { DataSourceType, IConfigEnvironment, ThemeType } from \"../../../lib/config/Config.js\";\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport RadioElement from \"../../../ui/input/RadioElement.js\";\nimport '../../../define/ui/ui-radio.js';\nimport '../../../define/ui/ui-button.js';\nimport { Events } from \"../../../events/Events.js\";\n\nenum PageState {\n default,\n initializing,\n initialized,\n}\n\n/**\n * A page for suite settings\n */\nexport class SettingsPage {\n state: PageState = PageState.default;\n\n theme: ThemeType = 'default';\n\n env?: IConfigEnvironment;\n\n constructor(protected screen: ApiClientScreen) {\n this.handleTheme = this.handleTheme.bind(this);\n }\n\n async initialize(): Promise<void> {\n if (this.state === PageState.initializing) {\n return;\n }\n const theme = await this.screen.bindings.config.local.get('theme') as ThemeType | undefined;\n if (theme) {\n this.theme = theme;\n }\n try {\n this.env = await this.screen.bindings.store.global.get();\n } catch (e) {\n // ...\n }\n this.state = PageState.initialized;\n this.screen.render();\n }\n\n handleTheme(e: Event): void {\n const radio = e.target as RadioElement;\n const { checked, value } = radio;\n if (!checked) {\n return;\n }\n this.selectTheme(value as ThemeType);\n }\n\n async selectTheme(value: ThemeType): Promise<void> {\n await this.screen.bindings.config.local.set('theme', value);\n }\n \n handleManageConnections(): void {\n Events.Navigation.Store.config();\n }\n\n render(): TemplateResult {\n if (this.state !== PageState.initialized) {\n this.initialize();\n return this.renderLoading();\n }\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Settings</h2>\n </div>\n ${this.renderThemeSettings()}\n ${this.renderStoreSettings()}\n `;\n }\n\n renderThemeSettings(): TemplateResult {\n const { theme } = this;\n return html`\n <div class=\"settings-section\">\n <h3 class=\"title-medium\">Theme</h3>\n <div class=\"radio-row\">\n <label class=\"label-medium\">\n <ui-radio name=\"theme\" value=\"default\" .checked=\"${theme === 'default'}\" @change=\"${this.handleTheme}\"></ui-radio>\n System default\n </label>\n </div>\n <div class=\"radio-row\">\n <label class=\"label-medium\">\n <ui-radio name=\"theme\" value=\"light\" .checked=\"${theme === 'light'}\" @change=\"${this.handleTheme}\"></ui-radio>\n Light theme\n </label>\n </div>\n <div class=\"radio-row\">\n <label class=\"label-medium\">\n <ui-radio name=\"theme\" value=\"dark\" .checked=\"${theme === 'dark'}\" @change=\"${this.handleTheme}\"></ui-radio>\n Dark theme\n </label>\n </div>\n </div>\n `;\n }\n\n renderStoreSettings(): TemplateResult {\n const { env } = this;\n return html`\n <div class=\"settings-section\">\n <h3 class=\"title-medium\">Store settings</h3>\n ${env ? this.renderStoreData(env) : this.renderNoStore()}\n\n <div>\n <ui-button type=\"outlined\" @click=\"${this.handleManageConnections}\">Manage connections</ui-button>\n <ui-button type=\"text\">Learn more</ui-button>\n </div>\n </div>\n `;\n }\n\n protected renderStoreData(env: IConfigEnvironment): TemplateResult {\n const { source } = env;\n return html`\n ${this.renderStoreIntro(source)}\n `;\n }\n\n protected renderStoreIntro(source: DataSourceType): TemplateResult {\n let message: string;\n if (source === 'local-store') {\n message = 'You are using a local store service.';\n } else {\n message = 'You are connected to a network store.';\n }\n return html`<p class=\"body-large\">${message}</p>`\n }\n\n renderLoading(): TemplateResult {\n return html`\n <p class=\"body-large\">Reading configuration...</p>\n `;\n }\n\n renderNoStore(): TemplateResult {\n return html`\n <p class=\"body-large\">Unable to read store configuration.</p>\n `;\n }\n}\n"]}
|
|
@@ -9,19 +9,6 @@ import '../../../define/ui/ui-icon.js';
|
|
|
9
9
|
* A class that specializes in rendering the list of trash in HTTP Client.
|
|
10
10
|
*/
|
|
11
11
|
export class TrashPage {
|
|
12
|
-
screen;
|
|
13
|
-
files = [];
|
|
14
|
-
/**
|
|
15
|
-
* The pagination cursor for trash.
|
|
16
|
-
* As long there's a cursor, there are more files to request.
|
|
17
|
-
*/
|
|
18
|
-
cursor;
|
|
19
|
-
dt = new DataTable(() => this.files, { ariaLabel: 'Trashed files' });
|
|
20
|
-
readingFiles;
|
|
21
|
-
/**
|
|
22
|
-
* The list of keys of files to delete.
|
|
23
|
-
*/
|
|
24
|
-
deleteKeys;
|
|
25
12
|
get deleteItems() {
|
|
26
13
|
const { deleteKeys, files } = this;
|
|
27
14
|
if (!deleteKeys) {
|
|
@@ -38,6 +25,8 @@ export class TrashPage {
|
|
|
38
25
|
}
|
|
39
26
|
constructor(screen) {
|
|
40
27
|
this.screen = screen;
|
|
28
|
+
this.files = [];
|
|
29
|
+
this.dt = new DataTable(() => this.files, { ariaLabel: 'Trashed files' });
|
|
41
30
|
this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));
|
|
42
31
|
this.dt.addEventListener('header', this.renderTableHeader.bind(this));
|
|
43
32
|
this.dt.addEventListener('item', this.renderTableItem.bind(this));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Trash.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Trash.page.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProjectKind, EventUtils, FolderKind, TrashEntry, ContextSpaceListOptions, IFile, BroadcastEvent, BroadcastCreatedEvent, DataFileKind } from \"@api-client/core/build/browser.js\";\nimport { html, TemplateResult } from \"lit\";\nimport '@github/relative-time-element';\nimport { IconType } from \"../../../ui/icons/Icons.js\";\nimport { navigate } from \"../../../lib/route.js\";\nimport { SnackNotifications } from \"../../../ui/notification/SnackNotifications.js\";\nimport { DataTable } from \"../../../ui/table/DataTable.js\";\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport '../../../define/ui/ui-icon.js';\n\n/**\n * A class that specializes in rendering the list of trash in HTTP Client.\n */\nexport class TrashPage {\n files: TrashEntry[] = [];\n\n /**\n * The pagination cursor for trash.\n * As long there's a cursor, there are more files to request.\n */\n cursor?: string;\n\n dt = new DataTable(() => this.files, { ariaLabel: 'Trashed files' });\n\n readingFiles?: boolean;\n\n /**\n * The list of keys of files to delete.\n */\n deleteKeys?: string[];\n\n get deleteItems(): TrashEntry[] {\n const { deleteKeys, files } = this;\n if (!deleteKeys) {\n return [];\n }\n const result: TrashEntry[] = [];\n deleteKeys.forEach((key) => {\n const item = files.find(i => i.key === key);\n if (item) {\n result.push(item);\n }\n });\n return result;\n }\n\n constructor(protected screen: ApiClientScreen) {\n this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));\n this.dt.addEventListener('header', this.renderTableHeader.bind(this));\n this.dt.addEventListener('item', this.renderTableItem.bind(this));\n\n this.itemOptionsSelectHandler = this.itemOptionsSelectHandler.bind(this);\n this.cancelDeleteAllDialog = this.cancelDeleteAllDialog.bind(this);\n this.deleteAllHandler = this.deleteAllHandler.bind(this);\n this.cancelDeleteFilesDialog = this.cancelDeleteFilesDialog.bind(this);\n this.deleteFilesHandler = this.deleteFilesHandler.bind(this);\n this.openEmptyAllDialogHandler = this.openEmptyAllDialogHandler.bind(this);\n }\n\n handleFileEvent(event: BroadcastEvent): void {\n switch (event.operation) {\n case 'created': this.handleTrashAdded((event as BroadcastCreatedEvent).data as TrashEntry); break;\n case 'deleted': this.handleTrashRemoved(event.key as string); break;\n default:\n }\n }\n\n protected handleTrashAdded(item: TrashEntry): void {\n this.files.push(item);\n this.files.sort(this.filesSortFunction.bind(this));\n this.screen.render();\n }\n\n protected handleTrashRemoved(key: string): void {\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.files.splice(index, 1);\n this.screen.render();\n }\n\n async refresh(): Promise<void> {\n this.resetList();\n this.screen.render();\n await this.readFiles();\n }\n\n resetList(): void {\n this.files = [];\n this.cursor = undefined;\n }\n\n async readFiles(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n return;\n }\n if (this.readingFiles) {\n return;\n }\n this.readingFiles = true;\n const { cursor: currentCursor } = this;\n const opts: ContextSpaceListOptions = {\n space: selectedSpace,\n descending: true,\n };\n if (currentCursor) {\n opts.cursor = currentCursor;\n }\n try {\n const result = await this.screen.bindings.store.trash.list(opts);\n const { items, cursor } = result;\n this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));\n this.cursor = cursor;\n } finally {\n this.readingFiles = false;\n }\n this.screen.render();\n }\n\n /**\n * Sorts files on the list.\n * \n * Folders are always on top.\n */\n filesSortFunction(a: TrashEntry, b: TrashEntry): number {\n return b.info.time - a.info.time;\n }\n\n protected itemOptionsSelectHandler(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const list = e.target as HTMLElement;\n const operation = item.dataset.option as string;\n const key = list.dataset.key as string;\n if (!key || !operation) {\n return;\n }\n if (operation === 'restore') {\n this.restoreItem(key);\n } else if (operation === 'delete') {\n this.deleteKeys = [key];\n this.screen.render();\n this.screen.openDialog('deleteFilesDialog');\n }\n }\n\n async restoreItem(key: string): Promise<void> {\n const { bindings, selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Folder is not selected.`);\n }\n const record = await bindings.store.trash.restore(key);\n const file = record.item as IFile;\n const parentId = file.parents && file.parents.length ? file.parents[file.parents.length - 1] : undefined;\n SnackNotifications.notify(`Restored file: ${file.info.name}`, {\n actionLabel: 'Go to file location',\n actionCallback: () => {\n if (parentId) {\n navigate('files', parentId);\n } else {\n navigate('files');\n }\n },\n });\n }\n\n async deleteItem(key: string): Promise<void> {\n const { bindings, selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Folder is not selected.`);\n }\n await bindings.store.trash.delete(key);\n }\n\n protected openEmptyAllDialogHandler(): void {\n this.screen.openDialog('deleteAllDialog');\n }\n\n protected cancelDeleteAllDialog(): void {\n this.screen.closeDialog('deleteAllDialog');\n }\n\n protected deleteAllHandler(): void {\n this.screen.closeDialog('deleteAllDialog');\n const { bindings, selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Folder is not selected.`);\n }\n bindings.store.trash.empty(selectedSpace);\n }\n\n protected cancelDeleteFilesDialog(): void {\n this.deleteKeys = undefined;\n this.screen.closeDialog('deleteFilesDialog');\n }\n\n protected deleteFilesHandler(): void {\n this.screen.closeDialog('deleteFilesDialog');\n this.screen.render();\n const { deleteKeys } = this;\n this.deleteKeys = undefined;\n if (!deleteKeys || !deleteKeys.length) {\n return;\n }\n deleteKeys.forEach(k => this.deleteItem(k));\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Trash</h2>\n <div class=\"spacer\"></div>\n ${this.renderEmptyTrash()}\n </div>\n ${this.renderTrashTable()}\n ${this.renderDeleteAllDialog()}\n ${this.renderDeleteFilesDialog()}\n `;\n }\n\n protected renderEmptyTrash(): TemplateResult {\n const { files } = this;\n const disabled = !files || !files.length;\n return html`\n <ui-button type=\"outlined\" ?disabled=\"${disabled}\" @click=\"${this.openEmptyAllDialogHandler}\">\n <ui-icon icon=\"deleteOutline\" slot=\"icon\"></ui-icon>\n Empty trash\n </ui-button>\n `;\n }\n\n protected renderTrashTable(): TemplateResult {\n return this.dt.render();\n }\n\n protected renderEmptyTable(): TemplateResult {\n return html`\n <p>The trash bin is empty.</p>\n `;\n }\n\n protected renderTableHeader(): TemplateResult[] {\n const name = this.dt.header('Name', { class: 'name-cell' });\n const deleted = this.dt.header('Deleted', { class: 'updated-cell' });\n const menu = this.dt.header(html`<span hidden>Menu</span>`, { class: 'menu-cell' });\n return [name, deleted, menu];\n }\n\n protected renderTableItem(item: TrashEntry): TemplateResult[] {\n const { kind, name, info } = item;\n let icon: IconType | undefined;\n if (kind === ProjectKind) {\n icon = 'collectionsBookmark';\n } else if (kind === FolderKind) {\n icon = 'folder';\n } else if (kind === DataFileKind) {\n icon = 'schema';\n }\n\n const nameCell = this.dt.cell(html`\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"cell-icon\"></ui-icon>` : ''}\n ${name || 'Unnamed file'}\n `, { class: 'name-cell', data: { kind } });\n\n const deleted = this.dt.cell(html`\n <relative-time datetime=\"${new Date(info.time).toISOString()}\"></relative-time>\n `, { class: 'updated-cell' });\n\n const menu = this.dt.cell(this.renderItemOptions(item), { class: 'menu-cell' });\n\n return [nameCell, deleted, menu];\n }\n\n protected renderItemOptions(item: TrashEntry): TemplateResult {\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.itemOptionsSelectHandler}\"\n data-key=\"${item.key}\"\n >\n <ui-icon-button title=\"Project options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item image=\"icon\" data-option=\"restore\" role=\"menuitem\" title=\"Restores the file to its original folder.\">\n <ui-icon icon=\"restoreFromTrash\" slot=\"start\"></ui-icon>\n Restore\n </ui-list-item>\n <ui-list-item image=\"icon\" data-option=\"delete\" role=\"menuitem\" title=\"Permanently deleted the item.\">\n <ui-icon icon=\"deleteOutline\" slot=\"start\"></ui-icon>\n Delete forever\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderDeleteAllDialog(): TemplateResult {\n return html`\n <dialog id=\"deleteAllDialog\" class=\"warning\">\n <h3>Empty Trash?</h3>\n <div>\n <p class=\"body-medium\">\n This will permanently delete all files in the trash.\n </p>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelDeleteAllDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"delete\" @click=\"${this.deleteAllHandler}\">Delete</ui-button>\n </div>\n </dialog>\n `;\n }\n\n protected renderDeleteFilesDialog(): TemplateResult {\n const { deleteItems } = this;\n return html`\n <dialog id=\"deleteFilesDialog\" class=\"warning\">\n <h3>Delete Forever?</h3>\n <div>\n ${deleteItems.length > 1 ? this.renderDeleteMultiFile(deleteItems) : this.renderDeleteSingleFile(deleteItems[0])}\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelDeleteFilesDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"delete\" @click=\"${this.deleteFilesHandler}\">Delete</ui-button>\n </div>\n </dialog>\n `;\n }\n\n protected renderDeleteSingleFile(item: TrashEntry): TemplateResult {\n if (!item) {\n return html`\n <p class=\"body-medium\">Invalid state. Couldn't find files to delete.</p>\n `;\n }\n return html`\n <p class=\"body-medium\">\n <b>\"${item.name}\"</b> will be deleted forever and you won't be able to restore it.\n </p>\n `;\n }\n\n protected renderDeleteMultiFile(items: TrashEntry[]): TemplateResult {\n return html`\n <p class=\"body-medium\">\n The following files will be deleted forever and you won't be able to restore them:\n </p>\n <ui-divider></ui-divider>\n <ul>\n ${items.map(i => html`<li>${i.name}</li>`)}\n </ul>\n <ui-divider></ui-divider>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Trash.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Trash.page.ts"],"names":[],"mappings":"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","sourcesContent":["import { ProjectKind, EventUtils, FolderKind, TrashEntry, ContextSpaceListOptions, IFile, BroadcastEvent, BroadcastCreatedEvent, DataFileKind } from \"@api-client/core/build/browser.js\";\nimport { html, TemplateResult } from \"lit\";\nimport '@github/relative-time-element';\nimport { IconType } from \"../../../ui/icons/Icons.js\";\nimport { navigate } from \"../../../lib/route.js\";\nimport { SnackNotifications } from \"../../../ui/notification/SnackNotifications.js\";\nimport { DataTable } from \"../../../ui/table/DataTable.js\";\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport '../../../define/ui/ui-icon.js';\n\n/**\n * A class that specializes in rendering the list of trash in HTTP Client.\n */\nexport class TrashPage {\n files: TrashEntry[] = [];\n\n /**\n * The pagination cursor for trash.\n * As long there's a cursor, there are more files to request.\n */\n cursor?: string;\n\n dt = new DataTable(() => this.files, { ariaLabel: 'Trashed files' });\n\n readingFiles?: boolean;\n\n /**\n * The list of keys of files to delete.\n */\n deleteKeys?: string[];\n\n get deleteItems(): TrashEntry[] {\n const { deleteKeys, files } = this;\n if (!deleteKeys) {\n return [];\n }\n const result: TrashEntry[] = [];\n deleteKeys.forEach((key) => {\n const item = files.find(i => i.key === key);\n if (item) {\n result.push(item);\n }\n });\n return result;\n }\n\n constructor(protected screen: ApiClientScreen) {\n this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));\n this.dt.addEventListener('header', this.renderTableHeader.bind(this));\n this.dt.addEventListener('item', this.renderTableItem.bind(this));\n\n this.itemOptionsSelectHandler = this.itemOptionsSelectHandler.bind(this);\n this.cancelDeleteAllDialog = this.cancelDeleteAllDialog.bind(this);\n this.deleteAllHandler = this.deleteAllHandler.bind(this);\n this.cancelDeleteFilesDialog = this.cancelDeleteFilesDialog.bind(this);\n this.deleteFilesHandler = this.deleteFilesHandler.bind(this);\n this.openEmptyAllDialogHandler = this.openEmptyAllDialogHandler.bind(this);\n }\n\n handleFileEvent(event: BroadcastEvent): void {\n switch (event.operation) {\n case 'created': this.handleTrashAdded((event as BroadcastCreatedEvent).data as TrashEntry); break;\n case 'deleted': this.handleTrashRemoved(event.key as string); break;\n default:\n }\n }\n\n protected handleTrashAdded(item: TrashEntry): void {\n this.files.push(item);\n this.files.sort(this.filesSortFunction.bind(this));\n this.screen.render();\n }\n\n protected handleTrashRemoved(key: string): void {\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.files.splice(index, 1);\n this.screen.render();\n }\n\n async refresh(): Promise<void> {\n this.resetList();\n this.screen.render();\n await this.readFiles();\n }\n\n resetList(): void {\n this.files = [];\n this.cursor = undefined;\n }\n\n async readFiles(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n return;\n }\n if (this.readingFiles) {\n return;\n }\n this.readingFiles = true;\n const { cursor: currentCursor } = this;\n const opts: ContextSpaceListOptions = {\n space: selectedSpace,\n descending: true,\n };\n if (currentCursor) {\n opts.cursor = currentCursor;\n }\n try {\n const result = await this.screen.bindings.store.trash.list(opts);\n const { items, cursor } = result;\n this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));\n this.cursor = cursor;\n } finally {\n this.readingFiles = false;\n }\n this.screen.render();\n }\n\n /**\n * Sorts files on the list.\n * \n * Folders are always on top.\n */\n filesSortFunction(a: TrashEntry, b: TrashEntry): number {\n return b.info.time - a.info.time;\n }\n\n protected itemOptionsSelectHandler(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const list = e.target as HTMLElement;\n const operation = item.dataset.option as string;\n const key = list.dataset.key as string;\n if (!key || !operation) {\n return;\n }\n if (operation === 'restore') {\n this.restoreItem(key);\n } else if (operation === 'delete') {\n this.deleteKeys = [key];\n this.screen.render();\n this.screen.openDialog('deleteFilesDialog');\n }\n }\n\n async restoreItem(key: string): Promise<void> {\n const { bindings, selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Folder is not selected.`);\n }\n const record = await bindings.store.trash.restore(key);\n const file = record.item as IFile;\n const parentId = file.parents && file.parents.length ? file.parents[file.parents.length - 1] : undefined;\n SnackNotifications.notify(`Restored file: ${file.info.name}`, {\n actionLabel: 'Go to file location',\n actionCallback: () => {\n if (parentId) {\n navigate('files', parentId);\n } else {\n navigate('files');\n }\n },\n });\n }\n\n async deleteItem(key: string): Promise<void> {\n const { bindings, selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Folder is not selected.`);\n }\n await bindings.store.trash.delete(key);\n }\n\n protected openEmptyAllDialogHandler(): void {\n this.screen.openDialog('deleteAllDialog');\n }\n\n protected cancelDeleteAllDialog(): void {\n this.screen.closeDialog('deleteAllDialog');\n }\n\n protected deleteAllHandler(): void {\n this.screen.closeDialog('deleteAllDialog');\n const { bindings, selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Folder is not selected.`);\n }\n bindings.store.trash.empty(selectedSpace);\n }\n\n protected cancelDeleteFilesDialog(): void {\n this.deleteKeys = undefined;\n this.screen.closeDialog('deleteFilesDialog');\n }\n\n protected deleteFilesHandler(): void {\n this.screen.closeDialog('deleteFilesDialog');\n this.screen.render();\n const { deleteKeys } = this;\n this.deleteKeys = undefined;\n if (!deleteKeys || !deleteKeys.length) {\n return;\n }\n deleteKeys.forEach(k => this.deleteItem(k));\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Trash</h2>\n <div class=\"spacer\"></div>\n ${this.renderEmptyTrash()}\n </div>\n ${this.renderTrashTable()}\n ${this.renderDeleteAllDialog()}\n ${this.renderDeleteFilesDialog()}\n `;\n }\n\n protected renderEmptyTrash(): TemplateResult {\n const { files } = this;\n const disabled = !files || !files.length;\n return html`\n <ui-button type=\"outlined\" ?disabled=\"${disabled}\" @click=\"${this.openEmptyAllDialogHandler}\">\n <ui-icon icon=\"deleteOutline\" slot=\"icon\"></ui-icon>\n Empty trash\n </ui-button>\n `;\n }\n\n protected renderTrashTable(): TemplateResult {\n return this.dt.render();\n }\n\n protected renderEmptyTable(): TemplateResult {\n return html`\n <p>The trash bin is empty.</p>\n `;\n }\n\n protected renderTableHeader(): TemplateResult[] {\n const name = this.dt.header('Name', { class: 'name-cell' });\n const deleted = this.dt.header('Deleted', { class: 'updated-cell' });\n const menu = this.dt.header(html`<span hidden>Menu</span>`, { class: 'menu-cell' });\n return [name, deleted, menu];\n }\n\n protected renderTableItem(item: TrashEntry): TemplateResult[] {\n const { kind, name, info } = item;\n let icon: IconType | undefined;\n if (kind === ProjectKind) {\n icon = 'collectionsBookmark';\n } else if (kind === FolderKind) {\n icon = 'folder';\n } else if (kind === DataFileKind) {\n icon = 'schema';\n }\n\n const nameCell = this.dt.cell(html`\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"cell-icon\"></ui-icon>` : ''}\n ${name || 'Unnamed file'}\n `, { class: 'name-cell', data: { kind } });\n\n const deleted = this.dt.cell(html`\n <relative-time datetime=\"${new Date(info.time).toISOString()}\"></relative-time>\n `, { class: 'updated-cell' });\n\n const menu = this.dt.cell(this.renderItemOptions(item), { class: 'menu-cell' });\n\n return [nameCell, deleted, menu];\n }\n\n protected renderItemOptions(item: TrashEntry): TemplateResult {\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.itemOptionsSelectHandler}\"\n data-key=\"${item.key}\"\n >\n <ui-icon-button title=\"Project options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item image=\"icon\" data-option=\"restore\" role=\"menuitem\" title=\"Restores the file to its original folder.\">\n <ui-icon icon=\"restoreFromTrash\" slot=\"start\"></ui-icon>\n Restore\n </ui-list-item>\n <ui-list-item image=\"icon\" data-option=\"delete\" role=\"menuitem\" title=\"Permanently deleted the item.\">\n <ui-icon icon=\"deleteOutline\" slot=\"start\"></ui-icon>\n Delete forever\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderDeleteAllDialog(): TemplateResult {\n return html`\n <dialog id=\"deleteAllDialog\" class=\"warning\">\n <h3>Empty Trash?</h3>\n <div>\n <p class=\"body-medium\">\n This will permanently delete all files in the trash.\n </p>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelDeleteAllDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"delete\" @click=\"${this.deleteAllHandler}\">Delete</ui-button>\n </div>\n </dialog>\n `;\n }\n\n protected renderDeleteFilesDialog(): TemplateResult {\n const { deleteItems } = this;\n return html`\n <dialog id=\"deleteFilesDialog\" class=\"warning\">\n <h3>Delete Forever?</h3>\n <div>\n ${deleteItems.length > 1 ? this.renderDeleteMultiFile(deleteItems) : this.renderDeleteSingleFile(deleteItems[0])}\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelDeleteFilesDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"delete\" @click=\"${this.deleteFilesHandler}\">Delete</ui-button>\n </div>\n </dialog>\n `;\n }\n\n protected renderDeleteSingleFile(item: TrashEntry): TemplateResult {\n if (!item) {\n return html`\n <p class=\"body-medium\">Invalid state. Couldn't find files to delete.</p>\n `;\n }\n return html`\n <p class=\"body-medium\">\n <b>\"${item.name}\"</b> will be deleted forever and you won't be able to restore it.\n </p>\n `;\n }\n\n protected renderDeleteMultiFile(items: TrashEntry[]): TemplateResult {\n return html`\n <p class=\"body-medium\">\n The following files will be deleted forever and you won't be able to restore them:\n </p>\n <ui-divider></ui-divider>\n <ul>\n ${items.map(i => html`<li>${i.name}</li>`)}\n </ul>\n <ui-divider></ui-divider>\n `;\n }\n}\n"]}
|
|
@@ -15,21 +15,21 @@ export class DemoPage extends RouteMixin(RenderableMixin(EventTarget)) {
|
|
|
15
15
|
static get styles() {
|
|
16
16
|
return [typography, styles, surface];
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Component name rendered in the header section.
|
|
20
|
-
*/
|
|
21
|
-
componentName = '';
|
|
22
|
-
/**
|
|
23
|
-
* Determines whether the initial render had run and the `firstRender()`
|
|
24
|
-
* function was called.
|
|
25
|
-
*/
|
|
26
|
-
firstRendered = false;
|
|
27
|
-
/**
|
|
28
|
-
* Whether or not the dark theme is active
|
|
29
|
-
*/
|
|
30
|
-
darkThemeActive = false;
|
|
31
18
|
constructor() {
|
|
32
19
|
super();
|
|
20
|
+
/**
|
|
21
|
+
* Component name rendered in the header section.
|
|
22
|
+
*/
|
|
23
|
+
this.componentName = '';
|
|
24
|
+
/**
|
|
25
|
+
* Determines whether the initial render had run and the `firstRender()`
|
|
26
|
+
* function was called.
|
|
27
|
+
*/
|
|
28
|
+
this.firstRendered = false;
|
|
29
|
+
/**
|
|
30
|
+
* Whether or not the dark theme is active
|
|
31
|
+
*/
|
|
32
|
+
this.darkThemeActive = false;
|
|
33
33
|
this.handleMediaQuery = this.handleMediaQuery.bind(this);
|
|
34
34
|
this.initMediaQueries();
|
|
35
35
|
document.body.classList.add('demo');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DemoPage.js","sourceRoot":"","sources":["../../../src/pages/demo/DemoPage.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAA6B,MAAM,KAAK,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,YAAY,MAAM,wBAAwB,CAAC;AAEvD,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAC9D,OAAO,OAAO,MAAM,mCAAmC,CAAC;AACxD,OAAO,4BAA4B,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAgB,QAAS,SAAQ,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7E,MAAM,KAAK,MAAM;QACf,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;
|
|
1
|
+
{"version":3,"file":"DemoPage.js","sourceRoot":"","sources":["../../../src/pages/demo/DemoPage.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult, CSSResult } from 'lit';\nimport { RenderableMixin } from '../../mixins/RenderableMixin.js';\nimport { reactive } from '../../lib/decorators.js';\nimport styles from './DemoStyles.js';\nimport { RouteMixin } from '../../mixins/RouteMixin.js';\nimport * as MonacoLoader from \"../../monaco/loader.js\";\nimport CheckboxElement from '../../ui/input/CheckboxElement.js';\nimport typography from \"../../styles/m3/typography.module.js\";\nimport surface from \"../../styles/m3/surface.module.js\";\nimport '../../define/ui/ui-icon.js';\n\n/**\n * A base class for demo pages in the API Client ecosystem.\n */\nexport abstract class DemoPage extends RouteMixin(RenderableMixin(EventTarget)) {\n static get styles(): CSSResult[] {\n return [typography, styles, surface];\n }\n\n /**\n * Component name rendered in the header section.\n */\n @reactive() componentName = '';\n\n /**\n * Determines whether the initial render had run and the `firstRender()`\n * function was called.\n */\n override firstRendered = false;\n\n /**\n * Whether or not the dark theme is active\n */\n @reactive() darkThemeActive = false;\n\n constructor() {\n super();\n this.handleMediaQuery = this.handleMediaQuery.bind(this);\n this.initMediaQueries();\n\n document.body.classList.add('demo');\n }\n\n /**\n * Initializes media queries and observers.\n */\n initMediaQueries(): void {\n const matcher = window.matchMedia('(prefers-color-scheme: dark)');\n if (matcher.matches) {\n this.darkThemeActive = true;\n }\n this.themeActiveCallback();\n matcher.addEventListener('change', this.handleMediaQuery);\n }\n\n protected handleMediaQuery(e: MediaQueryListEvent): void {\n this.darkThemeActive = e.matches;\n this.themeActiveCallback();\n }\n\n /**\n * The callback is called when the `darkThemeActive` property change.\n * Overwrite this function to change the theme of the demo page.\n * \n * Note, this is not called by the `darkThemeActive` setter. This is called during the \n * initialization and then when the media query event is dispatched.\n * Call this manually when changing this value in the child page.\n */\n protected themeActiveCallback(): void {\n const { darkThemeActive } = this;\n if (darkThemeActive) {\n this.activateTheme('dark');\n } else {\n this.activateTheme('light');\n }\n }\n\n protected activateTheme(type: 'light' | 'dark'): void {\n const root = document.querySelector('html');\n if (!root) {\n return;\n }\n const { classList } = root;\n // clear all themes\n classList.forEach((value) => {\n if (value.startsWith('theme-')) {\n classList.remove(value);\n }\n });\n const name = `theme-${type}`;\n classList.add(name);\n }\n\n /**\n * A handler for the `change` event for an element that has `checked` and `name` properties.\n * This can be used with `ui-switch`, `ui-checkbox`, and `checkbox` elements.\n *\n * The `name` should correspond to a variable name to be set. The set value is the value\n * of `checked` property read from the event's target.\n */\n protected _toggleBooleanOption(e: Event): void {\n const { name, checked } = e.target as CheckboxElement;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this as any)[name as string] = checked;\n }\n\n async loadMonaco(): Promise<void> {\n const base = new URL('/node_modules/monaco-editor/', window.location.href).toString();\n MonacoLoader.createEnvironment(base);\n await MonacoLoader.loadMonaco(base);\n await MonacoLoader.monacoReady();\n }\n\n /**\n * The page render function. Usually you don't need to use it.\n * It renders the header template, main section, and the content.\n */\n override pageTemplate(): TemplateResult {\n return html`\n ${this.headerTemplate()}\n ${this.navigationTemplate()}\n <main>\n ${this.contentTemplate()}\n </main>`;\n }\n\n /**\n * Call this on the top of the `render()` method to render demo navigation\n * @returns HTML template for demo header\n */\n headerTemplate(): TemplateResult {\n const { componentName } = this;\n return html`\n <header>\n ${componentName ? html`<h1 class=\"api-title\">${componentName}</h1>` : ''}\n </header>`;\n }\n\n navigationTemplate(): TemplateResult {\n return html``;\n }\n\n /**\n * Abstract method. When not overriding `render()` method you can use\n * this function to render content inside the standard API components layout.\n *\n * ```\n * contentTemplate() {\n * return html`<p>Demo content</p>`;\n * }\n * ```\n */\n abstract contentTemplate(): TemplateResult;\n}\n"]}
|