xt-store 0.6.2 → 0.6.3

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.
@@ -1,4 +1,4 @@
1
- import { map, firstValueFrom, of, lastValueFrom, finalize, Subscription, from } from 'rxjs';
1
+ import { map, firstValueFrom, of, lastValueFrom, finalize, mergeMap, Subscription, from } from 'rxjs';
2
2
  import { xtTypeManager, Counters, nonTemporaryId } from 'xt-type';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Injectable, inject } from '@angular/core';
@@ -685,12 +685,152 @@ function withXtStoreProvider(entityName, storeProvider, storeMgr) {
685
685
  })));
686
686
  }
687
687
 
688
+ function withXtTypeProvider(entityName, storeMgr, typeRegistry) {
689
+ return signalStoreFeature(withState({ entityName, loading: false }), withEntities(xtStoreEntityConfig()), withProps(() => ({
690
+ _storeProvider: storeMgr.getProviderSafe(entityName),
691
+ _storeMgr: storeMgr,
692
+ _typeResolver: typeRegistry,
693
+ _entityConfig: xtStoreEntityConfig()
694
+ })), withMethods((store) => ({
695
+ async storeEntity(toStore) {
696
+ patchState(store, { loading: true });
697
+ return this.clearReferences(toStore).then((valAndRef) => {
698
+ return store._storeProvider.storeEntity(entityName, valAndRef.newValue).then((stored) => {
699
+ return { newValue: stored, references: valAndRef.references };
700
+ });
701
+ }).then((valAndRef) => {
702
+ return this.applyReferences(valAndRef.newValue, valAndRef.references);
703
+ }).then((stored) => {
704
+ patchState(store, setEntity(stored, store._entityConfig));
705
+ return stored;
706
+ }).finally(() => {
707
+ patchState(store, { loading: false });
708
+ });
709
+ },
710
+ fetchEntities() {
711
+ patchState(store, { loading: true });
712
+ return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe(mergeMap((entities) => {
713
+ return this.resolveReferences(entities);
714
+ }), map((entities) => {
715
+ patchState(store, setEntities(entities, store._entityConfig));
716
+ }), finalize(() => {
717
+ patchState(store, { loading: false });
718
+ })));
719
+ },
720
+ searchEntities(...criteria) {
721
+ patchState(store, { loading: true });
722
+ try {
723
+ const listEntities = store.entities();
724
+ let toAdd = true;
725
+ const ret = new Array();
726
+ for (const entity of listEntities) {
727
+ toAdd = true;
728
+ for (const crit of criteria) {
729
+ if (!crit.filter(entity)) {
730
+ toAdd = false;
731
+ break;
732
+ }
733
+ }
734
+ if (toAdd)
735
+ ret.push(entity);
736
+ }
737
+ return of(ret);
738
+ }
739
+ finally {
740
+ patchState(store, { loading: false });
741
+ }
742
+ },
743
+ async loadEntity(id) {
744
+ patchState(store, { loading: true });
745
+ return store._storeProvider.loadEntity(entityName, id).then((loaded) => {
746
+ if (loaded != null)
747
+ return this.resolveReferences([loaded]).then((results) => results[0]);
748
+ return loaded;
749
+ }).then((loaded) => {
750
+ if (loaded != null)
751
+ patchState(store, setEntity(loaded, store._entityConfig));
752
+ return loaded;
753
+ }).finally(() => {
754
+ patchState(store, { loading: false });
755
+ });
756
+ },
757
+ async safeLoadEntity(id) {
758
+ patchState(store, { loading: true });
759
+ return store._storeProvider.loadEntity(entityName, id).then((loaded) => {
760
+ if (loaded != null)
761
+ return this.resolveReferences([loaded]).then((results) => results[0]);
762
+ return loaded;
763
+ }).then((loaded) => {
764
+ if (loaded != null)
765
+ patchState(store, setEntity(loaded, store._entityConfig));
766
+ return loaded;
767
+ }).then((loaded) => {
768
+ if (loaded == null)
769
+ throw new Error("Entity " + entityName + " with id " + id + " not found");
770
+ return loaded;
771
+ }).finally(() => {
772
+ patchState(store, { loading: false });
773
+ });
774
+ },
775
+ async deleteEntity(id) {
776
+ patchState(store, { loading: true });
777
+ return store._storeProvider.deleteEntity(entityName, id).then((result) => {
778
+ if (result) {
779
+ patchState(store, removeEntity(id));
780
+ }
781
+ return result;
782
+ }).finally(() => {
783
+ patchState(store, { loading: false });
784
+ });
785
+ },
786
+ async clearReferences(toClear) {
787
+ const refs = typeRegistry.listReferences(entityName);
788
+ const savedRefs = {};
789
+ for (const refKey of Object.keys(refs)) {
790
+ const refDef = refs[refKey];
791
+ if (toClear[refKey] != null) {
792
+ savedRefs[refKey] = toClear[refKey];
793
+ toClear[refKey] = toClear[refKey][refDef.field];
794
+ }
795
+ }
796
+ return { newValue: toClear, references: savedRefs };
797
+ },
798
+ async resolveReferences(values) {
799
+ const refs = typeRegistry.listReferences(entityName);
800
+ for (const refKey of Object.keys(refs)) {
801
+ const refDef = refs[refKey];
802
+ const refStoreType = signalStore(withXtTypeProvider(refDef.toType, storeMgr, typeRegistry));
803
+ const refStore = new refStoreType();
804
+ await refStore.fetchEntities();
805
+ for (const value of values) {
806
+ if (value[refKey] != null) {
807
+ const founds = await firstValueFrom(refStore.searchEntities(new XtStoreCriteria(refDef.field, value[refKey], '=')));
808
+ if (founds.length != 1) {
809
+ throw new Error("More than one entity found for reference " + refKey + " with value " + value[refKey] + " in entity " + entityName + ".");
810
+ }
811
+ value[refKey] = founds[0];
812
+ }
813
+ }
814
+ }
815
+ return values;
816
+ },
817
+ async applyReferences(newValue, references) {
818
+ if (references != null) {
819
+ // Override the values with the references
820
+ return { ...newValue, ...references };
821
+ }
822
+ else
823
+ return newValue;
824
+ }
825
+ })));
826
+ }
827
+
688
828
  class XtStoreManagerService {
689
829
  constructor() {
690
830
  this.storeManager = xtStoreManager$1();
691
831
  this.entityToStoreMap = new Map();
692
832
  }
693
- getStoreFor(entityName) {
833
+ getStoreFor(entityName, typeMgr) {
694
834
  let store = this.entityToStoreMap.get(entityName);
695
835
  if (store == null) {
696
836
  const provider = this.storeManager.getProvider(entityName);
@@ -698,8 +838,15 @@ class XtStoreManagerService {
698
838
  throw new Error('No provider found for entity ' + entityName);
699
839
  }
700
840
  else {
701
- const res = signalStore(withXtStoreProvider(entityName, provider));
702
- store = new res();
841
+ if (typeMgr == null) {
842
+ const res = signalStore(withXtStoreProvider(entityName, provider));
843
+ store = new res();
844
+ }
845
+ else {
846
+ // We have a type mgr, so let's use it in our store
847
+ const res = signalStore(withXtTypeProvider(entityName, this.storeManager, typeMgr));
848
+ store = new res();
849
+ }
703
850
  }
704
851
  this.entityToStoreMap.set(entityName, store);
705
852
  }
@@ -1 +1 @@
1
- {"version":3,"file":"xt-store.mjs","sources":["../../../projects/store/src/xt-store-parameters.ts","../../../projects/store/src/store-manager/xt-store-manager.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/xt-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":["\nexport type XtStoreCriteriaOperator = '='|'<'|'<=';\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 = '=';\n else {\n this.operator = operator;\n }\n }\n\n filter (toFilter:any): boolean {\n const testValue=toFilter[this.name];\n switch (this.operator) {\n case '=':\n return testValue == this.value;\n case '<':\n return (testValue as number)<(this.value as number);\n case '<=':\n return (testValue as number)<(this.value as number);\n default:\n return true;\n }\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 { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { Observable } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreCriteria, XtGroupBy, XtSortBy, XtStoreCriteriaOperator } 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 newStoreCriteria(name: string, value: any, operator: XtStoreCriteriaOperator): XtStoreCriteria {\n return new XtStoreCriteria(name, value, operator);\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","import { Counters, ManagedData, XtTypeHandler, xtTypeManager } from 'xt-type';\nimport { XtGroupBy, XtGroupByAggregate, XtGroupByOperation, XtSortBy, XtStoreCriteria } 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 '=':\n return criterium.value==toTest;\n case '<':\n return toTest < criterium.value;\n case '<=':\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, false, 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, Observable, of } from 'rxjs';\nimport { Signal } from '@angular/core';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtStoreCriteria } from '../xt-store-parameters';\n\nexport function selectId<T extends ManagedData=ManagedData>(): SelectEntityId<T> { return (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}\n\nexport function xtStoreEntityConfig<T extends ManagedData=ManagedData> () {\n return entityConfig<T> ({\n entity: type<T>(),\n selectId:selectId<T>()\n });\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 searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]>;\n}\n\nexport function withXtStoreProvider<T extends ManagedData = ManagedData> (entityName:string, storeProvider:XtStoreProvider<T>, storeMgr?:XtStoreManager) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig<T> ()),\n withProps ( () => ({\n _storeProvider:storeProvider,\n _entityConfig:xtStoreEntityConfig<T>()\n })),\n withMethods ((store) => ({\n async storeEntity (toStore:T): Promise<T> {\n patchState(store, {loading:true});\n return store._storeProvider.storeEntity(entityName, toStore).then ( (stored)=> {\n patchState(store, setEntity(stored, store._entityConfig));\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: T[]) => {\n patchState(store, setEntities (entities, store._entityConfig));\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<T|undefined> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async safeLoadEntity (id:string): Promise<T> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\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 searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]> {\n patchState(store, { loading: true });\n try {\n const listEntities = store.entities();\n let toAdd=true;\n const ret = new Array<T>();\n for (const entity of listEntities) {\n toAdd=true;\n for (const crit of criteria) {\n if (!crit.filter(entity)) {\n toAdd=false;\n break;\n }\n }\n if (toAdd) ret.push(entity);\n }\n return of(ret);\n } finally {\n patchState(store, { loading: false });\n }\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 XtStoreManagerService {\n\n protected storeManager = xtStoreManager();\n protected entityToStoreMap = new Map<string, XtSignalStore<ManagedData>>();\n\n constructor() {\n }\n\n getStoreFor<T extends ManagedData>(entityName: string): XtSignalStore<T> {\n let store = this.entityToStoreMap.get(entityName);\n if (store == null) {\n const provider = this.storeManager.getProvider<T>(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 as XtSignalStore<T>;\n }\n\n setDefaultStoreProvider (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 = xtStoreManager();\n\n public static 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/xt-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":["xtStoreManager","map"],"mappings":"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"}
1
+ {"version":3,"file":"xt-store.mjs","sources":["../../../projects/store/src/xt-store-parameters.ts","../../../projects/store/src/store-manager/xt-store-manager.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-entity/store-entity-ref-feature.ts","../../../projects/store/src/store-manager-service/xt-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":["\nexport type XtStoreCriteriaOperator = '='|'<'|'<=';\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 = '=';\n else {\n this.operator = operator;\n }\n }\n\n filter (toFilter:any): boolean {\n const testValue=toFilter[this.name];\n switch (this.operator) {\n case '=':\n return testValue == this.value;\n case '<':\n return (testValue as number)<(this.value as number);\n case '<=':\n return (testValue as number)<(this.value as number);\n default:\n return true;\n }\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 { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { Observable } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreCriteria, XtGroupBy, XtSortBy, XtStoreCriteriaOperator } 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 newStoreCriteria(name: string, value: any, operator: XtStoreCriteriaOperator): XtStoreCriteria {\n return new XtStoreCriteria(name, value, operator);\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","import { Counters, ManagedData, XtTypeHandler, xtTypeManager } from 'xt-type';\nimport { XtGroupBy, XtGroupByAggregate, XtGroupByOperation, XtSortBy, XtStoreCriteria } 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 '=':\n return criterium.value==toTest;\n case '<':\n return toTest < criterium.value;\n case '<=':\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, false, 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, Observable, of } from 'rxjs';\nimport { Signal } from '@angular/core';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtStoreCriteria } from '../xt-store-parameters';\n\nexport function selectId<T extends ManagedData=ManagedData>(): SelectEntityId<T> { return (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}\n\nexport function xtStoreEntityConfig<T extends ManagedData=ManagedData> () {\n return entityConfig<T> ({\n entity: type<T>(),\n selectId:selectId<T>()\n });\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 searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]>;\n}\n\nexport function withXtStoreProvider<T extends ManagedData = ManagedData> (entityName:string, storeProvider:XtStoreProvider<T>, storeMgr?:XtStoreManager) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig<T> ()),\n withProps ( () => ({\n _storeProvider:storeProvider,\n _entityConfig:xtStoreEntityConfig<T>()\n })),\n withMethods ((store) => ({\n async storeEntity (toStore:T): Promise<T> {\n patchState(store, {loading:true});\n return store._storeProvider.storeEntity(entityName, toStore).then ( (stored)=> {\n patchState(store, setEntity(stored, store._entityConfig));\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: T[]) => {\n patchState(store, setEntities (entities, store._entityConfig));\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<T|undefined> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async safeLoadEntity (id:string): Promise<T> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\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 searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]> {\n patchState(store, { loading: true });\n try {\n const listEntities = store.entities();\n let toAdd=true;\n const ret = new Array<T>();\n for (const entity of listEntities) {\n toAdd=true;\n for (const crit of criteria) {\n if (!crit.filter(entity)) {\n toAdd=false;\n break;\n }\n }\n if (toAdd) ret.push(entity);\n }\n return of(ret);\n } finally {\n patchState(store, { loading: false });\n }\n }\n\n }))\n\n);\n}\n","import { removeEntity, setEntities, setEntity, withEntities } from '@ngrx/signals/entities';\nimport { patchState, signalStore, signalStoreFeature, withMethods, withProps, withState } from '@ngrx/signals';\nimport { finalize, firstValueFrom, flatMap, lastValueFrom, map, mergeMap, Observable, of } from 'rxjs';\nimport { ManagedData, XtTypeResolver } from 'xt-type';\nimport { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtStoreCriteria } from '../xt-store-parameters';\nimport { StoreState, XtSignalStore, xtStoreEntityConfig } from './store-entity-feature';\n\nexport function withXtTypeProvider<T extends ManagedData = ManagedData> (entityName:string, storeMgr:XtStoreManager, typeRegistry: XtTypeResolver) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig<T>()),\n withProps ( () => ({\n _storeProvider:storeMgr.getProviderSafe<T>(entityName),\n _storeMgr:storeMgr,\n _typeResolver:typeRegistry,\n _entityConfig:xtStoreEntityConfig<T>()\n })),\n withMethods ((store) => ({\n async storeEntity(toStore: T): Promise<T> {\n patchState(store, { loading: true });\n return this.clearReferences(toStore).then((valAndRef) => {\n return store._storeProvider.storeEntity(entityName, valAndRef.newValue).then((stored) => {\n return { newValue: stored, references: valAndRef.references };\n });\n }).then((valAndRef) => {\n return this.applyReferences(valAndRef.newValue, valAndRef.references);\n }).then((stored) => {\n patchState(store, setEntity(stored, store._entityConfig));\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( mergeMap((entities:T[]) => {\n return this.resolveReferences(entities);\n }),map((entities: T[]) => {\n patchState(store, setEntities(entities, store._entityConfig));\n }), finalize(() => {\n patchState(store, { loading: false });\n })));\n },\n\n searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]> {\n patchState(store, { loading: true });\n try {\n const listEntities = store.entities();\n let toAdd=true;\n const ret = new Array<T>();\n for (const entity of listEntities) {\n toAdd=true;\n for (const crit of criteria) {\n if (!crit.filter(entity)) {\n toAdd=false;\n break;\n }\n }\n if (toAdd) ret.push(entity);\n }\n return of(ret);\n } finally {\n patchState(store, { loading: false });\n }\n },\n\n async loadEntity(id: string): Promise<T | undefined> {\n patchState(store, { loading: true });\n return store._storeProvider.loadEntity(entityName, id).then((loaded) => {\n if (loaded != null)\n return this.resolveReferences([loaded]).then((results) => results[0]);\n return loaded;\n }).then ((loaded) => {\n if (loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, { loading: false });\n });\n },\n\n async safeLoadEntity(id: string): Promise<T> {\n patchState(store, { loading: true });\n return store._storeProvider.loadEntity(entityName, id).then((loaded) => {\n if (loaded != null)\n return this.resolveReferences([loaded]).then((results) => results[0]);\n return loaded;\n }).then((loaded) => {\n if (loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\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\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 async clearReferences(toClear: T): Promise<{ newValue: T, references: any }> {\n const refs = typeRegistry.listReferences(entityName);\n const savedRefs = {} as T;\n for (const refKey of Object.keys(refs)) {\n const refDef = refs[refKey];\n if (toClear[refKey] != null) {\n (savedRefs as any)[refKey] = toClear[refKey];\n (toClear as any)[refKey] = (toClear[refKey] as any)[refDef.field];\n }\n }\n return { newValue: toClear, references: savedRefs };\n },\n\n async resolveReferences(values: T[]): Promise<T[]> {\n const refs = typeRegistry.listReferences(entityName);\n for (const refKey of Object.keys(refs)) {\n const refDef = refs[refKey];\n const refStoreType = signalStore(withXtTypeProvider(refDef.toType, storeMgr, typeRegistry));\n const refStore = new refStoreType();\n await refStore.fetchEntities();\n for (const value of values) {\n if (value[refKey] != null) {\n const founds = await firstValueFrom(refStore.searchEntities( new XtStoreCriteria(refDef.field, value[refKey], '=')));\n if (founds.length != 1) {\n throw new Error(\"More than one entity found for reference \" + refKey + \" with value \" + value[refKey] + \" in entity \" + entityName + \".\");\n }\n (value as any)[refKey] = founds[0];\n }\n }\n }\n return values;\n },\n\n async applyReferences(newValue: T, references: ManagedData): Promise<T> {\n if (references != null) {\n // Override the values with the references\n return { ...newValue, ...references } as T;\n } else return newValue;\n }\n\n }\n )\n )\n )\n}\n","import { Injectable } from '@angular/core';\nimport { signalStore } from '@ngrx/signals';\nimport { ManagedData, XtTypeResolver } 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';\nimport { withXtTypeProvider } from '../store-entity/store-entity-ref-feature';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtStoreManagerService {\n\n protected storeManager = xtStoreManager();\n protected entityToStoreMap = new Map<string, XtSignalStore<ManagedData>>();\n\n constructor() {\n }\n\n getStoreFor<T extends ManagedData>(entityName: string, typeMgr?:XtTypeResolver): XtSignalStore<T> {\n let store = this.entityToStoreMap.get(entityName);\n if (store == null) {\n const provider = this.storeManager.getProvider<T>(entityName);\n if (provider == null) {\n throw new Error('No provider found for entity ' + entityName);\n } else {\n if( typeMgr==null) {\n const res = signalStore(\n withXtStoreProvider(entityName, provider)\n );\n store= new res();\n } else {\n // We have a type mgr, so let's use it in our store\n const res = signalStore(\n withXtTypeProvider(entityName, this.storeManager, typeMgr)\n );\n store= new res();\n\n }\n }\n this.entityToStoreMap.set(entityName, store);\n }\n return store as XtSignalStore<T>;\n }\n\n setDefaultStoreProvider (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 = xtStoreManager();\n\n public static 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/xt-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":["xtStoreManager","map"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Observable, Subscription } from 'rxjs';
2
2
  import * as xt_type from 'xt-type';
3
- import { ManagedData, XtTypeHandler } from 'xt-type';
3
+ import { ManagedData, XtTypeHandler, XtTypeResolver } from 'xt-type';
4
4
  import * as xt_store from 'xt-store';
5
5
  import * as _ngrx_signals from '@ngrx/signals';
6
6
  import { EntityMap, EntityId, SelectEntityId } from '@ngrx/signals/entities';
@@ -281,7 +281,7 @@ declare class XtStoreManagerService {
281
281
  protected storeManager: xt_store.XtStoreManager;
282
282
  protected entityToStoreMap: Map<string, XtSignalStore<ManagedData>>;
283
283
  constructor();
284
- getStoreFor<T extends ManagedData>(entityName: string): XtSignalStore<T>;
284
+ getStoreFor<T extends ManagedData>(entityName: string, typeMgr?: XtTypeResolver): XtSignalStore<T>;
285
285
  setDefaultStoreProvider(provider: XtStoreProvider<ManagedData>): void;
286
286
  static ɵfac: i0.ɵɵFactoryDeclaration<XtStoreManagerService, never>;
287
287
  static ɵprov: i0.ɵɵInjectableDeclaration<XtStoreManagerService>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xt-store",
3
- "version": "0.6.2",
3
+ "version": "0.6.3",
4
4
  "repository": {
5
5
  "url": "https://github.com/dont-code/ng-xtend.git"
6
6
  },