xt-store 0.4.6 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/fesm2022/xt-store.mjs
CHANGED
|
@@ -714,10 +714,16 @@ class XtApiStoreProvider extends AbstractXtStoreProvider {
|
|
|
714
714
|
// Reconverts dates or Ids
|
|
715
715
|
XtStoreProviderHelper.cleanUpDataBeforeSaving([data], name);
|
|
716
716
|
if (id != undefined) {
|
|
717
|
-
return lastValueFrom(this.http.put(this.apiUrl + '/' + name + '/' + id, data, { observe: "body", responseType: "json" }))
|
|
717
|
+
return lastValueFrom(this.http.put(this.apiUrl + '/' + name + '/' + id, data, { observe: "body", responseType: "json" })).then((ret) => {
|
|
718
|
+
XtStoreProviderHelper.cleanUpLoadedData([ret], name);
|
|
719
|
+
return ret;
|
|
720
|
+
});
|
|
718
721
|
}
|
|
719
722
|
else {
|
|
720
|
-
return lastValueFrom(this.http.post(this.apiUrl + '/' + name, data, { observe: "body", responseType: "json" }))
|
|
723
|
+
return lastValueFrom(this.http.post(this.apiUrl + '/' + name, data, { observe: "body", responseType: "json" })).then((ret) => {
|
|
724
|
+
XtStoreProviderHelper.cleanUpLoadedData([ret], name);
|
|
725
|
+
return ret;
|
|
726
|
+
});
|
|
721
727
|
}
|
|
722
728
|
}
|
|
723
729
|
loadEntity(name, key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xt-store.mjs","sources":["../../../projects/store/src/store-manager/xt-store-manager.ts","../../../projects/store/src/xt-store-parameters.ts","../../../projects/store/src/store-provider/xt-store-provider-helper.ts","../../../projects/store/src/xt-reporting.ts","../../../projects/store/src/store-provider/xt-store-provider.ts","../../../projects/store/src/store-entity/store-entity-feature.ts","../../../projects/store/src/store-manager-service/store-manager.service.ts","../../../projects/store/src/api-provider/xt-api-store-provider.ts","../../../projects/store/src/store-provider/xt-memory-store-provider.ts","../../../projects/store/src/test/store-test-bed.ts","../../../projects/store/src/public-api.ts","../../../projects/store/src/xt-store.ts"],"sourcesContent":["import { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { Observable } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreCriteria, XtGroupBy, XtSortBy } from '../xt-store-parameters';\nimport { DontCodeStorePreparedEntities } from '../store-provider/xt-store-provider-helper';\nimport { XtDataTransformer } from '../store-provider/xt-data-transformer';\nimport { ManagedData } from 'xt-type';\n\nexport class XtStoreManager {\n private _default?: XtStoreProvider<any>;\n private providerByPosition = new Map<string, XtStoreProvider<any>>();\n private providerByType = new Map<string, XtStoreProvider<any>>();\n\n protected static testProvider:XtStoreProvider<any>|null = null;\n\n constructor(\n provider?: XtStoreProvider<any>\n ) {\n this._default = provider;\n this.reset();\n }\n\n reset() {\n this.providerByPosition.clear();\n this.providerByType.clear();\n }\n\n getProvider<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> | undefined {\n // Override for testing\n if( XtStoreManager.testProvider!=null) return XtStoreManager.testProvider;\n\n if (name == null) {\n return this._default;\n } else {\n let ret = null;\n // Try to find if the entity is loaded from a defined source\n /*const srcDefinition = this.modelMgr.findTargetOfProperty(\n DontCodeModel.APP_ENTITIES_FROM_NODE,\n position\n )?.value as DontCodeSourceType;\n if (srcDefinition) {\n ret = this.providerByType.get(srcDefinition.type);\n }\n if (!ret) {*/\n ret = this.providerByPosition.get(name);\n //}\n return ret ?? this._default;\n }\n }\n\n getProviderSafe<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> {\n const ret = this.getProvider<T>(name);\n if (ret == null) {\n throw new Error('Trying to get an undefined or null provider');\n } else {\n return ret;\n }\n }\n\n getDefaultProvider<T extends ManagedData = ManagedData>(): XtStoreProvider<T> | undefined {\n return this.getProvider();\n }\n\n getDefaultProviderSafe<T extends ManagedData = ManagedData>(): XtStoreProvider<T> {\n return this.getProviderSafe();\n }\n\n setProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>, name?: string): void {\n if (name == null) this._default = value;\n else {\n this.providerByPosition.set(name, value);\n }\n }\n\n setProviderForSourceType<T extends ManagedData = ManagedData>(\n value: XtStoreProvider<T>,\n srcType: string\n ): void {\n this.providerByType.set(srcType, value);\n }\n\n setDefaultProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>): void {\n this.setProvider(value);\n }\n\n removeProvider(name?: string): void {\n if (name == null) this._default = undefined;\n else {\n this.providerByPosition.delete(name);\n }\n }\n\n removeProviderForSourceType(srcType: string): void {\n this.providerByType.delete(srcType);\n }\n\n removeDefaultProvider(): void {\n this.removeProvider();\n }\n\n storeEntity<T extends ManagedData = ManagedData>(name: string, entity: T): Promise<T> {\n return this.getProviderSafe<T>(name).storeEntity(name, entity);\n }\n\n loadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T|undefined> {\n return this.getProviderSafe<T>(name).loadEntity(name, key);\n }\n\n safeLoadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T> {\n return this.getProviderSafe<T>(name).safeLoadEntity(name, key);\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return this.getProviderSafe(name).deleteEntity(name, key);\n }\n\n searchEntities<T extends ManagedData = ManagedData>(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>> {\n return this.getProviderSafe<T>(name).searchEntities(name, ...criteria);\n }\n\n searchAndPrepareEntities<T extends ManagedData = ManagedData>(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n dataTransformer?:XtDataTransformer,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>> {\n return this.getProviderSafe<T>(name).searchAndPrepareEntities(name, sort, groupBy, dataTransformer, ...criteria);\n }\n\n\n canStoreDocument(name?: string): boolean {\n const res = this.getProvider(name)?.canStoreDocument();\n if (res) return res;\n else return false;\n }\n\n storeDocuments(\n toStore: File[],\n name?: string\n ): Observable<UploadedDocumentInfo> {\n return this.getProviderSafe(name).storeDocuments(toStore);\n }\n\n public static setTestMode (testProvider:XtStoreProvider<any>) {\n this.testProvider=testProvider;\n }\n\n}\n\n/**\n * The global store Mgr\n */\n\ndeclare global {\n var XT_STORE_MGR: XtStoreManager;\n var xtStoreManager: () => XtStoreManager;\n}\nexport function xtStoreManager (): XtStoreManager {\n return globalThis.XT_STORE_MGR;\n}\n\nglobalThis.XT_STORE_MGR = new XtStoreManager();\nglobalThis.xtStoreManager = xtStoreManager;\n","\nexport enum XtStoreCriteriaOperator {\n EQUALS = '=',\n LESS_THAN = '<',\n LESS_THAN_EQUAL = '<=',\n}\n\nexport class XtStoreCriteria {\n name: string;\n value: any;\n operator: XtStoreCriteriaOperator;\n\n constructor(\n name: string,\n value: any,\n operator?: XtStoreCriteriaOperator\n ) {\n this.name = name;\n this.value = value;\n if (!operator) this.operator = XtStoreCriteriaOperator.EQUALS;\n else {\n this.operator = operator;\n }\n }\n}\n\nexport type XtSortBy ={\n by:string,\n direction: XtSortByDirection\n}\n\nexport enum XtSortByDirection {\n None = \"None\",\n Ascending = \"Ascending\",\n Descending = \"Descending\"\n}\n\nexport enum XtGroupByShow {\n OnlyLowest=\"OnlyLowest\",\n OnlyHighest=\"OnlyHighest\"\n}\n\nexport enum XtGroupByOperation {\n Count= \"Count\",\n Sum=\"Sum\",\n Average=\"Average\",\n Minimum=\"Minimum\",\n Maximum=\"Maximum\"\n}\n\nexport type XtGroupBy= {\n of: string,\n display:{[key:string]:XtGroupByAggregate};\n show?:XtGroupByShow,\n label?:string\n\n atLeastOneGroupIsRequested (): boolean;\n getRequiredListOfFields(): Set<string>;\n}\n\nexport type XtGroupByAggregate = {\n operation: XtGroupByOperation;\n of:string,\n label?:string\n}\n\n\n","import { Counters, ManagedData, XtTypeHandler, xtTypeManager } from 'xt-type';\nimport {\n XtGroupBy,\n XtGroupByAggregate,\n XtGroupByOperation,\n XtSortBy,\n XtStoreCriteria,\n XtStoreCriteriaOperator\n} from '../xt-store-parameters';\n\n/**\n * Helps handle metadata information about loaded items\n */\nexport class XtStoreProviderHelper {\n\n protected static typeManager = xtTypeManager();\n /**\n * In case the provider source doesn't support search criteria, they can be applied here\n * @param list\n * @param criteria\n */\n public static applyFilters<T> (list:Array<T>, ...criteria: XtStoreCriteria[]): Array<T> {\n if ((criteria==null)||(criteria.length==0)) return list;\n return list.filter(element => {\n for (const criterium of criteria) {\n const toTest = element[criterium.name as keyof T];\n switch (criterium.operator) {\n case XtStoreCriteriaOperator.EQUALS:\n return criterium.value==toTest;\n case XtStoreCriteriaOperator.LESS_THAN:\n return toTest < criterium.value;\n case XtStoreCriteriaOperator.LESS_THAN_EQUAL:\n return toTest <= criterium.value;\n default:\n throw new Error (\"Operator \"+criterium.operator+\" unknown\");\n }\n }\n return true;\n });\n return list;\n }\n\n /** Returns any field who is a date, in order to convert it from json. Keep the result in a cache map\n *\n * @param typeName\n * @param typeResolver\n * @protected\n */\n public static findTypeHandler (typeName:string, subName?:string, value?:ManagedData): { typeName?:string | null, handler?:XtTypeHandler<any>} {\n return XtStoreProviderHelper.typeManager?.findTypeHandler(typeName, subName, value);\n }\n\n /**\n * Ensure _id is removed if necessary before saving the element\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpDataBeforeSaving (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler\n (typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined)\n .handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.toJson(toConvert)\n }\n }\n/* if ((specialFields?.idField!=null)&&(specialFields?.idField!='_id')) {\n listToConvert.forEach(value => {\n delete value._id;\n })\n }*/\n }\n\n /**\n * Converts dates and dateTimes properties of each element of the array to Typescript format\n * Ensure _id is set with the right id\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpLoadedData (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler(typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined).handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.fromJson(toConvert)\n }\n }\n /*\n if( specialFields.idField==null) {\n XtSpecialFieldsHelper.findSpecialFieldsFromData (listToConvert, specialFields);\n }\n listToConvert.forEach((val)=> {\n if ((specialFields.idField!=null)&&(specialFields.idField!=\"_id\")) // We need to copy the id to the standard _id field\n {\n val._id=val[specialFields.idField];\n }\n specialFields.dateFields?.forEach(prop => {\n const toConvert = val[prop];\n if (toConvert!=null) {\n let timeEpoch =Date.parse(toConvert);\n if( isNaN(timeEpoch)) {\n // Invalid date try to remove a possible TZ description in []\n const tzDescIndex = toConvert.lastIndexOf('[');\n if (tzDescIndex!=-1) {\n timeEpoch=Date.parse(toConvert.substring(0, tzDescIndex));\n }\n }\n if (isNaN(timeEpoch)) {\n delete val[prop];\n }\n else {\n val[prop]=new Date(timeEpoch);\n\n }\n }\n })\n })\n }*/\n }\n\n /**\n * Sort the array using the defined sort declarations across all properties.\n *\n * @param toSort\n * @param sortOptions\n */\n static multiSortArray<T>(toSort: T[], sortOptions?: XtSortBy): T[] {\n if( sortOptions==null)\n return toSort;\n return toSort;\n }\n\n /**\n * Calculates sum, avg, min or max values per group\n * @param values\n * @param groupBy\n * @param modelMgr\n * @param position\n * @param item\n */\n static calculateGroupedByValues<T>(name: string, values: T[], groupBy: XtGroupBy):DontCodeStoreGroupedByEntities|undefined {\n // We are counting per different value of the groupedBy Item\n if ((groupBy!=null) && (groupBy.display!=null)) {\n let fieldToGroupBy=groupBy.of as keyof T;\n if (groupBy.show!=null) fieldToGroupBy=groupBy.show.valueOf() as keyof T;\n\n const counters=new Map<any,Map<keyof T, Counters>> ();\n let lastGroupDelimiter:any;\n let oneGroupOfCounters=new Map<keyof T, Counters>();\n\n const fieldsRequired = groupBy.getRequiredListOfFields() as Set<keyof T>;\n for (const value of values) {\n if (value[fieldToGroupBy]!=lastGroupDelimiter) { // We change the group\n lastGroupDelimiter=value[fieldToGroupBy];\n const storedGroupOfCounters=counters.get(lastGroupDelimiter);\n if( storedGroupOfCounters==null) {\n oneGroupOfCounters = new Map<keyof T, Counters>();\n counters.set(lastGroupDelimiter, oneGroupOfCounters);\n }else {\n oneGroupOfCounters = storedGroupOfCounters;\n }\n }\n\n for (const field of fieldsRequired) {\n let counter=oneGroupOfCounters?.get(field);\n if( counter==null) {\n counter = new Counters();\n oneGroupOfCounters.set(field, counter);\n }\n\n const valSrc=value[field];\n const val=valSrc;\n if (valSrc!=null) {\n const modelMgr:any=null;\n // If it's an object, we need to set the calculated values as the object itself\n if ((typeof valSrc === 'object') && (!(valSrc instanceof Date)) && (modelMgr!=null)) {\n if( counter.sum==null) counter.sum=structuredClone(valSrc);\n else {\n counter.sum=modelMgr.modifyValues(counter.sum, valSrc, counter.metaData,\n (first: any, second: any) => {\n if ((first!=null) && (second!=null))\n return first + second;\n else if (first == null) {\n return second;\n } else if (second==null) {\n return first;\n }\n }/*,\n position, item*/);\n }\n const value=modelMgr.extractValue(valSrc, counter.metaData/*,position, item*/);\n if( counter.minimum==null) { counter.minimum=valSrc; counter.minAsValue=value}\n else {\n const minValue=counter.minAsValue;\n if ((value!=null) && ((minValue==null) || (value < minValue)) ) { counter.minimum = valSrc; counter.minAsValue=value }\n }\n\n if( counter.maximum==null) { counter.maximum=valSrc; counter.maxAsValue=value;}\n else {\n const maxValue=counter.maxAsValue;\n\n if ((value!=null) && ((maxValue==null) || (value > maxValue)))\n { counter.maximum = valSrc; counter.maxAsValue = value;}\n\n }\n\n if (value!=null) {\n counter.count++;\n }\n\n } else if (typeof val === 'number') {\n if( counter.sum==null) counter.sum=0;\n counter.sum=counter.sum+val;\n if( (counter.minimum==null) || (val < counter.minimum))\n { counter.minimum=valSrc; counter.minAsValue=valSrc as number;}\n if( (counter.maximum==null) || (val > counter.maximum))\n { counter.maximum=valSrc; counter.maxAsValue=valSrc as number;}\n counter.count++;\n } else if ((val instanceof Date) && (!isNaN(val.getTime()))) {\n counter.sum=null;\n if ((counter.minimum==null) || (val.valueOf() < counter.minimum.valueOf())) {\n counter.minimum=valSrc;\n }\n if ((counter.maximum==null) || (val.valueOf() > counter.maximum.valueOf())) {\n counter.maximum=valSrc;\n }\n counter.count++;\n } else { // strings\n counter.count++;\n }\n }\n }\n }\n\n // Now that we have all the counters, let's generate the GroupedFields\n let ret: DontCodeStoreGroupedByEntities|undefined;\n if (counters.size>0) {\n ret = new DontCodeStoreGroupedByEntities(groupBy, new Map<any,DontCodeStoreGroupedByValues[]>);\n for (const groupKey of counters.keys()) {\n const group=counters.get(groupKey)!;\n\n for (const aggregate of Object.values(groupBy.display)) {\n let value;\n const counter = group.get(aggregate.of as keyof T);\n if (counter != null) {\n switch (aggregate.operation) {\n case XtGroupByOperation.Count:\n value = counter.count;\n break;\n case XtGroupByOperation.Sum:\n value = counter.sum;\n break;\n case XtGroupByOperation.Average: {\n const modelMgr:any=null;\n if ((counter.sum==null) || (counter.count==0)) value=null;\n else if ((typeof counter.sum === 'object') && (!(counter.sum instanceof Date)) && (modelMgr!=null)) {\n value = modelMgr.applyValue(structuredClone(counter.sum),\n modelMgr.extractValue(counter.sum, counter.metaData/*, position, item*/)/counter.count,\n counter.metaData, undefined/*, position, item*/);\n } else value = counter.sum / counter.count;\n }\n break;\n case XtGroupByOperation.Minimum:\n value = counter.minimum;\n break;\n case XtGroupByOperation.Maximum:\n value = counter.maximum;\n break;\n }\n let listOfValues= ret.values?.get(groupKey);\n if (listOfValues==null) {\n listOfValues = new Array<DontCodeStoreGroupedByValues>();\n ret.values?.set(groupKey, listOfValues);\n }\n listOfValues.push(new DontCodeStoreGroupedByValues(aggregate, value));\n }\n }\n }\n return ret.values!.size>0?ret:undefined;\n }\n }\n return undefined;\n }\n}\n\n\nexport class DontCodeStorePreparedEntities<T> {\n constructor(public sortedData:T[], public sortInfo?:XtSortBy, public groupedByEntities?:DontCodeStoreGroupedByEntities) {\n }\n}\n\nexport class DontCodeStoreGroupedByEntities {\n constructor(public groupInfo:XtGroupBy, public values?:Map<any,DontCodeStoreGroupedByValues[]>) {\n if (values==null)\n this.values=new Map<any,DontCodeStoreGroupedByValues[]>();\n }\n}\n\nexport class DontCodeStoreGroupedByValues {\n constructor(public forAggregate:XtGroupByAggregate, public value:any) {\n }\n}\n\n","import {\n XtGroupBy,\n XtGroupByAggregate, XtGroupByOperation,\n XtGroupByShow,\n XtSortBy,\n XtSortByDirection\n} from './xt-store-parameters';\n\nexport interface DontCodeReportType {\n title: string;\n for: string;\n groupedBy?: {[key:string]:XtGroupBy};\n sortedBy?: {[key:string]:XtSortBy};\n as?: {[key:string]:DontCodeReportDisplayType};\n}\n\nexport interface DontCodeReportDisplayType {\n type: string;\n of: string;\n by?:string;\n title: string;\n}\n\nexport class XtStoreSortBy implements XtSortBy {\n\n direction: XtSortByDirection;\n\n constructor(public by: string, direction?:XtSortByDirection, public subSort?:XtSortBy) {\n if (direction==null) this.direction=XtSortByDirection.None;\n else this.direction=direction;\n }\n}\n\nexport class XtStoreGroupBy implements XtGroupBy {\n display:{[key:string]:XtStoreGroupByAggregate};\n\n constructor(public of:string, display?:{[key:string]:XtStoreGroupByAggregate}, public show?:XtGroupByShow) {\n if (display==null) this.display={};\n else this.display=display;\n }\n\n public atLeastOneGroupIsRequested (): boolean {\n if( (this.display!=null) && (Object.keys(this.display).length>0))\n return true;\n return false;\n }\n\n getRequiredListOfFields(): Set<string> {\n const ret = new Set<string>();\n if( this.display!=null) {\n for (const aggregate of Object.values(this.display)) {\n ret.add(aggregate.of);\n }\n }\n return ret;\n }\n}\n\nexport class XtStoreGroupByAggregate implements XtGroupByAggregate{\n constructor(public of:string, public operation:XtGroupByOperation) {\n }\n}\n\n","import { XtDataTransformer } from './xt-data-transformer';\nimport { firstValueFrom, map, Observable } from 'rxjs';\nimport { XtGroupBy, XtSortBy, XtStoreCriteria } from '../xt-store-parameters';\nimport {\n DontCodeStoreGroupedByEntities,\n DontCodeStorePreparedEntities,\n XtStoreProviderHelper\n} from './xt-store-provider-helper';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreSortBy } from '../xt-reporting';\nimport { ManagedData } from 'xt-type';\nimport { Injectable } from '@angular/core';\n\n/**\n * The standard interface for any store provider\n */\nexport type XtStoreProvider<T extends ManagedData = ManagedData>= {\n storeEntity( name:string, entity: T): Promise<T>;\n\n /**\n * Rejects the promise if the entity is not found\n * @param name\n * @param key\n */\n safeLoadEntity( name: string, key: any): Promise<T>;\n loadEntity( name: string, key: any): Promise<T|undefined>;\n\n deleteEntity(name:string, key: any): Promise<boolean>;\n\n searchEntities(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>>;\n\n searchAndPrepareEntities(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n transformer?: XtDataTransformer<T>,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>>;\n\n canStoreDocument(): boolean;\n\n /**\n * Upload one document to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocument(\n toStore: File\n ): Promise<UploadedDocumentInfo>;\n\n /**\n * Upload documents to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocuments(\n toStore: File[]\n ): Observable<UploadedDocumentInfo>;\n}\n\nexport abstract class AbstractXtStoreProvider<T extends ManagedData = ManagedData> implements XtStoreProvider<T> {\n abstract canStoreDocument(): boolean;\n\n abstract deleteEntity(name:string, key: any): Promise<boolean>;\n\n abstract loadEntity(name:string, key: any): Promise<T|undefined>;\n\n constructor () {\n }\n\n safeLoadEntity(name: string, key: any): Promise<T> {\n return this.loadEntity(name, key).then(value => {\n if (value==null)\n return Promise.reject(\"Not found\");\n else return value;\n })\n }\n\n /**\n * If the store supports queries with criteria, this function must be implemented, if not, listEntities must be implemented, and this function will apply filters\n * @param position\n * @param criteria\n */\n searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n return this.listEntities(name).pipe(\n map (value => {\n return XtStoreProviderHelper.applyFilters(value, ...criteria) as T[];\n })\n );\n }\n\n /**\n * Returns the list of entities at a given position in the model. Implements at least this function or searchEntities depending on the capability of the store\n * @param position\n * @protected\n */\n protected listEntities (name:string): Observable<T[]> {\n return this.searchEntities(name);\n }\n\n searchAndPrepareEntities(name: string, sort?: XtSortBy, groupBy?: XtGroupBy, transformer?: XtDataTransformer<T>, ...criteria: XtStoreCriteria[]): Observable<DontCodeStorePreparedEntities<T>> {\n return this.searchEntities(name, ...criteria).pipe(\n map (value => {\n // Run the transformation if any\n if (transformer!=null) return transformer.postLoadingTransformation(value);\n else return value;\n }),\n map (value => {\n let groupedByValues:DontCodeStoreGroupedByEntities|undefined;\n if((sort!=null) || (groupBy?.atLeastOneGroupIsRequested()===true)) {\n value = XtStoreProviderHelper.multiSortArray(value, this.calculateSortHierarchy(sort, groupBy)) as T[];\n if (groupBy!=null) {\n groupedByValues = XtStoreProviderHelper.calculateGroupedByValues(name, value, groupBy);\n }\n }\n return new DontCodeStorePreparedEntities<T> (value, sort, groupedByValues);\n })\n );\n }\n\n storeDocument(toStore: File):Promise<UploadedDocumentInfo> {\n return firstValueFrom(this.storeDocuments([toStore]));\n }\n\n abstract storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo>;\n\n abstract storeEntity(position: string, entity: T): Promise<T>;\n\n\n protected calculateSortHierarchy(sort?: XtSortBy, groupBy?: XtGroupBy ):XtSortBy|undefined {\n // We must first sort by the groupBy, and then by the sort\n let rootSort:XtSortBy|undefined;\n if (groupBy!=null) {\n rootSort=new XtStoreSortBy(groupBy.of, undefined, sort);\n } else {\n rootSort=sort;\n }\n return rootSort;\n }\n\n}\n","import {\n entityConfig,\n EntityId,\n EntityMap,\n removeEntity,\n SelectEntityId,\n setEntities,\n setEntity,\n withEntities\n} from '@ngrx/signals/entities';\nimport { patchState, signalStoreFeature, type, withMethods, withProps, withState } from '@ngrx/signals';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { finalize, lastValueFrom, map } from 'rxjs';\nimport { Signal } from '@angular/core';\nimport { ManagedData } from 'xt-type';\n\nconst selectId: SelectEntityId<ManagedData> = (data) => {\n if (data._id==null) throw new Error(\"ManagedData with no entity Id used in the store.\", { cause: data });\n return data._id;\n}\n\nconst xtStoreEntityConfig = entityConfig ({\n entity: type<ManagedData>(),\n selectId:selectId\n});\n\n\nexport type StoreState = {\n entityName: string,\n loading:boolean\n};\n\nexport type XtSignalStore<T> = {\n entityName: Signal<string>;\n loading: Signal<boolean>;\n entityMap: Signal<EntityMap<T>>;\n ids: Signal<EntityId[]>;\n entities: Signal<T[]>;\n\n //listEntities ():Observable<T[]>;\n fetchEntities (): Promise<void>;\n loadEntity (id:string): Promise<T|undefined>;\n safeLoadEntity (id:string): Promise<T>;\n storeEntity (toStore:T):Promise<T>;\n deleteEntity (id:string): Promise<boolean>;\n}\n\nexport function withXtStoreProvider (entityName:string, storeProvider:XtStoreProvider<ManagedData>) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig),\n withProps ( () => ({\n _storeProvider:storeProvider\n })),\n withMethods ((store) => ({\n async storeEntity (toStore:ManagedData): Promise<ManagedData> {\n patchState(store, {loading:true});\n return store._storeProvider.storeEntity(entityName, toStore).then ( (stored)=> {\n patchState(store, setEntity(stored, xtStoreEntityConfig));\n return stored;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n\n fetchEntities (): Promise<void> {\n patchState(store, {loading:true});\n return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n }),finalize(() => {\n patchState(store, {loading:false});\n })));\n },\n\n /* listEntities (): Observable<ManagedData[]> {\n patchState(store, {loading:true});\n return store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n return entities;\n }),finalize(() => {\n patchState(store, {loading:false});\n }));\n },*/\n\n async loadEntity (id:string): Promise<ManagedData|undefined> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, xtStoreEntityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async safeLoadEntity (id:string): Promise<ManagedData> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, xtStoreEntityConfig));\n return loaded;\n }).then((loaded)=> {\n if (loaded==null) throw new Error (\"Entity \"+entityName+\" with id \"+id+\" not found\");\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async deleteEntity (id:string): Promise<boolean> {\n patchState(store, {loading:true});\n return store._storeProvider.deleteEntity(entityName, id).then((result)=> {\n if( result ) {\n patchState(store, removeEntity(id));\n }\n return result;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n }\n }))\n\n);\n}\n","import { Injectable } from '@angular/core';\nimport { signalStore } from '@ngrx/signals';\nimport { ManagedData } from 'xt-type';\nimport { xtStoreManager } from '../store-manager/xt-store-manager';\nimport { withXtStoreProvider, XtSignalStore } from '../store-entity/store-entity-feature';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreManagerService {\n\n protected storeManager = xtStoreManager();\n protected entityToStoreMap = new Map<string, XtSignalStore<ManagedData>>();\n\n constructor() {\n }\n\n getStoreFor(entityName: string): XtSignalStore<ManagedData> {\n let store = this.entityToStoreMap.get(entityName);\n if (store == null) {\n const provider = this.storeManager.getProvider<ManagedData>(entityName);\n if (provider == null) {\n throw new Error('No provider found for entity ' + entityName);\n } else {\n const res = signalStore(\n withXtStoreProvider(entityName, provider)\n );\n store= new res();\n }\n this.entityToStoreMap.set(entityName, store);\n }\n return store;\n }\n\nsetDefaultStoreProvider (provider: XtStoreProvider<ManagedData>) {\n this.storeManager.setDefaultProvider(provider);\n }\n}\n","import { lastValueFrom, Observable, Subscription } from 'rxjs';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { map, mergeAll } from 'rxjs/operators';\nimport { AbstractXtStoreProvider } from '../store-provider/xt-store-provider';\nimport { XtStoreProviderHelper } from '../store-provider/xt-store-provider-helper';\nimport { XtStoreCriteria } from '../xt-store-parameters';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData, nonTemporaryId } from 'xt-type';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\n/**\n * A Store Provider that uses the DontCode API to store / read application data\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class XtApiStoreProvider<T extends ManagedData = ManagedData> extends AbstractXtStoreProvider<T> implements OnDestroy {\n\n protected http: HttpClient = inject (HttpClient, {optional:true}) as any;\n\n apiUrl: string;\n docUrl: string;\n subscriptions = new Subscription();\n\n constructor(http?:HttpClient/* protected configService: CommonConfigService*/) {\n super();\n if (http!=null) {\n this.http=http;\n }\n\n if (this.http==null) {\n throw new Error (\"You must provide an HttpClient, either through constructor or injection.\");\n }\n this.apiUrl = 'https://test.dont-code.net/data';\n this.docUrl = 'https://test.dont-code.net/documents';\n\n /*this.updateConfig (this.configService.getConfig());\n this.subscriptions.add (this.configService.getUpdates ().pipe (map ((updatedConfig) => {\n this.updateConfig (updatedConfig);\n })).subscribe());*/\n\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n/* updateConfig(newConfig: Readonly<CommonLibConfig>) {\n if (newConfig.storeApiUrl!=null)\n this.apiUrl = newConfig.storeApiUrl;\n if (newConfig.documentApiUrl!=null)\n this.docUrl = newConfig.documentApiUrl;\n }*/\n\n storeEntity(name: string, data: T): Promise<T> {\n\n const id=nonTemporaryId(data);\n // Reconverts dates or Ids\n XtStoreProviderHelper.cleanUpDataBeforeSaving([data],name);\n\n if( id != undefined) {\n return lastValueFrom(this.http.put<T>(this.apiUrl+'/'+name+'/'+id, data, {observe:\"body\", responseType:\"json\"}));\n } else {\n return lastValueFrom(this.http.post<T>(this.apiUrl+'/'+name, data, {observe:\"body\", responseType:\"json\"}));\n }\n }\n\n loadEntity(name: string, key: any): Promise<T|undefined> {\n const obs = this.http.get<T>(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"});\n\n return lastValueFrom(obs).then((value) => {\n XtStoreProviderHelper.cleanUpLoadedData([value], name);\n return value;\n });\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return lastValueFrom(this.http.delete(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"})).then(value => {\n return true;\n });\n }\n\n override searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n\n return this.http.get(this.apiUrl+'/'+name, {observe:\"body\", responseType:\"json\"}).pipe(\n map(value => {\n XtStoreProviderHelper.cleanUpLoadedData(value as T [], name);\n return value as T[];\n }),map(value => {\n return XtStoreProviderHelper.applyFilters( value, ...criteria);\n }\n )\n );\n }\n\n canStoreDocument(): boolean {\n return true;\n }\n\n storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const myFormData = new FormData();\n const headers = new HttpHeaders();\n headers.append('Content-Type', 'multipart/form-data');\n headers.append('Accept', 'application/json');\n let count=0;\n // store files details into formdata\n toStore.forEach( file => {\n myFormData.append('document#'+count, file);\n count++;\n });\n //HTTP Angular service, which will send call to Laravel API With headers and myformdata\n return this.http.post<UploadedDocumentInfo[]>(this.docUrl, myFormData, { headers: headers }).pipe(\n mergeAll ()\n );\n }\n\n}\n","import { AbstractXtStoreProvider } from './xt-store-provider';\nimport { from, Observable, of, Subject, throwError } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData } from 'xt-type';\n\nexport class XtMemoryStoreProvider<T extends ManagedData> extends AbstractXtStoreProvider<T> {\n protected storage=new Map<string, Map<string, T>>();\n\n /**\n * It supports storing documents in memory only, then use with care !\n */\n override canStoreDocument(): boolean {\n return true;\n }\n\n getSafeStore (name:string):Map<string,T> {\n let ret = this.storage.get(name);\n if (ret==null) {\n ret = new Map<string, T>();\n this.storage.set(name, ret);\n }\n return ret;\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.delete(key));\n }\n\n loadEntity(name: string, key: any): Promise<T | undefined> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.get(key));\n }\n\n override listEntities(name: string): Observable<T[]> {\n const store = this.getSafeStore (name);\n //console.debug(\"Listing entities for \"+name+\" with \",store);\n return of (Array.from(store.values()));\n }\n\n storeEntity(name: string, entity: T): Promise<T> {\n const store = this.getSafeStore (name);\n if (entity._id==null) {\n entity._id = Math\n .random().toString(36).substring(2, 8);\n }\n store.set(entity._id, entity);\n return Promise.resolve(entity);\n }\n\n override storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const toSend = new Array<UploadedDocumentInfo>();\n for (const file of toStore) {\n const ret: UploadedDocumentInfo = { documentName:file.name, documentId: URL.createObjectURL(file), isUrl: true };\n toSend.push(ret);\n }\n return from(toSend)\n }\n\n}\n","import { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtMemoryStoreProvider } from '../store-provider/xt-memory-store-provider';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n\nexport class StoreTestBed {\n readonly storeManager = new XtStoreManager();\n\n public ensureMemoryProviderOnly () {\n XtStoreManager.setTestMode(new XtMemoryStoreProvider<ManagedData>());\n }\n\n public async defineTestDataFor (entityName:string, testData:ManagedData[]): Promise<void> {\n for (const testEntity of testData) {\n await this.storeManager.storeEntity(entityName, testEntity);\n }\n }\n\n public getStoreManager () {\n return this.storeManager;\n }\n\n public getStoreProviderFor (entityName:string):XtStoreProvider {\n return this.storeManager.getProviderSafe(entityName);\n }\n}\n","/*\n * Public API Surface of store\n */\n\nexport * from './store-manager/xt-store-manager';\nexport * from './store-provider/xt-store-provider';\nexport * from './store-provider/xt-store-provider-helper';\nexport * from './store-manager-service/store-manager.service';\n\nexport * from './store-entity/store-entity-feature';\n\nexport * from './api-provider/xt-api-store-provider';\nexport * from './store-provider/xt-memory-store-provider';\n\nexport * from './xt-store-parameters';\nexport * from './xt-document';\nexport * from './xt-reporting';\n\nexport * from './test/store-test-bed';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"xt-store.mjs","sources":["../../../projects/store/src/store-manager/xt-store-manager.ts","../../../projects/store/src/xt-store-parameters.ts","../../../projects/store/src/store-provider/xt-store-provider-helper.ts","../../../projects/store/src/xt-reporting.ts","../../../projects/store/src/store-provider/xt-store-provider.ts","../../../projects/store/src/store-entity/store-entity-feature.ts","../../../projects/store/src/store-manager-service/store-manager.service.ts","../../../projects/store/src/api-provider/xt-api-store-provider.ts","../../../projects/store/src/store-provider/xt-memory-store-provider.ts","../../../projects/store/src/test/store-test-bed.ts","../../../projects/store/src/public-api.ts","../../../projects/store/src/xt-store.ts"],"sourcesContent":["import { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { Observable } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreCriteria, XtGroupBy, XtSortBy } from '../xt-store-parameters';\nimport { DontCodeStorePreparedEntities } from '../store-provider/xt-store-provider-helper';\nimport { XtDataTransformer } from '../store-provider/xt-data-transformer';\nimport { ManagedData } from 'xt-type';\n\nexport class XtStoreManager {\n private _default?: XtStoreProvider<any>;\n private providerByPosition = new Map<string, XtStoreProvider<any>>();\n private providerByType = new Map<string, XtStoreProvider<any>>();\n\n protected static testProvider:XtStoreProvider<any>|null = null;\n\n constructor(\n provider?: XtStoreProvider<any>\n ) {\n this._default = provider;\n this.reset();\n }\n\n reset() {\n this.providerByPosition.clear();\n this.providerByType.clear();\n }\n\n getProvider<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> | undefined {\n // Override for testing\n if( XtStoreManager.testProvider!=null) return XtStoreManager.testProvider;\n\n if (name == null) {\n return this._default;\n } else {\n let ret = null;\n // Try to find if the entity is loaded from a defined source\n /*const srcDefinition = this.modelMgr.findTargetOfProperty(\n DontCodeModel.APP_ENTITIES_FROM_NODE,\n position\n )?.value as DontCodeSourceType;\n if (srcDefinition) {\n ret = this.providerByType.get(srcDefinition.type);\n }\n if (!ret) {*/\n ret = this.providerByPosition.get(name);\n //}\n return ret ?? this._default;\n }\n }\n\n getProviderSafe<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> {\n const ret = this.getProvider<T>(name);\n if (ret == null) {\n throw new Error('Trying to get an undefined or null provider');\n } else {\n return ret;\n }\n }\n\n getDefaultProvider<T extends ManagedData = ManagedData>(): XtStoreProvider<T> | undefined {\n return this.getProvider();\n }\n\n getDefaultProviderSafe<T extends ManagedData = ManagedData>(): XtStoreProvider<T> {\n return this.getProviderSafe();\n }\n\n setProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>, name?: string): void {\n if (name == null) this._default = value;\n else {\n this.providerByPosition.set(name, value);\n }\n }\n\n setProviderForSourceType<T extends ManagedData = ManagedData>(\n value: XtStoreProvider<T>,\n srcType: string\n ): void {\n this.providerByType.set(srcType, value);\n }\n\n setDefaultProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>): void {\n this.setProvider(value);\n }\n\n removeProvider(name?: string): void {\n if (name == null) this._default = undefined;\n else {\n this.providerByPosition.delete(name);\n }\n }\n\n removeProviderForSourceType(srcType: string): void {\n this.providerByType.delete(srcType);\n }\n\n removeDefaultProvider(): void {\n this.removeProvider();\n }\n\n storeEntity<T extends ManagedData = ManagedData>(name: string, entity: T): Promise<T> {\n return this.getProviderSafe<T>(name).storeEntity(name, entity);\n }\n\n loadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T|undefined> {\n return this.getProviderSafe<T>(name).loadEntity(name, key);\n }\n\n safeLoadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T> {\n return this.getProviderSafe<T>(name).safeLoadEntity(name, key);\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return this.getProviderSafe(name).deleteEntity(name, key);\n }\n\n searchEntities<T extends ManagedData = ManagedData>(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>> {\n return this.getProviderSafe<T>(name).searchEntities(name, ...criteria);\n }\n\n searchAndPrepareEntities<T extends ManagedData = ManagedData>(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n dataTransformer?:XtDataTransformer,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>> {\n return this.getProviderSafe<T>(name).searchAndPrepareEntities(name, sort, groupBy, dataTransformer, ...criteria);\n }\n\n\n canStoreDocument(name?: string): boolean {\n const res = this.getProvider(name)?.canStoreDocument();\n if (res) return res;\n else return false;\n }\n\n storeDocuments(\n toStore: File[],\n name?: string\n ): Observable<UploadedDocumentInfo> {\n return this.getProviderSafe(name).storeDocuments(toStore);\n }\n\n public static setTestMode (testProvider:XtStoreProvider<any>) {\n this.testProvider=testProvider;\n }\n\n}\n\n/**\n * The global store Mgr\n */\n\ndeclare global {\n var XT_STORE_MGR: XtStoreManager;\n var xtStoreManager: () => XtStoreManager;\n}\nexport function xtStoreManager (): XtStoreManager {\n return globalThis.XT_STORE_MGR;\n}\n\nglobalThis.XT_STORE_MGR = new XtStoreManager();\nglobalThis.xtStoreManager = xtStoreManager;\n","\nexport enum XtStoreCriteriaOperator {\n EQUALS = '=',\n LESS_THAN = '<',\n LESS_THAN_EQUAL = '<=',\n}\n\nexport class XtStoreCriteria {\n name: string;\n value: any;\n operator: XtStoreCriteriaOperator;\n\n constructor(\n name: string,\n value: any,\n operator?: XtStoreCriteriaOperator\n ) {\n this.name = name;\n this.value = value;\n if (!operator) this.operator = XtStoreCriteriaOperator.EQUALS;\n else {\n this.operator = operator;\n }\n }\n}\n\nexport type XtSortBy ={\n by:string,\n direction: XtSortByDirection\n}\n\nexport enum XtSortByDirection {\n None = \"None\",\n Ascending = \"Ascending\",\n Descending = \"Descending\"\n}\n\nexport enum XtGroupByShow {\n OnlyLowest=\"OnlyLowest\",\n OnlyHighest=\"OnlyHighest\"\n}\n\nexport enum XtGroupByOperation {\n Count= \"Count\",\n Sum=\"Sum\",\n Average=\"Average\",\n Minimum=\"Minimum\",\n Maximum=\"Maximum\"\n}\n\nexport type XtGroupBy= {\n of: string,\n display:{[key:string]:XtGroupByAggregate};\n show?:XtGroupByShow,\n label?:string\n\n atLeastOneGroupIsRequested (): boolean;\n getRequiredListOfFields(): Set<string>;\n}\n\nexport type XtGroupByAggregate = {\n operation: XtGroupByOperation;\n of:string,\n label?:string\n}\n\n\n","import { Counters, ManagedData, XtTypeHandler, xtTypeManager } from 'xt-type';\nimport {\n XtGroupBy,\n XtGroupByAggregate,\n XtGroupByOperation,\n XtSortBy,\n XtStoreCriteria,\n XtStoreCriteriaOperator\n} from '../xt-store-parameters';\n\n/**\n * Helps handle metadata information about loaded items\n */\nexport class XtStoreProviderHelper {\n\n protected static typeManager = xtTypeManager();\n /**\n * In case the provider source doesn't support search criteria, they can be applied here\n * @param list\n * @param criteria\n */\n public static applyFilters<T> (list:Array<T>, ...criteria: XtStoreCriteria[]): Array<T> {\n if ((criteria==null)||(criteria.length==0)) return list;\n return list.filter(element => {\n for (const criterium of criteria) {\n const toTest = element[criterium.name as keyof T];\n switch (criterium.operator) {\n case XtStoreCriteriaOperator.EQUALS:\n return criterium.value==toTest;\n case XtStoreCriteriaOperator.LESS_THAN:\n return toTest < criterium.value;\n case XtStoreCriteriaOperator.LESS_THAN_EQUAL:\n return toTest <= criterium.value;\n default:\n throw new Error (\"Operator \"+criterium.operator+\" unknown\");\n }\n }\n return true;\n });\n return list;\n }\n\n /** Returns any field who is a date, in order to convert it from json. Keep the result in a cache map\n *\n * @param typeName\n * @param typeResolver\n * @protected\n */\n public static findTypeHandler (typeName:string, subName?:string, value?:ManagedData): { typeName?:string | null, handler?:XtTypeHandler<any>} {\n return XtStoreProviderHelper.typeManager?.findTypeHandler(typeName, subName, value);\n }\n\n /**\n * Ensure _id is removed if necessary before saving the element\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpDataBeforeSaving (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler\n (typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined)\n .handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.toJson(toConvert)\n }\n }\n/* if ((specialFields?.idField!=null)&&(specialFields?.idField!='_id')) {\n listToConvert.forEach(value => {\n delete value._id;\n })\n }*/\n }\n\n /**\n * Converts dates and dateTimes properties of each element of the array to Typescript format\n * Ensure _id is set with the right id\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpLoadedData (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler(typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined).handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.fromJson(toConvert)\n }\n }\n /*\n if( specialFields.idField==null) {\n XtSpecialFieldsHelper.findSpecialFieldsFromData (listToConvert, specialFields);\n }\n listToConvert.forEach((val)=> {\n if ((specialFields.idField!=null)&&(specialFields.idField!=\"_id\")) // We need to copy the id to the standard _id field\n {\n val._id=val[specialFields.idField];\n }\n specialFields.dateFields?.forEach(prop => {\n const toConvert = val[prop];\n if (toConvert!=null) {\n let timeEpoch =Date.parse(toConvert);\n if( isNaN(timeEpoch)) {\n // Invalid date try to remove a possible TZ description in []\n const tzDescIndex = toConvert.lastIndexOf('[');\n if (tzDescIndex!=-1) {\n timeEpoch=Date.parse(toConvert.substring(0, tzDescIndex));\n }\n }\n if (isNaN(timeEpoch)) {\n delete val[prop];\n }\n else {\n val[prop]=new Date(timeEpoch);\n\n }\n }\n })\n })\n }*/\n }\n\n /**\n * Sort the array using the defined sort declarations across all properties.\n *\n * @param toSort\n * @param sortOptions\n */\n static multiSortArray<T>(toSort: T[], sortOptions?: XtSortBy): T[] {\n if( sortOptions==null)\n return toSort;\n return toSort;\n }\n\n /**\n * Calculates sum, avg, min or max values per group\n * @param values\n * @param groupBy\n * @param modelMgr\n * @param position\n * @param item\n */\n static calculateGroupedByValues<T>(name: string, values: T[], groupBy: XtGroupBy):DontCodeStoreGroupedByEntities|undefined {\n // We are counting per different value of the groupedBy Item\n if ((groupBy!=null) && (groupBy.display!=null)) {\n let fieldToGroupBy=groupBy.of as keyof T;\n if (groupBy.show!=null) fieldToGroupBy=groupBy.show.valueOf() as keyof T;\n\n const counters=new Map<any,Map<keyof T, Counters>> ();\n let lastGroupDelimiter:any;\n let oneGroupOfCounters=new Map<keyof T, Counters>();\n\n const fieldsRequired = groupBy.getRequiredListOfFields() as Set<keyof T>;\n for (const value of values) {\n if (value[fieldToGroupBy]!=lastGroupDelimiter) { // We change the group\n lastGroupDelimiter=value[fieldToGroupBy];\n const storedGroupOfCounters=counters.get(lastGroupDelimiter);\n if( storedGroupOfCounters==null) {\n oneGroupOfCounters = new Map<keyof T, Counters>();\n counters.set(lastGroupDelimiter, oneGroupOfCounters);\n }else {\n oneGroupOfCounters = storedGroupOfCounters;\n }\n }\n\n for (const field of fieldsRequired) {\n let counter=oneGroupOfCounters?.get(field);\n if( counter==null) {\n counter = new Counters();\n oneGroupOfCounters.set(field, counter);\n }\n\n const valSrc=value[field];\n const val=valSrc;\n if (valSrc!=null) {\n const modelMgr:any=null;\n // If it's an object, we need to set the calculated values as the object itself\n if ((typeof valSrc === 'object') && (!(valSrc instanceof Date)) && (modelMgr!=null)) {\n if( counter.sum==null) counter.sum=structuredClone(valSrc);\n else {\n counter.sum=modelMgr.modifyValues(counter.sum, valSrc, counter.metaData,\n (first: any, second: any) => {\n if ((first!=null) && (second!=null))\n return first + second;\n else if (first == null) {\n return second;\n } else if (second==null) {\n return first;\n }\n }/*,\n position, item*/);\n }\n const value=modelMgr.extractValue(valSrc, counter.metaData/*,position, item*/);\n if( counter.minimum==null) { counter.minimum=valSrc; counter.minAsValue=value}\n else {\n const minValue=counter.minAsValue;\n if ((value!=null) && ((minValue==null) || (value < minValue)) ) { counter.minimum = valSrc; counter.minAsValue=value }\n }\n\n if( counter.maximum==null) { counter.maximum=valSrc; counter.maxAsValue=value;}\n else {\n const maxValue=counter.maxAsValue;\n\n if ((value!=null) && ((maxValue==null) || (value > maxValue)))\n { counter.maximum = valSrc; counter.maxAsValue = value;}\n\n }\n\n if (value!=null) {\n counter.count++;\n }\n\n } else if (typeof val === 'number') {\n if( counter.sum==null) counter.sum=0;\n counter.sum=counter.sum+val;\n if( (counter.minimum==null) || (val < counter.minimum))\n { counter.minimum=valSrc; counter.minAsValue=valSrc as number;}\n if( (counter.maximum==null) || (val > counter.maximum))\n { counter.maximum=valSrc; counter.maxAsValue=valSrc as number;}\n counter.count++;\n } else if ((val instanceof Date) && (!isNaN(val.getTime()))) {\n counter.sum=null;\n if ((counter.minimum==null) || (val.valueOf() < counter.minimum.valueOf())) {\n counter.minimum=valSrc;\n }\n if ((counter.maximum==null) || (val.valueOf() > counter.maximum.valueOf())) {\n counter.maximum=valSrc;\n }\n counter.count++;\n } else { // strings\n counter.count++;\n }\n }\n }\n }\n\n // Now that we have all the counters, let's generate the GroupedFields\n let ret: DontCodeStoreGroupedByEntities|undefined;\n if (counters.size>0) {\n ret = new DontCodeStoreGroupedByEntities(groupBy, new Map<any,DontCodeStoreGroupedByValues[]>);\n for (const groupKey of counters.keys()) {\n const group=counters.get(groupKey)!;\n\n for (const aggregate of Object.values(groupBy.display)) {\n let value;\n const counter = group.get(aggregate.of as keyof T);\n if (counter != null) {\n switch (aggregate.operation) {\n case XtGroupByOperation.Count:\n value = counter.count;\n break;\n case XtGroupByOperation.Sum:\n value = counter.sum;\n break;\n case XtGroupByOperation.Average: {\n const modelMgr:any=null;\n if ((counter.sum==null) || (counter.count==0)) value=null;\n else if ((typeof counter.sum === 'object') && (!(counter.sum instanceof Date)) && (modelMgr!=null)) {\n value = modelMgr.applyValue(structuredClone(counter.sum),\n modelMgr.extractValue(counter.sum, counter.metaData/*, position, item*/)/counter.count,\n counter.metaData, undefined/*, position, item*/);\n } else value = counter.sum / counter.count;\n }\n break;\n case XtGroupByOperation.Minimum:\n value = counter.minimum;\n break;\n case XtGroupByOperation.Maximum:\n value = counter.maximum;\n break;\n }\n let listOfValues= ret.values?.get(groupKey);\n if (listOfValues==null) {\n listOfValues = new Array<DontCodeStoreGroupedByValues>();\n ret.values?.set(groupKey, listOfValues);\n }\n listOfValues.push(new DontCodeStoreGroupedByValues(aggregate, value));\n }\n }\n }\n return ret.values!.size>0?ret:undefined;\n }\n }\n return undefined;\n }\n}\n\n\nexport class DontCodeStorePreparedEntities<T> {\n constructor(public sortedData:T[], public sortInfo?:XtSortBy, public groupedByEntities?:DontCodeStoreGroupedByEntities) {\n }\n}\n\nexport class DontCodeStoreGroupedByEntities {\n constructor(public groupInfo:XtGroupBy, public values?:Map<any,DontCodeStoreGroupedByValues[]>) {\n if (values==null)\n this.values=new Map<any,DontCodeStoreGroupedByValues[]>();\n }\n}\n\nexport class DontCodeStoreGroupedByValues {\n constructor(public forAggregate:XtGroupByAggregate, public value:any) {\n }\n}\n\n","import {\n XtGroupBy,\n XtGroupByAggregate, XtGroupByOperation,\n XtGroupByShow,\n XtSortBy,\n XtSortByDirection\n} from './xt-store-parameters';\n\nexport interface DontCodeReportType {\n title: string;\n for: string;\n groupedBy?: {[key:string]:XtGroupBy};\n sortedBy?: {[key:string]:XtSortBy};\n as?: {[key:string]:DontCodeReportDisplayType};\n}\n\nexport interface DontCodeReportDisplayType {\n type: string;\n of: string;\n by?:string;\n title: string;\n}\n\nexport class XtStoreSortBy implements XtSortBy {\n\n direction: XtSortByDirection;\n\n constructor(public by: string, direction?:XtSortByDirection, public subSort?:XtSortBy) {\n if (direction==null) this.direction=XtSortByDirection.None;\n else this.direction=direction;\n }\n}\n\nexport class XtStoreGroupBy implements XtGroupBy {\n display:{[key:string]:XtStoreGroupByAggregate};\n\n constructor(public of:string, display?:{[key:string]:XtStoreGroupByAggregate}, public show?:XtGroupByShow) {\n if (display==null) this.display={};\n else this.display=display;\n }\n\n public atLeastOneGroupIsRequested (): boolean {\n if( (this.display!=null) && (Object.keys(this.display).length>0))\n return true;\n return false;\n }\n\n getRequiredListOfFields(): Set<string> {\n const ret = new Set<string>();\n if( this.display!=null) {\n for (const aggregate of Object.values(this.display)) {\n ret.add(aggregate.of);\n }\n }\n return ret;\n }\n}\n\nexport class XtStoreGroupByAggregate implements XtGroupByAggregate{\n constructor(public of:string, public operation:XtGroupByOperation) {\n }\n}\n\n","import { XtDataTransformer } from './xt-data-transformer';\nimport { firstValueFrom, map, Observable } from 'rxjs';\nimport { XtGroupBy, XtSortBy, XtStoreCriteria } from '../xt-store-parameters';\nimport {\n DontCodeStoreGroupedByEntities,\n DontCodeStorePreparedEntities,\n XtStoreProviderHelper\n} from './xt-store-provider-helper';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreSortBy } from '../xt-reporting';\nimport { ManagedData } from 'xt-type';\nimport { Injectable } from '@angular/core';\n\n/**\n * The standard interface for any store provider\n */\nexport type XtStoreProvider<T extends ManagedData = ManagedData>= {\n storeEntity( name:string, entity: T): Promise<T>;\n\n /**\n * Rejects the promise if the entity is not found\n * @param name\n * @param key\n */\n safeLoadEntity( name: string, key: any): Promise<T>;\n loadEntity( name: string, key: any): Promise<T|undefined>;\n\n deleteEntity(name:string, key: any): Promise<boolean>;\n\n searchEntities(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>>;\n\n searchAndPrepareEntities(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n transformer?: XtDataTransformer<T>,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>>;\n\n canStoreDocument(): boolean;\n\n /**\n * Upload one document to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocument(\n toStore: File\n ): Promise<UploadedDocumentInfo>;\n\n /**\n * Upload documents to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocuments(\n toStore: File[]\n ): Observable<UploadedDocumentInfo>;\n}\n\nexport abstract class AbstractXtStoreProvider<T extends ManagedData = ManagedData> implements XtStoreProvider<T> {\n abstract canStoreDocument(): boolean;\n\n abstract deleteEntity(name:string, key: any): Promise<boolean>;\n\n abstract loadEntity(name:string, key: any): Promise<T|undefined>;\n\n constructor () {\n }\n\n safeLoadEntity(name: string, key: any): Promise<T> {\n return this.loadEntity(name, key).then(value => {\n if (value==null)\n return Promise.reject(\"Not found\");\n else return value;\n })\n }\n\n /**\n * If the store supports queries with criteria, this function must be implemented, if not, listEntities must be implemented, and this function will apply filters\n * @param position\n * @param criteria\n */\n searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n return this.listEntities(name).pipe(\n map (value => {\n return XtStoreProviderHelper.applyFilters(value, ...criteria) as T[];\n })\n );\n }\n\n /**\n * Returns the list of entities at a given position in the model. Implements at least this function or searchEntities depending on the capability of the store\n * @param position\n * @protected\n */\n protected listEntities (name:string): Observable<T[]> {\n return this.searchEntities(name);\n }\n\n searchAndPrepareEntities(name: string, sort?: XtSortBy, groupBy?: XtGroupBy, transformer?: XtDataTransformer<T>, ...criteria: XtStoreCriteria[]): Observable<DontCodeStorePreparedEntities<T>> {\n return this.searchEntities(name, ...criteria).pipe(\n map (value => {\n // Run the transformation if any\n if (transformer!=null) return transformer.postLoadingTransformation(value);\n else return value;\n }),\n map (value => {\n let groupedByValues:DontCodeStoreGroupedByEntities|undefined;\n if((sort!=null) || (groupBy?.atLeastOneGroupIsRequested()===true)) {\n value = XtStoreProviderHelper.multiSortArray(value, this.calculateSortHierarchy(sort, groupBy)) as T[];\n if (groupBy!=null) {\n groupedByValues = XtStoreProviderHelper.calculateGroupedByValues(name, value, groupBy);\n }\n }\n return new DontCodeStorePreparedEntities<T> (value, sort, groupedByValues);\n })\n );\n }\n\n storeDocument(toStore: File):Promise<UploadedDocumentInfo> {\n return firstValueFrom(this.storeDocuments([toStore]));\n }\n\n abstract storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo>;\n\n abstract storeEntity(position: string, entity: T): Promise<T>;\n\n\n protected calculateSortHierarchy(sort?: XtSortBy, groupBy?: XtGroupBy ):XtSortBy|undefined {\n // We must first sort by the groupBy, and then by the sort\n let rootSort:XtSortBy|undefined;\n if (groupBy!=null) {\n rootSort=new XtStoreSortBy(groupBy.of, undefined, sort);\n } else {\n rootSort=sort;\n }\n return rootSort;\n }\n\n}\n","import {\n entityConfig,\n EntityId,\n EntityMap,\n removeEntity,\n SelectEntityId,\n setEntities,\n setEntity,\n withEntities\n} from '@ngrx/signals/entities';\nimport { patchState, signalStoreFeature, type, withMethods, withProps, withState } from '@ngrx/signals';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { finalize, lastValueFrom, map } from 'rxjs';\nimport { Signal } from '@angular/core';\nimport { ManagedData } from 'xt-type';\n\nconst selectId: SelectEntityId<ManagedData> = (data) => {\n if (data._id==null) throw new Error(\"ManagedData with no entity Id used in the store.\", { cause: data });\n return data._id;\n}\n\nconst xtStoreEntityConfig = entityConfig ({\n entity: type<ManagedData>(),\n selectId:selectId\n});\n\n\nexport type StoreState = {\n entityName: string,\n loading:boolean\n};\n\nexport type XtSignalStore<T> = {\n entityName: Signal<string>;\n loading: Signal<boolean>;\n entityMap: Signal<EntityMap<T>>;\n ids: Signal<EntityId[]>;\n entities: Signal<T[]>;\n\n //listEntities ():Observable<T[]>;\n fetchEntities (): Promise<void>;\n loadEntity (id:string): Promise<T|undefined>;\n safeLoadEntity (id:string): Promise<T>;\n storeEntity (toStore:T):Promise<T>;\n deleteEntity (id:string): Promise<boolean>;\n}\n\nexport function withXtStoreProvider (entityName:string, storeProvider:XtStoreProvider<ManagedData>) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig),\n withProps ( () => ({\n _storeProvider:storeProvider\n })),\n withMethods ((store) => ({\n async storeEntity (toStore:ManagedData): Promise<ManagedData> {\n patchState(store, {loading:true});\n return store._storeProvider.storeEntity(entityName, toStore).then ( (stored)=> {\n patchState(store, setEntity(stored, xtStoreEntityConfig));\n return stored;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n\n fetchEntities (): Promise<void> {\n patchState(store, {loading:true});\n return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n }),finalize(() => {\n patchState(store, {loading:false});\n })));\n },\n\n /* listEntities (): Observable<ManagedData[]> {\n patchState(store, {loading:true});\n return store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n return entities;\n }),finalize(() => {\n patchState(store, {loading:false});\n }));\n },*/\n\n async loadEntity (id:string): Promise<ManagedData|undefined> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, xtStoreEntityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async safeLoadEntity (id:string): Promise<ManagedData> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, xtStoreEntityConfig));\n return loaded;\n }).then((loaded)=> {\n if (loaded==null) throw new Error (\"Entity \"+entityName+\" with id \"+id+\" not found\");\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async deleteEntity (id:string): Promise<boolean> {\n patchState(store, {loading:true});\n return store._storeProvider.deleteEntity(entityName, id).then((result)=> {\n if( result ) {\n patchState(store, removeEntity(id));\n }\n return result;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n }\n }))\n\n);\n}\n","import { Injectable } from '@angular/core';\nimport { signalStore } from '@ngrx/signals';\nimport { ManagedData } from 'xt-type';\nimport { xtStoreManager } from '../store-manager/xt-store-manager';\nimport { withXtStoreProvider, XtSignalStore } from '../store-entity/store-entity-feature';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StoreManagerService {\n\n protected storeManager = xtStoreManager();\n protected entityToStoreMap = new Map<string, XtSignalStore<ManagedData>>();\n\n constructor() {\n }\n\n getStoreFor(entityName: string): XtSignalStore<ManagedData> {\n let store = this.entityToStoreMap.get(entityName);\n if (store == null) {\n const provider = this.storeManager.getProvider<ManagedData>(entityName);\n if (provider == null) {\n throw new Error('No provider found for entity ' + entityName);\n } else {\n const res = signalStore(\n withXtStoreProvider(entityName, provider)\n );\n store= new res();\n }\n this.entityToStoreMap.set(entityName, store);\n }\n return store;\n }\n\nsetDefaultStoreProvider (provider: XtStoreProvider<ManagedData>) {\n this.storeManager.setDefaultProvider(provider);\n }\n}\n","import { lastValueFrom, Observable, Subscription } from 'rxjs';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { map, mergeAll } from 'rxjs/operators';\nimport { AbstractXtStoreProvider } from '../store-provider/xt-store-provider';\nimport { XtStoreProviderHelper } from '../store-provider/xt-store-provider-helper';\nimport { XtStoreCriteria } from '../xt-store-parameters';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData, nonTemporaryId } from 'xt-type';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\n/**\n * A Store Provider that uses the DontCode API to store / read application data\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class XtApiStoreProvider<T extends ManagedData = ManagedData> extends AbstractXtStoreProvider<T> implements OnDestroy {\n\n protected http: HttpClient = inject (HttpClient, {optional:true}) as any;\n\n apiUrl: string;\n docUrl: string;\n subscriptions = new Subscription();\n\n constructor(http?:HttpClient/* protected configService: CommonConfigService*/) {\n super();\n if (http!=null) {\n this.http=http;\n }\n\n if (this.http==null) {\n throw new Error (\"You must provide an HttpClient, either through constructor or injection.\");\n }\n this.apiUrl = 'https://test.dont-code.net/data';\n this.docUrl = 'https://test.dont-code.net/documents';\n\n /*this.updateConfig (this.configService.getConfig());\n this.subscriptions.add (this.configService.getUpdates ().pipe (map ((updatedConfig) => {\n this.updateConfig (updatedConfig);\n })).subscribe());*/\n\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n/* updateConfig(newConfig: Readonly<CommonLibConfig>) {\n if (newConfig.storeApiUrl!=null)\n this.apiUrl = newConfig.storeApiUrl;\n if (newConfig.documentApiUrl!=null)\n this.docUrl = newConfig.documentApiUrl;\n }*/\n\n storeEntity(name: string, data: T): Promise<T> {\n\n const id=nonTemporaryId(data);\n // Reconverts dates or Ids\n XtStoreProviderHelper.cleanUpDataBeforeSaving([data],name);\n\n if( id != undefined) {\n return lastValueFrom(this.http.put<T>(this.apiUrl+'/'+name+'/'+id, data, {observe:\"body\", responseType:\"json\"})).then((ret)=> {\n XtStoreProviderHelper.cleanUpLoadedData([ret], name);\n return ret;\n });\n } else {\n return lastValueFrom(this.http.post<T>(this.apiUrl+'/'+name, data, {observe:\"body\", responseType:\"json\"})).then((ret)=> {\n XtStoreProviderHelper.cleanUpLoadedData([ret], name);\n return ret;\n });\n }\n }\n\n loadEntity(name: string, key: any): Promise<T|undefined> {\n const obs = this.http.get<T>(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"});\n\n return lastValueFrom(obs).then((value) => {\n XtStoreProviderHelper.cleanUpLoadedData([value], name);\n return value;\n });\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return lastValueFrom(this.http.delete(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"})).then(value => {\n return true;\n });\n }\n\n override searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n\n return this.http.get(this.apiUrl+'/'+name, {observe:\"body\", responseType:\"json\"}).pipe(\n map(value => {\n XtStoreProviderHelper.cleanUpLoadedData(value as T [], name);\n return value as T[];\n }),map(value => {\n return XtStoreProviderHelper.applyFilters( value, ...criteria);\n }\n )\n );\n }\n\n canStoreDocument(): boolean {\n return true;\n }\n\n storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const myFormData = new FormData();\n const headers = new HttpHeaders();\n headers.append('Content-Type', 'multipart/form-data');\n headers.append('Accept', 'application/json');\n let count=0;\n // store files details into formdata\n toStore.forEach( file => {\n myFormData.append('document#'+count, file);\n count++;\n });\n //HTTP Angular service, which will send call to Laravel API With headers and myformdata\n return this.http.post<UploadedDocumentInfo[]>(this.docUrl, myFormData, { headers: headers }).pipe(\n mergeAll ()\n );\n }\n\n}\n","import { AbstractXtStoreProvider } from './xt-store-provider';\nimport { from, Observable, of, Subject, throwError } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData } from 'xt-type';\n\nexport class XtMemoryStoreProvider<T extends ManagedData> extends AbstractXtStoreProvider<T> {\n protected storage=new Map<string, Map<string, T>>();\n\n /**\n * It supports storing documents in memory only, then use with care !\n */\n override canStoreDocument(): boolean {\n return true;\n }\n\n getSafeStore (name:string):Map<string,T> {\n let ret = this.storage.get(name);\n if (ret==null) {\n ret = new Map<string, T>();\n this.storage.set(name, ret);\n }\n return ret;\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.delete(key));\n }\n\n loadEntity(name: string, key: any): Promise<T | undefined> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.get(key));\n }\n\n override listEntities(name: string): Observable<T[]> {\n const store = this.getSafeStore (name);\n //console.debug(\"Listing entities for \"+name+\" with \",store);\n return of (Array.from(store.values()));\n }\n\n storeEntity(name: string, entity: T): Promise<T> {\n const store = this.getSafeStore (name);\n if (entity._id==null) {\n entity._id = Math\n .random().toString(36).substring(2, 8);\n }\n store.set(entity._id, entity);\n return Promise.resolve(entity);\n }\n\n override storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const toSend = new Array<UploadedDocumentInfo>();\n for (const file of toStore) {\n const ret: UploadedDocumentInfo = { documentName:file.name, documentId: URL.createObjectURL(file), isUrl: true };\n toSend.push(ret);\n }\n return from(toSend)\n }\n\n}\n","import { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtMemoryStoreProvider } from '../store-provider/xt-memory-store-provider';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n\nexport class StoreTestBed {\n readonly storeManager = new XtStoreManager();\n\n public ensureMemoryProviderOnly () {\n XtStoreManager.setTestMode(new XtMemoryStoreProvider<ManagedData>());\n }\n\n public async defineTestDataFor (entityName:string, testData:ManagedData[]): Promise<void> {\n for (const testEntity of testData) {\n await this.storeManager.storeEntity(entityName, testEntity);\n }\n }\n\n public getStoreManager () {\n return this.storeManager;\n }\n\n public getStoreProviderFor (entityName:string):XtStoreProvider {\n return this.storeManager.getProviderSafe(entityName);\n }\n}\n","/*\n * Public API Surface of store\n */\n\nexport * from './store-manager/xt-store-manager';\nexport * from './store-provider/xt-store-provider';\nexport * from './store-provider/xt-store-provider-helper';\nexport * from './store-manager-service/store-manager.service';\n\nexport * from './store-entity/store-entity-feature';\n\nexport * from './api-provider/xt-api-store-provider';\nexport * from './store-provider/xt-memory-store-provider';\n\nexport * from './xt-store-parameters';\nexport * from './xt-document';\nexport * from './xt-reporting';\n\nexport * from './test/store-test-bed';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map"],"mappings":"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"}
|