openvsx-webui-test 0.17.1
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/LICENSE +277 -0
- package/lib/components/banner.d.ts +21 -0
- package/lib/components/banner.d.ts.map +1 -0
- package/lib/components/banner.js +41 -0
- package/lib/components/banner.js.map +1 -0
- package/lib/components/button-with-progress.d.ts +21 -0
- package/lib/components/button-with-progress.d.ts.map +1 -0
- package/lib/components/button-with-progress.js +26 -0
- package/lib/components/button-with-progress.js.map +1 -0
- package/lib/components/copy-to-clipboard.d.ts +21 -0
- package/lib/components/copy-to-clipboard.d.ts.map +1 -0
- package/lib/components/copy-to-clipboard.js +25 -0
- package/lib/components/copy-to-clipboard.js.map +1 -0
- package/lib/components/delayed-load-indicator.d.ts +17 -0
- package/lib/components/delayed-load-indicator.d.ts.map +1 -0
- package/lib/components/delayed-load-indicator.js +40 -0
- package/lib/components/delayed-load-indicator.js.map +1 -0
- package/lib/components/error-dialog.d.ts +18 -0
- package/lib/components/error-dialog.d.ts.map +1 -0
- package/lib/components/error-dialog.js +65 -0
- package/lib/components/error-dialog.js.map +1 -0
- package/lib/components/hover-popover.d.ts +17 -0
- package/lib/components/hover-popover.d.ts.map +1 -0
- package/lib/components/hover-popover.js +24 -0
- package/lib/components/hover-popover.js.map +1 -0
- package/lib/components/info-dialog.d.ts +17 -0
- package/lib/components/info-dialog.d.ts.map +1 -0
- package/lib/components/info-dialog.js +29 -0
- package/lib/components/info-dialog.js.map +1 -0
- package/lib/components/link-icon.d.ts +16 -0
- package/lib/components/link-icon.d.ts.map +1 -0
- package/lib/components/link-icon.js +13 -0
- package/lib/components/link-icon.js.map +1 -0
- package/lib/components/sanitized-markdown.d.ts +17 -0
- package/lib/components/sanitized-markdown.d.ts.map +1 -0
- package/lib/components/sanitized-markdown.js +106 -0
- package/lib/components/sanitized-markdown.js.map +1 -0
- package/lib/components/sidepanel/navigation-item.d.ts +19 -0
- package/lib/components/sidepanel/navigation-item.d.ts.map +1 -0
- package/lib/components/sidepanel/navigation-item.js +36 -0
- package/lib/components/sidepanel/navigation-item.js.map +1 -0
- package/lib/components/sidepanel/sidepanel.d.ts +12 -0
- package/lib/components/sidepanel/sidepanel.d.ts.map +1 -0
- package/lib/components/sidepanel/sidepanel.js +27 -0
- package/lib/components/sidepanel/sidepanel.js.map +1 -0
- package/lib/components/text-divider.d.ts +16 -0
- package/lib/components/text-divider.d.ts.map +1 -0
- package/lib/components/text-divider.js +20 -0
- package/lib/components/text-divider.js.map +1 -0
- package/lib/components/timestamp.d.ts +17 -0
- package/lib/components/timestamp.d.ts.map +1 -0
- package/lib/components/timestamp.js +19 -0
- package/lib/components/timestamp.js.map +1 -0
- package/lib/context.d.ts +24 -0
- package/lib/context.d.ts.map +1 -0
- package/lib/context.js +13 -0
- package/lib/context.js.map +1 -0
- package/lib/default/about.d.ts +13 -0
- package/lib/default/about.d.ts.map +1 -0
- package/lib/default/about.js +30 -0
- package/lib/default/about.js.map +1 -0
- package/lib/default/default-app.d.ts +11 -0
- package/lib/default/default-app.d.ts.map +1 -0
- package/lib/default/default-app.js +71 -0
- package/lib/default/default-app.js.map +1 -0
- package/lib/default/login.d.ts +16 -0
- package/lib/default/login.d.ts.map +1 -0
- package/lib/default/login.js +28 -0
- package/lib/default/login.js.map +1 -0
- package/lib/default/menu-content.d.ts +43 -0
- package/lib/default/menu-content.d.ts.map +1 -0
- package/lib/default/menu-content.js +156 -0
- package/lib/default/menu-content.js.map +1 -0
- package/lib/default/openvsx-registry-logo.d.ts +18 -0
- package/lib/default/openvsx-registry-logo.d.ts.map +1 -0
- package/lib/default/openvsx-registry-logo.js +18 -0
- package/lib/default/openvsx-registry-logo.js.map +1 -0
- package/lib/default/page-settings.d.ts +12 -0
- package/lib/default/page-settings.d.ts.map +1 -0
- package/lib/default/page-settings.js +110 -0
- package/lib/default/page-settings.js.map +1 -0
- package/lib/default/server.d.ts +11 -0
- package/lib/default/server.d.ts.map +1 -0
- package/lib/default/server.js +50 -0
- package/lib/default/server.js.map +1 -0
- package/lib/default/theme.d.ts +29 -0
- package/lib/default/theme.d.ts.map +1 -0
- package/lib/default/theme.js +40 -0
- package/lib/default/theme.js.map +1 -0
- package/lib/extension-registry-service.d.ts +115 -0
- package/lib/extension-registry-service.d.ts.map +1 -0
- package/lib/extension-registry-service.js +571 -0
- package/lib/extension-registry-service.js.map +1 -0
- package/lib/extension-registry-types.d.ts +215 -0
- package/lib/extension-registry-types.d.ts.map +1 -0
- package/lib/extension-registry-types.js +20 -0
- package/lib/extension-registry-types.js.map +1 -0
- package/lib/header-menu.d.ts +16 -0
- package/lib/header-menu.d.ts.map +1 -0
- package/lib/header-menu.js +48 -0
- package/lib/header-menu.js.map +1 -0
- package/lib/index.d.ts +18 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +18 -0
- package/lib/index.js.map +1 -0
- package/lib/main.d.ts +20 -0
- package/lib/main.d.ts.map +1 -0
- package/lib/main.js +112 -0
- package/lib/main.js.map +1 -0
- package/lib/not-found.d.ts +3 -0
- package/lib/not-found.d.ts.map +1 -0
- package/lib/not-found.js +10 -0
- package/lib/not-found.js.map +1 -0
- package/lib/other-pages.d.ts +8 -0
- package/lib/other-pages.d.ts.map +1 -0
- package/lib/other-pages.js +94 -0
- package/lib/other-pages.js.map +1 -0
- package/lib/page-settings.d.ts +71 -0
- package/lib/page-settings.d.ts.map +1 -0
- package/lib/page-settings.js +11 -0
- package/lib/page-settings.js.map +1 -0
- package/lib/pages/admin-dashboard/admin-dashboard.d.ts +22 -0
- package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/admin-dashboard.js +75 -0
- package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -0
- package/lib/pages/admin-dashboard/extension-admin.d.ts +12 -0
- package/lib/pages/admin-dashboard/extension-admin.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/extension-admin.js +98 -0
- package/lib/pages/admin-dashboard/extension-admin.js.map +1 -0
- package/lib/pages/admin-dashboard/extension-remove-dialog.d.ts +18 -0
- package/lib/pages/admin-dashboard/extension-remove-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/extension-remove-dialog.js +73 -0
- package/lib/pages/admin-dashboard/extension-remove-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/extension-version-container.d.ts +17 -0
- package/lib/pages/admin-dashboard/extension-version-container.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/extension-version-container.js +136 -0
- package/lib/pages/admin-dashboard/extension-version-container.js.map +1 -0
- package/lib/pages/admin-dashboard/namespace-admin.d.ts +12 -0
- package/lib/pages/admin-dashboard/namespace-admin.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/namespace-admin.js +103 -0
- package/lib/pages/admin-dashboard/namespace-admin.js.map +1 -0
- package/lib/pages/admin-dashboard/namespace-change-dialog.d.ts +19 -0
- package/lib/pages/admin-dashboard/namespace-change-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/namespace-change-dialog.js +99 -0
- package/lib/pages/admin-dashboard/namespace-change-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/namespace-input.d.ts +21 -0
- package/lib/pages/admin-dashboard/namespace-input.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/namespace-input.js +53 -0
- package/lib/pages/admin-dashboard/namespace-input.js.map +1 -0
- package/lib/pages/admin-dashboard/publisher-admin.d.ts +15 -0
- package/lib/pages/admin-dashboard/publisher-admin.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/publisher-admin.js +84 -0
- package/lib/pages/admin-dashboard/publisher-admin.js.map +1 -0
- package/lib/pages/admin-dashboard/publisher-details.d.ts +17 -0
- package/lib/pages/admin-dashboard/publisher-details.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/publisher-details.js +36 -0
- package/lib/pages/admin-dashboard/publisher-details.js.map +1 -0
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.d.ts +16 -0
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.js +105 -0
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.d.ts +16 -0
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.js +55 -0
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.js.map +1 -0
- package/lib/pages/admin-dashboard/search-list-container.d.ts +17 -0
- package/lib/pages/admin-dashboard/search-list-container.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/search-list-container.js +24 -0
- package/lib/pages/admin-dashboard/search-list-container.js.map +1 -0
- package/lib/pages/admin-dashboard/welcome.d.ts +12 -0
- package/lib/pages/admin-dashboard/welcome.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/welcome.js +42 -0
- package/lib/pages/admin-dashboard/welcome.js.map +1 -0
- package/lib/pages/extension-detail/extension-detail-changes.d.ts +16 -0
- package/lib/pages/extension-detail/extension-detail-changes.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-detail-changes.js +91 -0
- package/lib/pages/extension-detail/extension-detail-changes.js.map +1 -0
- package/lib/pages/extension-detail/extension-detail-downloads-menu.d.ts +18 -0
- package/lib/pages/extension-detail/extension-detail-downloads-menu.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-detail-downloads-menu.js +30 -0
- package/lib/pages/extension-detail/extension-detail-downloads-menu.js.map +1 -0
- package/lib/pages/extension-detail/extension-detail-overview.d.ts +17 -0
- package/lib/pages/extension-detail/extension-detail-overview.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-detail-overview.js +296 -0
- package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -0
- package/lib/pages/extension-detail/extension-detail-reviews.d.ts +17 -0
- package/lib/pages/extension-detail/extension-detail-reviews.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-detail-reviews.js +136 -0
- package/lib/pages/extension-detail/extension-detail-reviews.js.map +1 -0
- package/lib/pages/extension-detail/extension-detail.d.ts +31 -0
- package/lib/pages/extension-detail/extension-detail.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-detail.js +378 -0
- package/lib/pages/extension-detail/extension-detail.js.map +1 -0
- package/lib/pages/extension-detail/extension-rating-star-setter.d.ts +15 -0
- package/lib/pages/extension-detail/extension-rating-star-setter.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-rating-star-setter.js +32 -0
- package/lib/pages/extension-detail/extension-rating-star-setter.js.map +1 -0
- package/lib/pages/extension-detail/extension-rating-stars.d.ts +16 -0
- package/lib/pages/extension-detail/extension-rating-stars.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-rating-stars.js +31 -0
- package/lib/pages/extension-detail/extension-rating-stars.js.map +1 -0
- package/lib/pages/extension-detail/extension-review-dialog.d.ts +18 -0
- package/lib/pages/extension-detail/extension-review-dialog.d.ts.map +1 -0
- package/lib/pages/extension-detail/extension-review-dialog.js +100 -0
- package/lib/pages/extension-detail/extension-review-dialog.js.map +1 -0
- package/lib/pages/extension-list/extension-list-container.d.ts +15 -0
- package/lib/pages/extension-list/extension-list-container.d.ts.map +1 -0
- package/lib/pages/extension-list/extension-list-container.js +79 -0
- package/lib/pages/extension-list/extension-list-container.js.map +1 -0
- package/lib/pages/extension-list/extension-list-header.d.ts +25 -0
- package/lib/pages/extension-list/extension-list-header.d.ts.map +1 -0
- package/lib/pages/extension-list/extension-list-header.js +148 -0
- package/lib/pages/extension-list/extension-list-header.js.map +1 -0
- package/lib/pages/extension-list/extension-list-item.d.ts +18 -0
- package/lib/pages/extension-list/extension-list-item.d.ts.map +1 -0
- package/lib/pages/extension-list/extension-list-item.js +89 -0
- package/lib/pages/extension-list/extension-list-item.js.map +1 -0
- package/lib/pages/extension-list/extension-list-searchfield.d.ts +22 -0
- package/lib/pages/extension-list/extension-list-searchfield.d.ts.map +1 -0
- package/lib/pages/extension-list/extension-list-searchfield.js +54 -0
- package/lib/pages/extension-list/extension-list-searchfield.js.map +1 -0
- package/lib/pages/extension-list/extension-list.d.ts +18 -0
- package/lib/pages/extension-list/extension-list.d.ts.map +1 -0
- package/lib/pages/extension-list/extension-list.js +141 -0
- package/lib/pages/extension-list/extension-list.js.map +1 -0
- package/lib/pages/namespace-detail/namespace-detail.d.ts +19 -0
- package/lib/pages/namespace-detail/namespace-detail.d.ts.map +1 -0
- package/lib/pages/namespace-detail/namespace-detail.js +175 -0
- package/lib/pages/namespace-detail/namespace-detail.js.map +1 -0
- package/lib/pages/user/add-namespace-member-dialog.d.ts +22 -0
- package/lib/pages/user/add-namespace-member-dialog.d.ts.map +1 -0
- package/lib/pages/user/add-namespace-member-dialog.js +114 -0
- package/lib/pages/user/add-namespace-member-dialog.js.map +1 -0
- package/lib/pages/user/avatar.d.ts +12 -0
- package/lib/pages/user/avatar.d.ts.map +1 -0
- package/lib/pages/user/avatar.js +59 -0
- package/lib/pages/user/avatar.js.map +1 -0
- package/lib/pages/user/create-namespace-dialog.d.ts +15 -0
- package/lib/pages/user/create-namespace-dialog.d.ts.map +1 -0
- package/lib/pages/user/create-namespace-dialog.js +90 -0
- package/lib/pages/user/create-namespace-dialog.js.map +1 -0
- package/lib/pages/user/generate-token-dialog.d.ts +15 -0
- package/lib/pages/user/generate-token-dialog.d.ts.map +1 -0
- package/lib/pages/user/generate-token-dialog.js +101 -0
- package/lib/pages/user/generate-token-dialog.js.map +1 -0
- package/lib/pages/user/logout.d.ts +12 -0
- package/lib/pages/user/logout.d.ts.map +1 -0
- package/lib/pages/user/logout.js +55 -0
- package/lib/pages/user/logout.js.map +1 -0
- package/lib/pages/user/publish-extension-dialog.d.ts +15 -0
- package/lib/pages/user/publish-extension-dialog.d.ts.map +1 -0
- package/lib/pages/user/publish-extension-dialog.js +202 -0
- package/lib/pages/user/publish-extension-dialog.js.map +1 -0
- package/lib/pages/user/user-extension-list.d.ts +19 -0
- package/lib/pages/user/user-extension-list.d.ts.map +1 -0
- package/lib/pages/user/user-extension-list.js +26 -0
- package/lib/pages/user/user-extension-list.js.map +1 -0
- package/lib/pages/user/user-namespace-details.d.ts +16 -0
- package/lib/pages/user/user-namespace-details.d.ts.map +1 -0
- package/lib/pages/user/user-namespace-details.js +473 -0
- package/lib/pages/user/user-namespace-details.js.map +1 -0
- package/lib/pages/user/user-namespace-extension-list-item.d.ts +17 -0
- package/lib/pages/user/user-namespace-extension-list-item.d.ts.map +1 -0
- package/lib/pages/user/user-namespace-extension-list-item.js +100 -0
- package/lib/pages/user/user-namespace-extension-list-item.js.map +1 -0
- package/lib/pages/user/user-namespace-extension-list.d.ts +16 -0
- package/lib/pages/user/user-namespace-extension-list.d.ts.map +1 -0
- package/lib/pages/user/user-namespace-extension-list.js +65 -0
- package/lib/pages/user/user-namespace-extension-list.js.map +1 -0
- package/lib/pages/user/user-namespace-member-component.d.ts +20 -0
- package/lib/pages/user/user-namespace-member-component.d.ts.map +1 -0
- package/lib/pages/user/user-namespace-member-component.js +54 -0
- package/lib/pages/user/user-namespace-member-component.js.map +1 -0
- package/lib/pages/user/user-namespace-member-list.d.ts +19 -0
- package/lib/pages/user/user-namespace-member-list.d.ts.map +1 -0
- package/lib/pages/user/user-namespace-member-list.js +89 -0
- package/lib/pages/user/user-namespace-member-list.js.map +1 -0
- package/lib/pages/user/user-publisher-agreement.d.ts +16 -0
- package/lib/pages/user/user-publisher-agreement.d.ts.map +1 -0
- package/lib/pages/user/user-publisher-agreement.js +129 -0
- package/lib/pages/user/user-publisher-agreement.js.map +1 -0
- package/lib/pages/user/user-setting-tabs.d.ts +12 -0
- package/lib/pages/user/user-setting-tabs.d.ts.map +1 -0
- package/lib/pages/user/user-setting-tabs.js +33 -0
- package/lib/pages/user/user-setting-tabs.js.map +1 -0
- package/lib/pages/user/user-settings-delete-extension.d.ts +16 -0
- package/lib/pages/user/user-settings-delete-extension.d.ts.map +1 -0
- package/lib/pages/user/user-settings-delete-extension.js +75 -0
- package/lib/pages/user/user-settings-delete-extension.js.map +1 -0
- package/lib/pages/user/user-settings-extensions.d.ts +12 -0
- package/lib/pages/user/user-settings-extensions.d.ts.map +1 -0
- package/lib/pages/user/user-settings-extensions.js +81 -0
- package/lib/pages/user/user-settings-extensions.js.map +1 -0
- package/lib/pages/user/user-settings-namespace-detail.d.ts +25 -0
- package/lib/pages/user/user-settings-namespace-detail.d.ts.map +1 -0
- package/lib/pages/user/user-settings-namespace-detail.js +105 -0
- package/lib/pages/user/user-settings-namespace-detail.js.map +1 -0
- package/lib/pages/user/user-settings-namespaces.d.ts +12 -0
- package/lib/pages/user/user-settings-namespaces.d.ts.map +1 -0
- package/lib/pages/user/user-settings-namespaces.js +112 -0
- package/lib/pages/user/user-settings-namespaces.js.map +1 -0
- package/lib/pages/user/user-settings-profile.d.ts +17 -0
- package/lib/pages/user/user-settings-profile.d.ts.map +1 -0
- package/lib/pages/user/user-settings-profile.js +79 -0
- package/lib/pages/user/user-settings-profile.js.map +1 -0
- package/lib/pages/user/user-settings-tokens.d.ts +19 -0
- package/lib/pages/user/user-settings-tokens.d.ts.map +1 -0
- package/lib/pages/user/user-settings-tokens.js +153 -0
- package/lib/pages/user/user-settings-tokens.js.map +1 -0
- package/lib/pages/user/user-settings.d.ts +24 -0
- package/lib/pages/user/user-settings.d.ts.map +1 -0
- package/lib/pages/user/user-settings.js +90 -0
- package/lib/pages/user/user-settings.js.map +1 -0
- package/lib/server-request.d.ts +19 -0
- package/lib/server-request.d.ts.map +1 -0
- package/lib/server-request.js +88 -0
- package/lib/server-request.js.map +1 -0
- package/lib/utils.d.ts +44 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +203 -0
- package/lib/utils.js.map +1 -0
- package/package.json +122 -0
- package/src/components/banner.tsx +69 -0
- package/src/components/button-with-progress.tsx +51 -0
- package/src/components/copy-to-clipboard.tsx +49 -0
- package/src/components/delayed-load-indicator.tsx +50 -0
- package/src/components/error-dialog.tsx +96 -0
- package/src/components/hover-popover.tsx +50 -0
- package/src/components/info-dialog.tsx +48 -0
- package/src/components/link-icon.ts +13 -0
- package/src/components/sanitized-markdown.tsx +119 -0
- package/src/components/sidepanel/navigation-item.tsx +54 -0
- package/src/components/sidepanel/sidepanel.tsx +38 -0
- package/src/components/text-divider.tsx +29 -0
- package/src/components/timestamp.tsx +30 -0
- package/src/context.ts +27 -0
- package/src/default/about.tsx +36 -0
- package/src/default/default-app.tsx +75 -0
- package/src/default/login.tsx +43 -0
- package/src/default/menu-content.tsx +252 -0
- package/src/default/openvsx-registry-logo.tsx +29 -0
- package/src/default/page-settings.tsx +135 -0
- package/src/default/server.ts +56 -0
- package/src/default/theme.tsx +58 -0
- package/src/extension-registry-service.ts +605 -0
- package/src/extension-registry-types.ts +260 -0
- package/src/header-menu.tsx +69 -0
- package/src/index.ts +18 -0
- package/src/main.css +26 -0
- package/src/main.tsx +135 -0
- package/src/not-found.tsx +12 -0
- package/src/other-pages.tsx +134 -0
- package/src/page-settings.ts +55 -0
- package/src/pages/admin-dashboard/admin-dashboard.tsx +91 -0
- package/src/pages/admin-dashboard/extension-admin.tsx +117 -0
- package/src/pages/admin-dashboard/extension-remove-dialog.tsx +96 -0
- package/src/pages/admin-dashboard/extension-version-container.tsx +187 -0
- package/src/pages/admin-dashboard/namespace-admin.tsx +112 -0
- package/src/pages/admin-dashboard/namespace-change-dialog.tsx +132 -0
- package/src/pages/admin-dashboard/namespace-input.tsx +82 -0
- package/src/pages/admin-dashboard/publisher-admin.tsx +86 -0
- package/src/pages/admin-dashboard/publisher-details.tsx +46 -0
- package/src/pages/admin-dashboard/publisher-revoke-dialog.tsx +130 -0
- package/src/pages/admin-dashboard/publisher-revoke-tokens-button.tsx +58 -0
- package/src/pages/admin-dashboard/search-list-container.tsx +39 -0
- package/src/pages/admin-dashboard/welcome.tsx +57 -0
- package/src/pages/extension-detail/extension-detail-changes.tsx +102 -0
- package/src/pages/extension-detail/extension-detail-downloads-menu.tsx +62 -0
- package/src/pages/extension-detail/extension-detail-overview.tsx +395 -0
- package/src/pages/extension-detail/extension-detail-reviews.tsx +176 -0
- package/src/pages/extension-detail/extension-detail.tsx +496 -0
- package/src/pages/extension-detail/extension-rating-star-setter.tsx +44 -0
- package/src/pages/extension-detail/extension-rating-stars.tsx +38 -0
- package/src/pages/extension-detail/extension-review-dialog.tsx +130 -0
- package/src/pages/extension-list/extension-list-container.tsx +106 -0
- package/src/pages/extension-list/extension-list-header.tsx +209 -0
- package/src/pages/extension-list/extension-list-item.tsx +109 -0
- package/src/pages/extension-list/extension-list-searchfield.tsx +91 -0
- package/src/pages/extension-list/extension-list.tsx +166 -0
- package/src/pages/namespace-detail/namespace-detail.tsx +232 -0
- package/src/pages/user/add-namespace-member-dialog.tsx +163 -0
- package/src/pages/user/avatar.tsx +102 -0
- package/src/pages/user/create-namespace-dialog.tsx +117 -0
- package/src/pages/user/generate-token-dialog.tsx +157 -0
- package/src/pages/user/logout.tsx +53 -0
- package/src/pages/user/publish-extension-dialog.tsx +241 -0
- package/src/pages/user/user-extension-list.tsx +45 -0
- package/src/pages/user/user-namespace-details.tsx +631 -0
- package/src/pages/user/user-namespace-extension-list-item.tsx +135 -0
- package/src/pages/user/user-namespace-extension-list.tsx +72 -0
- package/src/pages/user/user-namespace-member-component.tsx +91 -0
- package/src/pages/user/user-namespace-member-list.tsx +113 -0
- package/src/pages/user/user-publisher-agreement.tsx +164 -0
- package/src/pages/user/user-setting-tabs.tsx +47 -0
- package/src/pages/user/user-settings-delete-extension.tsx +81 -0
- package/src/pages/user/user-settings-extensions.tsx +91 -0
- package/src/pages/user/user-settings-namespace-detail.tsx +148 -0
- package/src/pages/user/user-settings-namespaces.tsx +157 -0
- package/src/pages/user/user-settings-profile.tsx +92 -0
- package/src/pages/user/user-settings-tokens.tsx +217 -0
- package/src/pages/user/user-settings.tsx +116 -0
- package/src/server-request.ts +95 -0
- package/src/svg.d.ts +14 -0
- package/src/utils.ts +219 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/** ******************************************************************************
|
|
2
|
+
* Copyright (c) 2025 Precies. Software OU and others
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
* ****************************************************************************** */
|
|
10
|
+
|
|
11
|
+
import React, { FunctionComponent, useState, useContext, useEffect, useRef } from 'react';
|
|
12
|
+
import { Box } from '@mui/material';
|
|
13
|
+
import { MainContext } from '../../context';
|
|
14
|
+
import { isError, Extension, TargetPlatformVersion } from '../../extension-registry-types';
|
|
15
|
+
import { DelayedLoadIndicator } from '../../components/delayed-load-indicator';
|
|
16
|
+
import { ExtensionVersionContainer } from '../admin-dashboard/extension-version-container';
|
|
17
|
+
import { useNavigate } from 'react-router';
|
|
18
|
+
import { UserSettingsRoutes } from './user-settings';
|
|
19
|
+
|
|
20
|
+
export const UserSettingsDeleteExtension: FunctionComponent<UserSettingsDeleteExtensionProps> = props => {
|
|
21
|
+
const navigate = useNavigate();
|
|
22
|
+
const abortController = useRef<AbortController>(new AbortController());
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
return () => {
|
|
25
|
+
abortController.current.abort();
|
|
26
|
+
};
|
|
27
|
+
}, []);
|
|
28
|
+
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
findExtension();
|
|
31
|
+
}, [props.namespace, props.extension]);
|
|
32
|
+
|
|
33
|
+
const [loading, setLoading] = useState(false);
|
|
34
|
+
|
|
35
|
+
const { service, handleError } = useContext(MainContext);
|
|
36
|
+
const [extension, setExtension] = useState<Extension | undefined>(undefined);
|
|
37
|
+
const findExtension = async () => {
|
|
38
|
+
try {
|
|
39
|
+
setLoading(true);
|
|
40
|
+
const extensionDetail = await service.getExtension(abortController.current, props.namespace, props.extension);
|
|
41
|
+
if (isError(extensionDetail)) {
|
|
42
|
+
throw extensionDetail;
|
|
43
|
+
}
|
|
44
|
+
setExtension(extensionDetail);
|
|
45
|
+
setLoading(false);
|
|
46
|
+
} catch (err) {
|
|
47
|
+
setLoading(false);
|
|
48
|
+
setExtension(undefined);
|
|
49
|
+
if (err && err.status === 404) {
|
|
50
|
+
navigate(UserSettingsRoutes.EXTENSIONS);
|
|
51
|
+
} else {
|
|
52
|
+
handleError(err);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const onRemove = async (targetPlatformVersions?: TargetPlatformVersion[]) => {
|
|
58
|
+
if (extension == null) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
await service.deleteExtensions(abortController.current, { namespace: extension.namespace, extension: extension.name, targetPlatformVersions: targetPlatformVersions?.map(({ version, targetPlatform }) => ({ version, targetPlatform })) });
|
|
63
|
+
await findExtension();
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<Box>
|
|
68
|
+
<DelayedLoadIndicator loading={loading} />
|
|
69
|
+
{
|
|
70
|
+
extension ?
|
|
71
|
+
<ExtensionVersionContainer onRemove={onRemove} extension={extension} />
|
|
72
|
+
: ''
|
|
73
|
+
}
|
|
74
|
+
</Box>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export interface UserSettingsDeleteExtensionProps {
|
|
79
|
+
namespace: string;
|
|
80
|
+
extension: string;
|
|
81
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/** ******************************************************************************
|
|
2
|
+
* Copyright (c) 2022 Precies. Software and others
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
* ****************************************************************************** */
|
|
10
|
+
|
|
11
|
+
import React, { FunctionComponent, useContext, useEffect, useState, useRef } from 'react';
|
|
12
|
+
import { Extension } from '../../extension-registry-types';
|
|
13
|
+
import { Box, Typography } from '@mui/material';
|
|
14
|
+
import { PublishExtensionDialog } from './publish-extension-dialog';
|
|
15
|
+
import { UserExtensionList } from './user-extension-list';
|
|
16
|
+
import { isError } from '../../extension-registry-types';
|
|
17
|
+
import { DelayedLoadIndicator } from '../../components/delayed-load-indicator';
|
|
18
|
+
import { MainContext } from '../../context';
|
|
19
|
+
|
|
20
|
+
export const UserSettingsExtensions: FunctionComponent = () => {
|
|
21
|
+
|
|
22
|
+
const [loading, setLoading] = useState(true);
|
|
23
|
+
const [extensions, setExtensions] = useState(Array<Extension>());
|
|
24
|
+
const { user, service, handleError } = useContext(MainContext);
|
|
25
|
+
const abortController = useRef<AbortController>(new AbortController());
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
updateExtensions();
|
|
29
|
+
return () => {
|
|
30
|
+
abortController.current.abort();
|
|
31
|
+
};
|
|
32
|
+
}, []);
|
|
33
|
+
|
|
34
|
+
const handleExtensionPublished = () => {
|
|
35
|
+
setLoading(true);
|
|
36
|
+
updateExtensions();
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const updateExtensions = async (): Promise<void> => {
|
|
40
|
+
if (!user) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const response = await service.getExtensions(abortController.current);
|
|
45
|
+
if (isError(response)) {
|
|
46
|
+
throw response;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const extensions = response as Extension[];
|
|
50
|
+
setExtensions(extensions);
|
|
51
|
+
setLoading(false);
|
|
52
|
+
} catch (err) {
|
|
53
|
+
handleError(err);
|
|
54
|
+
setLoading(false);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
return <>
|
|
59
|
+
<Box
|
|
60
|
+
sx={{
|
|
61
|
+
display: 'flex',
|
|
62
|
+
justifyContent: 'space-between',
|
|
63
|
+
flexDirection: { xs: 'column', sm: 'column', md: 'row', lg: 'row', xl: 'row' },
|
|
64
|
+
alignItems: { xs: 'center', sm: 'center', md: 'normal', lg: 'normal', xl: 'normal' }
|
|
65
|
+
}}
|
|
66
|
+
>
|
|
67
|
+
<Box>
|
|
68
|
+
<Typography variant='h5' gutterBottom>Extensions</Typography>
|
|
69
|
+
</Box>
|
|
70
|
+
<Box
|
|
71
|
+
sx={{
|
|
72
|
+
display: 'flex',
|
|
73
|
+
flexWrap: 'wrap',
|
|
74
|
+
justifyContent: { xs: 'center', sm: 'center', md: 'normal', lg: 'normal', xl: 'normal' }
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
<Box mr={1} mb={1}>
|
|
78
|
+
<PublishExtensionDialog extensionPublished={handleExtensionPublished}/>
|
|
79
|
+
</Box>
|
|
80
|
+
</Box>
|
|
81
|
+
</Box>
|
|
82
|
+
<Box mt={2}>
|
|
83
|
+
<DelayedLoadIndicator loading={loading} />
|
|
84
|
+
{
|
|
85
|
+
extensions && extensions.length > 0
|
|
86
|
+
? <UserExtensionList extensions={extensions} loading={loading} canDelete />
|
|
87
|
+
: <Typography variant='body1'>No extensions published under this namespace yet.</Typography>
|
|
88
|
+
}
|
|
89
|
+
</Box>
|
|
90
|
+
</>;
|
|
91
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 TypeFox and others
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
********************************************************************************/
|
|
10
|
+
|
|
11
|
+
import React, { FunctionComponent, createContext, useState } from 'react';
|
|
12
|
+
import { useLocation } from 'react-router-dom';
|
|
13
|
+
import { Box, Button, Link, Paper, Grid, Typography } from '@mui/material';
|
|
14
|
+
import { styled, Theme } from '@mui/material/styles';
|
|
15
|
+
import WarningIcon from '@mui/icons-material/Warning';
|
|
16
|
+
import { UserNamespaceExtensionListContainer } from './user-namespace-extension-list';
|
|
17
|
+
import { AdminDashboardRoutes } from '../admin-dashboard/admin-dashboard';
|
|
18
|
+
import { Namespace, UserData } from '../../extension-registry-types';
|
|
19
|
+
import { NamespaceChangeDialog } from '../admin-dashboard/namespace-change-dialog';
|
|
20
|
+
import { UserNamespaceMemberList } from './user-namespace-member-list';
|
|
21
|
+
import { UserNamespaceDetails } from './user-namespace-details';
|
|
22
|
+
|
|
23
|
+
export interface NamespaceDetailConfig {
|
|
24
|
+
defaultMemberRole?: 'contributor' | 'owner';
|
|
25
|
+
}
|
|
26
|
+
export const NamespaceDetailConfigContext = createContext<NamespaceDetailConfig>({});
|
|
27
|
+
|
|
28
|
+
const NamespaceDetailContainer = styled(Grid)(({ theme }: { theme: Theme }) => ({
|
|
29
|
+
flex: 5,
|
|
30
|
+
padding: theme.spacing(0, 1),
|
|
31
|
+
[theme.breakpoints.only('md')]: {
|
|
32
|
+
width: '80%'
|
|
33
|
+
},
|
|
34
|
+
[theme.breakpoints.down('sm')]: {
|
|
35
|
+
width: '100%'
|
|
36
|
+
}
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
const WarningPaper = styled(Paper)(({ theme }: { theme: Theme }) => ({
|
|
40
|
+
maxWidth: '800px',
|
|
41
|
+
margin: `0 ${theme.spacing(6)} ${theme.spacing(4)} ${theme.spacing(6)}`,
|
|
42
|
+
padding: theme.spacing(2),
|
|
43
|
+
display: 'flex',
|
|
44
|
+
[theme.breakpoints.down('sm')]: {
|
|
45
|
+
margin: `0 0 ${theme.spacing(2)} 0`,
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
|
|
49
|
+
const NamespaceHeader = styled(Box)(({ theme }: { theme: Theme }) => ({
|
|
50
|
+
display: 'flex',
|
|
51
|
+
justifyContent: 'space-between',
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
marginBottom: theme.spacing(1),
|
|
54
|
+
[theme.breakpoints.down('sm')]: {
|
|
55
|
+
flexDirection: 'column',
|
|
56
|
+
alignItems: 'center'
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
|
|
60
|
+
export const NamespaceDetail: FunctionComponent<NamespaceDetailProps> = props => {
|
|
61
|
+
const [changeDialogIsOpen, setChangeDialogIsOpen] = useState(false);
|
|
62
|
+
const { pathname } = useLocation();
|
|
63
|
+
|
|
64
|
+
const handleCloseChangeDialog = async () => {
|
|
65
|
+
setChangeDialogIsOpen(false);
|
|
66
|
+
};
|
|
67
|
+
const handleOpenChangeDialog = () => {
|
|
68
|
+
setChangeDialogIsOpen(true);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const warningColor = props.theme === 'dark' ? '#fff' : '#151515';
|
|
72
|
+
return <>
|
|
73
|
+
<NamespaceDetailContainer container direction='column' spacing={4}>
|
|
74
|
+
{
|
|
75
|
+
!props.namespace.verified && props.namespaceAccessUrl
|
|
76
|
+
? <Grid item>
|
|
77
|
+
<WarningPaper
|
|
78
|
+
sx={{
|
|
79
|
+
backgroundColor: `warning.${props.theme}`,
|
|
80
|
+
color: warningColor,
|
|
81
|
+
'& a': {
|
|
82
|
+
color: warningColor,
|
|
83
|
+
textDecoration: 'underline'
|
|
84
|
+
}
|
|
85
|
+
}}>
|
|
86
|
+
<WarningIcon fontSize='large' />
|
|
87
|
+
<Box ml={1}>
|
|
88
|
+
This namespace is not verified. <Link
|
|
89
|
+
href={props.namespaceAccessUrl}
|
|
90
|
+
target='_blank' >
|
|
91
|
+
See the documentation
|
|
92
|
+
</Link> to learn about claiming namespaces.
|
|
93
|
+
</Box>
|
|
94
|
+
</WarningPaper>
|
|
95
|
+
</Grid>
|
|
96
|
+
: null
|
|
97
|
+
}
|
|
98
|
+
<Grid item>
|
|
99
|
+
<NamespaceHeader>
|
|
100
|
+
<Typography variant='h4'>{props.namespace.name}</Typography>
|
|
101
|
+
{ pathname.startsWith(AdminDashboardRoutes.NAMESPACE_ADMIN)
|
|
102
|
+
? <Button sx={{ ml: { xs: 2, sm: 2, md: 2, lg: 0, xl: 0 } }} variant='outlined' onClick={handleOpenChangeDialog}>
|
|
103
|
+
Change Namespace
|
|
104
|
+
</Button>
|
|
105
|
+
: null
|
|
106
|
+
}
|
|
107
|
+
</NamespaceHeader>
|
|
108
|
+
</Grid>
|
|
109
|
+
{
|
|
110
|
+
props.namespace.membersUrl
|
|
111
|
+
? <Grid item>
|
|
112
|
+
<UserNamespaceMemberList
|
|
113
|
+
setLoadingState={props.setLoadingState}
|
|
114
|
+
namespace={props.namespace}
|
|
115
|
+
filterUsers={props.filterUsers}
|
|
116
|
+
fixSelf={props.fixSelf} />
|
|
117
|
+
</Grid>
|
|
118
|
+
: null
|
|
119
|
+
}
|
|
120
|
+
{
|
|
121
|
+
props.namespace.detailsUrl
|
|
122
|
+
? <Grid item>
|
|
123
|
+
<UserNamespaceDetails namespace={props.namespace}/>
|
|
124
|
+
</Grid>
|
|
125
|
+
: null
|
|
126
|
+
}
|
|
127
|
+
<Grid item>
|
|
128
|
+
<UserNamespaceExtensionListContainer
|
|
129
|
+
namespace={props.namespace}
|
|
130
|
+
/>
|
|
131
|
+
</Grid>
|
|
132
|
+
</NamespaceDetailContainer>
|
|
133
|
+
<NamespaceChangeDialog
|
|
134
|
+
open={changeDialogIsOpen}
|
|
135
|
+
onClose={handleCloseChangeDialog}
|
|
136
|
+
namespace={props.namespace}
|
|
137
|
+
setLoadingState={props.setLoadingState} />
|
|
138
|
+
</>;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export interface NamespaceDetailProps {
|
|
142
|
+
namespace: Namespace;
|
|
143
|
+
filterUsers: (user: UserData) => boolean;
|
|
144
|
+
fixSelf: boolean;
|
|
145
|
+
setLoadingState: (loading: boolean) => void;
|
|
146
|
+
namespaceAccessUrl?: string;
|
|
147
|
+
theme?: string;
|
|
148
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2020 TypeFox and others
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
********************************************************************************/
|
|
10
|
+
|
|
11
|
+
import React, { FunctionComponent, useContext, useEffect, useState, useRef, ReactNode } from 'react';
|
|
12
|
+
import { Box, Typography, Tabs, Tab, useTheme, useMediaQuery, Link } from '@mui/material';
|
|
13
|
+
import { Namespace, UserData } from '../../extension-registry-types';
|
|
14
|
+
import { DelayedLoadIndicator } from '../../components/delayed-load-indicator';
|
|
15
|
+
import { MainContext } from '../../context';
|
|
16
|
+
import { NamespaceDetail } from './user-settings-namespace-detail';
|
|
17
|
+
import { CreateNamespaceDialog } from './create-namespace-dialog';
|
|
18
|
+
|
|
19
|
+
interface NamespaceTabProps {
|
|
20
|
+
chosenNamespace: Namespace,
|
|
21
|
+
onChange: (value: Namespace) => void,
|
|
22
|
+
namespaces: Namespace[]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const NamespacesTabs = (props: NamespaceTabProps) => {
|
|
26
|
+
const theme = useTheme();
|
|
27
|
+
const isATablet = useMediaQuery(theme.breakpoints.down('md'));
|
|
28
|
+
return <Tabs
|
|
29
|
+
orientation={isATablet ? 'horizontal' : 'vertical'}
|
|
30
|
+
value={props.chosenNamespace}
|
|
31
|
+
onChange={(event, value) => props.onChange(value)}
|
|
32
|
+
variant={isATablet ? 'scrollable' : 'standard'}
|
|
33
|
+
scrollButtons={isATablet ? 'auto' : false}
|
|
34
|
+
indicatorColor='secondary'
|
|
35
|
+
sx={{ width: { xs: '80%', sm: '80%', md: '80%', lg: '160px', xl: '160px' } }}
|
|
36
|
+
>
|
|
37
|
+
{
|
|
38
|
+
props.namespaces.map(namespace => {
|
|
39
|
+
return <Tab
|
|
40
|
+
sx={{
|
|
41
|
+
root: {
|
|
42
|
+
minHeight: '24px'
|
|
43
|
+
},
|
|
44
|
+
wrapper: {
|
|
45
|
+
textTransform: 'none'
|
|
46
|
+
}
|
|
47
|
+
}}
|
|
48
|
+
key={'nmspc-' + namespace.name}
|
|
49
|
+
value={namespace}
|
|
50
|
+
label={namespace.name}
|
|
51
|
+
/>;
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
</Tabs>;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const UserSettingsNamespaces: FunctionComponent = () => {
|
|
58
|
+
|
|
59
|
+
const [loading, setLoading] = useState(true);
|
|
60
|
+
const [namespaces, setNamespaces] = useState<Array<Namespace>>([]);
|
|
61
|
+
const [chosenNamespace, setChosenNamespace] = useState<Namespace>();
|
|
62
|
+
const { pageSettings, service, user, handleError } = useContext(MainContext);
|
|
63
|
+
const abortController = useRef<AbortController>(new AbortController());
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
initNamespaces();
|
|
67
|
+
return () => {
|
|
68
|
+
abortController.current.abort();
|
|
69
|
+
};
|
|
70
|
+
}, []);
|
|
71
|
+
|
|
72
|
+
const handleChangeNamespace = (value: Namespace): void => {
|
|
73
|
+
doHandleChangeNamespace(value);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const doHandleChangeNamespace = async(chosenNamespace: Namespace): Promise<void> => {
|
|
77
|
+
setChosenNamespace(chosenNamespace);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const initNamespaces = async(): Promise<void> => {
|
|
81
|
+
try {
|
|
82
|
+
const namespaces = await service.getNamespaces(abortController.current);
|
|
83
|
+
const chosenNamespace = namespaces.length ? namespaces[0] : undefined;
|
|
84
|
+
setNamespaces(namespaces);
|
|
85
|
+
setChosenNamespace(chosenNamespace);
|
|
86
|
+
setLoading(false);
|
|
87
|
+
} catch (err) {
|
|
88
|
+
handleError(err);
|
|
89
|
+
setLoading(false);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const handleNamespaceCreated = () => {
|
|
94
|
+
setLoading(true);
|
|
95
|
+
initNamespaces();
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
let namespaceContainer: ReactNode = null;
|
|
99
|
+
const namespaceAccessUrl = pageSettings.urls.namespaceAccessInfo;
|
|
100
|
+
if (namespaces.length > 0 && chosenNamespace) {
|
|
101
|
+
namespaceContainer = <Box
|
|
102
|
+
sx={{
|
|
103
|
+
display: 'flex',
|
|
104
|
+
width: '100%',
|
|
105
|
+
flexDirection: { xs: 'column', sm: 'column', md: 'column', lg: 'row', xl: 'row' },
|
|
106
|
+
alignItems: { xs: 'center', sm: 'center', md: 'center', lg: 'normal', xl: 'normal' }
|
|
107
|
+
}}
|
|
108
|
+
>
|
|
109
|
+
<NamespacesTabs
|
|
110
|
+
chosenNamespace={chosenNamespace}
|
|
111
|
+
namespaces={namespaces}
|
|
112
|
+
onChange={handleChangeNamespace}
|
|
113
|
+
/>
|
|
114
|
+
<NamespaceDetail
|
|
115
|
+
namespace={chosenNamespace}
|
|
116
|
+
setLoadingState={(loading: boolean) => setLoading(loading)}
|
|
117
|
+
filterUsers={(foundUser: UserData) => foundUser.provider !== user?.provider || foundUser.loginName !== user?.loginName}
|
|
118
|
+
fixSelf={true}
|
|
119
|
+
namespaceAccessUrl={namespaceAccessUrl}
|
|
120
|
+
theme={pageSettings.themeType}/>
|
|
121
|
+
</Box>;
|
|
122
|
+
} else if (!loading) {
|
|
123
|
+
namespaceContainer = <Typography variant='body1'>No namespaces available. Read <Link color='secondary' href={namespaceAccessUrl} target='_blank'>here</Link> about claiming namespaces.</Typography>;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return <>
|
|
127
|
+
<Box
|
|
128
|
+
sx={{
|
|
129
|
+
display: 'flex',
|
|
130
|
+
justifyContent: 'space-between',
|
|
131
|
+
flexDirection: { xs: 'column', sm: 'column', md: 'row', lg: 'row', xl: 'row' },
|
|
132
|
+
alignItems: { xs: 'center', sm: 'center', md: 'normal', lg: 'normal', xl: 'normal' }
|
|
133
|
+
}}
|
|
134
|
+
>
|
|
135
|
+
<Box>
|
|
136
|
+
<Typography variant='h5' gutterBottom>Namespaces</Typography>
|
|
137
|
+
</Box>
|
|
138
|
+
<Box
|
|
139
|
+
sx={{
|
|
140
|
+
display: 'flex',
|
|
141
|
+
flexWrap: 'wrap',
|
|
142
|
+
justifyContent: { xs: 'center', sm: 'center', md: 'normal', lg: 'normal', xl: 'normal' }
|
|
143
|
+
}}
|
|
144
|
+
>
|
|
145
|
+
<Box sx={{ mr: 1, mb: 1 }}>
|
|
146
|
+
<CreateNamespaceDialog
|
|
147
|
+
namespaceCreated={handleNamespaceCreated}
|
|
148
|
+
/>
|
|
149
|
+
</Box>
|
|
150
|
+
</Box>
|
|
151
|
+
</Box>
|
|
152
|
+
<Box mt={2}>
|
|
153
|
+
<DelayedLoadIndicator loading={loading}/>
|
|
154
|
+
{namespaceContainer}
|
|
155
|
+
</Box>
|
|
156
|
+
</>;
|
|
157
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2019 TypeFox and others
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
* http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
********************************************************************************/
|
|
10
|
+
|
|
11
|
+
import React, { FunctionComponent, ReactNode } from 'react';
|
|
12
|
+
import { Theme, Grid, Typography, Avatar } from '@mui/material';
|
|
13
|
+
import { toLocalTime } from '../../utils';
|
|
14
|
+
import { UserData } from '../../extension-registry-types';
|
|
15
|
+
import { UserPublisherAgreement } from './user-publisher-agreement';
|
|
16
|
+
import styled from '@mui/material/styles/styled';
|
|
17
|
+
|
|
18
|
+
const ProfileGrid = styled(Grid)(({ theme }: {theme: Theme}) => ({
|
|
19
|
+
[theme.breakpoints.up('lg')]: {
|
|
20
|
+
justifyContent: 'space-between'
|
|
21
|
+
},
|
|
22
|
+
['@media(max-width: 1040px)']: {
|
|
23
|
+
flexDirection: 'row-reverse',
|
|
24
|
+
justifyContent: 'flex-end',
|
|
25
|
+
'& > div:first-of-type': {
|
|
26
|
+
marginLeft: '2rem'
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
[theme.breakpoints.down('sm')]: {
|
|
30
|
+
textAlign: 'center',
|
|
31
|
+
flexDirection: 'column-reverse',
|
|
32
|
+
'& > div:first-of-type': {
|
|
33
|
+
marginLeft: '0',
|
|
34
|
+
marginTop: '2rem'
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
marginBottom: theme.spacing(2)
|
|
38
|
+
}));
|
|
39
|
+
|
|
40
|
+
export const UserSettingsProfile: FunctionComponent<UserSettingsProfileProps> = props => {
|
|
41
|
+
|
|
42
|
+
const user = props.user;
|
|
43
|
+
let publisherAgreementPanel: ReactNode = null;
|
|
44
|
+
if (user.publisherAgreement) {
|
|
45
|
+
if (props.isAdmin) {
|
|
46
|
+
let statusText = 'has not signed';
|
|
47
|
+
if (user.publisherAgreement.status === 'signed') {
|
|
48
|
+
statusText = 'has signed';
|
|
49
|
+
} else if (user.publisherAgreement.status === 'outdated') {
|
|
50
|
+
statusText = 'has signed an outdated version of';
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
publisherAgreementPanel = <Typography variant='body1' title={toLocalTime(user.publisherAgreement.timestamp)}>
|
|
54
|
+
{user.loginName} {statusText} the Eclipse publisher agreement.
|
|
55
|
+
</Typography>;
|
|
56
|
+
} else {
|
|
57
|
+
publisherAgreementPanel = <Grid container>
|
|
58
|
+
<Grid item xs={12}>
|
|
59
|
+
<UserPublisherAgreement user={user} />
|
|
60
|
+
</Grid>
|
|
61
|
+
</Grid>;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return <>
|
|
66
|
+
<ProfileGrid container>
|
|
67
|
+
<Grid item>
|
|
68
|
+
<Typography variant='h5' gutterBottom>Profile</Typography>
|
|
69
|
+
<Typography variant='body1'>Login name: {user.loginName}</Typography>
|
|
70
|
+
<Typography variant='body1'>Full name: {user.fullName}</Typography>
|
|
71
|
+
</Grid>
|
|
72
|
+
<Grid item>
|
|
73
|
+
<Avatar
|
|
74
|
+
variant='rounded'
|
|
75
|
+
src={user.avatarUrl}
|
|
76
|
+
sx={{
|
|
77
|
+
width: '150px',
|
|
78
|
+
height: '150px',
|
|
79
|
+
my: 0,
|
|
80
|
+
mx: { xs: 'auto', sm: 'auto', md: 0, lg: 0, xl: 0 }
|
|
81
|
+
}}
|
|
82
|
+
/>
|
|
83
|
+
</Grid>
|
|
84
|
+
</ProfileGrid>
|
|
85
|
+
{publisherAgreementPanel}
|
|
86
|
+
</>;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export interface UserSettingsProfileProps {
|
|
90
|
+
user: UserData;
|
|
91
|
+
isAdmin?: boolean;
|
|
92
|
+
}
|