From 009ea6bca3bff7201f5502ddcb7b16fd70da2c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 19 May 2023 09:52:48 +0200 Subject: [PATCH] moving and renaming --- .../libs/models/index.ts | 2 - .../libs/picker-input/picker-input.context.ts | 18 +++---- .../libs/repository/index.ts | 2 +- ...manager.ts => repository-items.manager.ts} | 50 ++++++++++++------- .../data-type-flow-input.element.ts | 16 +++--- .../settings/data-types/components/index.ts | 1 + .../ref-data-type/ref-data-type.element.ts | 0 .../ref-data-type/ref-data-type.stories.ts | 0 .../src/packages/settings/data-types/index.ts | 1 + .../packages/settings/data-types/models.ts} | 0 10 files changed, 52 insertions(+), 38 deletions(-) rename src/Umbraco.Web.UI.Client/libs/repository/{repository-selection.manager.ts => repository-items.manager.ts} (65%) rename src/Umbraco.Web.UI.Client/src/packages/{core => settings/data-types}/components/ref-data-type/ref-data-type.element.ts (100%) rename src/Umbraco.Web.UI.Client/src/packages/{core => settings/data-types}/components/ref-data-type/ref-data-type.stories.ts (100%) rename src/Umbraco.Web.UI.Client/{libs/models/data-type-model.ts => src/packages/settings/data-types/models.ts} (100%) diff --git a/src/Umbraco.Web.UI.Client/libs/models/index.ts b/src/Umbraco.Web.UI.Client/libs/models/index.ts index 80828eb93c..7a1f9b5766 100644 --- a/src/Umbraco.Web.UI.Client/libs/models/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/models/index.ts @@ -1,5 +1,3 @@ -export type * from './data-type-model'; - /** Tried to find a common base of our entities — used by Entity Workspace Context */ export type UmbEntityBase = { id?: string; diff --git a/src/Umbraco.Web.UI.Client/libs/picker-input/picker-input.context.ts b/src/Umbraco.Web.UI.Client/libs/picker-input/picker-input.context.ts index 7e1d3b6c49..2f6f163fe2 100644 --- a/src/Umbraco.Web.UI.Client/libs/picker-input/picker-input.context.ts +++ b/src/Umbraco.Web.UI.Client/libs/picker-input/picker-input.context.ts @@ -1,4 +1,4 @@ -import { UmbItemRepository, UmbRepositorySelectionManager } from '@umbraco-cms/backoffice/repository'; +import { UmbItemRepository, UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller-api'; import { UMB_CONFIRM_MODAL, @@ -23,7 +23,7 @@ export class UmbPickerInputContext #init: Promise; - #selectionManager; + #itemManager; selection; selectedItems; @@ -43,13 +43,13 @@ export class UmbPickerInputContext this.modalAlias = modalAlias; this.#getUnique = getUniqueMethod || ((entry) => entry.id || ''); - this.#selectionManager = new UmbRepositorySelectionManager(host, repositoryAlias); + this.#itemManager = new UmbRepositoryItemsManager(host, repositoryAlias, this.#getUnique); - this.selection = this.#selectionManager.selection; - this.selectedItems = this.#selectionManager.selectedItems; + this.selection = this.#itemManager.uniques; + this.selectedItems = this.#itemManager.items; this.#init = Promise.all([ - this.#selectionManager.init, + this.#itemManager.init, new UmbContextConsumerController(this.host, UMB_MODAL_CONTEXT_TOKEN, (instance) => { this.modalContext = instance; }).asPromise(), @@ -57,11 +57,11 @@ export class UmbPickerInputContext } getSelection() { - return this.#selectionManager.getSelection(); + return this.#itemManager.getUniques(); } setSelection(selection: string[]) { - this.#selectionManager.setSelection(selection); + this.#itemManager.setUniques(selection); } // TODO: If modalAlias is a ModalToken, then via TS, we should get the correct type for pickerData. Otherwise fallback to unknown. @@ -87,7 +87,7 @@ export class UmbPickerInputContext if (!this.repository) throw new Error('Repository is not initialized'); // TODO: id won't always be available on the model, so we need to get the unique property from somewhere. Maybe the repository? - const item = this.#selectionManager.getSelectedItems().find((item) => this.#getUnique(item) === unique); + const item = this.#itemManager.getItems().find((item) => this.#getUnique(item) === unique); if (!item) throw new Error('Could not find item with unique: ' + unique); const modalHandler = this.modalContext?.open(UMB_CONFIRM_MODAL, { diff --git a/src/Umbraco.Web.UI.Client/libs/repository/index.ts b/src/Umbraco.Web.UI.Client/libs/repository/index.ts index c3be0d12de..f2ee5be9a7 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/index.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/index.ts @@ -6,4 +6,4 @@ export * from './collection-repository.interface'; export * from './item-repository.interface'; export * from './move-repository.interface'; export * from './copy-repository.interface'; -export * from './repository-selection.manager'; +export * from './repository-items.manager'; diff --git a/src/Umbraco.Web.UI.Client/libs/repository/repository-selection.manager.ts b/src/Umbraco.Web.UI.Client/libs/repository/repository-items.manager.ts similarity index 65% rename from src/Umbraco.Web.UI.Client/libs/repository/repository-selection.manager.ts rename to src/Umbraco.Web.UI.Client/libs/repository/repository-items.manager.ts index 791acf609d..a58daa792c 100644 --- a/src/Umbraco.Web.UI.Client/libs/repository/repository-selection.manager.ts +++ b/src/Umbraco.Web.UI.Client/libs/repository/repository-items.manager.ts @@ -5,24 +5,40 @@ import { createExtensionClass } from '@umbraco-cms/backoffice/extension-api'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { ItemResponseModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbRepositorySelectionManager { +/** + * + * !!!!!!!!!!!!!!!!!!!!! + * !!!!!!!!!!!!!!!!!!!!! + * NOTE FOR MY SELF: + * !!!!!!!!!!!!!!!!!!!!! + * !!!!!!!!!!!!!!!!!!!!! + * + * Maybe this should not be called something with selection, but rather something with items/consumption/usage/... so its not about a selection, but just a given set of ids/uniques. We most likely need the unique getter method anyway. + */ +export class UmbRepositoryItemsManager { host: UmbControllerHostElement; repository?: UmbItemRepository; + #getUnique: (entry: ItemType) => string | undefined; init: Promise; - #selection = new UmbArrayState([]); - selection = this.#selection.asObservable(); + #uniques = new UmbArrayState([]); + uniques = this.#uniques.asObservable(); - #selectedItems = new UmbArrayState([]); - selectedItems = this.#selectedItems.asObservable(); + #items = new UmbArrayState([]); + items = this.#items.asObservable(); - #selectedItemsObserver?: UmbObserverController; + itemsObserver?: UmbObserverController; /* TODO: find a better way to have a getUniqueMethod. If we want to support trees/items of different types, then it need to be bound to the type and can't be a generic method we pass in. */ - constructor(host: UmbControllerHostElement, repositoryAlias: string) { + constructor( + host: UmbControllerHostElement, + repositoryAlias: string, + getUniqueMethod?: (entry: ItemType) => string | undefined + ) { this.host = host; + this.#getUnique = getUniqueMethod || ((entry) => entry.id || ''); //TODO: The promise can probably be done in a cleaner way. this.init = new Promise((resolve) => { @@ -46,34 +62,32 @@ export class UmbRepositorySelectionManager - this.#selectedItems.next(data) - ); + this.itemsObserver = new UmbObserverController(this.host, asObservable(), (data) => this.#items.next(data)); } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/data-type-flow-input/data-type-flow-input.element.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/data-type-flow-input/data-type-flow-input.element.ts index 74062f232b..2963bfff16 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/data-type-flow-input/data-type-flow-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/data-type-flow-input/data-type-flow-input.element.ts @@ -2,10 +2,10 @@ import { css, html } from 'lit'; import { UUITextStyles } from '@umbraco-ui/uui-css/lib'; import { customElement, property, state } from 'lit/decorators.js'; import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; +import type { UmbDataTypeModel } from '../../models'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UmbModalRouteRegistrationController, UMB_DATA_TYPE_PICKER_FLOW_MODAL } from '@umbraco-cms/backoffice/modal'; -import type { UmbDataTypeModel } from '@umbraco-cms/backoffice/models'; -import { UmbRepositorySelectionManager } from '@umbraco-cms/backoffice/repository'; +import { UmbRepositoryItemsManager } from '@umbraco-cms/backoffice/repository'; // Note: Does only support picking a single data type. But this could be developed later into this same component. To follow other picker input components. /** @@ -36,7 +36,7 @@ export class UmbInputDataTypeElement extends FormControlMixin(UmbLitElement) { } set value(dataTypeId: string) { super.value = dataTypeId; - this.#selectionManager.setSelection(dataTypeId.split(',')); + this.#selectionManager.setUniques(dataTypeId.split(',')); } @state() @@ -45,22 +45,22 @@ export class UmbInputDataTypeElement extends FormControlMixin(UmbLitElement) { constructor() { super(); - this.#selectionManager = new UmbRepositorySelectionManager(this, 'dataType'); - this.observe(this.#selectionManager.selection, (selection) => { + this.#selectionManager = new UmbRepositoryItemsManager(this, 'dataType'); + this.observe(this.#selectionManager.uniques, (selection) => { super.value = selection.join(','); }); - this.observe(this.#selectionManager.selectedItems, (selectedItems) => (this._items = selectedItems)); + this.observe(this.#selectionManager.items, (selectedItems) => (this._items = selectedItems)); new UmbModalRouteRegistrationController(this, UMB_DATA_TYPE_PICKER_FLOW_MODAL) .onSetup(() => { return { - selection: this.#selectionManager.getSelection(), + selection: this.#selectionManager.getUniques(), submitLabel: 'Submit', }; }) .onSubmit((submitData) => { // TODO: we might should set the alias to null or empty string, if no selection. - this.#selectionManager.setSelection(submitData.selection); + this.#selectionManager.setUniques(submitData.selection); this.dispatchEvent(new CustomEvent('change', { composed: true, bubbles: true })); }) .observeRouteBuilder((routeBuilder) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/index.ts index 5d372aa393..baea789699 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/index.ts @@ -1,2 +1,3 @@ import './data-type-input/data-type-input.element'; import './data-type-flow-input/data-type-flow-input.element'; +import './ref-data-type/ref-data-type.element'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/ref-data-type/ref-data-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/ref-data-type/ref-data-type.element.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/components/ref-data-type/ref-data-type.element.ts rename to src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/ref-data-type/ref-data-type.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/ref-data-type/ref-data-type.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/ref-data-type/ref-data-type.stories.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/src/packages/core/components/ref-data-type/ref-data-type.stories.ts rename to src/Umbraco.Web.UI.Client/src/packages/settings/data-types/components/ref-data-type/ref-data-type.stories.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/index.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/index.ts index 6d3be16e23..bbb25433bc 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/index.ts @@ -1,4 +1,5 @@ import './components'; +export type * from './models'; export const DATA_TYPE_ROOT_ENTITY_TYPE = 'data-type-root'; export const DATA_TYPE_ENTITY_TYPE = 'data-type'; diff --git a/src/Umbraco.Web.UI.Client/libs/models/data-type-model.ts b/src/Umbraco.Web.UI.Client/src/packages/settings/data-types/models.ts similarity index 100% rename from src/Umbraco.Web.UI.Client/libs/models/data-type-model.ts rename to src/Umbraco.Web.UI.Client/src/packages/settings/data-types/models.ts