From 630b727a02085bc44b9012229e86ab8d351ad2df Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:47:29 +0200 Subject: [PATCH 1/7] upgrade router-slot to 2.0.0 --- .../create-extension-element.function.ts | 3 ++- .../libs/modal/modal-route-registration.ts | 2 +- .../libs/router/index.ts | 2 ++ .../libs/router/route.context.ts | 9 ++++---- .../libs/router/route.interface.ts | 4 +--- src/Umbraco.Web.UI.Client/package-lock.json | 12 +++++----- src/Umbraco.Web.UI.Client/package.json | 2 +- .../router-slot-1.6.1.tgz | Bin 26239 -> 0 bytes .../router-slot-2.0.0.tgz | Bin 0 -> 26528 bytes src/Umbraco.Web.UI.Client/src/app.ts | 7 +++--- .../document-type-workspace.element.ts | 6 ++--- ...cument-type-workspace-view-edit.element.ts | 16 +++++++------ .../document-workspace-editor.element.ts | 8 +++---- .../workspace/document-workspace.element.ts | 6 ++--- .../document-workspace-view-edit.element.ts | 9 ++++---- .../workspace/media-type-workspace.element.ts | 6 ++--- .../workspace/media-workspace.element.ts | 4 ++-- .../member-group-workspace.element.ts | 6 ++--- .../member-type-workspace.element.ts | 6 ++--- .../workspace/member-workspace.element.ts | 6 ++--- .../created-packages-section-view.element.ts | 12 +++++----- .../dashboard-examine-management.element.ts | 7 +++--- .../dashboard-health-check.element.ts | 4 ++-- ...health-check-group-box-overview.element.ts | 2 +- .../workspace/data-type-workspace.element.ts | 6 ++--- .../language/language-workspace.element.ts | 8 +++---- .../log-viewer-date-range-selector.element.ts | 1 - .../logviewer-root-workspace.element.ts | 13 ++++------- .../relation-type-workspace.element.ts | 7 +++--- .../shared/collection/collection.element.ts | 5 +++-- .../backoffice-main.element.ts | 11 +++++---- .../section-views/section-views.element.ts | 7 +++--- .../components/section/section.element.ts | 12 +++++----- .../workspace-layout.element.ts | 21 ++++++++++-------- ...editor-ui-block-grid-inner-test.element.ts | 8 +++---- .../property-editor-ui-block-grid.element.ts | 8 +++---- .../workspace/stylesheet-workspace.element.ts | 6 ++--- .../workspace/dictionary-workspace.element.ts | 6 ++--- .../workspace/user-group-workspace.element.ts | 6 ++--- .../views/users/section-view-users.element.ts | 12 +++++----- .../workspace-view-users-overview.element.ts | 2 +- .../users/workspace/user-workspace.element.ts | 6 ++--- .../src/core/router/index.ts | 1 - .../src/core/router/router-slot.element.ts | 10 ++++----- 44 files changed, 149 insertions(+), 146 deletions(-) delete mode 100644 src/Umbraco.Web.UI.Client/router-slot-1.6.1.tgz create mode 100644 src/Umbraco.Web.UI.Client/router-slot-2.0.0.tgz diff --git a/src/Umbraco.Web.UI.Client/libs/extensions-api/create-extension-element.function.ts b/src/Umbraco.Web.UI.Client/libs/extensions-api/create-extension-element.function.ts index 4da597bcb4..ccb92df877 100644 --- a/src/Umbraco.Web.UI.Client/libs/extensions-api/create-extension-element.function.ts +++ b/src/Umbraco.Web.UI.Client/libs/extensions-api/create-extension-element.function.ts @@ -3,8 +3,9 @@ import { isManifestElementNameType } from './is-manifest-element-name-type.funct import { loadExtension } from './load-extension.function'; import type { HTMLElementConstructor } from '@umbraco-cms/backoffice/models'; import type { ManifestElement } from '@umbraco-cms/backoffice/extensions-registry'; +import type { PageComponent } from '@umbraco-cms/backoffice/router'; -export async function createExtensionElement(manifest: ManifestElement): Promise { +export async function createExtensionElement(manifest: ManifestElement): Promise { //TODO: Write tests for these extension options: const js = await loadExtension(manifest); diff --git a/src/Umbraco.Web.UI.Client/libs/modal/modal-route-registration.ts b/src/Umbraco.Web.UI.Client/libs/modal/modal-route-registration.ts index 095da5f546..3c7f7e7557 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/modal-route-registration.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/modal-route-registration.ts @@ -1,8 +1,8 @@ -import type { Params } from 'router-slot'; import { v4 as uuidv4 } from 'uuid'; import { UmbModalHandler } from './modal-handler'; import { UmbModalConfig, UmbModalContext } from './modal.context'; import { UmbModalToken } from './token/modal-token'; +import type { Params } from '@umbraco-cms/backoffice/router'; export type UmbModalRouteBuilder = (params: { [key: string]: string | number }) => string; diff --git a/src/Umbraco.Web.UI.Client/libs/router/index.ts b/src/Umbraco.Web.UI.Client/libs/router/index.ts index 5a49b1769d..537b3d396d 100644 --- a/src/Umbraco.Web.UI.Client/libs/router/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/router/index.ts @@ -1,3 +1,5 @@ +export type * from 'router-slot/model'; +export * from 'router-slot/util'; export * from './route-location.interface'; export * from './route.context'; export * from './route.interface'; diff --git a/src/Umbraco.Web.UI.Client/libs/router/route.context.ts b/src/Umbraco.Web.UI.Client/libs/router/route.context.ts index da5364d1df..ee3ffed616 100644 --- a/src/Umbraco.Web.UI.Client/libs/router/route.context.ts +++ b/src/Umbraco.Web.UI.Client/libs/router/route.context.ts @@ -1,11 +1,12 @@ -import type { IRoutingInfo, ISlashOptions } from 'router-slot'; -import { UmbRoute } from './route.interface'; +// eslint-disable-next-line local-rules/no-external-imports +import type { IRoutingInfo, ISlashOptions } from 'router-slot/model'; +import type { UmbRoute } from './route.interface'; import { UmbContextConsumerController, UmbContextProviderController, UmbContextToken, } from '@umbraco-cms/backoffice/context-api'; -import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; +import type { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; import { UMB_MODAL_CONTEXT_TOKEN, UmbModalRouteRegistration } from '@umbraco-cms/backoffice/modal'; const EmptyDiv = document.createElement('div'); @@ -58,7 +59,7 @@ export class UmbRouteContext { return { path: this.#getModalRoutePath(modalRegistration), component: EmptyDiv, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { if (!this.#modalContext) return; const modalHandler = modalRegistration.routeSetup(this.#modalContext, info.match.params); if (modalHandler) { diff --git a/src/Umbraco.Web.UI.Client/libs/router/route.interface.ts b/src/Umbraco.Web.UI.Client/libs/router/route.interface.ts index b76705bd13..8c7f94ac63 100644 --- a/src/Umbraco.Web.UI.Client/libs/router/route.interface.ts +++ b/src/Umbraco.Web.UI.Client/libs/router/route.interface.ts @@ -1,3 +1 @@ -import type { IRoute } from 'router-slot/model'; - -export type UmbRoute = IRoute; +export type { IRoute as UmbRoute } from 'router-slot/model'; diff --git a/src/Umbraco.Web.UI.Client/package-lock.json b/src/Umbraco.Web.UI.Client/package-lock.json index b01c305fa1..f257dae220 100644 --- a/src/Umbraco.Web.UI.Client/package-lock.json +++ b/src/Umbraco.Web.UI.Client/package-lock.json @@ -15,7 +15,7 @@ "lit": "^2.7.0", "lodash-es": "4.17.21", "monaco-editor": "^0.36.1", - "router-slot": "file:router-slot-1.6.1.tgz", + "router-slot": "file:router-slot-2.0.0.tgz", "rxjs": "^7.8.0", "uuid": "^9.0.0" }, @@ -16114,9 +16114,9 @@ "dev": true }, "node_modules/router-slot": { - "version": "1.6.1", - "resolved": "file:router-slot-1.6.1.tgz", - "integrity": "sha512-lrqzUL9wfSQR7L9rFvRsq/I+BGo2bw0Hn45eZ+qhrjPFv2gn+LRz2TaWa6CVqkiXhdWMrUEmEyD8nzl4cqV0Fw==", + "version": "2.0.0", + "resolved": "file:router-slot-2.0.0.tgz", + "integrity": "sha512-J2E+sDJR7Q/S761Q6vXVCTWFN1kKidX3fparKoipm/NaX9XEdwmCSOEqYyUHbnIyDDo5O5PMhsH8EazLmCQJXw==", "license": "MIT" }, "node_modules/run-async": { @@ -30376,8 +30376,8 @@ } }, "router-slot": { - "version": "file:router-slot-1.6.1.tgz", - "integrity": "sha512-lrqzUL9wfSQR7L9rFvRsq/I+BGo2bw0Hn45eZ+qhrjPFv2gn+LRz2TaWa6CVqkiXhdWMrUEmEyD8nzl4cqV0Fw==" + "version": "file:router-slot-2.0.0.tgz", + "integrity": "sha512-J2E+sDJR7Q/S761Q6vXVCTWFN1kKidX3fparKoipm/NaX9XEdwmCSOEqYyUHbnIyDDo5O5PMhsH8EazLmCQJXw==" }, "run-async": { "version": "2.4.1", diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json index 2a76669d0e..46d864b4a3 100644 --- a/src/Umbraco.Web.UI.Client/package.json +++ b/src/Umbraco.Web.UI.Client/package.json @@ -66,7 +66,7 @@ "lit": "^2.7.0", "lodash-es": "4.17.21", "monaco-editor": "^0.36.1", - "router-slot": "file:router-slot-1.6.1.tgz", + "router-slot": "file:router-slot-2.0.0.tgz", "rxjs": "^7.8.0", "uuid": "^9.0.0" }, diff --git a/src/Umbraco.Web.UI.Client/router-slot-1.6.1.tgz b/src/Umbraco.Web.UI.Client/router-slot-1.6.1.tgz deleted file mode 100644 index a5285852afc8ea28d28f97849e205896f773eece..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26239 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 Xo6pVX=5zD;{eJ#`gcCk!01N^Enm}j* literal 0 HcmV?d00001 diff --git a/src/Umbraco.Web.UI.Client/src/app.ts b/src/Umbraco.Web.UI.Client/src/app.ts index 9f1337ba18..8bf3961d55 100644 --- a/src/Umbraco.Web.UI.Client/src/app.ts +++ b/src/Umbraco.Web.UI.Client/src/app.ts @@ -13,7 +13,7 @@ import { css, html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { UmbIconStore } from './core/stores/icon/icon.store'; -import type { Guard, IRoute } from '@umbraco-cms/internal/router'; +import type { Guard, IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { OpenAPI, RuntimeLevelModel, ServerResource } from '@umbraco-cms/backoffice/backend-api'; @@ -89,7 +89,7 @@ export class UmbAppElement extends UmbLitElement { // we have collected whilst coming up through the DOM // and pass it back down to the callback in // the component that originally fired the event - if(event.callback){ + if (event.callback) { event.callback(event.instances); } @@ -97,12 +97,11 @@ export class UmbAppElement extends UmbLitElement { // Why? Can't send contexts data directly - browser seems to not serialize it and says its null // But a simple object works fine for browser extension to consume const data = { - contexts: contextData(event.instances) + contexts: contextData(event.instances), }; // Emit this new event for the browser extension to listen for this.dispatchEvent(new CustomEvent('umb:debug-contexts:data', { detail: data, bubbles: true })); - }); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.element.ts index 73abc9e6ef..78b74edc56 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/document-type-workspace.element.ts @@ -3,7 +3,7 @@ import { html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbDocumentTypeWorkspaceContext } from './document-type-workspace.context'; import { UmbDocumentTypeWorkspaceEditorElement } from './document-type-workspace-editor.element'; -import { IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-document-type-workspace') @@ -14,11 +14,11 @@ export class UmbDocumentTypeWorkspaceElement extends UmbLitElement { #element = new UmbDocumentTypeWorkspaceEditorElement(); @state() - _routes = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts index 7054f9502c..b09416588d 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/workspace/views/design/document-type-workspace-view-edit.element.ts @@ -4,10 +4,12 @@ import { customElement, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import { UmbDocumentTypeWorkspaceContext } from '../../document-type-workspace.context'; import { UmbWorkspaceContainerStructureHelper } from '../../../../../shared/components/workspace/workspace-context/workspace-container-structure-helper.class'; -import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent, IRoute } from '@umbraco-cms/internal/router'; +import type { UmbDocumentTypeWorkspaceViewEditTabElement } from './document-type-workspace-view-edit-tab.element'; +import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { PropertyTypeContainerResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-document-type-workspace-view-edit') export class UmbDocumentTypeWorkspaceViewEditElement extends UmbLitElement { @@ -82,7 +84,7 @@ export class UmbDocumentTypeWorkspaceViewEditElement extends UmbLitElement { } private _createRoutes() { - const routes: any[] = []; + const routes: IRoute[] = []; if (this._tabs.length > 0) { this._tabs?.forEach((tab) => { @@ -90,9 +92,9 @@ export class UmbDocumentTypeWorkspaceViewEditElement extends UmbLitElement { routes.push({ path: `tab/${encodeURI(tabName || '').toString()}`, component: () => import('./document-type-workspace-view-edit-tab.element'), - setup: (component: Promise) => { - (component as any).tabName = tabName; - (component as any).ownerTabId = tab.id; + setup: (component) => { + (component as UmbDocumentTypeWorkspaceViewEditTabElement).tabName = tabName ?? ''; + (component as UmbDocumentTypeWorkspaceViewEditTabElement).ownerTabId = tab.id; }, }); }); @@ -102,8 +104,8 @@ export class UmbDocumentTypeWorkspaceViewEditElement extends UmbLitElement { routes.push({ path: '', component: () => import('./document-type-workspace-view-edit-tab.element'), - setup: (component: Promise) => { - (component as any).noTabName = true; + setup: (component) => { + (component as UmbDocumentTypeWorkspaceViewEditTabElement).noTabName = true; }, }); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace-editor.element.ts index 64c78a268e..dd2f4c5fdf 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace-editor.element.ts @@ -1,12 +1,12 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoute, IRoutingInfo } from 'router-slot'; import { UmbVariantId } from '../../../shared/variants/variant-id.class'; import { ActiveVariant } from '../../../shared/components/workspace/workspace-context/workspace-split-view-manager.class'; import { UmbDocumentWorkspaceContext } from './document-workspace.context'; import { UmbDocumentWorkspaceSplitViewElement } from './document-workspace-split-view.element'; -import { UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; +import type { UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import '../../../shared/components/workspace/workspace-variant/workspace-variant.element'; import { VariantModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; @@ -86,7 +86,7 @@ export class UmbDocumentWorkspaceEditorElement extends UmbLitElement { routes.push({ path: new UmbVariantId(variantA).toString() + '_&_' + new UmbVariantId(variantB).toString(), component: this.splitViewElement, - setup: (component: HTMLElement | Promise, info: IRoutingInfo) => { + setup: (_component, info) => { // Set split view/active info.. const variantSplit = info.match.fragments.consumed.split('_&_'); variantSplit.forEach((part, index) => { @@ -102,7 +102,7 @@ export class UmbDocumentWorkspaceEditorElement extends UmbLitElement { routes.push({ path: new UmbVariantId(variant).toString(), component: this.splitViewElement, - setup: (component: HTMLElement | Promise, info: IRoutingInfo) => { + setup: (_component, info) => { // cause we might come from a split-view, we need to reset index 1. this.#workspaceContext?.splitView.removeActiveVariant(1); this._handleVariantFolderPart(0, info.match.fragments.consumed); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.element.ts index 67656c3380..19301cf90a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/document-workspace.element.ts @@ -1,8 +1,8 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoute, IRoutingInfo } from 'router-slot'; import { UmbDocumentWorkspaceContext } from './document-workspace.context'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import './document-workspace-editor.element'; @@ -19,7 +19,7 @@ export class UmbDocumentWorkspaceElement extends UmbLitElement { { path: 'create/:parentId/:documentTypeKey', component: () => this.#element, - setup: async (component: HTMLElement, info: IRoutingInfo) => { + setup: async (_component, info) => { // TODO: use parent id: // TODO: Notice the perspective of permissions here, we need to check if the user has access to create a document of this type under this parent? const parentId = info.match.params.parentId; @@ -30,7 +30,7 @@ export class UmbDocumentWorkspaceElement extends UmbLitElement { { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts index 2a13eb9cc8..e1b10e8229 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/workspace/views/edit/document-workspace-view-edit.element.ts @@ -4,10 +4,11 @@ import { customElement, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; import { UmbDocumentWorkspaceContext } from '../../document-workspace.context'; import { UmbWorkspaceContainerStructureHelper } from '../../../../../shared/components/workspace/workspace-context/workspace-container-structure-helper.class'; -import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent, IRoute } from '@umbraco-cms/internal/router'; +import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { PropertyTypeContainerResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/context-api'; +import { IRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-document-workspace-view-edit') export class UmbDocumentWorkspaceViewEditElement extends UmbLitElement { @@ -72,7 +73,7 @@ export class UmbDocumentWorkspaceViewEditElement extends UmbLitElement { } private _createRoutes() { - const routes: any[] = []; + const routes: IRoute[] = []; if (this._tabs.length > 0) { this._tabs?.forEach((tab) => { @@ -80,7 +81,7 @@ export class UmbDocumentWorkspaceViewEditElement extends UmbLitElement { routes.push({ path: `tab/${encodeURI(tabName || '').toString()}`, component: () => import('./document-workspace-view-edit-tab.element'), - setup: (component: Promise) => { + setup: (component) => { (component as any).tabName = tabName; }, }); @@ -91,7 +92,7 @@ export class UmbDocumentWorkspaceViewEditElement extends UmbLitElement { routes.push({ path: '', component: () => import('./document-workspace-view-edit-tab.element'), - setup: (component: Promise) => { + setup: (component) => { (component as any).noTabName = true; }, }); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.element.ts index 44b19e7eae..a2f98ec9c6 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/workspace/media-type-workspace.element.ts @@ -4,7 +4,7 @@ import { customElement, state } from 'lit/decorators.js'; import { UmbWorkspaceMediaTypeContext } from './media-type-workspace.context'; import { UmbMediaTypeWorkspaceEditElement } from './media-type-workspace-edit.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-media-type-workspace') export class UmbMediaTypeWorkspaceElement extends UmbLitElement { @@ -27,11 +27,11 @@ export class UmbMediaTypeWorkspaceElement extends UmbLitElement { #element = new UmbMediaTypeWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts index eb12659f04..aab70442d0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media/workspace/media-workspace.element.ts @@ -3,7 +3,7 @@ import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbMediaWorkspaceContext } from './media-workspace.context'; import { UmbMediaWorkspaceEditElement } from './media-workspace-edit.element'; -import { IRoute, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-media-workspace') @@ -27,7 +27,7 @@ export class UmbMediaWorkspaceElement extends UmbLitElement { { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.element.ts index d97a7067e1..8639559f35 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/workspace/member-group-workspace.element.ts @@ -1,9 +1,9 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { UmbWorkspaceMemberGroupContext } from './member-group-workspace.context'; import { UmbMemberGroupWorkspaceEditElement } from './member-group-workspace-edit.element'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; /** @@ -27,11 +27,11 @@ export class UmbMemberGroupWorkspaceElement extends UmbLitElement { #element = new UmbMemberGroupWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.element.ts index 830a0ff7cd..f7cbc5f788 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/workspace/member-type-workspace.element.ts @@ -1,9 +1,9 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { UmbMemberTypeWorkspaceEditElement } from './member-type-workspace-edit.element'; import { UmbMemberTypeWorkspaceContext } from './member-type-workspace.context'; +import { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-member-type-workspace') @@ -23,11 +23,11 @@ export class UmbMemberTypeWorkspaceElement extends UmbLitElement { #element = new UmbMemberTypeWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.element.ts index 57e37d3dc3..dbe2e140cf 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/members/workspace/member-workspace.element.ts @@ -1,9 +1,9 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { UmbMemberWorkspaceEditElement } from './member-workspace-edit.element'; import { UmbMemberWorkspaceContext } from './member-workspace.context'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-member-workspace') @@ -23,11 +23,11 @@ export class UmbMemberWorkspaceElement extends UmbLitElement { #element = new UmbMemberWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts index 75414bd547..4f22319e4f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/packages/package-section/views/created/created-packages-section-view.element.ts @@ -1,6 +1,6 @@ import { html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import type { IRoute, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import type { ManifestTree, ManifestWorkspace } from '@umbraco-cms/backoffice/extensions-registry'; import { createExtensionElement, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -23,7 +23,7 @@ export class UmbCreatedPackagesSectionViewElement extends UmbLitElement { } private _createRoutes() { - const routes: any[] = [ + const routes: IRoute[] = [ { path: 'overview', component: () => import('./packages-created-overview.element'), @@ -35,10 +35,10 @@ export class UmbCreatedPackagesSectionViewElement extends UmbLitElement { routes.push({ path: `${workspace.meta.entityType}/:id`, component: () => createExtensionElement(workspace), - setup: (component: Promise, info: IRoutingInfo) => { - component.then((el: HTMLElement) => { - (el as any).entityId = info.match.params.id; - }); + setup: (component, info) => { + if (component) { + (component as any).entityId = info.match.params.id; + } }, }); routes.push({ diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.element.ts index 4fdafa6210..3c9b8fe4db 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/examine-management/dashboard-examine-management.element.ts @@ -3,7 +3,8 @@ import { customElement, state } from 'lit/decorators.js'; import { UmbDashboardExamineIndexElement } from './views/section-view-examine-indexers'; import { UmbDashboardExamineSearcherElement } from './views/section-view-examine-searchers'; -import type { IRoute, IRoutingInfo, UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; +import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -26,7 +27,7 @@ export class UmbDashboardExamineManagementElement extends UmbLitElement { { path: `/index/:indexerName`, component: () => import('./views/section-view-examine-indexers'), - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { const element = component as UmbDashboardExamineIndexElement; element.indexName = info.match.params.indexerName; }, @@ -34,7 +35,7 @@ export class UmbDashboardExamineManagementElement extends UmbLitElement { { path: `/searcher/:searcherName`, component: () => import('./views/section-view-examine-searchers'), - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { const element = component as UmbDashboardExamineSearcherElement; element.searcherName = info.match.params.searcherName; }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/dashboard-health-check.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/dashboard-health-check.element.ts index 1828d225a1..cce292cb19 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/dashboard-health-check.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/dashboard-health-check.element.ts @@ -6,7 +6,7 @@ import { UMB_HEALTHCHECK_DASHBOARD_CONTEXT_TOKEN, } from './health-check-dashboard.context'; import { UmbHealthCheckContext } from './health-check.context'; -import type { IRoute, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { ManifestHealthCheck } from '@umbraco-cms/backoffice/extensions-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; @@ -20,7 +20,7 @@ export class UmbDashboardHealthCheckElement extends UmbLitElement { { path: `/:groupName`, component: () => import('./views/health-check-group.element'), - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { const element = component as UmbDashboardHealthCheckGroupElement; element.groupName = decodeURI(info.match.params.groupName); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/views/health-check-group-box-overview.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/views/health-check-group-box-overview.element.ts index a298ec6672..53296360cf 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/views/health-check-group-box-overview.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/dashboards/health-check/views/health-check-group-box-overview.element.ts @@ -6,7 +6,7 @@ import { UMB_HEALTHCHECK_DASHBOARD_CONTEXT_TOKEN, UmbHealthCheckDashboardContext, } from '../health-check-dashboard.context'; -import { ensureSlash, path } from '@umbraco-cms/internal/router'; +import { ensureSlash, path } from '@umbraco-cms/backoffice/router'; import type { ManifestHealthCheck } from '@umbraco-cms/backoffice/extensions-registry'; import { HealthCheckGroupWithResultResponseModel, StatusResultTypeModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.element.ts index 93455e437f..0ea7ef470f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/workspace/data-type-workspace.element.ts @@ -2,7 +2,7 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbDataTypeWorkspaceContext } from './data-type-workspace.context'; -import { UmbRouterSlotInitEvent, IRoute, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import './data-type-workspace-edit.element'; @@ -20,7 +20,7 @@ export class UmbDataTypeWorkspaceElement extends UmbLitElement { { path: 'create/:parentId', component: () => this.#element, - setup: async (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const parentId = info.match.params.parentId; this.#workspaceContext.createScaffold(parentId); }, @@ -28,7 +28,7 @@ export class UmbDataTypeWorkspaceElement extends UmbLitElement { { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.element.ts index 7574254fbe..ebf8eec688 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/workspace/language/language-workspace.element.ts @@ -1,8 +1,8 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { UmbLanguageWorkspaceContext } from './language-workspace.context'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -18,18 +18,18 @@ export class UmbLanguageWorkspaceElement extends UmbLitElement { #routerPath? = ''; @state() - _routes = [ + _routes: IRoute[] = [ { path: 'edit/:isoCode', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { this.#languageWorkspaceContext.load(info.match.params.isoCode); }, }, { path: 'create', component: () => this.#element, - setup: async () => { + setup: () => { this.#languageWorkspaceContext.createScaffold(); }, }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts index 4ae57c93cd..cab197ce92 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/components/log-viewer-date-range-selector.element.ts @@ -1,7 +1,6 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, property, queryAll, state } from 'lit/decorators.js'; -import { query } from 'router-slot'; import { LogViewerDateRange, UmbLogViewerWorkspaceContext, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts index 46382e5690..5a009a7deb 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/logviewer/workspace/logviewer-root/logviewer-root-workspace.element.ts @@ -2,7 +2,6 @@ import './components'; import { map } from 'rxjs'; import { css, html, nothing } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { UUITextStyles } from '@umbraco-ui/uui-css'; import { repeat } from 'lit/directives/repeat.js'; import { UmbLogViewerWorkspaceContext, UMB_APP_LOG_VIEWER_CONTEXT_TOKEN } from '../logviewer.context'; @@ -10,6 +9,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { umbExtensionsRegistry, createExtensionElement } from '@umbraco-cms/backoffice/extensions-api'; import { ManifestWorkspaceView, ManifestWorkspaceViewCollection } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbRouterSlotInitEvent, UmbRouterSlotChangeEvent } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; //TODO make uui-input accept min and max values @customElement('umb-logviewer-workspace') @@ -51,7 +51,7 @@ export class UmbLogViewerWorkspaceElement extends UmbLitElement { private _workspaceViews: Array = []; @state() - private _routes: any[] = []; + private _routes: IRoute[] = []; @state() private _activePath?: string; @@ -104,13 +104,8 @@ export class UmbLogViewerWorkspaceElement extends UmbLitElement { component: () => { return createExtensionElement(view); }, - setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { - // When its using import, we get an element, when using createExtensionElement we get a Promise. - if ((component as any).then) { - (component as any).then((el: any) => (el.manifest = view)); - } else { - (component as any).manifest = view; - } + setup: (component) => { + (component as any).manifest = view; }, }; }); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.element.ts index 3827c75a7e..eb96b21baf 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/workspace/relation-type-workspace.element.ts @@ -3,7 +3,8 @@ import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { UmbRelationTypeWorkspaceContext } from './relation-type-workspace.context'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { UmbRouterSlotInitEvent, IRoute, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import './relation-type-workspace-edit.element'; @@ -27,7 +28,7 @@ export class UmbRelationTypeWorkspaceElement extends UmbLitElement { { path: 'create/:parentId', component: () => this.#element, - setup: async (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const parentId = info.match.params.parentId; this.#workspaceContext.createScaffold(parentId); }, @@ -35,7 +36,7 @@ export class UmbRelationTypeWorkspaceElement extends UmbLitElement { { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts index 656f0c03e6..9b883b69bd 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/collection/collection.element.ts @@ -9,6 +9,7 @@ import { createExtensionElement, umbExtensionsRegistry } from '@umbraco-cms/back import type { ManifestCollectionView } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import type { UmbObserverController } from '@umbraco-cms/backoffice/observable-api'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-collection') export class UmbCollectionElement extends UmbLitElement { @@ -30,7 +31,7 @@ export class UmbCollectionElement extends UmbLitElement { ]; @state() - private _routes: Array = []; + private _routes: Array = []; @state() private _selection?: Array | null; @@ -95,7 +96,7 @@ export class UmbCollectionElement extends UmbLitElement { this._routes.push({ path: '**', - redirectTo: views?.[0]?.meta.pathName, + redirectTo: views?.[0]?.meta.pathName ?? '/', }); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts index 2654b4ed12..031d20c953 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts @@ -5,6 +5,7 @@ import { state } from 'lit/decorators.js'; import { UmbSectionElement } from '../section/section.element'; import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section/section.context'; import { UmbBackofficeContext, UMB_BACKOFFICE_CONTEXT_TOKEN } from './backoffice.context'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import type { UmbRouterSlotChangeEvent } from '@umbraco-cms/internal/router'; import type { ManifestSection } from '@umbraco-cms/backoffice/extensions-registry'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -24,7 +25,7 @@ export class UmbBackofficeMainElement extends UmbLitElement { ]; @state() - private _routes: Array = []; + private _routes: Array = []; @state() private _sections: Array = []; @@ -63,12 +64,10 @@ export class UmbBackofficeMainElement extends UmbLitElement { return { path: this._routePrefix + section.meta.pathname, component: () => createExtensionElementOrFallback(section, 'umb-section'), - setup: (component: Promise) => { - component.then((element) => { - element.manifest = section; - }); + setup: (component) => { + (component as UmbSectionElement).manifest = section; }, - }; + } satisfies IRoute; }); this._routes.push({ diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts index 890f27e0a9..a75bcc02fc 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section-views/section-views.element.ts @@ -3,7 +3,8 @@ import { css, html, nothing } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { map, of } from 'rxjs'; import { UmbSectionContext, UMB_SECTION_CONTEXT_TOKEN } from '../section.context'; -import { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; +import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import type { ManifestDashboard, ManifestSectionView } from '@umbraco-cms/backoffice/extensions-registry'; import { createExtensionElement, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -21,7 +22,7 @@ export class UmbSectionViewsElement extends UmbLitElement { display: flex; justify-content: space-between; align-items: center; - height:var(--umb-header-layout-height); + height: var(--umb-header-layout-height); box-sizing: border-box; } @@ -52,7 +53,7 @@ export class UmbSectionViewsElement extends UmbLitElement { private _activePath?: string; @state() - private _routes: Array = []; + private _routes: Array = []; private _sectionContext?: UmbSectionContext; private _extensionsObserver?: UmbObserverController; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts index 3cc798c083..2a9b530b68 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/section/section.element.ts @@ -6,7 +6,7 @@ import type { UmbWorkspaceElement } from '../workspace/workspace.element'; import type { UmbSectionViewsElement } from './section-views/section-views.element'; import type { ManifestSection, ManifestSectionSidebarApp } from '@umbraco-cms/backoffice/extensions-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; -import type { IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import './section-sidebar-menu/section-sidebar-menu.element'; @@ -37,7 +37,7 @@ export class UmbSectionElement extends UmbLitElement { public manifest?: ManifestSection; @state() - private _routes?: Array; + private _routes?: Array; @state() private _menus?: Array>; @@ -55,15 +55,15 @@ export class UmbSectionElement extends UmbLitElement { { path: 'workspace/:entityType', component: () => import('../workspace/workspace.element'), - setup: (element: UmbWorkspaceElement, info: IRoutingInfo) => { - element.entityType = info.match.params.entityType; + setup: (element, info) => { + (element as UmbWorkspaceElement).entityType = info.match.params.entityType; }, }, { path: '**', component: () => import('../section/section-views/section-views.element'), - setup: (element: UmbSectionViewsElement) => { - element.sectionAlias = this.manifest?.alias; + setup: (element) => { + (element as UmbSectionViewsElement).sectionAlias = this.manifest?.alias; }, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts index 1c430fa534..91f0a07438 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts @@ -4,7 +4,8 @@ import { customElement, property, state } from 'lit/decorators.js'; import { map } from 'rxjs'; import { repeat } from 'lit/directives/repeat.js'; -import type { UmbRouterSlotInitEvent, UmbRouterSlotChangeEvent, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; +import type { UmbRouterSlotInitEvent, UmbRouterSlotChangeEvent } from '@umbraco-cms/internal/router'; import { createExtensionElement, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import type { ManifestWorkspaceView, @@ -97,7 +98,7 @@ export class UmbWorkspaceLayoutElement extends UmbLitElement { private _workspaceViews: Array = []; @state() - private _routes?: any[]; + private _routes?: IRoute[]; @state() private _routerPath?: string; @@ -130,19 +131,21 @@ export class UmbWorkspaceLayoutElement extends UmbLitElement { if (view.type === 'workspaceViewCollection') { return import( '../../../../shared/components/workspace/workspace-content/views/collection/workspace-view-collection.element' - ); + ) as unknown as Promise; } return createExtensionElement(view); }, - setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { - // When its using import, we get an element, when using createExtensionElement we get a Promise. - if ((component as any).then) { - (component as any).then((el: any) => (el.manifest = view)); + setup: (component, info) => { + if (component && 'manifest' in component) { + component.manifest = view; } else { - (component as any).manifest = view; + console.group(`[UmbWorkspaceLayout] Failed to setup component for route: ${info.match.route.path}`); + console.log('Matched route', info.match.route); + console.error('Missing property "manifest" on component', component); + console.groupEnd(); } }, - }; + } satisfies IRoute; }); // If we have a post fix then we need to add a direct from the empty url of the split-view-index: diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid-inner-test.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid-inner-test.element.ts index e5d20fa8f0..682577eec5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid-inner-test.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid-inner-test.element.ts @@ -1,9 +1,9 @@ import { html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; -import { IRoute, IRoutingInfo } from 'router-slot'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; +import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; /** * @element umb-property-editor-ui-block-grid-inner-test @@ -28,7 +28,7 @@ export class UmbPropertyEditorUIBlockGridInnerTestElement extends UmbLitElement component: () => { return import('./property-editor-ui-block-grid-inner-test.element'); }, - setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { console.log('block route inner', info); if (component instanceof HTMLElement) { (component as any).name = 'inner-1'; @@ -41,7 +41,7 @@ export class UmbPropertyEditorUIBlockGridInnerTestElement extends UmbLitElement component: () => { return import('./property-editor-ui-block-grid-inner-test.element'); }, - setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { console.log('block route inner', info); if (component instanceof HTMLElement) { (component as any).name = 'inner-2'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid.element.ts index 8939911174..774bdc20b0 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/property-editors/uis/block-grid/property-editor-ui-block-grid.element.ts @@ -1,11 +1,11 @@ import { html } from 'lit'; import { customElement, property, state } from 'lit/decorators.js'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; -import { IRoute, IRoutingInfo } from 'router-slot'; import { UmbVariantId } from '../../../../shared/variants/variant-id.class'; import { UMB_WORKSPACE_VARIANT_CONTEXT_TOKEN } from '../../../../shared/components/workspace/workspace-variant/workspace-variant.context'; import { UMB_WORKSPACE_PROPERTY_CONTEXT_TOKEN } from '../../../../shared/components/workspace-property/workspace-property.context'; -import { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; +import type { UmbRouterSlotChangeEvent, UmbRouterSlotInitEvent } from '@umbraco-cms/internal/router'; import { UmbPropertyEditorElement } from '@umbraco-cms/backoffice/property-editor'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @@ -56,7 +56,7 @@ export class UmbPropertyEditorUIBlockGridElement extends UmbLitElement implement component: () => { return import('./property-editor-ui-block-grid-inner-test.element'); }, - setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { console.log('block route', info); if (component instanceof HTMLElement) { (component as any).name = 'block-grid-1'; @@ -69,7 +69,7 @@ export class UmbPropertyEditorUIBlockGridElement extends UmbLitElement implement component: () => { return import('./property-editor-ui-block-grid-inner-test.element'); }, - setup: (component: Promise | HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { console.log('block route', info); if (component instanceof HTMLElement) { (component as any).name = 'block-grid-2'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.element.ts index a0e2ba7e85..0d9d3487c1 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/workspace/stylesheet-workspace.element.ts @@ -1,10 +1,10 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { serverFilePathFromUrlFriendlyPath } from '../../utils'; import { UmbStylesheetWorkspaceEditElement } from './stylesheet-workspace-edit.element'; import { UmbStylesheetWorkspaceContext } from './stylesheet-workspace.context'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-stylesheet-workspace') @@ -24,11 +24,11 @@ export class UmbStylesheetWorkspaceElement extends UmbLitElement { #element = new UmbStylesheetWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:path', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const path = info.match.params.path; const serverPath = serverFilePathFromUrlFriendlyPath(path); this.#workspaceContext.load(serverPath); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.element.ts index 22303e180b..68d93ba9c5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/workspace/dictionary-workspace.element.ts @@ -1,9 +1,9 @@ import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; -import { IRoutingInfo } from 'router-slot'; import { UmbDictionaryWorkspaceContext } from './dictionary-workspace.context'; import { UmbDictionaryWorkspaceEditElement } from './dictionary-workspace-edit.element'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; @customElement('umb-dictionary-workspace') @@ -14,11 +14,11 @@ export class UmbWorkspaceDictionaryElement extends UmbLitElement { #element = new UmbDictionaryWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts index aae4ff5fe6..e27f918e93 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/workspace/user-group-workspace.element.ts @@ -7,7 +7,7 @@ import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspaceAction } from '@umbraco-cms/backoffice/extensions-registry'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extensions-api'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; @customElement('umb-user-group-workspace') export class UmbUserGroupWorkspaceElement extends UmbLitElement { @@ -47,11 +47,11 @@ export class UmbUserGroupWorkspaceElement extends UmbLitElement { } @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (_component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts index 3523c9c190..2cebe636ce 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/section-view-users.element.ts @@ -2,7 +2,7 @@ import { css, html } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, state } from 'lit/decorators.js'; import { UmbUserStore, UMB_USER_STORE_CONTEXT_TOKEN } from '../../../users/repository/user.store'; -import type { IRoute, IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { umbExtensionsRegistry, createExtensionElement } from '@umbraco-cms/backoffice/extensions-api'; import './list-view-layouts/table/workspace-view-users-table.element'; @@ -65,7 +65,7 @@ export class UmbSectionViewUsersElement extends UmbLitElement { } private _createRoutes() { - const routes: any[] = [ + const routes: IRoute[] = [ { path: 'overview', component: () => import('./workspace-view-users-overview.element'), @@ -77,10 +77,10 @@ export class UmbSectionViewUsersElement extends UmbLitElement { routes.push({ path: `${workspace.meta.entityType}/:id`, component: () => createExtensionElement(workspace), - setup: (component: Promise, info: IRoutingInfo) => { - component.then((el: HTMLElement) => { - (el as any).entityId = info.match.params.id; - }); + setup: (component, info) => { + if (component) { + (component as any).entityId = info.match.params.id; + } }, }); routes.push({ diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-overview.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-overview.element.ts index 5aa001acf5..b770de3c2b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-overview.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-section/views/users/workspace-view-users-overview.element.ts @@ -9,7 +9,7 @@ import { UMB_INVITE_USER_MODAL, UMB_CREATE_USER_MODAL, } from '@umbraco-cms/backoffice/modal'; -import type { IRoute } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts index 29f5f99569..7cfea7028f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace.element.ts @@ -4,7 +4,7 @@ import { customElement, state } from 'lit/decorators.js'; import { UmbUserWorkspaceContext } from './user-workspace.context'; import { UmbUserWorkspaceEditElement } from './user-workspace-edit.element'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import { IRoutingInfo } from '@umbraco-cms/internal/router'; +import type { IRoute } from '@umbraco-cms/backoffice/router'; import '../../../shared/components/input-user-group/input-user-group.element'; import '../../../shared/property-editors/uis/document-picker/property-editor-ui-document-picker.element'; @@ -18,11 +18,11 @@ export class UmbUserWorkspaceElement extends UmbLitElement { #element = new UmbUserWorkspaceEditElement(); @state() - _routes: any[] = [ + _routes: IRoute[] = [ { path: 'edit/:id', component: () => this.#element, - setup: (component: HTMLElement, info: IRoutingInfo) => { + setup: (component, info) => { const id = info.match.params.id; this.#workspaceContext.load(id); }, diff --git a/src/Umbraco.Web.UI.Client/src/core/router/index.ts b/src/Umbraco.Web.UI.Client/src/core/router/index.ts index d3c5361842..fbbe29d96c 100644 --- a/src/Umbraco.Web.UI.Client/src/core/router/index.ts +++ b/src/Umbraco.Web.UI.Client/src/core/router/index.ts @@ -1,4 +1,3 @@ -export * from 'router-slot'; export * from './router-slot.element'; export * from './router-slot-change.event'; export * from './router-slot-init.event'; diff --git a/src/Umbraco.Web.UI.Client/src/core/router/router-slot.element.ts b/src/Umbraco.Web.UI.Client/src/core/router/router-slot.element.ts index a7c2fbf904..d055f41278 100644 --- a/src/Umbraco.Web.UI.Client/src/core/router/router-slot.element.ts +++ b/src/Umbraco.Web.UI.Client/src/core/router/router-slot.element.ts @@ -1,5 +1,5 @@ -import type { IRoute } from 'router-slot/model'; -import { RouterSlot } from 'router-slot'; +// eslint-disable-next-line local-rules/no-external-imports +import { RouterSlot } from 'router-slot/router-slot'; import { css, html, PropertyValueMap } from 'lit'; import { customElement, property } from 'lit/decorators.js'; import { UmbLitElement } from '../lit-element'; @@ -36,10 +36,10 @@ export class UmbRouterSlotElement extends UmbLitElement { @property() public get routes(): UmbRoute[] | undefined { - return (this.#router as any).routes; + return this.#router.routes; } public set routes(value: UmbRoute[] | undefined) { - this.#router.routes = (value as IRoute[]) || []; + this.#router.routes = value || []; } private _routerPath?: string; @@ -57,7 +57,7 @@ export class UmbRouterSlotElement extends UmbLitElement { } #routeContext = new UmbRouteContext(this, (contextRoutes) => { - (this.#modalRouter as any).routes = contextRoutes; + this.#modalRouter.routes = contextRoutes; // Force a render? this.#modalRouter.render(); }); From 27499d13446748b995d256647c2ae59771b2f3bc Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 4 Apr 2023 16:47:44 +0200 Subject: [PATCH 2/7] add local eslint rule to force certain imports from router-slot --- src/Umbraco.Web.UI.Client/.eslintrc.json | 1 + .../eslint-local-rules.cjs | 35 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/.eslintrc.json b/src/Umbraco.Web.UI.Client/.eslintrc.json index 12235e837e..88caa66773 100644 --- a/src/Umbraco.Web.UI.Client/.eslintrc.json +++ b/src/Umbraco.Web.UI.Client/.eslintrc.json @@ -43,6 +43,7 @@ "local-rules/prefer-import-aliases": "error", "local-rules/enforce-element-suffix-on-element-class-name": "error", "local-rules/prefer-umbraco-cms-imports": "error", + "local-rules/no-external-imports": "error", "@typescript-eslint/no-non-null-assertion": "off" }, "settings": { diff --git a/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs b/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs index cf5a8913b1..ed1c5036cd 100644 --- a/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs +++ b/src/Umbraco.Web.UI.Client/eslint-local-rules.cjs @@ -43,7 +43,7 @@ module.exports = { type: 'suggestion', docs: { description: - 'Ensures that any API resources from the `@umbraco-cms/backend-api` module are not used directly. Instead you should use the `tryExecuteAndNotify` function from the `@umbraco-cms/resources` module.', + 'Ensures that any API resources from the `@umbraco-cms/backoffice/backend-api` module are not used directly. Instead you should use the `tryExecuteAndNotify` function from the `@umbraco-cms/resources` module.', category: 'Best Practices', recommended: true, }, @@ -107,6 +107,7 @@ module.exports = { }; }, }, + /** @type {import('eslint').Rule.RuleModule} */ 'enforce-element-suffix-on-element-class-name': { meta: { @@ -138,6 +139,7 @@ module.exports = { }; }, }, + // TODO: Its not bullet proof, but it will catch most/some cases. /** @type {import('eslint').Rule.RuleModule} */ 'prefer-umbraco-cms-imports': { @@ -172,4 +174,35 @@ module.exports = { }; }, }, + + /** @type {import('eslint').Rule.RuleModule} */ + 'no-external-imports': { + meta: { + type: 'problem', + docs: { + description: + 'Ensures that the application does not rely on imports from external packages. Instead, use the @umbraco-cms/backoffice libs.', + recommended: true, + }, + fixable: 'code', + schema: [], + }, + create: function (context) { + return { + ImportDeclaration: function (node) { + // Check for imports from "router-slot" + if (node.source.value.startsWith('router-slot')) { + context.report({ + node, + message: + 'Use the `@umbraco-cms/backoffice/router` package instead of importing directly from "router-slot" because we might change that dependency in the future.', + fix: (fixer) => { + return fixer.replaceTextRange(node.source.range, `'@umbraco-cms/backoffice/router'`); + }, + }); + } + }, + }; + }, + }, }; From a5c8024ab7b230e54778b35ec2ebc720f9be133d Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 5 Apr 2023 08:36:42 +0200 Subject: [PATCH 3/7] remove ts5 features since test tool does not support it yet --- .../components/backoffice-frame/backoffice-main.element.ts | 2 +- .../workspace/workspace-layout/workspace-layout.element.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts index 031d20c953..59ab21030a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/backoffice-frame/backoffice-main.element.ts @@ -67,7 +67,7 @@ export class UmbBackofficeMainElement extends UmbLitElement { setup: (component) => { (component as UmbSectionElement).manifest = section; }, - } satisfies IRoute; + }; }); this._routes.push({ diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts index 91f0a07438..48c6859ea2 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/workspace/workspace-layout/workspace-layout.element.ts @@ -145,7 +145,7 @@ export class UmbWorkspaceLayoutElement extends UmbLitElement { console.groupEnd(); } }, - } satisfies IRoute; + }; }); // If we have a post fix then we need to add a direct from the empty url of the split-view-index: From 9e8b6d366fe253e038e2097764898e82eab7f3dd Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 5 Apr 2023 10:30:14 +0200 Subject: [PATCH 4/7] make sure to link using the base path (without leading slash) --- .../documents/entity-actions/create/create.action.ts | 2 +- .../workspace/workspace-package-builder.element.ts | 2 +- .../package-repo/workspace/workspace-package.element.ts | 2 +- .../views/created/packages-created-overview.element.ts | 4 ++-- .../user-profile-apps/user-profile-app-profile.element.ts | 2 +- .../users/modals/create-user/create-user-modal.element.ts | 2 +- .../src/installer/database/installer-database.element.ts | 2 +- src/Umbraco.Web.UI.Client/src/upgrader/upgrader.element.ts | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/create/create.action.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/create/create.action.ts index 7a5b8b3e31..62a8480101 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/create/create.action.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/entity-actions/create/create.action.ts @@ -33,7 +33,7 @@ export class UmbCreateDocumentEntityAction extends UmbEntityActionBase Date: Wed, 5 Apr 2023 10:29:45 +0200 Subject: [PATCH 5/7] make sure to preserve the querystring when making the first router navigation --- src/Umbraco.Web.UI.Client/src/app.ts | 39 ++++++++++++++++++---------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/app.ts b/src/Umbraco.Web.UI.Client/src/app.ts index 8bf3961d55..0984fd9bb8 100644 --- a/src/Umbraco.Web.UI.Client/src/app.ts +++ b/src/Umbraco.Web.UI.Client/src/app.ts @@ -10,10 +10,11 @@ import './core/modal/modal-element.element'; import { UUIIconRegistryEssential } from '@umbraco-ui/uui'; import { css, html } from 'lit'; -import { customElement, property, state } from 'lit/decorators.js'; +import { customElement, property } from 'lit/decorators.js'; import { UmbIconStore } from './core/stores/icon/icon.store'; import type { Guard, IRoute } from '@umbraco-cms/backoffice/router'; +import { pathWithoutBasePath, queryString } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { OpenAPI, RuntimeLevelModel, ServerResource } from '@umbraco-cms/backoffice/backend-api'; @@ -37,8 +38,7 @@ export class UmbAppElement extends UmbLitElement { @property({ type: String }) private umbracoUrl?: string; - @state() - private _routes: IRoute[] = [ + private _routes: IRoute[] = [ { path: 'install', component: () => import('./installer/installer.element'), @@ -68,7 +68,7 @@ export class UmbAppElement extends UmbLitElement { this._setup(); } - async connectedCallback() { + connectedCallback() { super.connectedCallback(); OpenAPI.BASE = @@ -79,8 +79,7 @@ export class UmbAppElement extends UmbLitElement { this.provideContext('UMBRACOBASE', OpenAPI.BASE); - await this._setInitStatus(); - this._redirect(); + this._setInitStatus(); // Listen for the debug event from the component this.addEventListener(umbDebugContextEventType, (event: any) => { @@ -106,30 +105,44 @@ export class UmbAppElement extends UmbLitElement { } private async _setup() { + await this._setInitStatus(); this._iconRegistry.attach(this); } private async _setInitStatus() { const { data } = await tryExecuteAndNotify(this, ServerResource.getServerStatus()); this._runtimeLevel = data?.serverStatus ?? RuntimeLevelModel.UNKNOWN; + this._redirect(); } private _redirect() { switch (this._runtimeLevel) { case RuntimeLevelModel.INSTALL: - history.replaceState(null, '', '/install'); + history.replaceState(null, '', 'install'); break; case RuntimeLevelModel.UPGRADE: - history.replaceState(null, '', '/upgrade'); + history.replaceState(null, '', 'upgrade'); break; case RuntimeLevelModel.RUN: { - const pathname = - window.location.pathname === '/install' || window.location.pathname === '/upgrade' - ? '/' - : window.location.pathname; - history.replaceState(null, '', pathname); + const pathname = pathWithoutBasePath(); + + // If we are on the installer or upgrade page, redirect to the root + // but if not, keep the current path but replace state anyway to initialize the router + let finalPath = pathname === 'install' || pathname === 'upgrade' ? '/' : pathname; + + const qs = queryString(); + + if (qs) { + finalPath += qs; + } + + if (location.hash) { + finalPath += `#${location.hash}`; + } + + history.replaceState(null, '', finalPath); break; } From 345a2779617f605682e01624e80d60dbb8c32edc Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Wed, 5 Apr 2023 10:38:03 +0200 Subject: [PATCH 6/7] use full location.href for initial routing --- src/Umbraco.Web.UI.Client/src/app.ts | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/app.ts b/src/Umbraco.Web.UI.Client/src/app.ts index 0984fd9bb8..5707e9ec4d 100644 --- a/src/Umbraco.Web.UI.Client/src/app.ts +++ b/src/Umbraco.Web.UI.Client/src/app.ts @@ -14,7 +14,7 @@ import { customElement, property } from 'lit/decorators.js'; import { UmbIconStore } from './core/stores/icon/icon.store'; import type { Guard, IRoute } from '@umbraco-cms/backoffice/router'; -import { pathWithoutBasePath, queryString } from '@umbraco-cms/backoffice/router'; +import { pathWithoutBasePath } from '@umbraco-cms/backoffice/router'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; import { OpenAPI, RuntimeLevelModel, ServerResource } from '@umbraco-cms/backoffice/backend-api'; @@ -126,21 +126,11 @@ export class UmbAppElement extends UmbLitElement { break; case RuntimeLevelModel.RUN: { - const pathname = pathWithoutBasePath(); + const pathname = pathWithoutBasePath({ start: true, end: false }); // If we are on the installer or upgrade page, redirect to the root // but if not, keep the current path but replace state anyway to initialize the router - let finalPath = pathname === 'install' || pathname === 'upgrade' ? '/' : pathname; - - const qs = queryString(); - - if (qs) { - finalPath += qs; - } - - if (location.hash) { - finalPath += `#${location.hash}`; - } + const finalPath = pathname === '/install' || pathname === '/upgrade' ? '/' : location.href; history.replaceState(null, '', finalPath); break; From b16b8b73350914646f3bf452145be02453f150b1 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 11 Apr 2023 10:32:05 +0200 Subject: [PATCH 7/7] Chore/update tree api types (#644) * update types from v13 * replace endpoint names --- .../libs/backend-api/src/core/request.ts | 425 +++++++++--------- .../libs/backend-api/src/index.ts | 19 + .../src/models/DataTypeItemResponseModel.ts | 10 + .../models/DictionaryItemItemResponseModel.ts | 8 + .../models/DocumentBlueprintResponseModel.ts | 8 + .../src/models/DocumentItemResponseModel.ts | 10 + .../models/DocumentTypeItemResponseModel.ts | 11 + .../models/FileItemResponseModelBaseModel.ts | 10 + .../src/models/ItemResponseModelBaseModel.ts | 9 + .../src/models/LanguageItemResponseModel.ts | 9 + .../src/models/LogLevelCountsReponseModel.ts | 11 +- .../src/models/MediaItemResponseModel.ts | 10 + .../src/models/MediaTypeItemResponseModel.ts | 10 + .../src/models/MemberGroupItemReponseModel.ts | 8 + .../src/models/MemberTypeItemResponseModel.ts | 10 + .../models/PartialViewItemResponseModel.ts | 8 + .../models/RelationTypeItemResponseModel.ts | 8 + .../src/models/ScriptItemResponseModel.ts | 8 + .../src/models/StaticFileItemResponseModel.ts | 8 + .../src/models/StylesheetItemResponseModel.ts | 8 + .../src/models/TemplateItemResponseModel.ts | 8 + .../src/services/DataTypeResource.ts | 39 +- .../src/services/DictionaryResource.ts | 39 +- .../src/services/DocumentBlueprintResource.ts | 8 +- .../src/services/DocumentResource.ts | 50 +-- .../src/services/DocumentTypeResource.ts | 38 +- .../src/services/LanguageResource.ts | 19 + .../src/services/LogViewerResource.ts | 418 ++++++++--------- .../backend-api/src/services/MediaResource.ts | 22 + .../src/services/MediaTypeResource.ts | 39 +- .../src/services/MemberGroupResource.ts | 13 +- .../src/services/MemberTypeResource.ts | 13 +- .../src/services/PartialViewResource.ts | 38 +- .../src/services/RelationTypeResource.ts | 9 +- .../src/services/ScriptResource.ts | 38 +- .../src/services/StaticFileResource.ts | 19 - .../src/services/StylesheetResource.ts | 38 +- .../src/services/TemplateResource.ts | 43 +- .../backend-api/src/services/V1Resource.ts | 30 ++ .../sources/document-type.tree.server.data.ts | 2 +- .../sources/document.tree.server.data.ts | 2 +- .../sources/media-type.tree.server.data.ts | 2 +- .../sources/member-group.tree.server.data.ts | 2 +- .../sources/member-type.tree.server.data.ts | 2 +- .../sources/data-type.tree.server.data.ts | 2 +- .../repository/sources/index.ts | 4 +- .../sources/relation-type.tree.server.data.ts | 2 +- .../sources/stylesheet.tree.server.data.ts | 2 +- .../templates/repository/sources/index.ts | 7 +- .../sources/template.tree.server.data.ts | 2 +- .../sources/dictionary.tree.server.data.ts | 2 +- 51 files changed, 887 insertions(+), 673 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DataTypeItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DictionaryItemItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentBlueprintResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentTypeItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/FileItemResponseModelBaseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ItemResponseModelBaseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LanguageItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaTypeItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberGroupItemReponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberTypeItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/PartialViewItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/RelationTypeItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ScriptItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StaticFileItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StylesheetItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/models/TemplateItemResponseModel.ts create mode 100644 src/Umbraco.Web.UI.Client/libs/backend-api/src/services/V1Resource.ts diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/core/request.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/core/request.ts index 1743c2b225..0a87eb5f1c 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/core/request.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/core/request.ts @@ -9,265 +9,262 @@ import type { OnCancel } from './CancelablePromise'; import type { OpenAPIConfig } from './OpenAPI'; const isDefined = (value: T | null | undefined): value is Exclude => { - return value !== undefined && value !== null; + return value !== undefined && value !== null; }; const isString = (value: any): value is string => { - return typeof value === 'string'; + return typeof value === 'string'; }; const isStringWithValue = (value: any): value is string => { - return isString(value) && value !== ''; + return isString(value) && value !== ''; }; const isBlob = (value: any): value is Blob => { - return ( - typeof value === 'object' && - typeof value.type === 'string' && - typeof value.stream === 'function' && - typeof value.arrayBuffer === 'function' && - typeof value.constructor === 'function' && - typeof value.constructor.name === 'string' && - /^(Blob|File)$/.test(value.constructor.name) && - /^(Blob|File)$/.test(value[Symbol.toStringTag]) - ); + return ( + typeof value === 'object' && + typeof value.type === 'string' && + typeof value.stream === 'function' && + typeof value.arrayBuffer === 'function' && + typeof value.constructor === 'function' && + typeof value.constructor.name === 'string' && + /^(Blob|File)$/.test(value.constructor.name) && + /^(Blob|File)$/.test(value[Symbol.toStringTag]) + ); }; const isFormData = (value: any): value is FormData => { - return value instanceof FormData; + return value instanceof FormData; }; const base64 = (str: string): string => { - try { - return btoa(str); - } catch (err) { - // @ts-ignore - return Buffer.from(str).toString('base64'); - } + try { + return btoa(str); + } catch (err) { + // @ts-ignore + return Buffer.from(str).toString('base64'); + } }; const getQueryString = (params: Record): string => { - const qs: string[] = []; + const qs: string[] = []; - const append = (id: string, value: any) => { - qs.push(`${encodeURIComponent(id)}=${encodeURIComponent(String(value))}`); - }; + const append = (key: string, value: any) => { + qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + }; - const process = (id: string, value: any) => { - if (isDefined(value)) { - if (Array.isArray(value)) { - value.forEach((v) => { - process(id, v); - }); - } else if (typeof value === 'object') { - Object.entries(value).forEach(([k, v]) => { - process(`${id}[${k}]`, v); - }); - } else { - append(id, value); - } - } - }; + const process = (key: string, value: any) => { + if (isDefined(value)) { + if (Array.isArray(value)) { + value.forEach(v => { + process(key, v); + }); + } else if (typeof value === 'object') { + Object.entries(value).forEach(([k, v]) => { + process(`${key}[${k}]`, v); + }); + } else { + append(key, value); + } + } + }; - Object.entries(params).forEach(([id, value]) => { - process(id, value); - }); + Object.entries(params).forEach(([key, value]) => { + process(key, value); + }); - if (qs.length > 0) { - return `?${qs.join('&')}`; - } + if (qs.length > 0) { + return `?${qs.join('&')}`; + } - return ''; + return ''; }; const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => { - const encoder = config.ENCODE_PATH || encodeURI; + const encoder = config.ENCODE_PATH || encodeURI; - const path = options.url - .replace('{api-version}', config.VERSION) - .replace(/{(.*?)}/g, (substring: string, group: string) => { - if (options.path?.hasOwnProperty(group)) { - return encoder(String(options.path[group])); - } - return substring; - }); + const path = options.url + .replace('{api-version}', config.VERSION) + .replace(/{(.*?)}/g, (substring: string, group: string) => { + if (options.path?.hasOwnProperty(group)) { + return encoder(String(options.path[group])); + } + return substring; + }); - const url = `${config.BASE}${path}`; - if (options.query) { - return `${url}${getQueryString(options.query)}`; - } - return url; + const url = `${config.BASE}${path}`; + if (options.query) { + return `${url}${getQueryString(options.query)}`; + } + return url; }; const getFormData = (options: ApiRequestOptions): FormData | undefined => { - if (options.formData) { - const formData = new FormData(); + if (options.formData) { + const formData = new FormData(); - const process = (id: string, value: any) => { - if (isString(value) || isBlob(value)) { - formData.append(id, value); - } else { - formData.append(id, JSON.stringify(value)); - } - }; + const process = (key: string, value: any) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; - Object.entries(options.formData) - .filter(([_, value]) => isDefined(value)) - .forEach(([id, value]) => { - if (Array.isArray(value)) { - value.forEach((v) => process(id, v)); - } else { - process(id, value); - } - }); + Object.entries(options.formData) + .filter(([_, value]) => isDefined(value)) + .forEach(([key, value]) => { + if (Array.isArray(value)) { + value.forEach(v => process(key, v)); + } else { + process(key, value); + } + }); - return formData; - } - return undefined; + return formData; + } + return undefined; }; type Resolver = (options: ApiRequestOptions) => Promise; const resolve = async (options: ApiRequestOptions, resolver?: T | Resolver): Promise => { - if (typeof resolver === 'function') { - return (resolver as Resolver)(options); - } - return resolver; + if (typeof resolver === 'function') { + return (resolver as Resolver)(options); + } + return resolver; }; const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise => { - const token = await resolve(options, config.TOKEN); - const username = await resolve(options, config.USERNAME); - const password = await resolve(options, config.PASSWORD); - const additionalHeaders = await resolve(options, config.HEADERS); + const token = await resolve(options, config.TOKEN); + const username = await resolve(options, config.USERNAME); + const password = await resolve(options, config.PASSWORD); + const additionalHeaders = await resolve(options, config.HEADERS); - const headers = Object.entries({ - Accept: 'application/json', - ...additionalHeaders, - ...options.headers, - }) - .filter(([_, value]) => isDefined(value)) - .reduce( - (headers, [id, value]) => ({ - ...headers, - [id]: String(value), - }), - {} as Record - ); + const headers = Object.entries({ + Accept: 'application/json', + ...additionalHeaders, + ...options.headers, + }) + .filter(([_, value]) => isDefined(value)) + .reduce((headers, [key, value]) => ({ + ...headers, + [key]: String(value), + }), {} as Record); - if (isStringWithValue(token)) { - headers['Authorization'] = `Bearer ${token}`; - } + if (isStringWithValue(token)) { + headers['Authorization'] = `Bearer ${token}`; + } - if (isStringWithValue(username) && isStringWithValue(password)) { - const credentials = base64(`${username}:${password}`); - headers['Authorization'] = `Basic ${credentials}`; - } + if (isStringWithValue(username) && isStringWithValue(password)) { + const credentials = base64(`${username}:${password}`); + headers['Authorization'] = `Basic ${credentials}`; + } - if (options.body) { - if (options.mediaType) { - headers['Content-Type'] = options.mediaType; - } else if (isBlob(options.body)) { - headers['Content-Type'] = options.body.type || 'application/octet-stream'; - } else if (isString(options.body)) { - headers['Content-Type'] = 'text/plain'; - } else if (!isFormData(options.body)) { - headers['Content-Type'] = 'application/json'; - } - } + if (options.body) { + if (options.mediaType) { + headers['Content-Type'] = options.mediaType; + } else if (isBlob(options.body)) { + headers['Content-Type'] = options.body.type || 'application/octet-stream'; + } else if (isString(options.body)) { + headers['Content-Type'] = 'text/plain'; + } else if (!isFormData(options.body)) { + headers['Content-Type'] = 'application/json'; + } + } - return new Headers(headers); + return new Headers(headers); }; const getRequestBody = (options: ApiRequestOptions): any => { - if (options.body) { - if (options.mediaType?.includes('/json')) { - return JSON.stringify(options.body); - } else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) { - return options.body; - } else { - return JSON.stringify(options.body); - } - } - return undefined; + if (options.body) { + if (options.mediaType?.includes('/json')) { + return JSON.stringify(options.body) + } else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) { + return options.body; + } else { + return JSON.stringify(options.body); + } + } + return undefined; }; export const sendRequest = async ( - config: OpenAPIConfig, - options: ApiRequestOptions, - url: string, - body: any, - formData: FormData | undefined, - headers: Headers, - onCancel: OnCancel + config: OpenAPIConfig, + options: ApiRequestOptions, + url: string, + body: any, + formData: FormData | undefined, + headers: Headers, + onCancel: OnCancel ): Promise => { - const controller = new AbortController(); + const controller = new AbortController(); - const request: RequestInit = { - headers, - body: body ?? formData, - method: options.method, - signal: controller.signal, - }; + const request: RequestInit = { + headers, + body: body ?? formData, + method: options.method, + signal: controller.signal, + }; - if (config.WITH_CREDENTIALS) { - request.credentials = config.CREDENTIALS; - } + if (config.WITH_CREDENTIALS) { + request.credentials = config.CREDENTIALS; + } - onCancel(() => controller.abort()); + onCancel(() => controller.abort()); - return await fetch(url, request); + return await fetch(url, request); }; const getResponseHeader = (response: Response, responseHeader?: string): string | undefined => { - if (responseHeader) { - const content = response.headers.get(responseHeader); - if (isString(content)) { - return content; - } - } - return undefined; + if (responseHeader) { + const content = response.headers.get(responseHeader); + if (isString(content)) { + return content; + } + } + return undefined; }; const getResponseBody = async (response: Response): Promise => { - if (response.status !== 204) { - try { - const contentType = response.headers.get('Content-Type'); - if (contentType) { - const isJSON = contentType.toLowerCase().startsWith('application/json'); - if (isJSON) { - return await response.json(); - } else { - return await response.text(); - } - } - } catch (error) { - console.error(error); - } - } - return undefined; + if (response.status !== 204) { + try { + const contentType = response.headers.get('Content-Type'); + if (contentType) { + const isJSON = contentType.toLowerCase().startsWith('application/json'); + if (isJSON) { + return await response.json(); + } else { + return await response.text(); + } + } + } catch (error) { + console.error(error); + } + } + return undefined; }; const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => { - const errors: Record = { - 400: 'Bad Request', - 401: 'Unauthorized', - 403: 'Forbidden', - 404: 'Not Found', - 500: 'Internal Server Error', - 502: 'Bad Gateway', - 503: 'Service Unavailable', - ...options.errors, - }; + const errors: Record = { + 400: 'Bad Request', + 401: 'Unauthorized', + 403: 'Forbidden', + 404: 'Not Found', + 500: 'Internal Server Error', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + ...options.errors, + } - const error = errors[result.status]; - if (error) { - throw new ApiError(options, result, error); - } + const error = errors[result.status]; + if (error) { + throw new ApiError(options, result, error); + } - if (!result.ok) { - throw new ApiError(options, result, 'Generic Error'); - } + if (!result.ok) { + throw new ApiError(options, result, 'Generic Error'); + } }; /** @@ -278,32 +275,32 @@ const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => * @throws ApiError */ export const request = (config: OpenAPIConfig, options: ApiRequestOptions): CancelablePromise => { - return new CancelablePromise(async (resolve, reject, onCancel) => { - try { - const url = getUrl(config, options); - const formData = getFormData(options); - const body = getRequestBody(options); - const headers = await getHeaders(config, options); + return new CancelablePromise(async (resolve, reject, onCancel) => { + try { + const url = getUrl(config, options); + const formData = getFormData(options); + const body = getRequestBody(options); + const headers = await getHeaders(config, options); - if (!onCancel.isCancelled) { - const response = await sendRequest(config, options, url, body, formData, headers, onCancel); - const responseBody = await getResponseBody(response); - const responseHeader = getResponseHeader(response, options.responseHeader); + if (!onCancel.isCancelled) { + const response = await sendRequest(config, options, url, body, formData, headers, onCancel); + const responseBody = await getResponseBody(response); + const responseHeader = getResponseHeader(response, options.responseHeader); - const result: ApiResult = { - url, - ok: response.ok, - status: response.status, - statusText: response.statusText, - body: responseHeader ?? responseBody, - }; + const result: ApiResult = { + url, + ok: response.ok, + status: response.status, + statusText: response.statusText, + body: responseHeader ?? responseBody, + }; - catchErrorCodes(options, result); + catchErrorCodes(options, result); - resolve(result.body); - } - } catch (error) { - reject(error); - } - }); + resolve(result.body); + } + } catch (error) { + reject(error); + } + }); }; diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/index.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/index.ts index 326b993f2f..9919e60217 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/index.ts @@ -39,21 +39,26 @@ export type { CreateUserResponseModel } from './models/CreateUserResponseModel'; export type { CultureReponseModel } from './models/CultureReponseModel'; export type { DatabaseInstallResponseModel } from './models/DatabaseInstallResponseModel'; export type { DatabaseSettingsPresentationModel } from './models/DatabaseSettingsPresentationModel'; +export type { DataTypeItemResponseModel } from './models/DataTypeItemResponseModel'; export type { DataTypeModelBaseModel } from './models/DataTypeModelBaseModel'; export type { DataTypePropertyPresentationModel } from './models/DataTypePropertyPresentationModel'; export type { DataTypePropertyReferenceModel } from './models/DataTypePropertyReferenceModel'; export type { DataTypeReferenceResponseModel } from './models/DataTypeReferenceResponseModel'; export type { DataTypeResponseModel } from './models/DataTypeResponseModel'; +export type { DictionaryItemItemResponseModel } from './models/DictionaryItemItemResponseModel'; export type { DictionaryItemModelBaseModel } from './models/DictionaryItemModelBaseModel'; export type { DictionaryItemResponseModel } from './models/DictionaryItemResponseModel'; export type { DictionaryItemTranslationModel } from './models/DictionaryItemTranslationModel'; export type { DictionaryOverviewResponseModel } from './models/DictionaryOverviewResponseModel'; export { DirectionModel } from './models/DirectionModel'; export type { DisableUserRequestModel } from './models/DisableUserRequestModel'; +export type { DocumentBlueprintResponseModel } from './models/DocumentBlueprintResponseModel'; export type { DocumentBlueprintTreeItemResponseModel } from './models/DocumentBlueprintTreeItemResponseModel'; +export type { DocumentItemResponseModel } from './models/DocumentItemResponseModel'; export type { DocumentNotificationResponseModel } from './models/DocumentNotificationResponseModel'; export type { DocumentResponseModel } from './models/DocumentResponseModel'; export type { DocumentTreeItemResponseModel } from './models/DocumentTreeItemResponseModel'; +export type { DocumentTypeItemResponseModel } from './models/DocumentTypeItemResponseModel'; export type { DocumentTypePropertyTypeContainerResponseModel } from './models/DocumentTypePropertyTypeContainerResponseModel'; export type { DocumentTypePropertyTypeResponseModel } from './models/DocumentTypePropertyTypeResponseModel'; export type { DocumentTypeResponseModel } from './models/DocumentTypeResponseModel'; @@ -67,6 +72,7 @@ export type { DomainsResponseModel } from './models/DomainsResponseModel'; export type { EnableUserRequestModel } from './models/EnableUserRequestModel'; export type { EntityTreeItemResponseModel } from './models/EntityTreeItemResponseModel'; export type { FieldPresentationModel } from './models/FieldPresentationModel'; +export type { FileItemResponseModelBaseModel } from './models/FileItemResponseModelBaseModel'; export type { FileSystemTreeItemPresentationModel } from './models/FileSystemTreeItemPresentationModel'; export type { FolderModelBaseModel } from './models/FolderModelBaseModel'; export type { FolderReponseModel } from './models/FolderReponseModel'; @@ -87,6 +93,8 @@ export type { IndexResponseModel } from './models/IndexResponseModel'; export type { InstallSettingsResponseModel } from './models/InstallSettingsResponseModel'; export type { InstallVResponseModel } from './models/InstallVResponseModel'; export type { InviteUserRequestModel } from './models/InviteUserRequestModel'; +export type { ItemResponseModelBaseModel } from './models/ItemResponseModelBaseModel'; +export type { LanguageItemResponseModel } from './models/LanguageItemResponseModel'; export type { LanguageModelBaseModel } from './models/LanguageModelBaseModel'; export type { LanguageResponseModel } from './models/LanguageResponseModel'; export type { LoggerResponseModel } from './models/LoggerResponseModel'; @@ -95,12 +103,16 @@ export { LogLevelModel } from './models/LogLevelModel'; export type { LogMessagePropertyPresentationModel } from './models/LogMessagePropertyPresentationModel'; export type { LogMessageResponseModel } from './models/LogMessageResponseModel'; export type { LogTemplateResponseModel } from './models/LogTemplateResponseModel'; +export type { MediaItemResponseModel } from './models/MediaItemResponseModel'; +export type { MediaTypeItemResponseModel } from './models/MediaTypeItemResponseModel'; export type { MediaTypePropertyTypeContainerResponseModel } from './models/MediaTypePropertyTypeContainerResponseModel'; export type { MediaTypePropertyTypeResponseModel } from './models/MediaTypePropertyTypeResponseModel'; export type { MediaTypeResponseModel } from './models/MediaTypeResponseModel'; export type { MediaValueModel } from './models/MediaValueModel'; export type { MediaVariantRequestModel } from './models/MediaVariantRequestModel'; export type { MediaVariantResponseModel } from './models/MediaVariantResponseModel'; +export type { MemberGroupItemReponseModel } from './models/MemberGroupItemReponseModel'; +export type { MemberTypeItemResponseModel } from './models/MemberTypeItemResponseModel'; export type { ModelsBuilderResponseModel } from './models/ModelsBuilderResponseModel'; export { ModelsModeModel } from './models/ModelsModeModel'; export type { MoveDataTypeRequestModel } from './models/MoveDataTypeRequestModel'; @@ -145,6 +157,7 @@ export type { PagedSearchResultResponseModel } from './models/PagedSearchResultR export type { PagedTelemetryResponseModel } from './models/PagedTelemetryResponseModel'; export type { PagedUserGroupPresentationModel } from './models/PagedUserGroupPresentationModel'; export type { PagedUserResponseModel } from './models/PagedUserResponseModel'; +export type { PartialViewItemResponseModel } from './models/PartialViewItemResponseModel'; export type { ProblemDetailsModel } from './models/ProblemDetailsModel'; export type { ProfilingStatusRequestModel } from './models/ProfilingStatusRequestModel'; export type { ProfilingStatusResponseModel } from './models/ProfilingStatusResponseModel'; @@ -159,21 +172,26 @@ export type { RedirectUrlStatusResponseModel } from './models/RedirectUrlStatusR export type { RelationItemResponseModel } from './models/RelationItemResponseModel'; export type { RelationResponseModel } from './models/RelationResponseModel'; export type { RelationTypeBaseModel } from './models/RelationTypeBaseModel'; +export type { RelationTypeItemResponseModel } from './models/RelationTypeItemResponseModel'; export type { RelationTypeResponseModel } from './models/RelationTypeResponseModel'; export { RuntimeLevelModel } from './models/RuntimeLevelModel'; export type { SavedLogSearchPresenationBaseModel } from './models/SavedLogSearchPresenationBaseModel'; export type { SavedLogSearchRequestModel } from './models/SavedLogSearchRequestModel'; export type { SavedLogSearchResponseModel } from './models/SavedLogSearchResponseModel'; export type { SaveUserGroupRequestModel } from './models/SaveUserGroupRequestModel'; +export type { ScriptItemResponseModel } from './models/ScriptItemResponseModel'; export type { SearcherResponseModel } from './models/SearcherResponseModel'; export type { SearchResultResponseModel } from './models/SearchResultResponseModel'; export type { ServerStatusResponseModel } from './models/ServerStatusResponseModel'; export type { SetAvatarRequestModel } from './models/SetAvatarRequestModel'; +export type { StaticFileItemResponseModel } from './models/StaticFileItemResponseModel'; export { StatusResultTypeModel } from './models/StatusResultTypeModel'; +export type { StylesheetItemResponseModel } from './models/StylesheetItemResponseModel'; export { TelemetryLevelModel } from './models/TelemetryLevelModel'; export type { TelemetryRepresentationBaseModel } from './models/TelemetryRepresentationBaseModel'; export type { TelemetryRequestModel } from './models/TelemetryRequestModel'; export type { TelemetryResponseModel } from './models/TelemetryResponseModel'; +export type { TemplateItemResponseModel } from './models/TemplateItemResponseModel'; export type { TemplateModelBaseModel } from './models/TemplateModelBaseModel'; export type { TemplateQueryExecuteFilterPresentationModel } from './models/TemplateQueryExecuteFilterPresentationModel'; export type { TemplateQueryExecuteModel } from './models/TemplateQueryExecuteModel'; @@ -258,3 +276,4 @@ export { TrackedReferenceResource } from './services/TrackedReferenceResource'; export { UpgradeResource } from './services/UpgradeResource'; export { UserGroupsResource } from './services/UserGroupsResource'; export { UsersResource } from './services/UsersResource'; +export { V1Resource } from './services/V1Resource'; diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DataTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DataTypeItemResponseModel.ts new file mode 100644 index 0000000000..e277363f47 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DataTypeItemResponseModel.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type DataTypeItemResponseModel = (ItemResponseModelBaseModel & { + icon?: string | null; +}); + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DictionaryItemItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DictionaryItemItemResponseModel.ts new file mode 100644 index 0000000000..bcc5a02867 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DictionaryItemItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type DictionaryItemItemResponseModel = ItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentBlueprintResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentBlueprintResponseModel.ts new file mode 100644 index 0000000000..fd6b735c5b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentBlueprintResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type DocumentBlueprintResponseModel = ItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentItemResponseModel.ts new file mode 100644 index 0000000000..3bf495dc8d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentItemResponseModel.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type DocumentItemResponseModel = (ItemResponseModelBaseModel & { + icon?: string | null; +}); + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentTypeItemResponseModel.ts new file mode 100644 index 0000000000..f085ce11bc --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/DocumentTypeItemResponseModel.ts @@ -0,0 +1,11 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type DocumentTypeItemResponseModel = (ItemResponseModelBaseModel & { + isElement?: boolean; + icon?: string | null; +}); + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/FileItemResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/FileItemResponseModelBaseModel.ts new file mode 100644 index 0000000000..6867fcab7f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/FileItemResponseModelBaseModel.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type FileItemResponseModelBaseModel = { + name?: string; + path?: string; + icon?: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ItemResponseModelBaseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ItemResponseModelBaseModel.ts new file mode 100644 index 0000000000..486b5df6f8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ItemResponseModelBaseModel.ts @@ -0,0 +1,9 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type ItemResponseModelBaseModel = { + name?: string; + id?: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LanguageItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LanguageItemResponseModel.ts new file mode 100644 index 0000000000..f9a7e78419 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LanguageItemResponseModel.ts @@ -0,0 +1,9 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type LanguageItemResponseModel = { + name?: string; + isoCode?: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LogLevelCountsReponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LogLevelCountsReponseModel.ts index d8e5543810..a1064cc7a4 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LogLevelCountsReponseModel.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/LogLevelCountsReponseModel.ts @@ -3,9 +3,10 @@ /* eslint-disable */ export type LogLevelCountsReponseModel = { - information?: number; - debug?: number; - warning?: number; - error?: number; - fatal?: number; + information?: number; + debug?: number; + warning?: number; + error?: number; + fatal?: number; }; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaItemResponseModel.ts new file mode 100644 index 0000000000..1b28cf9a1d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaItemResponseModel.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type MediaItemResponseModel = (ItemResponseModelBaseModel & { + icon?: string | null; +}); + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaTypeItemResponseModel.ts new file mode 100644 index 0000000000..536d0ce369 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MediaTypeItemResponseModel.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type MediaTypeItemResponseModel = (ItemResponseModelBaseModel & { + icon?: string | null; +}); + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberGroupItemReponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberGroupItemReponseModel.ts new file mode 100644 index 0000000000..d42cc718f6 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberGroupItemReponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type MemberGroupItemReponseModel = ItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberTypeItemResponseModel.ts new file mode 100644 index 0000000000..8d42b882cb --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/MemberTypeItemResponseModel.ts @@ -0,0 +1,10 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type MemberTypeItemResponseModel = (ItemResponseModelBaseModel & { + icon?: string | null; +}); + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/PartialViewItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/PartialViewItemResponseModel.ts new file mode 100644 index 0000000000..545b2ebdd8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/PartialViewItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { FileItemResponseModelBaseModel } from './FileItemResponseModelBaseModel'; + +export type PartialViewItemResponseModel = FileItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/RelationTypeItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/RelationTypeItemResponseModel.ts new file mode 100644 index 0000000000..8458385428 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/RelationTypeItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type RelationTypeItemResponseModel = ItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ScriptItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ScriptItemResponseModel.ts new file mode 100644 index 0000000000..1092e37cb1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/ScriptItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { FileItemResponseModelBaseModel } from './FileItemResponseModelBaseModel'; + +export type ScriptItemResponseModel = FileItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StaticFileItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StaticFileItemResponseModel.ts new file mode 100644 index 0000000000..793190a8b7 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StaticFileItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { FileItemResponseModelBaseModel } from './FileItemResponseModelBaseModel'; + +export type StaticFileItemResponseModel = FileItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StylesheetItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StylesheetItemResponseModel.ts new file mode 100644 index 0000000000..6b09804191 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/StylesheetItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { FileItemResponseModelBaseModel } from './FileItemResponseModelBaseModel'; + +export type StylesheetItemResponseModel = FileItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/TemplateItemResponseModel.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/TemplateItemResponseModel.ts new file mode 100644 index 0000000000..023262e3b2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/models/TemplateItemResponseModel.ts @@ -0,0 +1,8 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { ItemResponseModelBaseModel } from './ItemResponseModelBaseModel'; + +export type TemplateItemResponseModel = ItemResponseModelBaseModel; + diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DataTypeResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DataTypeResource.ts index fec4ff09e8..ccf865111c 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DataTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DataTypeResource.ts @@ -4,11 +4,10 @@ import type { CopyDataTypeRequestModel } from '../models/CopyDataTypeRequestModel'; import type { CreateDataTypeRequestModel } from '../models/CreateDataTypeRequestModel'; import type { CreateFolderRequestModel } from '../models/CreateFolderRequestModel'; +import type { DataTypeItemResponseModel } from '../models/DataTypeItemResponseModel'; import type { DataTypeReferenceResponseModel } from '../models/DataTypeReferenceResponseModel'; import type { DataTypeResponseModel } from '../models/DataTypeResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; import type { FolderReponseModel } from '../models/FolderReponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; import type { MoveDataTypeRequestModel } from '../models/MoveDataTypeRequestModel'; import type { PagedFolderTreeItemResponseModel } from '../models/PagedFolderTreeItemResponseModel'; import type { UpdateDataTypeRequestModel } from '../models/UpdateDataTypeRequestModel'; @@ -268,6 +267,24 @@ export class DataTypeResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getDataTypeItem({ + id, + }: { + id?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/data-type/item', + query: { + 'id': id, + }, + }); + } + /** * @returns PagedFolderTreeItemResponseModel Success * @throws ApiError @@ -295,24 +312,6 @@ export class DataTypeResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeDataTypeItem({ - id, - }: { - id?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/data-type/item', - query: { - 'id': id, - }, - }); - } - /** * @returns PagedFolderTreeItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DictionaryResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DictionaryResource.ts index 74af557479..bbc8823aa0 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DictionaryResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DictionaryResource.ts @@ -2,9 +2,8 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateDictionaryItemRequestModel } from '../models/CreateDictionaryItemRequestModel'; +import type { DictionaryItemItemResponseModel } from '../models/DictionaryItemItemResponseModel'; import type { DictionaryItemResponseModel } from '../models/DictionaryItemResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; import type { ImportDictionaryRequestModel } from '../models/ImportDictionaryRequestModel'; import type { MoveDictionaryRequestModel } from '../models/MoveDictionaryRequestModel'; import type { PagedDictionaryOverviewResponseModel } from '../models/PagedDictionaryOverviewResponseModel'; @@ -204,6 +203,24 @@ export class DictionaryResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getDictionaryItem({ + id, + }: { + id?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/dictionary/item', + query: { + 'id': id, + }, + }); + } + /** * @returns PagedEntityTreeItemResponseModel Success * @throws ApiError @@ -228,24 +245,6 @@ export class DictionaryResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeDictionaryItem({ - id, - }: { - id?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/dictionary/item', - query: { - 'id': id, - }, - }); - } - /** * @returns PagedEntityTreeItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentBlueprintResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentBlueprintResource.ts index 61330ba056..1708739c36 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentBlueprintResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentBlueprintResource.ts @@ -1,7 +1,7 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { DocumentBlueprintTreeItemResponseModel } from '../models/DocumentBlueprintTreeItemResponseModel'; +import type { DocumentBlueprintResponseModel } from '../models/DocumentBlueprintResponseModel'; import type { PagedDocumentBlueprintTreeItemResponseModel } from '../models/PagedDocumentBlueprintTreeItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -14,14 +14,14 @@ export class DocumentBlueprintResource { * @returns any Success * @throws ApiError */ - public static getTreeDocumentBlueprintItem({ + public static getDocumentBlueprintItem({ id, }: { id?: Array, - }): CancelablePromise> { + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', - url: '/umbraco/management/api/v1/tree/document-blueprint/item', + url: '/umbraco/management/api/v1/document-blueprint/item', query: { 'id': id, }, diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentResource.ts index 0ab286ae37..5758389b26 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentResource.ts @@ -2,9 +2,9 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateDocumentRequestModel } from '../models/CreateDocumentRequestModel'; +import type { DocumentItemResponseModel } from '../models/DocumentItemResponseModel'; import type { DocumentNotificationResponseModel } from '../models/DocumentNotificationResponseModel'; import type { DocumentResponseModel } from '../models/DocumentResponseModel'; -import type { DocumentTreeItemResponseModel } from '../models/DocumentTreeItemResponseModel'; import type { PagedDocumentTreeItemResponseModel } from '../models/PagedDocumentTreeItemResponseModel'; import type { PagedRecycleBinItemResponseModel } from '../models/PagedRecycleBinItemResponseModel'; import type { UpdateDocumentNotificationsRequestModel } from '../models/UpdateDocumentNotificationsRequestModel'; @@ -194,6 +194,30 @@ export class DocumentResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getDocumentItem({ + id, + dataTypeId, + culture, + }: { + id?: Array, + dataTypeId?: string, + culture?: string, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/document/item', + query: { + 'id': id, + 'dataTypeId': dataTypeId, + 'culture': culture, + }, + }); + } + /** * @returns PagedRecycleBinItemResponseModel Success * @throws ApiError @@ -275,30 +299,6 @@ export class DocumentResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeDocumentItem({ - id, - dataTypeId, - culture, - }: { - id?: Array, - dataTypeId?: string, - culture?: string, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/document/item', - query: { - 'id': id, - 'dataTypeId': dataTypeId, - 'culture': culture, - }, - }); - } - /** * @returns PagedDocumentTreeItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentTypeResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentTypeResource.ts index 5c908b4ccf..430d840e9d 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/DocumentTypeResource.ts @@ -1,8 +1,8 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ +import type { DocumentTypeItemResponseModel } from '../models/DocumentTypeItemResponseModel'; import type { DocumentTypeResponseModel } from '../models/DocumentTypeResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; import type { PagedDocumentTypeTreeItemResponseModel } from '../models/PagedDocumentTypeTreeItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -32,6 +32,24 @@ export class DocumentTypeResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getDocumentTypeItem({ + id, + }: { + id?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/document-type/item', + query: { + 'id': id, + }, + }); + } + /** * @returns PagedDocumentTypeTreeItemResponseModel Success * @throws ApiError @@ -59,24 +77,6 @@ export class DocumentTypeResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeDocumentTypeItem({ - id, - }: { - id?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/document-type/item', - query: { - 'id': id, - }, - }); - } - /** * @returns PagedDocumentTypeTreeItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LanguageResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LanguageResource.ts index 56e3f9b7c7..cc77a2ee60 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LanguageResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LanguageResource.ts @@ -2,6 +2,7 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateLanguageRequestModel } from '../models/CreateLanguageRequestModel'; +import type { LanguageItemResponseModel } from '../models/LanguageItemResponseModel'; import type { LanguageResponseModel } from '../models/LanguageResponseModel'; import type { PagedLanguageResponseModel } from '../models/PagedLanguageResponseModel'; import type { UpdateLanguageRequestModel } from '../models/UpdateLanguageRequestModel'; @@ -124,4 +125,22 @@ export class LanguageResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getLanguageItem({ + isoCode, + }: { + isoCode?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/language/item', + query: { + 'isoCode': isoCode, + }, + }); + } + } diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LogViewerResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LogViewerResource.ts index e3d16d571b..dc8cf7baa1 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LogViewerResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/LogViewerResource.ts @@ -16,218 +16,224 @@ import { OpenAPI } from '../core/OpenAPI'; import { request as __request } from '../core/request'; export class LogViewerResource { - /** - * @returns PagedLoggerResponseModel Success - * @throws ApiError - */ - public static getLogViewerLevel({ - skip, - take = 100, - }: { - skip?: number; - take?: number; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/level', - query: { - skip: skip, - take: take, - }, - }); - } - /** - * @returns any Success - * @throws ApiError - */ - public static getLogViewerLevelCount({ - startDate, - endDate, - }: { - startDate?: string; - endDate?: string; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/level-count', - query: { - startDate: startDate, - endDate: endDate, - }, - errors: { - 400: `Bad Request`, - }, - }); - } + /** + * @returns PagedLoggerResponseModel Success + * @throws ApiError + */ + public static getLogViewerLevel({ + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/level', + query: { + 'skip': skip, + 'take': take, + }, + }); + } - /** - * @returns PagedLogMessageResponseModel Success - * @throws ApiError - */ - public static getLogViewerLog({ - skip, - take = 100, - orderDirection, - filterExpression, - logLevel, - startDate, - endDate, - }: { - skip?: number; - take?: number; - orderDirection?: DirectionModel; - filterExpression?: string; - logLevel?: Array; - startDate?: string; - endDate?: string; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/log', - query: { - skip: skip, - take: take, - orderDirection: orderDirection, - filterExpression: filterExpression, - logLevel: logLevel, - startDate: startDate, - endDate: endDate, - }, - }); - } + /** + * @returns any Success + * @throws ApiError + */ + public static getLogViewerLevelCount({ + startDate, + endDate, + }: { + startDate?: string, + endDate?: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/level-count', + query: { + 'startDate': startDate, + 'endDate': endDate, + }, + errors: { + 400: `Bad Request`, + }, + }); + } - /** - * @returns PagedLogTemplateResponseModel Success - * @throws ApiError - */ - public static getLogViewerMessageTemplate({ - skip, - take = 100, - startDate, - endDate, - }: { - skip?: number; - take?: number; - startDate?: string; - endDate?: string; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/message-template', - query: { - skip: skip, - take: take, - startDate: startDate, - endDate: endDate, - }, - errors: { - 400: `Bad Request`, - }, - }); - } + /** + * @returns PagedLogMessageResponseModel Success + * @throws ApiError + */ + public static getLogViewerLog({ + skip, + take = 100, + orderDirection, + filterExpression, + logLevel, + startDate, + endDate, + }: { + skip?: number, + take?: number, + orderDirection?: DirectionModel, + filterExpression?: string, + logLevel?: Array, + startDate?: string, + endDate?: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/log', + query: { + 'skip': skip, + 'take': take, + 'orderDirection': orderDirection, + 'filterExpression': filterExpression, + 'logLevel': logLevel, + 'startDate': startDate, + 'endDate': endDate, + }, + }); + } - /** - * @returns PagedSavedLogSearchResponseModel Success - * @throws ApiError - */ - public static getLogViewerSavedSearch({ - skip, - take = 100, - }: { - skip?: number; - take?: number; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/saved-search', - query: { - skip: skip, - take: take, - }, - }); - } + /** + * @returns PagedLogTemplateResponseModel Success + * @throws ApiError + */ + public static getLogViewerMessageTemplate({ + skip, + take = 100, + startDate, + endDate, + }: { + skip?: number, + take?: number, + startDate?: string, + endDate?: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/message-template', + query: { + 'skip': skip, + 'take': take, + 'startDate': startDate, + 'endDate': endDate, + }, + errors: { + 400: `Bad Request`, + }, + }); + } - /** - * @returns string Created - * @throws ApiError - */ - public static postLogViewerSavedSearch({ - requestBody, - }: { - requestBody?: SavedLogSearchRequestModel; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'POST', - url: '/umbraco/management/api/v1/log-viewer/saved-search', - body: requestBody, - mediaType: 'application/json', - responseHeader: 'Location', - errors: { - 400: `Bad Request`, - }, - }); - } + /** + * @returns PagedSavedLogSearchResponseModel Success + * @throws ApiError + */ + public static getLogViewerSavedSearch({ + skip, + take = 100, + }: { + skip?: number, + take?: number, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/saved-search', + query: { + 'skip': skip, + 'take': take, + }, + }); + } - /** - * @returns any Success - * @throws ApiError - */ - public static getLogViewerSavedSearchByName({ - name, - }: { - name: string; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/saved-search/{name}', - path: { - name: name, - }, - errors: { - 404: `Not Found`, - }, - }); - } + /** + * @returns string Created + * @throws ApiError + */ + public static postLogViewerSavedSearch({ + requestBody, + }: { + requestBody?: SavedLogSearchRequestModel, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/umbraco/management/api/v1/log-viewer/saved-search', + body: requestBody, + mediaType: 'application/json', + responseHeader: 'Location', + errors: { + 400: `Bad Request`, + }, + }); + } - /** - * @returns any Success - * @throws ApiError - */ - public static deleteLogViewerSavedSearchByName({ name }: { name: string }): CancelablePromise { - return __request(OpenAPI, { - method: 'DELETE', - url: '/umbraco/management/api/v1/log-viewer/saved-search/{name}', - path: { - name: name, - }, - errors: { - 404: `Not Found`, - }, - }); - } + /** + * @returns any Success + * @throws ApiError + */ + public static getLogViewerSavedSearchByName({ + name, + }: { + name: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/saved-search/{name}', + path: { + 'name': name, + }, + errors: { + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static deleteLogViewerSavedSearchByName({ + name, + }: { + name: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/log-viewer/saved-search/{name}', + path: { + 'name': name, + }, + errors: { + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static getLogViewerValidateLogsSize({ + startDate, + endDate, + }: { + startDate?: string, + endDate?: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/log-viewer/validate-logs-size', + query: { + 'startDate': startDate, + 'endDate': endDate, + }, + errors: { + 400: `Bad Request`, + }, + }); + } - /** - * @returns any Success - * @throws ApiError - */ - public static getLogViewerValidateLogsSize({ - startDate, - endDate, - }: { - startDate?: string; - endDate?: string; - }): CancelablePromise { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/log-viewer/validate-logs-size', - query: { - startDate: startDate, - endDate: endDate, - }, - errors: { - 400: `Bad Request`, - }, - }); - } } diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaResource.ts index 27690e5cf2..4e0385a534 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaResource.ts @@ -5,6 +5,7 @@ import type { ContentTreeItemResponseModel } from '../models/ContentTreeItemResp import type { CreateMediaRequestModel } from '../models/CreateMediaRequestModel'; import type { DocumentResponseModel } from '../models/DocumentResponseModel'; import type { DocumentTreeItemResponseModel } from '../models/DocumentTreeItemResponseModel'; +import type { MediaItemResponseModel } from '../models/MediaItemResponseModel'; import type { PagedContentTreeItemResponseModel } from '../models/PagedContentTreeItemResponseModel'; import type { PagedRecycleBinItemResponseModel } from '../models/PagedRecycleBinItemResponseModel'; import type { UpdateMediaRequestModel } from '../models/UpdateMediaRequestModel'; @@ -106,6 +107,27 @@ export class MediaResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getMediaItem({ + id, + dataTypeId, + }: { + id?: Array, + dataTypeId?: string, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/media/item', + query: { + 'id': id, + 'dataTypeId': dataTypeId, + }, + }); + } + /** * @returns PagedRecycleBinItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaTypeResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaTypeResource.ts index 8d583f4fd4..c86145f403 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MediaTypeResource.ts @@ -1,8 +1,7 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; +import type { MediaTypeItemResponseModel } from '../models/MediaTypeItemResponseModel'; import type { MediaTypeResponseModel } from '../models/MediaTypeResponseModel'; import type { PagedFolderTreeItemResponseModel } from '../models/PagedFolderTreeItemResponseModel'; @@ -33,6 +32,24 @@ export class MediaTypeResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getMediaTypeItem({ + id, + }: { + id?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/media-type/item', + query: { + 'id': id, + }, + }); + } + /** * @returns PagedFolderTreeItemResponseModel Success * @throws ApiError @@ -60,24 +77,6 @@ export class MediaTypeResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeMediaTypeItem({ - id, - }: { - id?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/media-type/item', - query: { - 'id': id, - }, - }); - } - /** * @returns PagedFolderTreeItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberGroupResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberGroupResource.ts index 7144009cb1..3ef4601fe2 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberGroupResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberGroupResource.ts @@ -1,12 +1,7 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { ContentTreeItemResponseModel } from '../models/ContentTreeItemResponseModel'; -import type { DocumentBlueprintTreeItemResponseModel } from '../models/DocumentBlueprintTreeItemResponseModel'; -import type { DocumentTreeItemResponseModel } from '../models/DocumentTreeItemResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; -import type { EntityTreeItemResponseModel } from '../models/EntityTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; +import type { MemberGroupItemReponseModel } from '../models/MemberGroupItemReponseModel'; import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -19,14 +14,14 @@ export class MemberGroupResource { * @returns any Success * @throws ApiError */ - public static getTreeMemberGroupItem({ + public static getMemberGroupItem({ id, }: { id?: Array, - }): CancelablePromise> { + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', - url: '/umbraco/management/api/v1/tree/member-group/item', + url: '/umbraco/management/api/v1/member-group/item', query: { 'id': id, }, diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberTypeResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberTypeResource.ts index df77ec68fd..3545cb4bca 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/MemberTypeResource.ts @@ -1,12 +1,7 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { ContentTreeItemResponseModel } from '../models/ContentTreeItemResponseModel'; -import type { DocumentBlueprintTreeItemResponseModel } from '../models/DocumentBlueprintTreeItemResponseModel'; -import type { DocumentTreeItemResponseModel } from '../models/DocumentTreeItemResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; -import type { EntityTreeItemResponseModel } from '../models/EntityTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; +import type { MemberTypeItemResponseModel } from '../models/MemberTypeItemResponseModel'; import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -19,14 +14,14 @@ export class MemberTypeResource { * @returns any Success * @throws ApiError */ - public static getTreeMemberTypeItem({ + public static getMemberTypeItem({ id, }: { id?: Array, - }): CancelablePromise> { + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', - url: '/umbraco/management/api/v1/tree/member-type/item', + url: '/umbraco/management/api/v1/member-type/item', query: { 'id': id, }, diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/PartialViewResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/PartialViewResource.ts index 4f44e0cf12..3bceafadbc 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/PartialViewResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/PartialViewResource.ts @@ -1,8 +1,8 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { FileSystemTreeItemPresentationModel } from '../models/FileSystemTreeItemPresentationModel'; import type { PagedFileSystemTreeItemPresentationModel } from '../models/PagedFileSystemTreeItemPresentationModel'; +import type { PartialViewItemResponseModel } from '../models/PartialViewItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; import { OpenAPI } from '../core/OpenAPI'; @@ -10,6 +10,24 @@ import { request as __request } from '../core/request'; export class PartialViewResource { + /** + * @returns any Success + * @throws ApiError + */ + public static getPartialViewItem({ + id, + }: { + id?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/partial-view/item', + query: { + 'id': id, + }, + }); + } + /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError @@ -34,24 +52,6 @@ export class PartialViewResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreePartialViewItem({ - path, - }: { - path?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/partial-view/item', - query: { - 'path': path, - }, - }); - } - /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/RelationTypeResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/RelationTypeResource.ts index ae5d2ffd04..76f60d04a6 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/RelationTypeResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/RelationTypeResource.ts @@ -2,9 +2,8 @@ /* tslint:disable */ /* eslint-disable */ import type { CreateRelationTypeRequestModel } from '../models/CreateRelationTypeRequestModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { RelationTypeItemResponseModel } from '../models/RelationTypeItemResponseModel'; import type { RelationTypeResponseModel } from '../models/RelationTypeResponseModel'; import type { UpdateRelationTypeRequestModel } from '../models/UpdateRelationTypeRequestModel'; @@ -107,14 +106,14 @@ export class RelationTypeResource { * @returns any Success * @throws ApiError */ - public static getTreeRelationTypeItem({ + public static getRelationTypeItem({ id, }: { id?: Array, - }): CancelablePromise> { + }): CancelablePromise> { return __request(OpenAPI, { method: 'GET', - url: '/umbraco/management/api/v1/tree/relation-type/item', + url: '/umbraco/management/api/v1/relation-type/item', query: { 'id': id, }, diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/ScriptResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/ScriptResource.ts index 573b19912c..7804889dd5 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/ScriptResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/ScriptResource.ts @@ -1,8 +1,8 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { FileSystemTreeItemPresentationModel } from '../models/FileSystemTreeItemPresentationModel'; import type { PagedFileSystemTreeItemPresentationModel } from '../models/PagedFileSystemTreeItemPresentationModel'; +import type { ScriptItemResponseModel } from '../models/ScriptItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; import { OpenAPI } from '../core/OpenAPI'; @@ -10,6 +10,24 @@ import { request as __request } from '../core/request'; export class ScriptResource { + /** + * @returns any Success + * @throws ApiError + */ + public static getScriptItem({ + path, + }: { + path?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/script/item', + query: { + 'path': path, + }, + }); + } + /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError @@ -34,24 +52,6 @@ export class ScriptResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeScriptItem({ - path, - }: { - path?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/script/item', - query: { - 'path': path, - }, - }); - } - /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StaticFileResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StaticFileResource.ts index 4379b0aafa..83645d7d1f 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StaticFileResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StaticFileResource.ts @@ -1,7 +1,6 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { FileSystemTreeItemPresentationModel } from '../models/FileSystemTreeItemPresentationModel'; import type { PagedFileSystemTreeItemPresentationModel } from '../models/PagedFileSystemTreeItemPresentationModel'; import type { CancelablePromise } from '../core/CancelablePromise'; @@ -34,24 +33,6 @@ export class StaticFileResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeStaticFileItem({ - path, - }: { - path?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/static-file/item', - query: { - 'path': path, - }, - }); - } - /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StylesheetResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StylesheetResource.ts index 5d85a44b41..f219e34cfd 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StylesheetResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/StylesheetResource.ts @@ -1,8 +1,8 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { FileSystemTreeItemPresentationModel } from '../models/FileSystemTreeItemPresentationModel'; import type { PagedFileSystemTreeItemPresentationModel } from '../models/PagedFileSystemTreeItemPresentationModel'; +import type { ScriptItemResponseModel } from '../models/ScriptItemResponseModel'; import type { CancelablePromise } from '../core/CancelablePromise'; import { OpenAPI } from '../core/OpenAPI'; @@ -10,6 +10,24 @@ import { request as __request } from '../core/request'; export class StylesheetResource { + /** + * @returns any Success + * @throws ApiError + */ + public static getStylesheetItem({ + path, + }: { + path?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/stylesheet/item', + query: { + 'path': path, + }, + }); + } + /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError @@ -34,24 +52,6 @@ export class StylesheetResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeStylesheetItem({ - path, - }: { - path?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/stylesheet/item', - query: { - 'path': path, - }, - }); - } - /** * @returns PagedFileSystemTreeItemPresentationModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/TemplateResource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/TemplateResource.ts index ab2c55cccd..b7568d4a24 100644 --- a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/TemplateResource.ts +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/TemplateResource.ts @@ -1,14 +1,9 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { ContentTreeItemResponseModel } from '../models/ContentTreeItemResponseModel'; import type { CreateTemplateRequestModel } from '../models/CreateTemplateRequestModel'; -import type { DocumentBlueprintTreeItemResponseModel } from '../models/DocumentBlueprintTreeItemResponseModel'; -import type { DocumentTreeItemResponseModel } from '../models/DocumentTreeItemResponseModel'; -import type { DocumentTypeTreeItemResponseModel } from '../models/DocumentTypeTreeItemResponseModel'; -import type { EntityTreeItemResponseModel } from '../models/EntityTreeItemResponseModel'; -import type { FolderTreeItemResponseModel } from '../models/FolderTreeItemResponseModel'; import type { PagedEntityTreeItemResponseModel } from '../models/PagedEntityTreeItemResponseModel'; +import type { TemplateItemResponseModel } from '../models/TemplateItemResponseModel'; import type { TemplateQueryExecuteModel } from '../models/TemplateQueryExecuteModel'; import type { TemplateQueryResultResponseModel } from '../models/TemplateQueryResultResponseModel'; import type { TemplateQuerySettingsResponseModel } from '../models/TemplateQuerySettingsResponseModel'; @@ -113,6 +108,24 @@ export class TemplateResource { }); } + /** + * @returns any Success + * @throws ApiError + */ + public static getTemplateItem({ + id, + }: { + id?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/template/item', + query: { + 'id': id, + }, + }); + } + /** * @returns any Success * @throws ApiError @@ -179,24 +192,6 @@ export class TemplateResource { }); } - /** - * @returns any Success - * @throws ApiError - */ - public static getTreeTemplateItem({ - id, - }: { - id?: Array, - }): CancelablePromise> { - return __request(OpenAPI, { - method: 'GET', - url: '/umbraco/management/api/v1/tree/template/item', - query: { - 'id': id, - }, - }); - } - /** * @returns PagedEntityTreeItemResponseModel Success * @throws ApiError diff --git a/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/V1Resource.ts b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/V1Resource.ts new file mode 100644 index 0000000000..d63c01efe2 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/libs/backend-api/src/services/V1Resource.ts @@ -0,0 +1,30 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { StaticFileItemResponseModel } from '../models/StaticFileItemResponseModel'; + +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; + +export class V1Resource { + + /** + * @returns any Success + * @throws ApiError + */ + public static getItem({ + path, + }: { + path?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/item', + query: { + 'path': path, + }, + }); + } + +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts index 7447fcad49..fd3cee9ccb 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/document-types/repository/sources/document-type.tree.server.data.ts @@ -93,7 +93,7 @@ export class DocumentTypeTreeServerDataSource implements UmbTreeDataSource { return tryExecuteAndNotify( this.#host, - DocumentTypeResource.getTreeDocumentTypeItem({ + DocumentTypeResource.getDocumentTypeItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts index dcd3ec9ffa..076b707b0b 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/documents/documents/repository/sources/document.tree.server.data.ts @@ -93,7 +93,7 @@ export class DocumentTreeServerDataSource implements UmbTreeDataSource { return tryExecuteAndNotify( this.#host, - DocumentResource.getTreeDocumentItem({ + DocumentResource.getDocumentItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts index c66dc1b224..6d164599f4 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/media/media-types/repository/sources/media-type.tree.server.data.ts @@ -64,7 +64,7 @@ export class MediaTypeTreeServerDataSource implements UmbTreeDataSource { return tryExecuteAndNotify( this.#host, - MediaTypeResource.getTreeMediaTypeItem({ + MediaTypeResource.getMediaTypeItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.tree.server.data.ts index c016dc7bb6..bfb95a7473 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-groups/repository/sources/member-group.tree.server.data.ts @@ -55,7 +55,7 @@ export class MemberGroupTreeServerDataSource implements UmbTreeDataSource { return tryExecuteAndNotify( this.#host, - MemberGroupResource.getTreeMemberGroupItem({ + MemberGroupResource.getMemberGroupItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts index 7ec6a36505..0c1abf952a 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/members/member-types/repository/sources/member-type.tree.server.data.ts @@ -55,7 +55,7 @@ export class MemberTypeTreeServerDataSource implements UmbTreeDataSource { return tryExecuteAndNotify( this.#host, - MemberTypeResource.getTreeMemberTypeItem({ + MemberTypeResource.getMemberTypeItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts index 22364ce3da..f1da0afaa9 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/data-types/repository/sources/data-type.tree.server.data.ts @@ -57,7 +57,7 @@ export class UmbDataTypeTreeServerDataSource implements UmbTreeDataSource { if (!ids) throw new Error('Ids are missing'); return tryExecuteAndNotify( this.#host, - DataTypeResource.getTreeDataTypeItem({ + DataTypeResource.getDataTypeItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/index.ts index e00c22f97b..f8ff932071 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/index.ts @@ -1,7 +1,7 @@ import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; -import { EntityTreeItemResponseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { ItemResponseModelBaseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; export interface RelationTypeTreeDataSource { getRootItems(): Promise>; - getItems(ids: Array): Promise>; + getItems(ids: Array): Promise>; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/relation-type.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/relation-type.tree.server.data.ts index 6afc19326f..1dc64b51b5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/relation-type.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/relation-types/repository/sources/relation-type.tree.server.data.ts @@ -78,7 +78,7 @@ export class RelationTypeTreeServerDataSource implements RelationTypeTreeDataSou return tryExecuteAndNotify( this.#host, - RelationTypeResource.getTreeRelationTypeItem({ + RelationTypeResource.getRelationTypeItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts index 1618d1ee59..5b7674f6df 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/stylesheets/repository/sources/stylesheet.tree.server.data.ts @@ -60,7 +60,7 @@ export class UmbStylesheetTreeServerDataSource async getItems(path: Array) { return tryExecuteAndNotify( this.#host, - StylesheetResource.getTreeStylesheetItem({ + StylesheetResource.getStylesheetItem({ path, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/index.ts index c93ced1dd9..934e2e05ed 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/index.ts @@ -1,11 +1,8 @@ import type { DataSourceResponse } from '@umbraco-cms/backoffice/repository'; -import type { - EntityTreeItemResponseModel, - PagedEntityTreeItemResponseModel, -} from '@umbraco-cms/backoffice/backend-api'; +import type { ItemResponseModelBaseModel, PagedEntityTreeItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; export interface TemplateTreeDataSource { getRootItems(): Promise>; getChildrenOf(parentId: string): Promise>; - getItems(ids: Array): Promise>; + getItems(ids: Array): Promise>; } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts index cdc77d176b..ed7be4b8d9 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/templating/templates/repository/sources/template.tree.server.data.ts @@ -64,7 +64,7 @@ export class TemplateTreeServerDataSource implements TemplateTreeDataSource { return tryExecuteAndNotify( this.#host, - TemplateResource.getTreeTemplateItem({ + TemplateResource.getTemplateItem({ id: ids, }) ); diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts index 9113af0673..a24572eb9f 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/translation/dictionary/repository/sources/dictionary.tree.server.data.ts @@ -64,7 +64,7 @@ export class DictionaryTreeServerDataSource implements UmbTreeDataSource { return tryExecuteAndNotify( this.#host, - DictionaryResource.getTreeDictionaryItem({ + DictionaryResource.getDictionaryItem({ id: ids, }) );