import file system tree store from libs
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { FileSystemTreeItemPresentationModel } from '@umbraco-cms/backoffice/backend-api';
|
||||
import { ArrayState, partialUpdateFrozenArray } from '@umbraco-cms/backoffice/observable-api';
|
||||
import { UmbStoreBase, UmbTreeStore } from '@umbraco-cms/backoffice/store';
|
||||
|
||||
/**
|
||||
* @export
|
||||
* @class UmbFileSystemTreeStore
|
||||
* @extends {UmbStoreBase}
|
||||
* @description - General Tree Data Store
|
||||
*/
|
||||
export class UmbFileSystemTreeStore extends UmbStoreBase implements UmbTreeStore<FileSystemTreeItemPresentationModel> {
|
||||
#data = new ArrayState<FileSystemTreeItemPresentationModel>([], (x) => x.path);
|
||||
|
||||
/**
|
||||
* Appends items to the store
|
||||
* @param {Array<FileSystemTreeItemPresentationModel>} items
|
||||
* @memberof UmbFileSystemTreeStore
|
||||
*/
|
||||
appendItems(items: Array<FileSystemTreeItemPresentationModel>) {
|
||||
this.#data.append(items);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates an item in the store
|
||||
* @param {string} path
|
||||
* @param {Partial<FileSystemTreeItemPresentationModel>} data
|
||||
* @memberof UmbFileSystemTreeStore
|
||||
*/
|
||||
updateItem(path: string, data: Partial<FileSystemTreeItemPresentationModel>) {
|
||||
this.#data.next(partialUpdateFrozenArray(this.#data.getValue(), data, (entry) => entry.path === path));
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an item from the store
|
||||
* @param {string} path
|
||||
* @memberof UmbFileSystemTreeStore
|
||||
*/
|
||||
removeItem(path: string) {
|
||||
this.#data.removeOne(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* An observable to observe the root items
|
||||
* @memberof UmbFileSystemTreeStore
|
||||
*/
|
||||
rootItems = this.#data.getObservablePart((items) => items.filter((item) => item.path === item.name));
|
||||
|
||||
/**
|
||||
* Returns an observable to observe the children of a given parent
|
||||
* @param {(string | null)} parentPath
|
||||
* @return {*}
|
||||
* @memberof UmbFileSystemTreeStore
|
||||
*/
|
||||
childrenOf(parentPath: string | null) {
|
||||
return this.#data.getObservablePart((items) => items.filter((item) => item.path?.startsWith(parentPath ?? '')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an observable to observe the items with the given keys
|
||||
* @param {Array<string>} paths
|
||||
* @return {*}
|
||||
* @memberof UmbFileSystemTreeStore
|
||||
*/
|
||||
items(paths: Array<string>) {
|
||||
return this.#data.getObservablePart((items) => items.filter((item) => paths.includes(item.path ?? '')));
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
export * from './store';
|
||||
export * from './store-base';
|
||||
export * from './entity-tree-store';
|
||||
export * from './file-system-tree.store';
|
||||
export * from './tree-store.interface';
|
||||
|
||||
Reference in New Issue
Block a user