diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts index d03abff57c..70a0768690 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/index.ts @@ -76,6 +76,7 @@ export type { CreateTemplateRequestModel } from './models/CreateTemplateRequestM export type { CreateUserGroupRequestModel } from './models/CreateUserGroupRequestModel'; export type { CreateUserRequestModel } from './models/CreateUserRequestModel'; export type { CreateUserResponseModel } from './models/CreateUserResponseModel'; +export type { CreateWebhookRequestModel } from './models/CreateWebhookRequestModel'; export type { CultureAndScheduleRequestModel } from './models/CultureAndScheduleRequestModel'; export type { CultureReponseModel } from './models/CultureReponseModel'; export type { CurrentUserResponseModel } from './models/CurrentUserResponseModel'; @@ -401,6 +402,7 @@ export type { UpdateTemplateRequestModel } from './models/UpdateTemplateRequestM export type { UpdateUserGroupRequestModel } from './models/UpdateUserGroupRequestModel'; export type { UpdateUserGroupsOnUserRequestModel } from './models/UpdateUserGroupsOnUserRequestModel'; export type { UpdateUserRequestModel } from './models/UpdateUserRequestModel'; +export type { UpdateWebhookRequestModel } from './models/UpdateWebhookRequestModel'; export type { UpgradeSettingsResponseModel } from './models/UpgradeSettingsResponseModel'; export type { UserConfigurationResponseModel } from './models/UserConfigurationResponseModel'; export type { UserGroupBaseModel } from './models/UserGroupBaseModel'; @@ -424,6 +426,10 @@ export type { VariantModelBaseModel } from './models/VariantModelBaseModel'; export type { VariantResponseModelBaseModel } from './models/VariantResponseModelBaseModel'; export type { VerifyInviteUserRequestModel } from './models/VerifyInviteUserRequestModel'; export type { VerifyResetPasswordTokenRequestModel } from './models/VerifyResetPasswordTokenRequestModel'; +export type { WebhookEventResponseModel } from './models/WebhookEventResponseModel'; +export type { WebhookItemResponseModel } from './models/WebhookItemResponseModel'; +export type { WebhookModelBaseModel } from './models/WebhookModelBaseModel'; +export type { WebhookResponseModel } from './models/WebhookResponseModel'; export { AuditLogResource } from './services/AuditLogResource'; export { CultureResource } from './services/CultureResource'; @@ -470,3 +476,4 @@ export { TrackedReferenceResource } from './services/TrackedReferenceResource'; export { UpgradeResource } from './services/UpgradeResource'; export { UserResource } from './services/UserResource'; export { UserGroupResource } from './services/UserGroupResource'; +export { WebhookResource } from './services/WebhookResource'; diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateWebhookRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateWebhookRequestModel.ts new file mode 100644 index 0000000000..5efdacf129 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/CreateWebhookRequestModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { WebhookModelBaseModel } from './WebhookModelBaseModel'; + +export type CreateWebhookRequestModel = (WebhookModelBaseModel & { + id?: string | null; + events: Array; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateWebhookRequestModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateWebhookRequestModel.ts new file mode 100644 index 0000000000..c4efd99c20 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/UpdateWebhookRequestModel.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { WebhookModelBaseModel } from './WebhookModelBaseModel'; + +export type UpdateWebhookRequestModel = (WebhookModelBaseModel & { + events: Array; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookEventResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookEventResponseModel.ts new file mode 100644 index 0000000000..100b23dbe0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookEventResponseModel.ts @@ -0,0 +1,11 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type WebhookEventResponseModel = { + eventName: string; + eventType: string; + alias: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookItemResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookItemResponseModel.ts new file mode 100644 index 0000000000..5dd1c9094b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookItemResponseModel.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type WebhookItemResponseModel = { + enabled: boolean; + name: string; + events: string; + url: string; + types: string; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookModelBaseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookModelBaseModel.ts new file mode 100644 index 0000000000..d3e579f232 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookModelBaseModel.ts @@ -0,0 +1,12 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +export type WebhookModelBaseModel = { + enabled: boolean; + url: string; + contentTypeKeys: Array; + headers: Record; +}; + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookResponseModel.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookResponseModel.ts new file mode 100644 index 0000000000..6ac0c94a39 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models/WebhookResponseModel.ts @@ -0,0 +1,13 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { WebhookEventResponseModel } from './WebhookEventResponseModel'; +import type { WebhookModelBaseModel } from './WebhookModelBaseModel'; + +export type WebhookResponseModel = (WebhookModelBaseModel & { + id: string; + events: Array; +}); + diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts index 70fc1eff70..457aaefb25 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/DocumentResource.ts @@ -227,7 +227,7 @@ export class DocumentResource { } /** - * @returns any Success + * @returns void * @throws ApiError */ public static putDocumentByIdDomains({ @@ -236,7 +236,7 @@ export class DocumentResource { }: { id: string, requestBody?: UpdateDomainsRequestModel, - }): CancelablePromise { + }): CancelablePromise { return __request(OpenAPI, { method: 'PUT', url: '/umbraco/management/api/v1/document/{id}/domains', @@ -246,7 +246,10 @@ export class DocumentResource { body: requestBody, mediaType: 'application/json', errors: { + 400: `Bad Request`, 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + 409: `Conflict`, }, }); } diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/WebhookResource.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/WebhookResource.ts new file mode 100644 index 0000000000..d6b2ccdaf4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services/WebhookResource.ts @@ -0,0 +1,132 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +import type { CreateWebhookRequestModel } from '../models/CreateWebhookRequestModel'; +import type { UpdateWebhookRequestModel } from '../models/UpdateWebhookRequestModel'; +import type { WebhookItemResponseModel } from '../models/WebhookItemResponseModel'; +import type { WebhookResponseModel } from '../models/WebhookResponseModel'; + +import type { CancelablePromise } from '../core/CancelablePromise'; +import { OpenAPI } from '../core/OpenAPI'; +import { request as __request } from '../core/request'; + +export class WebhookResource { + + /** + * @returns string Created + * @throws ApiError + */ + public static postWebhook({ + requestBody, + }: { + requestBody?: CreateWebhookRequestModel, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'POST', + url: '/umbraco/management/api/v1/webhook', + body: requestBody, + mediaType: 'application/json', + responseHeader: 'Umb-Generated-Resource', + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static getWebhookById({ + id, + }: { + id: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/webhook/{id}', + path: { + 'id': id, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static putWebhookById({ + id, + requestBody, + }: { + id: string, + requestBody?: UpdateWebhookRequestModel, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'PUT', + url: '/umbraco/management/api/v1/webhook/{id}', + path: { + 'id': id, + }, + body: requestBody, + mediaType: 'application/json', + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static deleteWebhookById({ + id, + }: { + id: string, + }): CancelablePromise { + return __request(OpenAPI, { + method: 'DELETE', + url: '/umbraco/management/api/v1/webhook/{id}', + path: { + 'id': id, + }, + errors: { + 400: `Bad Request`, + 401: `The resource is protected and requires an authentication token`, + 404: `Not Found`, + }, + }); + } + + /** + * @returns any Success + * @throws ApiError + */ + public static getWebhookItem({ + ids, + }: { + ids?: Array, + }): CancelablePromise> { + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/webhook/item', + query: { + 'ids': ids, + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts index 35493137cc..da63c4ae49 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/models/index.ts @@ -20,6 +20,6 @@ export interface NumberRangeValueType { max?: number; } -export interface UmbReferenceById { - id: string; +export interface UmbReferenceByUnique { + unique: string; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/text-box/property-editor-ui-text-box.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/text-box/property-editor-ui-text-box.element.ts index 0e290a7555..c219c566bb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/text-box/property-editor-ui-text-box.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/text-box/property-editor-ui-text-box.element.ts @@ -1,5 +1,5 @@ -import { css, html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { css, html, customElement, property, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor'; @@ -23,11 +23,15 @@ export class UmbPropertyEditorUITextBoxElement extends UmbLitElement implements @state() private _maxChars?: number; + @state() + private _placeholder?: string; + @property({ attribute: false }) public set config(config: UmbPropertyEditorConfigCollection | undefined) { this._type = config?.getValueByAlias('inputType') ?? this.#defaultType; this._inputMode = config?.getValueByAlias('inputMode'); this._maxChars = config?.getValueByAlias('maxChars'); + this._placeholder = config?.getValueByAlias('placeholder'); } private onChange(e: Event) { @@ -41,6 +45,7 @@ export class UmbPropertyEditorUITextBoxElement extends UmbLitElement implements return html``; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts index e78b595b17..7b8c839c06 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts @@ -21,7 +21,7 @@ export class UmbDocumentWorkspaceHasCollectionCondition extends UmbBaseControlle this.observe( context.contentTypeCollection, (collection) => { - this.permitted = !!collection?.id; + this.permitted = !!collection?.unique; this.#onChange(); }, 'observeCollection', diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts index 38ece37f81..32a5fa60e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/detail/document-detail.server.data-source.ts @@ -43,6 +43,7 @@ export class UmbDocumentServerDataSource implements UmbDetailDataSource { documentType: { unique: item.documentType.id, icon: item.documentType.icon, - collection: item.documentType.collection ?? undefined, + collection: item.documentType.collection ? { unique: item.documentType.collection.id } : null, }, variants: item.variants.map((variant) => { return { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts index 03b4507747..18e03a5462 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/repository/item/types.ts @@ -1,6 +1,6 @@ import type { UmbDocumentEntityType } from '../../entity.js'; import type { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api'; -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbDocumentItemModel { entityType: UmbDocumentEntityType; @@ -11,7 +11,7 @@ export interface UmbDocumentItemModel { documentType: { unique: string; icon: string; - collection?: UmbReferenceById; + collection: UmbReferenceByUnique | null; }; variants: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts index c4d7aeaaef..e724a5dc64 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/document-tree.server.data-source.ts @@ -55,7 +55,7 @@ const mapper = (item: DocumentTreeItemResponseModel): UmbDocumentTreeItemModel = documentType: { unique: item.documentType.id, icon: item.documentType.icon, - collection: item.documentType.collection ?? undefined, + collection: item.documentType.collection ? { unique: item.documentType.collection.id } : null, }, variants: item.variants.map((variant) => { return { diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts index 74124c8d86..229e71f366 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/tree/types.ts @@ -1,7 +1,7 @@ import type { UmbDocumentEntityType, UmbDocumentRootEntityType } from '../entity.js'; import type { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '@umbraco-cms/backoffice/tree'; import type { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api'; -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbDocumentTreeItemModel extends UmbUniqueTreeItemModel { entityType: UmbDocumentEntityType; @@ -11,7 +11,7 @@ export interface UmbDocumentTreeItemModel extends UmbUniqueTreeItemModel { documentType: { unique: string; icon: string; - collection?: UmbReferenceById; + collection: UmbReferenceByUnique | null; }; variants: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts index 1ca0862574..c52581f930 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/types.ts @@ -1,13 +1,13 @@ import type { UmbDocumentEntityType } from './entity.js'; import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import { DocumentVariantStateModel as UmbDocumentVariantState } from '@umbraco-cms/backoffice/external/backend-api'; export { UmbDocumentVariantState }; export interface UmbDocumentDetailModel { documentType: { unique: string; - collection?: UmbReferenceById; + collection: UmbReferenceByUnique | null; }; entityType: UmbDocumentEntityType; isTrashed: boolean; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index 1afec70a49..64adf863e1 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -79,6 +79,7 @@ export class UmbDocumentWorkspaceContext this.#getDataPromise = this.repository.createScaffold(parentUnique, { documentType: { unique: documentTypeUnique, + collection: null, }, }); const { data } = await this.#getDataPromise; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts index 570b4b8f1b..7b9ff178bf 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts @@ -21,7 +21,7 @@ export class UmbMediaWorkspaceHasCollectionCondition extends UmbBaseController i this.observe( context.contentTypeCollection, (collection) => { - this.permitted = !!collection?.id; + this.permitted = !!collection?.unique; this.#onChange(); }, 'observeCollection', diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts index 1197797300..c802af6866 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/detail/media-detail.server.data-source.ts @@ -92,7 +92,7 @@ export class UmbMediaServerDataSource implements UmbDetailDataSource { mediaType: { unique: item.mediaType.id, icon: item.mediaType.icon, - collection: item.mediaType.collection ?? undefined, + collection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null, }, variants: item.variants.map((variant) => { return { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts index a0ee7c5d4a..5d9b42300e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/repository/item/types.ts @@ -1,4 +1,4 @@ -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbMediaItemModel { unique: string; @@ -6,7 +6,7 @@ export interface UmbMediaItemModel { mediaType: { unique: string; icon: string; - collection?: UmbReferenceById; + collection: UmbReferenceByUnique | null; }; variants: Array; name: string; // TODO: get correct variant name diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts index 3929bbd4dd..66bcdce677 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.server.data-source.ts @@ -54,7 +54,7 @@ const mapper = (item: MediaTreeItemResponseModel): UmbMediaTreeItemModel => { mediaType: { unique: item.mediaType.id, icon: item.mediaType.icon, - collection: item.mediaType.collection ?? undefined, + collection: item.mediaType.collection ? { unique: item.mediaType.collection.id } : null, }, name: item.variants[0]?.name, // TODO: this is not correct. We need to get it from the variants. This is a temp solution. variants: item.variants.map((variant) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts index 9bcf05593c..6e60607455 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/media-tree.store.ts @@ -42,7 +42,7 @@ export class UmbMediaTreeStore extends UmbUniqueTreeStore { hasChildren: false, variants: item.variants, isTrashed: item.isTrashed, - mediaType: { unique: item.mediaType.unique, icon: '' }, + mediaType: { unique: item.mediaType.unique, icon: '', collection: null }, noAccess: false, }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts index 8a186e2b2e..8c872803cc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/tree/types.ts @@ -1,5 +1,5 @@ import type { UmbMediaEntityType, UmbMediaRootEntityType } from '../entity.js'; -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import type { UmbUniqueTreeItemModel, UmbUniqueTreeRootModel } from '@umbraco-cms/backoffice/tree'; export interface UmbMediaTreeItemModel extends UmbUniqueTreeItemModel { @@ -9,7 +9,7 @@ export interface UmbMediaTreeItemModel extends UmbUniqueTreeItemModel { mediaType: { unique: string; icon: string; - collection?: UmbReferenceById; + collection: UmbReferenceByUnique | null; }; variants: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts index c8353c5745..c54ec97df2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/types.ts @@ -1,12 +1,12 @@ import type { UmbMediaEntityType } from './entity.js'; -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; import type { UmbVariantModel } from '@umbraco-cms/backoffice/variant'; import type { MediaUrlInfoModel, MediaValueModel } from '@umbraco-cms/backoffice/external/backend-api'; export interface UmbMediaDetailModel { mediaType: { unique: string; - collection: UmbReferenceById | null; + collection: UmbReferenceByUnique | null; }; entityType: UmbMediaEntityType; isTrashed: boolean; diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/member-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/member-item.server.data-source.ts index 83a7c62533..321099c33e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/member-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/member-item.server.data-source.ts @@ -36,7 +36,7 @@ const mapper = (item: MemberItemResponseModel): UmbMemberItemModel => { memberType: { unique: item.memberType.id, icon: item.memberType.icon, - collection: item.memberType.collection ?? undefined, + collection: item.memberType.collection ? { unique: item.memberType.collection.id } : null, }, variants: item.variants.map((variant) => { return { diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts index ae7a69b0fc..4993561027 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/repository/item/types.ts @@ -1,11 +1,11 @@ -import type { UmbReferenceById } from '@umbraco-cms/backoffice/models'; +import type { UmbReferenceByUnique } from '@umbraco-cms/backoffice/models'; export interface UmbMemberItemModel { unique: string; memberType: { unique: string; icon: string; - collection?: UmbReferenceById; + collection: UmbReferenceByUnique | null; }; variants: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts index ceb0247712..4f817ae4f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace-editor.element.ts @@ -1,7 +1,6 @@ import type { UmbUserGroupDetailModel } from '../index.js'; import { UMB_USER_GROUP_ENTITY_TYPE } from '../index.js'; import { UMB_USER_GROUP_WORKSPACE_CONTEXT } from './user-group-workspace.context.js'; -import type { UmbUserInputElement } from '@umbraco-cms/backoffice/user'; import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, nothing, customElement, state } from '@umbraco-cms/backoffice/external/lit'; @@ -20,9 +19,6 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { @state() private _userGroup?: UmbUserGroupDetailModel; - @state() - private _userUniques?: Array; - #workspaceContext?: typeof UMB_USER_GROUP_WORKSPACE_CONTEXT.TYPE; constructor() { @@ -31,11 +27,6 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { this.consumeContext(UMB_USER_GROUP_WORKSPACE_CONTEXT, (instance) => { this.#workspaceContext = instance; this.observe(this.#workspaceContext.data, (userGroup) => (this._userGroup = userGroup), 'umbUserGroupObserver'); - this.observe( - this.#workspaceContext.userUniques, - (userUniques) => (this._userUniques = userUniques), - 'umbUserIdsObserver', - ); }); } @@ -57,12 +48,6 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { this.#workspaceContext?.updateProperty('mediaStartNode', { unique: target.selectedIds[0] }); } - #onUsersChange(event: UmbChangeEvent) { - event.stopPropagation(); - const target = event.target as UmbUserInputElement; - this.#workspaceContext?.updateUserKeys(target.selectedIds); - } - #onNameChange(event: UUIInputEvent) { if (event instanceof UUIInputEvent) { const target = event.composedPath()[0] as UUIInputElement; @@ -152,15 +137,11 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { } #renderRightColumn() { - return html` -
- -
- - `; + return html` + `; } static styles = [ diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace.context.ts index becbcfcc41..8f37f8a6bb 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/workspace/user-group-workspace.context.ts @@ -1,10 +1,9 @@ import { UmbUserGroupDetailRepository } from '../repository/detail/index.js'; -import { UmbUserRepository } from '../../user/repository/user.repository.js'; import type { UmbUserGroupDetailModel } from '../types.js'; import type { UmbUserPermissionModel } from '@umbraco-cms/backoffice/user-permission'; import type { UmbSaveableWorkspaceContextInterface } from '@umbraco-cms/backoffice/workspace'; import { UmbEditableWorkspaceContextBase } from '@umbraco-cms/backoffice/workspace'; -import { UmbArrayState, UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; +import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; @@ -30,15 +29,8 @@ export class UmbUserGroupWorkspaceContext readonly fallbackPermissions = this.#data.asObservablePart((data) => data?.fallbackPermissions || []); readonly permissions = this.#data.asObservablePart((data) => data?.permissions || []); - #userUniques = new UmbArrayState([], (x) => x); - userUniques = this.#userUniques.asObservable(); - - #userRepository: UmbUserRepository; - constructor(host: UmbControllerHost) { super(host, 'Umb.Workspace.UserGroup'); - - this.#userRepository = new UmbUserRepository(host); } async create() { @@ -78,18 +70,6 @@ export class UmbUserGroupWorkspaceContext await this.repository.save(this.#data.value); } else return; - //TODO: This next user-group section kinda works. But it will overwrite the entire user-group list on the user. - //TODO: instead we need to get all the users by their id's to get their user groups. - //TODO: these user-groups need to be updated together with the new user-group id. - //TODO: or the new user-group id needs to be removed from the existing list. - - const userUniques = this.#userUniques.getValue(); - const userGroupUniques = [this.#data.getValue()?.unique ?? '']; - - if (userUniques.length > 0 && userGroupUniques.length > 0) { - await this.#userRepository.setUserGroups(userUniques, userGroupUniques); - } - // If it went well, then its not new anymore?. this.setIsNew(false); } @@ -107,10 +87,6 @@ export class UmbUserGroupWorkspaceContext this.#data.update({ [alias]: value }); } - updateUserKeys(keys: Array) { - this.#userUniques.setValue(keys); - } - /** * Gets the user group user permissions. * @memberof UmbUserGroupWorkspaceContext