diff --git a/src/Umbraco.Web.UI.Client/libs/utils/udi-service.ts b/src/Umbraco.Web.UI.Client/libs/utils/udi-service.ts index 957d70e22f..ae4f84fdc8 100644 --- a/src/Umbraco.Web.UI.Client/libs/utils/udi-service.ts +++ b/src/Umbraco.Web.UI.Client/libs/utils/udi-service.ts @@ -1,3 +1,23 @@ export function buildUdi(entityType: string, guid: string) { return `umb://${entityType}/${guid.replace(/-/g, '')}`; } + +export function getKeyFromUdi(udi: string) { + if (typeof udi !== 'string') { + throw 'udi is not a string'; + } + if (!udi.startsWith('umb://')) { + throw 'udi does not start with umb://'; + } + const withoutScheme = udi.substring('umb://'.length); + const withoutHost = withoutScheme.substring(withoutScheme.indexOf('/') + 1).trim(); + + if (withoutHost.length !== 32) { + throw 'udi is not 32 chars'; + } + + return `${withoutHost.substring(0, 8)}-${withoutHost.substring(8, 12)}-${withoutHost.substring( + 12, + 16 + )}-${withoutHost.substring(16, 20)}-${withoutHost.substring(20)}`; +} diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.element.ts index 53cdb692bd..439804e744 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.element.ts @@ -146,7 +146,10 @@ export class UmbInputMultiUrlPickerElement extends FormControlMixin(UmbLitElemen } private _renderItem(link: MultiUrlData, index: number) { - return html` + return html` Edit diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.test.ts b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.test.ts new file mode 100644 index 0000000000..c4056cf4f8 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/backoffice/shared/components/input-multi-url-picker/input-multi-url-picker.test.ts @@ -0,0 +1,18 @@ +import { expect, fixture, html } from '@open-wc/testing'; +import { UmbInputMultiUrlPickerElement } from './input-multi-url-picker.element'; +import { defaultA11yConfig } from '@umbraco-cms/test-utils'; +describe('UmbInputMultiUrlPickerElement', () => { + let element: UmbInputMultiUrlPickerElement; + + beforeEach(async () => { + element = await fixture(html` `); + }); + + it('is defined with its own instance', () => { + expect(element).to.be.instanceOf(UmbInputMultiUrlPickerElement); + }); + + it('passes the a11y audit', async () => { + await expect(element).shadowDom.to.be.accessible(defaultA11yConfig); + }); +}); diff --git a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/link-picker/modal-layout-link-picker.element.ts b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/link-picker/modal-layout-link-picker.element.ts index 2de839175f..a67c8fd4d6 100644 --- a/src/Umbraco.Web.UI.Client/src/core/modal/layouts/link-picker/modal-layout-link-picker.element.ts +++ b/src/Umbraco.Web.UI.Client/src/core/modal/layouts/link-picker/modal-layout-link-picker.element.ts @@ -5,7 +5,7 @@ import { UUIBooleanInputEvent, UUIInputElement } from '@umbraco-ui/uui'; import { UUIModalSidebarSize } from '@umbraco-ui/uui-modal-sidebar'; import { UmbModalLayoutElement } from '../modal-layout.element'; import { UmbTreeElement } from '../../../../backoffice/shared/components/tree/tree.element'; -import { buildUdi } from '@umbraco-cms/utils'; +import { buildUdi, getKeyFromUdi } from '@umbraco-cms/utils'; export interface UmbModalLinkPickerData { link: LinkPickerData; @@ -13,14 +13,14 @@ export interface UmbModalLinkPickerData { } export interface LinkPickerData { - icon?: string; - name?: string; - published?: boolean; - queryString?: string; - target?: string; - trashed?: boolean; - udi?: string; - url?: string; + icon?: string | null; + name?: string | null; + published?: boolean | null; + queryString?: string | null; + target?: string | null; + trashed?: boolean | null; + udi?: string | null; + url?: string | null; } export interface LinkPickerConfig { @@ -70,14 +70,14 @@ export class UmbModalLayoutLinkPickerElement extends UmbModalLayoutElement