From 3717596fe9a2f149d555631a6e1657c178f36f53 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 1 May 2024 13:34:46 +0200 Subject: [PATCH 01/17] generate server models --- .../src/external/backend-api/src/models.ts | 17 +++++++++++--- .../src/external/backend-api/src/services.ts | 22 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts index 9ef7b35807..ebeb40e21e 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts @@ -113,7 +113,7 @@ export type CopyMediaTypeRequestModel = { export type CreateDataTypeRequestModel = { name: string editorAlias: string -editorUiAlias?: string | null +editorUiAlias: string values: Array id?: string | null parent?: ReferenceByIdModel | null @@ -384,6 +384,7 @@ key?: string | null export type CreateUserGroupRequestModel = { name: string +alias: string icon?: string | null sections: Array languages: Array @@ -394,6 +395,7 @@ mediaStartNode?: ReferenceByIdModel | null mediaRootAccess: boolean fallbackPermissions: Array permissions: Array +id?: string | null }; export type CreateUserRequestModel = { @@ -479,7 +481,7 @@ properties: Array export type DataTypeResponseModel = { name: string editorAlias: string -editorUiAlias?: string | null +editorUiAlias: string values: Array id: string isDeletable: boolean @@ -2263,7 +2265,7 @@ export type UnpublishDocumentRequestModel = { export type UpdateDataTypeRequestModel = { name: string editorAlias: string -editorUiAlias?: string | null +editorUiAlias: string values: Array }; @@ -2488,6 +2490,7 @@ key: string export type UpdateUserGroupRequestModel = { name: string +alias: string icon?: string | null sections: Array languages: Array @@ -2560,10 +2563,12 @@ export type UserGroupItemResponseModel = { id: string name: string icon?: string | null +alias?: string | null }; export type UserGroupResponseModel = { name: string +alias: string icon?: string | null sections: Array languages: Array @@ -5221,6 +5226,11 @@ requestBody?: UpdateWebhookRequestModel DeleteWebhookById: { id: string + }; +GetWebhookEvents: { + skip?: number +take?: number + }; } @@ -5232,6 +5242,7 @@ DeleteWebhookById: { ,GetWebhookById: WebhookResponseModel ,PutWebhookById: string ,DeleteWebhookById: string + ,GetWebhookEvents: PagedWebhookResponseModel } diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.ts index 476f2ab3c6..503eeca574 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/services.ts @@ -9071,4 +9071,26 @@ requestBody }); } + /** + * @returns unknown Success + * @throws ApiError + */ + public static getWebhookEvents(data: WebhookData['payloads']['GetWebhookEvents'] = {}): CancelablePromise { + const { + + skip, +take + } = data; + return __request(OpenAPI, { + method: 'GET', + url: '/umbraco/management/api/v1/webhook/events', + query: { + skip, take + }, + errors: { + 401: `The resource is protected and requires an authentication token`, + }, + }); + } + } \ No newline at end of file From ee3ae225518f2e91e7ec8ed15216a912000704b4 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 1 May 2024 13:37:26 +0200 Subject: [PATCH 02/17] add alias to user group detail model --- .../src/packages/user/user-group/types.ts | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts index 4d16b465ba..3cc7e7d4e2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts @@ -1,19 +1,20 @@ import type { UmbUserGroupEntityType } from './entity.js'; export interface UmbUserGroupDetailModel { - unique: string; - entityType: UmbUserGroupEntityType; - isSystemGroup: boolean; - name: string; - icon: string | null; - sections: Array; - languages: Array; - hasAccessToAllLanguages: boolean; - documentStartNode: { unique: string } | null; + alias: string; documentRootAccess: boolean; - mediaStartNode: { unique: string } | null; - mediaRootAccess: boolean; + documentStartNode: { unique: string } | null; + entityType: UmbUserGroupEntityType; fallbackPermissions: Array; + hasAccessToAllLanguages: boolean; + icon: string | null; + isSystemGroup: boolean; + languages: Array; + mediaRootAccess: boolean; + mediaStartNode: { unique: string } | null; + name: string; // TODO: add type permissions: Array; + sections: Array; + unique: string; } From 6d8b58e5587856851a1e8c3c4c7492cefcaa6241 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 1 May 2024 13:38:47 +0200 Subject: [PATCH 03/17] fix data type mocks --- .../src/mocks/data/data-type/data-type.data.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts index f26833d53e..c794c4a871 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts @@ -14,6 +14,7 @@ export const data: Array = [ isFolder: true, hasChildren: false, editorAlias: '', + editorUiAlias: '', values: [], isDeletable: true, canIgnoreStartNodes: false, @@ -25,6 +26,7 @@ export const data: Array = [ isFolder: true, hasChildren: true, editorAlias: '', + editorUiAlias: '', values: [], isDeletable: true, canIgnoreStartNodes: false, @@ -308,6 +310,7 @@ export const data: Array = [ id: 'dt-datePicker-time', parent: null, editorAlias: 'Umbraco.DateTime', + editorUiAlias: 'Umb.PropertyEditorUi.DatePicker', hasChildren: false, isFolder: false, isDeletable: true, From 8abbc5b63919a0007ca3890df3509f5da4e053d7 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 1 May 2024 13:40:00 +0200 Subject: [PATCH 04/17] add user group alias to mock data --- .../src/mocks/data/user-group/user-group.data.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts index 10f4fcdda9..15086fb40f 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts @@ -6,6 +6,7 @@ export const data: Array = [ { id: 'user-group-administrators-id', name: 'Administrators', + alias: 'administrators', icon: 'icon-medal', documentStartNode: { id: 'all-property-editors-document-id' }, fallbackPermissions: [ @@ -50,6 +51,7 @@ export const data: Array = [ { id: 'user-group-editors-id', name: 'Editors', + alias: 'editors', icon: 'icon-tools', documentStartNode: { id: 'all-property-editors-document-id' }, fallbackPermissions: [ @@ -78,6 +80,7 @@ export const data: Array = [ { id: 'user-group-sensitive-data-id', name: 'Sensitive data', + alias: 'sensitive-data', icon: 'icon-lock', documentStartNode: { id: 'all-property-editors-document-id' }, fallbackPermissions: [], @@ -92,6 +95,7 @@ export const data: Array = [ { id: 'user-group-translators-id', name: 'Translators', + alias: 'translators', icon: 'icon-globe', documentStartNode: { id: 'all-property-editors-document-id' }, fallbackPermissions: ['Umb.Document.Read', 'Umb.Document.Update'], @@ -106,6 +110,7 @@ export const data: Array = [ { id: 'user-group-writers-id', name: 'Writers', + alias: 'writers', icon: 'icon-edit', documentStartNode: { id: 'all-property-editors-document-id' }, fallbackPermissions: [ From 1794d509978dd1e8907846ce1e01c56832b9dcb5 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 1 May 2024 13:44:51 +0200 Subject: [PATCH 05/17] map alias --- .../mocks/data/user-group/user-group.db.ts | 1 + .../user-group-detail.server.data-source.ts | 57 ++++++++++--------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts index 29d72987dc..061dd7fc63 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts @@ -78,6 +78,7 @@ const createMockMapper = (item: CreateUserGroupRequestModel): UmbMockUserGroupMo const detailResponseMapper = (item: UmbMockUserGroupModel): UserGroupResponseModel => { return { + alias: item.alias, documentRootAccess: item.documentRootAccess, documentStartNode: item.documentStartNode, hasAccessToAllLanguages: item.hasAccessToAllLanguages, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts index ec1fbf77d8..62e2edadbe 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts @@ -72,20 +72,21 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource Date: Wed, 1 May 2024 14:05:51 +0200 Subject: [PATCH 06/17] mapping --- .../src/mocks/data/data-type/data-type.db.ts | 1 + .../mocks/data/user-group/user-group.db.ts | 1 + .../src/packages/data-type/types.ts | 2 +- ...ser-group-collection.server.data-source.ts | 23 ++++++++++--------- .../user-group-detail.server.data-source.ts | 23 ++++++++++--------- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts index fad4ede41a..8880e64ff8 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.db.ts @@ -44,6 +44,7 @@ const createFolderMockMapper = (request: CreateFolderRequestModel): UmbMockDataT isFolder: true, hasChildren: false, editorAlias: '', + editorUiAlias: '', isDeletable: true, canIgnoreStartNodes: false, values: [], diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts index 061dd7fc63..c05bd99f48 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts @@ -60,6 +60,7 @@ const itemMapper = (item: UmbMockUserGroupModel): UserGroupItemResponseModel => const createMockMapper = (item: CreateUserGroupRequestModel): UmbMockUserGroupModel => { return { + alias: item.alias, documentRootAccess: item.documentRootAccess, documentStartNode: item.documentStartNode, hasAccessToAllLanguages: item.hasAccessToAllLanguages, diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts index 366f7823f3..77e3bd99f5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts @@ -5,7 +5,7 @@ export interface UmbDataTypeDetailModel { unique: string; name: string; editorAlias: string | undefined; - editorUiAlias: string | null; + editorUiAlias: string; values: Array; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts index fa5f6d9b0c..c656550ed3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts @@ -33,20 +33,21 @@ export class UmbUserGroupCollectionServerDataSource implements UmbCollectionData if (data) { const mappedItems = data.items.map((item) => { const userGroup: UmbUserGroupDetailModel = { - unique: item.id, - entityType: UMB_USER_GROUP_ENTITY_TYPE, - isSystemGroup: item.isSystemGroup, - name: item.name, - icon: item.icon || null, - sections: item.sections, - languages: item.languages, - hasAccessToAllLanguages: item.hasAccessToAllLanguages, - documentStartNode: item.documentStartNode ? { unique: item.documentStartNode.id } : null, + alias: item.alias, documentRootAccess: item.documentRootAccess, - mediaStartNode: item.mediaStartNode ? { unique: item.mediaStartNode.id } : null, - mediaRootAccess: item.mediaRootAccess, + documentStartNode: item.documentStartNode ? { unique: item.documentStartNode.id } : null, + entityType: UMB_USER_GROUP_ENTITY_TYPE, fallbackPermissions: item.fallbackPermissions, + hasAccessToAllLanguages: item.hasAccessToAllLanguages, + icon: item.icon || null, + isSystemGroup: item.isSystemGroup, + languages: item.languages, + mediaRootAccess: item.mediaRootAccess, + mediaStartNode: item.mediaStartNode ? { unique: item.mediaStartNode.id } : null, + name: item.name, permissions: item.permissions, + sections: item.sections, + unique: item.id, }; return userGroup; }); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts index 62e2edadbe..32d6660a13 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts @@ -36,20 +36,21 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource Date: Wed, 1 May 2024 14:11:36 +0200 Subject: [PATCH 07/17] allow null as we need it for the scaffold --- src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts index 77e3bd99f5..366f7823f3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/types.ts @@ -5,7 +5,7 @@ export interface UmbDataTypeDetailModel { unique: string; name: string; editorAlias: string | undefined; - editorUiAlias: string; + editorUiAlias: string | null; values: Array; } From c42862d92f5ee1a1fd5e18cef257a3cb01f5d7a0 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Wed, 1 May 2024 14:33:20 +0200 Subject: [PATCH 08/17] add null check --- .../repository/detail/data-type-detail.server.data-source.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts index 0fbed19899..f0eb179c63 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts @@ -86,6 +86,7 @@ export class UmbDataTypeServerDataSource implements UmbDetailDataSource Date: Thu, 2 May 2024 08:56:09 +0200 Subject: [PATCH 09/17] add null check --- .../repository/detail/data-type-detail.server.data-source.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts index f0eb179c63..0902e37c11 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.server.data-source.ts @@ -121,6 +121,7 @@ export class UmbDataTypeServerDataSource implements UmbDetailDataSource Date: Thu, 2 May 2024 12:46:06 +0200 Subject: [PATCH 10/17] add observable alias --- .../user/user-group/workspace/user-group-workspace.context.ts | 1 + 1 file changed, 1 insertion(+) 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 b39828ffe4..f2690e03ab 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 @@ -23,6 +23,7 @@ export class UmbUserGroupWorkspaceContext readonly unique = this.#data.asObservablePart((data) => data?.unique); readonly name = this.#data.asObservablePart((data) => data?.name || ''); + readonly alias = this.#data.asObservablePart((data) => data?.alias || ''); readonly icon = this.#data.asObservablePart((data) => data?.icon || null); readonly sections = this.#data.asObservablePart((data) => data?.sections || []); readonly languages = this.#data.asObservablePart((data) => data?.languages || []); From 8ed15767b888cad5ecf997108414cf552404085b Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 2 May 2024 12:47:37 +0200 Subject: [PATCH 11/17] render alias --- .../user-group-workspace-editor.element.ts | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) 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 462d9c9f0c..f9f40d8fb1 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,8 +1,7 @@ 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-token.js'; -import type { UUIBooleanInputEvent, UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import type { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, nothing, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @@ -15,15 +14,22 @@ import type { UmbInputLanguageElement } from '@umbraco-cms/backoffice/language'; import './components/user-group-entity-user-permission-list.element.js'; import './components/user-group-granular-permission-list.element.js'; +import type { UmbInputWithAliasElement } from '@umbraco-cms/backoffice/components'; @customElement('umb-user-group-workspace-editor') export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { + @state() + private _isNew?: boolean = false; + @state() private _unique?: UmbUserGroupDetailModel['unique']; @state() private _name?: UmbUserGroupDetailModel['name']; + @state() + private _alias?: UmbUserGroupDetailModel['alias']; + @state() private _icon: UmbUserGroupDetailModel['icon'] = null; @@ -61,8 +67,10 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { #observeUserGroup() { if (!this.#workspaceContext) return; + this.observe(this.#workspaceContext.isNew, (value) => (this._isNew = value), '_observeIsNew'); this.observe(this.#workspaceContext.unique, (value) => (this._unique = value), '_observeUnique'); this.observe(this.#workspaceContext.name, (value) => (this._name = value), '_observeName'); + this.observe(this.#workspaceContext.alias, (value) => (this._alias = value), '_observeAlias'); this.observe(this.#workspaceContext.icon, (value) => (this._icon = value), '_observeIcon'); this.observe(this.#workspaceContext.sections, (value) => (this._sections = value), '_observeSections'); this.observe(this.#workspaceContext.languages, (value) => (this._languages = value), '_observeLanguages'); @@ -150,16 +158,6 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { this.#workspaceContext?.updateProperty('mediaStartNode', selected ? { unique: selected } : null); } - #onNameChange(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.updateProperty('name', target.value); - } - } - } - render() { if (!this._unique) return nothing; @@ -196,19 +194,26 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { }); } + #onNameAndAliasChange(event: InputEvent & { target: UmbInputWithAliasElement }) { + this.#workspaceContext?.updateProperty('name', event.target.value ?? ''); + this.#workspaceContext?.updateProperty('alias', event.target.alias ?? ''); + } + #renderHeader() { return html` `; } From ffbdb364658ce92a96a1fbd032db4961648d76f8 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Thu, 2 May 2024 14:39:14 +0200 Subject: [PATCH 12/17] wip can change alias --- .../user-group-collection.server.data-source.ts | 3 ++- .../detail/user-group-detail.server.data-source.ts | 6 ++++-- .../src/packages/user/user-group/types.ts | 3 ++- .../workspace/user-group-workspace-editor.element.ts | 9 +++++++++ .../user-group/workspace/user-group-workspace.context.ts | 1 + 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts index c656550ed3..3626d5c4e5 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts @@ -34,13 +34,14 @@ export class UmbUserGroupCollectionServerDataSource implements UmbCollectionData const mappedItems = data.items.map((item) => { const userGroup: UmbUserGroupDetailModel = { alias: item.alias, + canChangeAlias: item.canChangeAlias, documentRootAccess: item.documentRootAccess, documentStartNode: item.documentStartNode ? { unique: item.documentStartNode.id } : null, entityType: UMB_USER_GROUP_ENTITY_TYPE, fallbackPermissions: item.fallbackPermissions, hasAccessToAllLanguages: item.hasAccessToAllLanguages, icon: item.icon || null, - isSystemGroup: item.isSystemGroup, + isDeletable: item.isDeletable, languages: item.languages, mediaRootAccess: item.mediaRootAccess, mediaStartNode: item.mediaStartNode ? { unique: item.mediaStartNode.id } : null, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts index 32d6660a13..eede272151 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts @@ -37,13 +37,14 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource; hasAccessToAllLanguages: boolean; icon: string | null; - isSystemGroup: boolean; + isDeletable: boolean; languages: Array; mediaRootAccess: boolean; mediaStartNode: { unique: string } | null; 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 f9f40d8fb1..6454f8c037 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 @@ -30,6 +30,9 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { @state() private _alias?: UmbUserGroupDetailModel['alias']; + @state() + private _canChangeAlias: UmbUserGroupDetailModel['canChangeAlias'] = true; + @state() private _icon: UmbUserGroupDetailModel['icon'] = null; @@ -71,6 +74,11 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { this.observe(this.#workspaceContext.unique, (value) => (this._unique = value), '_observeUnique'); this.observe(this.#workspaceContext.name, (value) => (this._name = value), '_observeName'); this.observe(this.#workspaceContext.alias, (value) => (this._alias = value), '_observeAlias'); + this.observe( + this.#workspaceContext.canChangeAlias, + (value) => (this._canChangeAlias = value), + '_observeCanChangeAlias', + ); this.observe(this.#workspaceContext.icon, (value) => (this._icon = value), '_observeIcon'); this.observe(this.#workspaceContext.sections, (value) => (this._sections = value), '_observeSections'); this.observe(this.#workspaceContext.languages, (value) => (this._languages = value), '_observeLanguages'); @@ -212,6 +220,7 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { .value=${this._name} alias=${ifDefined(this._alias)} ?auto-generate-alias=${this._isNew} + alias-readonly=${!this._canChangeAlias} @change="${this.#onNameAndAliasChange}" ${umbFocus()}> 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 f2690e03ab..eeb6e04eac 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 @@ -24,6 +24,7 @@ export class UmbUserGroupWorkspaceContext readonly unique = this.#data.asObservablePart((data) => data?.unique); readonly name = this.#data.asObservablePart((data) => data?.name || ''); readonly alias = this.#data.asObservablePart((data) => data?.alias || ''); + readonly canChangeAlias = this.#data.asObservablePart((data) => data?.canChangeAlias || true); readonly icon = this.#data.asObservablePart((data) => data?.icon || null); readonly sections = this.#data.asObservablePart((data) => data?.sections || []); readonly languages = this.#data.asObservablePart((data) => data?.languages || []); From f7b98b8d8bc3d4adbd53bbd0c2bcfb6579673278 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 3 May 2024 08:54:50 +0200 Subject: [PATCH 13/17] generate server models --- .../src/external/backend-api/src/models.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts index ebeb40e21e..456d08e480 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts @@ -333,6 +333,7 @@ stylesheets: Array scripts: Array languages: Array dictionaryItems: Array +id?: string | null }; export type CreatePartialViewFolderRequestModel = { @@ -1813,6 +1814,11 @@ export type PagedUserResponseModel = { items: Array }; +export type PagedWebhookEventModel = { + total: number +items: Array + }; + export type PagedWebhookResponseModel = { total: number items: Array @@ -2580,7 +2586,8 @@ mediaRootAccess: boolean fallbackPermissions: Array permissions: Array id: string -isSystemGroup: boolean +isDeletable: boolean +aliasCanBeChanged: boolean }; export type UserInstallRequestModel = { @@ -2681,6 +2688,12 @@ export type VerifyResetPasswordTokenRequestModel = { resetCode: string }; +export type WebhookEventModel = { + eventName: string +eventType: string +alias: string + }; + export type WebhookEventResponseModel = { eventName: string eventType: string @@ -5242,7 +5255,7 @@ take?: number ,GetWebhookById: WebhookResponseModel ,PutWebhookById: string ,DeleteWebhookById: string - ,GetWebhookEvents: PagedWebhookResponseModel + ,GetWebhookEvents: PagedWebhookEventModel } From 97c5af3ad6ed9974fcc03abe74d40897d8a62915 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 3 May 2024 09:04:46 +0200 Subject: [PATCH 14/17] generate new server models --- .../src/external/backend-api/src/models.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts index 456d08e480..9b65a819dc 100644 --- a/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts +++ b/src/Umbraco.Web.UI.Client/src/external/backend-api/src/models.ts @@ -439,7 +439,9 @@ userName: string name: string languageIsoCode?: string | null documentStartNodeIds: Array +hasDocumentRootAccess: boolean mediaStartNodeIds: Array +hasMediaRootAccess: boolean avatarUrls: Array languages: Array hasAccessToAllLanguages: boolean @@ -2521,7 +2523,9 @@ name: string userGroupIds: Array languageIsoCode: string documentStartNodeIds: Array +hasDocumentRootAccess: boolean mediaStartNodeIds: Array +hasMediaRootAccess: boolean }; export type UpdateWebhookRequestModel = { @@ -2633,7 +2637,9 @@ userGroupIds: Array id: string languageIsoCode?: string | null documentStartNodeIds: Array +hasDocumentRootAccess: boolean mediaStartNodeIds: Array +hasMediaRootAccess: boolean avatarUrls: Array state: UserStateModel failedLoginAttempts: number From f0d3ff9ae84204becd0a0ba6b99b03af3b621c99 Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 3 May 2024 09:21:40 +0200 Subject: [PATCH 15/17] update models --- .../mocks/data/user-group/user-group.data.ts | 17 +++++++++++------ .../src/mocks/data/user-group/user-group.db.ts | 6 ++++-- .../user-group-collection.server.data-source.ts | 2 +- .../user-group-detail.server.data-source.ts | 4 ++-- .../src/packages/user/user-group/types.ts | 2 +- .../user-group-workspace-editor.element.ts | 2 +- .../workspace/user-group-workspace.context.ts | 2 +- 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts index 15086fb40f..07cfdc57f7 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.data.ts @@ -6,7 +6,7 @@ export const data: Array = [ { id: 'user-group-administrators-id', name: 'Administrators', - alias: 'administrators', + alias: 'admin', icon: 'icon-medal', documentStartNode: { id: 'all-property-editors-document-id' }, fallbackPermissions: [ @@ -46,7 +46,8 @@ export const data: Array = [ hasAccessToAllLanguages: true, documentRootAccess: true, mediaRootAccess: true, - isSystemGroup: true, + aliasCanBeChanged: false, + isDeletable: false, }, { id: 'user-group-editors-id', @@ -75,7 +76,8 @@ export const data: Array = [ hasAccessToAllLanguages: true, documentRootAccess: true, mediaRootAccess: true, - isSystemGroup: true, + aliasCanBeChanged: true, + isDeletable: true, }, { id: 'user-group-sensitive-data-id', @@ -90,7 +92,8 @@ export const data: Array = [ hasAccessToAllLanguages: true, documentRootAccess: true, mediaRootAccess: true, - isSystemGroup: true, + aliasCanBeChanged: false, + isDeletable: false, }, { id: 'user-group-translators-id', @@ -105,7 +108,8 @@ export const data: Array = [ hasAccessToAllLanguages: true, documentRootAccess: true, mediaRootAccess: true, - isSystemGroup: true, + aliasCanBeChanged: true, + isDeletable: true, }, { id: 'user-group-writers-id', @@ -125,6 +129,7 @@ export const data: Array = [ hasAccessToAllLanguages: true, documentRootAccess: true, mediaRootAccess: true, - isSystemGroup: false, + aliasCanBeChanged: true, + isDeletable: true, }, ]; diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts index c05bd99f48..c6c9fc9bf5 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/user-group/user-group.db.ts @@ -66,7 +66,6 @@ const createMockMapper = (item: CreateUserGroupRequestModel): UmbMockUserGroupMo hasAccessToAllLanguages: item.hasAccessToAllLanguages, icon: item.icon, id: UmbId.new(), - isSystemGroup: false, languages: item.languages, mediaRootAccess: item.mediaRootAccess, mediaStartNode: item.mediaStartNode, @@ -74,6 +73,8 @@ const createMockMapper = (item: CreateUserGroupRequestModel): UmbMockUserGroupMo fallbackPermissions: item.fallbackPermissions, permissions: item.permissions, sections: item.sections, + aliasCanBeChanged: true, + isDeletable: true, }; }; @@ -85,7 +86,6 @@ const detailResponseMapper = (item: UmbMockUserGroupModel): UserGroupResponseMod hasAccessToAllLanguages: item.hasAccessToAllLanguages, icon: item.icon, id: item.id, - isSystemGroup: item.isSystemGroup, languages: item.languages, mediaRootAccess: item.mediaRootAccess, mediaStartNode: item.mediaStartNode, @@ -93,6 +93,8 @@ const detailResponseMapper = (item: UmbMockUserGroupModel): UserGroupResponseMod fallbackPermissions: item.fallbackPermissions, permissions: item.permissions, sections: item.sections, + aliasCanBeChanged: item.aliasCanBeChanged, + isDeletable: item.isDeletable, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts index 3626d5c4e5..360b8a68a2 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.server.data-source.ts @@ -34,7 +34,7 @@ export class UmbUserGroupCollectionServerDataSource implements UmbCollectionData const mappedItems = data.items.map((item) => { const userGroup: UmbUserGroupDetailModel = { alias: item.alias, - canChangeAlias: item.canChangeAlias, + aliasCanBeChanged: item.aliasCanBeChanged, documentRootAccess: item.documentRootAccess, documentStartNode: item.documentStartNode ? { unique: item.documentStartNode.id } : null, entityType: UMB_USER_GROUP_ENTITY_TYPE, diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts index eede272151..264b79465e 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts @@ -37,7 +37,7 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource data?.unique); readonly name = this.#data.asObservablePart((data) => data?.name || ''); readonly alias = this.#data.asObservablePart((data) => data?.alias || ''); - readonly canChangeAlias = this.#data.asObservablePart((data) => data?.canChangeAlias || true); + readonly canChangeAlias = this.#data.asObservablePart((data) => data?.aliasCanBeChanged || true); readonly icon = this.#data.asObservablePart((data) => data?.icon || null); readonly sections = this.#data.asObservablePart((data) => data?.sections || []); readonly languages = this.#data.asObservablePart((data) => data?.languages || []); From f51d8fcafd6c35d3ce2f399cbdb960e638fec82f Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 3 May 2024 09:38:19 +0200 Subject: [PATCH 16/17] map values --- .../detail/user-group-detail.server.data-source.ts | 4 ++-- .../workspace/user-group-workspace-editor.element.ts | 12 ++++++------ .../workspace/user-group-workspace.context.ts | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts index 264b79465e..aadae83164 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts @@ -81,8 +81,8 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource (this._name = value), '_observeName'); this.observe(this.#workspaceContext.alias, (value) => (this._alias = value), '_observeAlias'); this.observe( - this.#workspaceContext.canChangeAlias, - (value) => (this._canChangeAlias = value), - '_observeCanChangeAlias', + this.#workspaceContext.aliasCanBeChanged, + (value) => (this._aliasCanBeChanged = value), + '_observeAliasCanBeChanged', ); this.observe(this.#workspaceContext.icon, (value) => (this._icon = value), '_observeIcon'); this.observe(this.#workspaceContext.sections, (value) => (this._sections = value), '_observeSections'); @@ -220,8 +220,8 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { .value=${this._name} alias=${ifDefined(this._alias)} ?auto-generate-alias=${this._isNew} - alias-readonly=${!this._canChangeAlias} - @change="${this.#onNameAndAliasChange}" + ?alias-readonly=${this._aliasCanBeChanged === false} + @change=${this.#onNameAndAliasChange} ${umbFocus()}> `; 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 2922ee4668..3d9cea828f 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 @@ -24,7 +24,7 @@ export class UmbUserGroupWorkspaceContext readonly unique = this.#data.asObservablePart((data) => data?.unique); readonly name = this.#data.asObservablePart((data) => data?.name || ''); readonly alias = this.#data.asObservablePart((data) => data?.alias || ''); - readonly canChangeAlias = this.#data.asObservablePart((data) => data?.aliasCanBeChanged || true); + readonly aliasCanBeChanged = this.#data.asObservablePart((data) => data?.aliasCanBeChanged); readonly icon = this.#data.asObservablePart((data) => data?.icon || null); readonly sections = this.#data.asObservablePart((data) => data?.sections || []); readonly languages = this.#data.asObservablePart((data) => data?.languages || []); From 1c8f1ebad17ff0c1c97449c297f87c978cddabbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 3 May 2024 10:22:45 +0200 Subject: [PATCH 17/17] fix event call back argument --- .../input-with-alias/input-with-alias.element.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-with-alias/input-with-alias.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-with-alias/input-with-alias.element.ts index fb75b79bdf..0e00a714f6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-with-alias/input-with-alias.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-with-alias/input-with-alias.element.ts @@ -30,14 +30,14 @@ export class UmbInputWithAliasElement extends UmbFormControlMixin(UmbLit return this.shadowRoot?.querySelector('uui-input')?.focus(); } - #onNameChange(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; + #onNameChange(e: UUIInputEvent) { + if (e instanceof UUIInputEvent) { + const target = e.composedPath()[0] as UUIInputElement; if (typeof target?.value === 'string') { const oldName = this.value; const oldAlias = this.alias ?? ''; - this.value = event.target.value.toString(); + this.value = e.target.value.toString(); if (this.autoGenerateAlias && this._aliasLocked) { // If locked we will update the alias, but only if it matches the generated alias of the old name [NL] const expectedOldAlias = generateAlias(oldName ?? ''); @@ -52,10 +52,11 @@ export class UmbInputWithAliasElement extends UmbFormControlMixin(UmbLit } #onAliasChange(e: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; + if (e instanceof UUIInputEvent) { + const target = e.composedPath()[0] as UUIInputElement; if (typeof target?.value === 'string') { this.alias = target.value; + console.log(this.alias); this.dispatchEvent(new UmbChangeEvent()); } }