{"version":3,"file":"index.js","sources":["../../../../src/packages/core/store/events/store.event.ts","../../../../src/packages/core/store/events/store-remove.event.ts","../../../../src/packages/core/store/events/store-update.event.ts","../../../../src/packages/core/store/events/store-append.event.ts","../../../../src/packages/core/store/store-base.ts","../../../../src/packages/core/store/store-object-base.ts","../../../../src/packages/core/store/detail/detail-store-base.ts","../../../../src/packages/core/store/item/item-store-base.ts","../../../../src/packages/core/store/store-connector.ts"],"sourcesContent":["export class UmbStoreEvent extends Event {\r\n\tpublic uniques: Array = [];\r\n\r\n\tpublic constructor(type: string, uniques: Array) {\r\n\t\tsuper(type, { bubbles: false, composed: false, cancelable: false });\r\n\t\tthis.uniques = uniques;\r\n\t}\r\n}\r\n","import { UmbStoreEvent } from './store.event.js';\r\n\r\nexport class UmbStoreRemoveEvent extends UmbStoreEvent {\r\n\tstatic readonly TYPE = 'remove';\r\n\r\n\tpublic constructor(uniques: Array) {\r\n\t\tsuper(UmbStoreRemoveEvent.TYPE, uniques);\r\n\t}\r\n}\r\n","import { UmbStoreEvent } from './store.event.js';\r\n\r\nexport class UmbStoreUpdateEvent extends UmbStoreEvent {\r\n\tstatic readonly TYPE = 'update';\r\n\r\n\tpublic constructor(uniques: Array) {\r\n\t\tsuper(UmbStoreUpdateEvent.TYPE, uniques);\r\n\t}\r\n}\r\n","import { UmbStoreEvent } from './store.event.js';\r\n\r\nexport class UmbStoreAppendEvent extends UmbStoreEvent {\r\n\tstatic readonly TYPE = 'append';\r\n\r\n\tpublic constructor(uniques: Array) {\r\n\t\tsuper(UmbStoreAppendEvent.TYPE, uniques);\r\n\t}\r\n}\r\n","import type { UmbStore } from './store.interface.js';\r\nimport { UmbStoreRemoveEvent } from './events/store-remove.event.js';\r\nimport { UmbStoreUpdateEvent } from './events/store-update.event.js';\r\nimport { UmbStoreAppendEvent } from './events/store-append.event.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\nimport type { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';\r\nimport { UmbContextBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\nexport class UmbStoreBase extends UmbContextBase implements UmbStore, UmbApi {\r\n\tprotected _data: UmbArrayState;\r\n\r\n\tconstructor(host: UmbControllerHost, storeAlias: string, data: UmbArrayState) {\r\n\t\tsuper(host, storeAlias);\r\n\t\tthis._data = data;\r\n\t}\r\n\r\n\t/**\r\n\t * Append an item to the store\r\n\t * @param {StoreItemType} item\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tappend(item: StoreItemType) {\r\n\t\tthis._data.append([item]);\r\n\t\tconst unique = this._data.getUniqueMethod(item) as string;\r\n\t\tthis.dispatchEvent(new UmbStoreAppendEvent([unique]));\r\n\t}\r\n\r\n\t/**\r\n\t * Appends multiple items to the store\r\n\t * @param {Array} items\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tappendItems(items: Array) {\r\n\t\tthis._data.append(items);\r\n\t\tconst uniques = items.map((item) => this._data.getUniqueMethod(item)) as Array;\r\n\t\tthis.dispatchEvent(new UmbStoreAppendEvent(uniques));\r\n\t}\r\n\r\n\t/**\r\n\t * Updates an item in the store\r\n\t * @param {string} unique\r\n\t * @param {Partial} data\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tupdateItem(unique: string, data: Partial) {\r\n\t\tthis._data.updateOne(unique, data);\r\n\t\tthis.dispatchEvent(new UmbStoreUpdateEvent([unique]));\r\n\t}\r\n\r\n\t/**\r\n\t * Removes an item from the store\r\n\t * @param {string} unique\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tremoveItem(unique: string) {\r\n\t\tthis._data.removeOne(unique);\r\n\t\tthis.dispatchEvent(new UmbStoreRemoveEvent([unique]));\r\n\t}\r\n\r\n\t/**\r\n\t * Removes multiple items in the store with the given uniques\r\n\t * @param {string[]} uniques\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tremoveItems(uniques: Array) {\r\n\t\tthis._data.remove(uniques);\r\n\t\tthis.dispatchEvent(new UmbStoreRemoveEvent(uniques));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an array of items with the given uniques\r\n\t * @param {string[]} uniques\r\n\t * @returns {Array}\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tgetItems(uniques: Array): Array {\r\n\t\treturn this._data.getValue().filter((item) => uniques.includes(this._data.getUniqueMethod(item) as string));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an observable of the entire store\r\n\t * @memberof UmbStoreBase\r\n\t */\r\n\tall() {\r\n\t\treturn this._data.asObservable();\r\n\t}\r\n}\r\n","import { UmbStoreUpdateEvent } from './events/index.js';\r\nimport { UmbContextBase } from '@umbraco-cms/backoffice/class-api';\r\nimport { type Observable, UmbObjectState } from '@umbraco-cms/backoffice/observable-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\n\r\n/**\r\n * The base class for a store that holds an object.\r\n */\r\nexport class UmbStoreObjectBase extends UmbContextBase implements UmbApi {\r\n\tprotected _data;\r\n\r\n\tconstructor(host: UmbControllerHost, storeAlias: string, initialData?: T) {\r\n\t\tsuper(host, storeAlias);\r\n\t\tthis._data = new UmbObjectState(initialData ?? null);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the store with the given data\r\n\t * @param data - The (partial) data to update the store with\r\n\t * @memberof UmbStoreObjectBase\r\n\t */\r\n\tupdate(data: Partial) {\r\n\t\tthis._data.update(data);\r\n\t\tthis.dispatchEvent(new UmbStoreUpdateEvent([]));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the current state of the store\r\n\t * @memberof UmbStoreObjectBase\r\n\t */\r\n\tgetState() {\r\n\t\treturn this._data.getValue();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an observable of the store\r\n\t * @memberof UmbStoreObjectBase\r\n\t */\r\n\tall() {\r\n\t\treturn this._data.asObservable();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an observable of a part of the store\r\n\t * @param key - The key of the part to return\r\n\t * @memberof UmbStoreObjectBase\r\n\t */\r\n\tpart(key: Part): Observable {\r\n\t\treturn this._data.asObservablePart((data) => data![key]);\r\n\t}\r\n\r\n\t/**\r\n\t * Destroys the store\r\n\t * @memberof UmbStoreObjectBase\r\n\t */\r\n\toverride destroy() {\r\n\t\tthis._data.destroy();\r\n\t}\r\n}\r\n","import { UmbStoreBase } from '../store-base.js';\r\nimport type { UmbDetailStore } from './detail-store.interface.js';\r\nimport type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';\r\n\r\n/**\r\n * @class UmbDetailStoreBase\r\n * @augments {UmbStoreBase}\r\n * @description - Data Store for Data Type items\r\n */\r\n\r\nexport abstract class UmbDetailStoreBase\r\n\textends UmbStoreBase\r\n\timplements UmbDetailStore\r\n{\r\n\t/**\r\n\t * Creates an instance of UmbDetailStoreBase.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @param storeAlias - The alias of the store\r\n\t * @memberof UmbDetailStoreBase\r\n\t */\r\n\tconstructor(host: UmbControllerHost, storeAlias: string) {\r\n\t\tsuper(host, storeAlias, new UmbArrayState([], (x) => x.unique));\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieve a detail model from the store\r\n\t * @param {unique} string unique identifier\r\n\t * @param unique\r\n\t * @returns {Observable}\r\n\t * @memberof UmbDetailStoreBase\r\n\t */\r\n\tbyUnique(unique: string) {\r\n\t\treturn this._data.asObservablePart((x) => x.find((y) => y.unique === unique));\r\n\t}\r\n}\r\n","import { UmbStoreBase } from '../store-base.js';\r\nimport type { UmbItemStore } from './item-store.interface.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';\r\n\r\n/**\r\n * @class UmbItemStoreBase\r\n * @augments {UmbStoreBase}\r\n * @description - Data Store for items with a unique property\r\n */\r\n\r\nexport abstract class UmbItemStoreBase\r\n\textends UmbStoreBase\r\n\timplements UmbItemStore\r\n{\r\n\t/**\r\n\t * Creates an instance of UmbItemStoreBase.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @param storeAlias\r\n\t * @memberof UmbItemStoreBase\r\n\t */\r\n\tconstructor(host: UmbControllerHost, storeAlias: string) {\r\n\t\tsuper(host, storeAlias, new UmbArrayState([], (x) => x.unique));\r\n\t}\r\n\r\n\titems(uniques: Array) {\r\n\t\treturn this._data.asObservablePart((items) => items.filter((item) => uniques.includes(item.unique)));\r\n\t}\r\n}\r\n","import type { UmbStoreBase } from './store-base.js';\r\nimport { UmbStoreAppendEvent, UmbStoreRemoveEvent, UmbStoreUpdateEvent } from './events/index.js';\r\nimport type { UmbStore } from './store.interface.js';\r\nimport type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\nimport { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\n\r\nexport interface UmbStoreConnectorArgs {\r\n\tstore: UmbStoreBase;\r\n\tconnectToStoreAlias: UmbContextToken | string;\r\n\tnewStoreItemMapper?: (item: ConnectedStoreType) => StoreType;\r\n\tupdateStoreItemMapper?: (item: ConnectedStoreType) => Partial;\r\n}\r\n\r\n// WIP: get back to this when we have decided on detail model sizes\r\nexport class UmbStoreConnector {\r\n\t#store: UmbStore;\r\n\t#connectedStore?: UmbStore;\r\n\t#newStoreItemMapper?: (item: ConnectedStoreType) => StoreType;\r\n\t#updateStoreItemMapper?: (item: ConnectedStoreType) => Partial;\r\n\r\n\tconstructor(host: UmbControllerHost, args: UmbStoreConnectorArgs) {\r\n\t\tthis.#store = args.store;\r\n\t\tthis.#newStoreItemMapper = args.newStoreItemMapper;\r\n\t\tthis.#updateStoreItemMapper = args.updateStoreItemMapper;\r\n\r\n\t\tnew UmbContextConsumerController(host, args.connectToStoreAlias, (instance) => {\r\n\t\t\tthis.#connectedStore = instance;\r\n\r\n\t\t\tif (this.#connectedStore) {\r\n\t\t\t\tthis.#listenToConnectedStore();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t#listenToConnectedStore = () => {\r\n\t\tif (!this.#connectedStore) return;\r\n\t\tthis.#connectedStore.addEventListener(UmbStoreAppendEvent.TYPE, this.#updateStoreItems as EventListener);\r\n\t\tthis.#connectedStore.addEventListener(UmbStoreUpdateEvent.TYPE, this.#updateStoreItems as EventListener);\r\n\t\tthis.#connectedStore.addEventListener(UmbStoreRemoveEvent.TYPE, this.#removeStoreItems as EventListener);\r\n\t};\r\n\r\n\t#updateStoreItems = (event: UmbStoreAppendEvent | UmbStoreUpdateEvent) => {\r\n\t\tevent.uniques.forEach((unique) => {\r\n\t\t\tconst storeHasItem = this.#store.getItems([unique]).length > 0;\r\n\t\t\tconst connectedStoreItem = this.#connectedStore!.getItems([unique])[0];\r\n\r\n\t\t\t// we check if the current store has the item from the connected store, if it does we update it, if it doesn't we append it\r\n\t\t\tif (storeHasItem && this.#updateStoreItemMapper) {\r\n\t\t\t\tthis.#store.updateItem(unique, this.#updateStoreItemMapper(connectedStoreItem!));\r\n\t\t\t} else if (this.#newStoreItemMapper) {\r\n\t\t\t\tthis.#store.append(this.#newStoreItemMapper(connectedStoreItem!));\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\t#removeStoreItems = (event: UmbStoreRemoveEvent) => {\r\n\t\tthis.#store.removeItems(event.uniques);\r\n\t};\r\n}\r\n"],"names":["UmbStoreEvent","type","uniques","UmbStoreRemoveEvent","UmbStoreUpdateEvent","UmbStoreAppendEvent","UmbStoreBase","UmbContextBase","host","storeAlias","data","item","unique","items","UmbStoreObjectBase","initialData","UmbObjectState","key","UmbDetailStoreBase","UmbArrayState","x","y","UmbItemStoreBase","UmbStoreConnector","#store","#connectedStore","#newStoreItemMapper","#updateStoreItemMapper","args","UmbContextConsumerController","instance","#listenToConnectedStore","#updateStoreItems","#removeStoreItems","event","storeHasItem","connectedStoreItem"],"mappings":"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"}