{"version":3,"file":"index.js","sources":["../../../../src/packages/core/repository/repository-items.manager.ts","../../../../src/packages/core/repository/repository-base.ts","../../../../src/packages/core/repository/item/item-repository-base.ts","../../../../src/packages/core/repository/item/item-server-data-source-base.ts","../../../../src/packages/core/repository/detail/detail-repository-base.ts"],"sourcesContent":["import type { UmbItemRepository } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbArrayState } from '@umbraco-cms/backoffice/observable-api';\r\nimport { type ManifestRepository, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';\r\nimport { UmbExtensionApiInitializer } from '@umbraco-cms/backoffice/extension-api';\r\nimport { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\nconst ObserveRepositoryAlias = Symbol();\r\n\r\nexport class UmbRepositoryItemsManager extends UmbControllerBase {\r\n\t//\r\n\trepository?: UmbItemRepository;\r\n\t#getUnique: (entry: ItemType) => string | undefined;\r\n\r\n\t#init: Promise;\r\n\t#currentRequest?: Promise;\r\n\r\n\t// the init promise is used externally for recognizing when the manager is ready.\r\n\tpublic get init() {\r\n\t\treturn this.#init;\r\n\t}\r\n\r\n\t#uniques = new UmbArrayState([], (x) => x);\r\n\tuniques = this.#uniques.asObservable();\r\n\r\n\t#items = new UmbArrayState([], (x) => this.#getUnique(x));\r\n\titems = this.#items.asObservable();\r\n\r\n\t/* TODO: find a better way to have a getUniqueMethod. If we want to support trees/items of different types,\r\n\tthen it need to be bound to the type and can't be a generic method we pass in. */\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\trepositoryAlias: string,\r\n\t\tgetUniqueMethod?: (entry: ItemType) => string | undefined,\r\n\t) {\r\n\t\tsuper(host);\r\n\r\n\t\tthis.#getUnique = getUniqueMethod || ((entry) => entry.unique);\r\n\r\n\t\tthis.#init = new UmbExtensionApiInitializer>>(\r\n\t\t\tthis,\r\n\t\t\tumbExtensionsRegistry,\r\n\t\t\trepositoryAlias,\r\n\t\t\t[this],\r\n\t\t\t(permitted, repository) => {\r\n\t\t\t\tthis.repository = permitted ? repository.api : undefined;\r\n\t\t\t},\r\n\t\t).asPromise();\r\n\r\n\t\tthis.observe(\r\n\t\t\tthis.uniques,\r\n\t\t\t(uniques) => {\r\n\t\t\t\tif (uniques.length === 0) {\r\n\t\t\t\t\tthis.#items.setValue([]);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO: This could be optimized so we only load the appended items, but this requires that the response checks that an item is still present in uniques. [NL]\r\n\t\t\t\t// Check if we already have the items, and then just sort them:\r\n\t\t\t\tconst items = this.#items.getValue();\r\n\t\t\t\tif (\r\n\t\t\t\t\tuniques.length === items.length &&\r\n\t\t\t\t\tuniques.every((unique) => items.find((item) => this.#getUnique(item) === unique))\r\n\t\t\t\t) {\r\n\t\t\t\t\tthis.#items.setValue(this.#sortByUniques(items));\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// We need to load new items, so ...\r\n\t\t\t\t\tthis.#requestItems();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tnull,\r\n\t\t);\r\n\t}\r\n\r\n\tgetUniques(): Array {\r\n\t\treturn this.#uniques.getValue();\r\n\t}\r\n\r\n\tsetUniques(uniques: string[]): void {\r\n\t\tthis.#uniques.setValue(uniques);\r\n\t}\r\n\r\n\tgetItems(): Array {\r\n\t\treturn this.#items.getValue();\r\n\t}\r\n\r\n\titemByUnique(unique: string) {\r\n\t\treturn this.#items.asObservablePart((items) => items.find((item) => this.#getUnique(item) === unique));\r\n\t}\r\n\r\n\tasync getItemByUnique(unique: string) {\r\n\t\t// TODO: Make an observeOnce feature, to avoid this amount of code: [NL]\r\n\t\tconst ctrl = this.observe(this.itemByUnique(unique), () => {}, null);\r\n\t\tconst result = await ctrl.asPromise();\r\n\t\tctrl.destroy();\r\n\t\treturn result;\r\n\t}\r\n\r\n\tasync #requestItems(): Promise {\r\n\t\tawait this.#init;\r\n\t\tif (!this.repository) throw new Error('Repository is not initialized');\r\n\r\n\t\t// TODO: Test if its just some items that is gone now, if so then just filter them out. (maybe use code from #removeItem)\r\n\t\t// This is where this.#getUnique comes in play. Unless that can come from the repository, but that collides with the idea of having a multi-type repository. If that happens.\r\n\t\tconst request = this.repository.requestItems(this.getUniques());\r\n\t\tthis.#currentRequest = request;\r\n\t\tconst { asObservable } = await request;\r\n\r\n\t\tif (this.#currentRequest !== request) {\r\n\t\t\t// You are not the newest request, so please back out.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (asObservable) {\r\n\t\t\tthis.observe(\r\n\t\t\t\tasObservable(),\r\n\t\t\t\t(data) => {\r\n\t\t\t\t\tthis.#items.setValue(this.#sortByUniques(data));\r\n\t\t\t\t},\r\n\t\t\t\tObserveRepositoryAlias,\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\t#sortByUniques(data: Array): Array {\r\n\t\tconst uniques = this.getUniques();\r\n\t\treturn [...data].sort((a, b) => {\r\n\t\t\tconst aIndex = uniques.indexOf(this.#getUnique(a) ?? '');\r\n\t\t\tconst bIndex = uniques.indexOf(this.#getUnique(b) ?? '');\r\n\t\t\treturn aIndex - bIndex;\r\n\t\t});\r\n\t}\r\n}\r\n","import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';\r\n\r\nexport abstract class UmbRepositoryBase extends UmbControllerBase {}\r\n","import { UmbRepositoryBase } from '../repository-base.js';\r\nimport type { UmbItemDataSource, UmbItemDataSourceConstructor } from './item-data-source.interface.js';\r\nimport type { UmbItemRepository } from './item-repository.interface.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbItemStore } from '@umbraco-cms/backoffice/store';\r\nimport type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\n\r\nexport class UmbItemRepositoryBase\r\n\textends UmbRepositoryBase\r\n\timplements UmbItemRepository\r\n{\r\n\tprotected _init: Promise;\r\n\tprotected _itemStore?: UmbItemStore;\r\n\t#itemSource: UmbItemDataSource;\r\n\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\titemSource: UmbItemDataSourceConstructor,\r\n\t\titemStoreContextAlias: string | UmbContextToken,\r\n\t) {\r\n\t\tsuper(host);\r\n\t\tthis.#itemSource = new itemSource(host);\r\n\r\n\t\tthis._init = this.consumeContext(itemStoreContextAlias, (instance) => {\r\n\t\t\tthis._itemStore = instance as UmbItemStore;\r\n\t\t}).asPromise();\r\n\t}\r\n\r\n\t/**\r\n\t * Requests the items for the given uniques\r\n\t * @param {Array} uniques\r\n\t * @returns {*}\r\n\t * @memberof UmbItemRepositoryBase\r\n\t */\r\n\tasync requestItems(uniques: Array) {\r\n\t\tif (!uniques) throw new Error('Uniques are missing');\r\n\t\tawait this._init;\r\n\r\n\t\tconst { data, error: _error } = await this.#itemSource.getItems(uniques);\r\n\r\n\t\tconst error: any = _error;\r\n\t\tif (data) {\r\n\t\t\tthis._itemStore!.appendItems(data);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this._itemStore!.items(uniques) };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of the items for the given uniques\r\n\t * @param {Array} uniques\r\n\t * @returns {*}\r\n\t * @memberof UmbItemRepositoryBase\r\n\t */\r\n\tasync items(uniques: Array) {\r\n\t\tawait this._init;\r\n\t\treturn this._itemStore!.items(uniques);\r\n\t}\r\n}\r\n","import type { UmbItemDataSource } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\nexport interface UmbItemServerDataSourceBaseArgs {\r\n\tgetItems: (uniques: Array) => Promise>;\r\n\tmapper: (item: ServerItemType) => ClientItemType;\r\n}\r\n\r\n/**\r\n * A data source base for items that fetches items from the server\r\n * @class UmbItemServerDataSourceBase\r\n * @implements {DocumentTreeDataSource}\r\n */\r\nexport abstract class UmbItemServerDataSourceBase\r\n\timplements UmbItemDataSource\r\n{\r\n\t#host: UmbControllerHost;\r\n\t#getItems: (uniques: Array) => Promise>;\r\n\t#mapper: (item: ServerItemType) => ClientItemType;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbItemServerDataSourceBase.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @param args\r\n\t * @memberof UmbItemServerDataSourceBase\r\n\t */\r\n\tconstructor(host: UmbControllerHost, args: UmbItemServerDataSourceBaseArgs) {\r\n\t\tthis.#host = host;\r\n\t\tthis.#getItems = args.getItems;\r\n\t\tthis.#mapper = args.mapper;\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches the items for the given uniques from the server\r\n\t * @param {Array} uniques\r\n\t * @returns {*}\r\n\t * @memberof UmbItemServerDataSourceBase\r\n\t */\r\n\tasync getItems(uniques: Array) {\r\n\t\tif (!uniques) throw new Error('Uniques are missing');\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, this.#getItems(uniques));\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = data.map((item) => this.#mapper(item));\r\n\t\t\treturn { data: items };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n}\r\n","import { UmbRepositoryBase } from '../repository-base.js';\r\nimport type { UmbRepositoryResponse, UmbRepositoryResponseWithAsObservable } from '../types.js';\r\nimport type { UmbDetailDataSource, UmbDetailDataSourceConstructor } from './detail-data-source.interface.js';\r\nimport type { UmbDetailRepository } from './detail-repository.interface.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbNotificationContext } from '@umbraco-cms/backoffice/notification';\r\nimport { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';\r\nimport type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';\r\nimport type { UmbDetailStore } from '@umbraco-cms/backoffice/store';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\nimport type { UmbEntityModel } from '@umbraco-cms/backoffice/entity';\r\n\r\nexport abstract class UmbDetailRepositoryBase<\r\n\t\tDetailModelType extends UmbEntityModel,\r\n\t\tUmbDetailDataSourceType extends UmbDetailDataSource = UmbDetailDataSource,\r\n\t>\r\n\textends UmbRepositoryBase\r\n\timplements UmbDetailRepository, UmbApi\r\n{\r\n\t#init: Promise;\r\n\r\n\t#detailStore?: UmbDetailStore;\r\n\tprotected detailDataSource: UmbDetailDataSourceType;\r\n\t#notificationContext?: UmbNotificationContext;\r\n\r\n\tconstructor(\r\n\t\thost: UmbControllerHost,\r\n\t\tdetailSource: UmbDetailDataSourceConstructor,\r\n\t\tdetailStoreContextAlias: string | UmbContextToken,\r\n\t) {\r\n\t\tsuper(host);\r\n\r\n\t\tif (!detailSource) throw new Error('Detail source is missing');\r\n\t\tif (!detailStoreContextAlias) throw new Error('Detail store context alias is missing');\r\n\r\n\t\tthis.detailDataSource = new detailSource(host) as UmbDetailDataSourceType;\r\n\r\n\t\tthis.#init = Promise.all([\r\n\t\t\tthis.consumeContext(detailStoreContextAlias, (instance) => {\r\n\t\t\t\tthis.#detailStore = instance;\r\n\t\t\t}).asPromise(),\r\n\r\n\t\t\tthis.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {\r\n\t\t\t\tthis.#notificationContext = instance;\r\n\t\t\t}).asPromise(),\r\n\t\t]);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a scaffold\r\n\t * @param {Partial} [preset]\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync createScaffold(preset?: Partial): Promise> {\r\n\t\treturn this.detailDataSource.createScaffold(preset);\r\n\t}\r\n\r\n\t/**\r\n\t * Requests the detail for the given unique\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync requestByUnique(unique: string): Promise> {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data, error } = await this.detailDataSource.read(unique);\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#detailStore!.append(data);\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tdata,\r\n\t\t\terror,\r\n\t\t\tasObservable: () => this.#detailStore!.byUnique(unique),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of the detail for the given unique\r\n\t * @param {DetailModelType} model\r\n\t * @param {string | null} [parentUnique]\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync create(model: DetailModelType, parentUnique: string | null): Promise> {\r\n\t\tif (!model) throw new Error('Data is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data: createdData, error } = await this.detailDataSource.create(model, parentUnique);\r\n\r\n\t\tif (createdData) {\r\n\t\t\tthis.#detailStore?.append(createdData);\r\n\r\n\t\t\t// TODO: how do we handle generic notifications? Is this the correct place to do it?\r\n\t\t\tconst notification = { data: { message: `Created` } };\r\n\t\t\tthis.#notificationContext!.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { data: createdData, error };\r\n\t}\r\n\r\n\t/**\r\n\t * Saves the given data\r\n\t * @param {DetailModelType} model\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync save(model: DetailModelType) {\r\n\t\tif (!model) throw new Error('Data is missing');\r\n\t\tif (!model.unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data: updatedData, error } = await this.detailDataSource.update(model);\r\n\r\n\t\tif (updatedData) {\r\n\t\t\tthis.#detailStore!.updateItem(model.unique, updatedData);\r\n\r\n\t\t\t// TODO: how do we handle generic notifications? Is this the correct place to do it?\r\n\t\t\tconst notification = { data: { message: `Saved` } };\r\n\t\t\tthis.#notificationContext!.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { data: updatedData, error };\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes the detail for the given unique\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync delete(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { error } = await this.detailDataSource.delete(unique);\r\n\r\n\t\tif (!error) {\r\n\t\t\tthis.#detailStore!.removeItem(unique);\r\n\r\n\t\t\t// TODO: how do we handle generic notifications? Is this the correct place to do it?\r\n\t\t\tconst notification = { data: { message: `Deleted` } };\r\n\t\t\tthis.#notificationContext!.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise with an observable of the detail for the given unique\r\n\t * @param {string} unique\r\n\t * @returns {*}\r\n\t * @memberof UmbDetailRepositoryBase\r\n\t */\r\n\tasync byUnique(unique: string) {\r\n\t\tif (!unique) throw new Error('Unique is missing');\r\n\t\tawait this.#init;\r\n\t\treturn this.#detailStore!.byUnique(unique);\r\n\t}\r\n\r\n\toverride destroy(): void {\r\n\t\tthis.#detailStore = undefined;\r\n\t\t(this.detailDataSource as unknown) = undefined;\r\n\t\tsuper.destroy();\r\n\t}\r\n}\r\n"],"names":["ObserveRepositoryAlias","UmbRepositoryItemsManager","UmbControllerBase","host","repositoryAlias","getUniqueMethod","#uniques","UmbArrayState","x","#items","#getUnique","entry","#init","UmbExtensionApiInitializer","umbExtensionsRegistry","permitted","repository","uniques","items","unique","item","#sortByUniques","#requestItems","#currentRequest","ctrl","result","request","asObservable","data","a","b","aIndex","bIndex","UmbRepositoryBase","UmbItemRepositoryBase","#itemSource","itemSource","itemStoreContextAlias","instance","_error","error","UmbItemServerDataSourceBase","#host","#getItems","#mapper","args","tryExecuteAndNotify","UmbDetailRepositoryBase","#detailStore","#notificationContext","detailSource","detailStoreContextAlias","UMB_NOTIFICATION_CONTEXT","preset","model","parentUnique","createdData","notification","updatedData"],"mappings":"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"}