xt-store 0.5.5 → 0.6.0
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 +101 -62
- package/fesm2022/xt-store.mjs.map +1 -1
- package/index.d.ts +24 -15
- package/package.json +4 -1
package/fesm2022/xt-store.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { map, firstValueFrom, lastValueFrom, finalize, Subscription,
|
|
1
|
+
import { map, firstValueFrom, of, lastValueFrom, finalize, 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';
|
|
@@ -8,6 +8,50 @@ import { map as map$1, mergeAll } from 'rxjs/operators';
|
|
|
8
8
|
import * as i1 from '@angular/common/http';
|
|
9
9
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
10
10
|
|
|
11
|
+
class XtStoreCriteria {
|
|
12
|
+
constructor(name, value, operator) {
|
|
13
|
+
this.name = name;
|
|
14
|
+
this.value = value;
|
|
15
|
+
if (!operator)
|
|
16
|
+
this.operator = '=';
|
|
17
|
+
else {
|
|
18
|
+
this.operator = operator;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
filter(toFilter) {
|
|
22
|
+
const testValue = toFilter[this.name];
|
|
23
|
+
switch (this.operator) {
|
|
24
|
+
case '=':
|
|
25
|
+
return testValue == this.value;
|
|
26
|
+
case '<':
|
|
27
|
+
return testValue < this.value;
|
|
28
|
+
case '<=':
|
|
29
|
+
return testValue < this.value;
|
|
30
|
+
default:
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
var XtSortByDirection;
|
|
36
|
+
(function (XtSortByDirection) {
|
|
37
|
+
XtSortByDirection["None"] = "None";
|
|
38
|
+
XtSortByDirection["Ascending"] = "Ascending";
|
|
39
|
+
XtSortByDirection["Descending"] = "Descending";
|
|
40
|
+
})(XtSortByDirection || (XtSortByDirection = {}));
|
|
41
|
+
var XtGroupByShow;
|
|
42
|
+
(function (XtGroupByShow) {
|
|
43
|
+
XtGroupByShow["OnlyLowest"] = "OnlyLowest";
|
|
44
|
+
XtGroupByShow["OnlyHighest"] = "OnlyHighest";
|
|
45
|
+
})(XtGroupByShow || (XtGroupByShow = {}));
|
|
46
|
+
var XtGroupByOperation;
|
|
47
|
+
(function (XtGroupByOperation) {
|
|
48
|
+
XtGroupByOperation["Count"] = "Count";
|
|
49
|
+
XtGroupByOperation["Sum"] = "Sum";
|
|
50
|
+
XtGroupByOperation["Average"] = "Average";
|
|
51
|
+
XtGroupByOperation["Minimum"] = "Minimum";
|
|
52
|
+
XtGroupByOperation["Maximum"] = "Maximum";
|
|
53
|
+
})(XtGroupByOperation || (XtGroupByOperation = {}));
|
|
54
|
+
|
|
11
55
|
class XtStoreManager {
|
|
12
56
|
static { this.testProvider = null; }
|
|
13
57
|
constructor(provider) {
|
|
@@ -84,6 +128,9 @@ class XtStoreManager {
|
|
|
84
128
|
removeDefaultProvider() {
|
|
85
129
|
this.removeProvider();
|
|
86
130
|
}
|
|
131
|
+
newStoreCriteria(name, value, operator) {
|
|
132
|
+
return new XtStoreCriteria(name, value, operator);
|
|
133
|
+
}
|
|
87
134
|
storeEntity(name, entity) {
|
|
88
135
|
return this.getProviderSafe(name).storeEntity(name, entity);
|
|
89
136
|
}
|
|
@@ -116,48 +163,11 @@ class XtStoreManager {
|
|
|
116
163
|
this.testProvider = testProvider;
|
|
117
164
|
}
|
|
118
165
|
}
|
|
119
|
-
function xtStoreManager() {
|
|
166
|
+
function xtStoreManager$1() {
|
|
120
167
|
return globalThis.XT_STORE_MGR;
|
|
121
168
|
}
|
|
122
169
|
globalThis.XT_STORE_MGR = new XtStoreManager();
|
|
123
|
-
globalThis.xtStoreManager = xtStoreManager;
|
|
124
|
-
|
|
125
|
-
var XtStoreCriteriaOperator;
|
|
126
|
-
(function (XtStoreCriteriaOperator) {
|
|
127
|
-
XtStoreCriteriaOperator["EQUALS"] = "=";
|
|
128
|
-
XtStoreCriteriaOperator["LESS_THAN"] = "<";
|
|
129
|
-
XtStoreCriteriaOperator["LESS_THAN_EQUAL"] = "<=";
|
|
130
|
-
})(XtStoreCriteriaOperator || (XtStoreCriteriaOperator = {}));
|
|
131
|
-
class XtStoreCriteria {
|
|
132
|
-
constructor(name, value, operator) {
|
|
133
|
-
this.name = name;
|
|
134
|
-
this.value = value;
|
|
135
|
-
if (!operator)
|
|
136
|
-
this.operator = XtStoreCriteriaOperator.EQUALS;
|
|
137
|
-
else {
|
|
138
|
-
this.operator = operator;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
var XtSortByDirection;
|
|
143
|
-
(function (XtSortByDirection) {
|
|
144
|
-
XtSortByDirection["None"] = "None";
|
|
145
|
-
XtSortByDirection["Ascending"] = "Ascending";
|
|
146
|
-
XtSortByDirection["Descending"] = "Descending";
|
|
147
|
-
})(XtSortByDirection || (XtSortByDirection = {}));
|
|
148
|
-
var XtGroupByShow;
|
|
149
|
-
(function (XtGroupByShow) {
|
|
150
|
-
XtGroupByShow["OnlyLowest"] = "OnlyLowest";
|
|
151
|
-
XtGroupByShow["OnlyHighest"] = "OnlyHighest";
|
|
152
|
-
})(XtGroupByShow || (XtGroupByShow = {}));
|
|
153
|
-
var XtGroupByOperation;
|
|
154
|
-
(function (XtGroupByOperation) {
|
|
155
|
-
XtGroupByOperation["Count"] = "Count";
|
|
156
|
-
XtGroupByOperation["Sum"] = "Sum";
|
|
157
|
-
XtGroupByOperation["Average"] = "Average";
|
|
158
|
-
XtGroupByOperation["Minimum"] = "Minimum";
|
|
159
|
-
XtGroupByOperation["Maximum"] = "Maximum";
|
|
160
|
-
})(XtGroupByOperation || (XtGroupByOperation = {}));
|
|
170
|
+
globalThis.xtStoreManager = xtStoreManager$1;
|
|
161
171
|
|
|
162
172
|
/**
|
|
163
173
|
* Helps handle metadata information about loaded items
|
|
@@ -176,11 +186,11 @@ class XtStoreProviderHelper {
|
|
|
176
186
|
for (const criterium of criteria) {
|
|
177
187
|
const toTest = element[criterium.name];
|
|
178
188
|
switch (criterium.operator) {
|
|
179
|
-
case
|
|
189
|
+
case '=':
|
|
180
190
|
return criterium.value == toTest;
|
|
181
|
-
case
|
|
191
|
+
case '<':
|
|
182
192
|
return toTest < criterium.value;
|
|
183
|
-
case
|
|
193
|
+
case '<=':
|
|
184
194
|
return toTest <= criterium.value;
|
|
185
195
|
default:
|
|
186
196
|
throw new Error("Operator " + criterium.operator + " unknown");
|
|
@@ -569,23 +579,29 @@ class AbstractXtStoreProvider {
|
|
|
569
579
|
}
|
|
570
580
|
}
|
|
571
581
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
582
|
+
function selectId() {
|
|
583
|
+
return (data) => {
|
|
584
|
+
if (data._id == null)
|
|
585
|
+
throw new Error("ManagedData with no entity Id used in the store.", { cause: data });
|
|
586
|
+
return data._id;
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
function xtStoreEntityConfig() {
|
|
590
|
+
return entityConfig({
|
|
591
|
+
entity: type(),
|
|
592
|
+
selectId: selectId()
|
|
593
|
+
});
|
|
594
|
+
}
|
|
595
|
+
;
|
|
596
|
+
function withXtStoreProvider(entityName, storeProvider, storeMgr) {
|
|
597
|
+
return signalStoreFeature(withState({ entityName, loading: false }), withEntities(xtStoreEntityConfig()), withProps(() => ({
|
|
598
|
+
_storeProvider: storeProvider,
|
|
599
|
+
_entityConfig: xtStoreEntityConfig()
|
|
584
600
|
})), withMethods((store) => ({
|
|
585
601
|
async storeEntity(toStore) {
|
|
586
602
|
patchState(store, { loading: true });
|
|
587
603
|
return store._storeProvider.storeEntity(entityName, toStore).then((stored) => {
|
|
588
|
-
patchState(store, setEntity(stored,
|
|
604
|
+
patchState(store, setEntity(stored, store._entityConfig));
|
|
589
605
|
return stored;
|
|
590
606
|
}).finally(() => {
|
|
591
607
|
patchState(store, { loading: false });
|
|
@@ -594,7 +610,7 @@ function withXtStoreProvider(entityName, storeProvider) {
|
|
|
594
610
|
fetchEntities() {
|
|
595
611
|
patchState(store, { loading: true });
|
|
596
612
|
return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe(map((entities) => {
|
|
597
|
-
patchState(store, setEntities(entities,
|
|
613
|
+
patchState(store, setEntities(entities, store._entityConfig));
|
|
598
614
|
}), finalize(() => {
|
|
599
615
|
patchState(store, { loading: false });
|
|
600
616
|
})));
|
|
@@ -612,7 +628,7 @@ function withXtStoreProvider(entityName, storeProvider) {
|
|
|
612
628
|
patchState(store, { loading: true });
|
|
613
629
|
return store._storeProvider.loadEntity(entityName, id).then((loaded) => {
|
|
614
630
|
if (loaded != null)
|
|
615
|
-
patchState(store, setEntity(loaded,
|
|
631
|
+
patchState(store, setEntity(loaded, store._entityConfig));
|
|
616
632
|
return loaded;
|
|
617
633
|
}).finally(() => {
|
|
618
634
|
patchState(store, { loading: false });
|
|
@@ -622,7 +638,7 @@ function withXtStoreProvider(entityName, storeProvider) {
|
|
|
622
638
|
patchState(store, { loading: true });
|
|
623
639
|
return store._storeProvider.loadEntity(entityName, id).then((loaded) => {
|
|
624
640
|
if (loaded != null)
|
|
625
|
-
patchState(store, setEntity(loaded,
|
|
641
|
+
patchState(store, setEntity(loaded, store._entityConfig));
|
|
626
642
|
return loaded;
|
|
627
643
|
}).then((loaded) => {
|
|
628
644
|
if (loaded == null)
|
|
@@ -642,13 +658,36 @@ function withXtStoreProvider(entityName, storeProvider) {
|
|
|
642
658
|
}).finally(() => {
|
|
643
659
|
patchState(store, { loading: false });
|
|
644
660
|
});
|
|
661
|
+
},
|
|
662
|
+
searchEntities(...criteria) {
|
|
663
|
+
patchState(store, { loading: true });
|
|
664
|
+
try {
|
|
665
|
+
const listEntities = store.entities();
|
|
666
|
+
let toAdd = true;
|
|
667
|
+
const ret = new Array();
|
|
668
|
+
for (const entity of listEntities) {
|
|
669
|
+
toAdd = true;
|
|
670
|
+
for (const crit of criteria) {
|
|
671
|
+
if (!crit.filter(entity)) {
|
|
672
|
+
toAdd = false;
|
|
673
|
+
break;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
if (toAdd)
|
|
677
|
+
ret.push(entity);
|
|
678
|
+
}
|
|
679
|
+
return of(ret);
|
|
680
|
+
}
|
|
681
|
+
finally {
|
|
682
|
+
patchState(store, { loading: false });
|
|
683
|
+
}
|
|
645
684
|
}
|
|
646
685
|
})));
|
|
647
686
|
}
|
|
648
687
|
|
|
649
688
|
class XtStoreManagerService {
|
|
650
689
|
constructor() {
|
|
651
|
-
this.storeManager = xtStoreManager();
|
|
690
|
+
this.storeManager = xtStoreManager$1();
|
|
652
691
|
this.entityToStoreMap = new Map();
|
|
653
692
|
}
|
|
654
693
|
getStoreFor(entityName) {
|
|
@@ -826,7 +865,7 @@ class XtMemoryStoreProvider extends AbstractXtStoreProvider {
|
|
|
826
865
|
|
|
827
866
|
class StoreTestBed {
|
|
828
867
|
constructor() {
|
|
829
|
-
this.storeManager =
|
|
868
|
+
this.storeManager = xtStoreManager();
|
|
830
869
|
}
|
|
831
870
|
static ensureMemoryProviderOnly() {
|
|
832
871
|
XtStoreManager.setTestMode(new XtMemoryStoreProvider());
|
|
@@ -852,5 +891,5 @@ class StoreTestBed {
|
|
|
852
891
|
* Generated bundle index. Do not edit.
|
|
853
892
|
*/
|
|
854
893
|
|
|
855
|
-
export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria,
|
|
894
|
+
export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria, XtStoreGroupBy, XtStoreGroupByAggregate, XtStoreManager, XtStoreManagerService, XtStoreProviderHelper, XtStoreSortBy, selectId, withXtStoreProvider, xtStoreEntityConfig, xtStoreManager$1 as xtStoreManager };
|
|
856
895
|
//# sourceMappingURL=xt-store.mjs.map
|
|
@@ -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/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":["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, 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 } 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 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 = new 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":["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-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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"}
|
package/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import * as xt_type from 'xt-type';
|
|
|
3
3
|
import { ManagedData, XtTypeHandler } from 'xt-type';
|
|
4
4
|
import * as xt_store from 'xt-store';
|
|
5
5
|
import * as _ngrx_signals from '@ngrx/signals';
|
|
6
|
-
import { EntityMap, EntityId } from '@ngrx/signals/entities';
|
|
6
|
+
import { EntityMap, EntityId, SelectEntityId } from '@ngrx/signals/entities';
|
|
7
7
|
import * as i0 from '@angular/core';
|
|
8
8
|
import { Signal, OnDestroy } from '@angular/core';
|
|
9
9
|
import { HttpClient } from '@angular/common/http';
|
|
@@ -19,16 +19,13 @@ interface XtDataTransformer<T = never> {
|
|
|
19
19
|
postLoadingTransformation(source: any[]): T[];
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
EQUALS = "=",
|
|
24
|
-
LESS_THAN = "<",
|
|
25
|
-
LESS_THAN_EQUAL = "<="
|
|
26
|
-
}
|
|
22
|
+
type XtStoreCriteriaOperator = '=' | '<' | '<=';
|
|
27
23
|
declare class XtStoreCriteria {
|
|
28
24
|
name: string;
|
|
29
25
|
value: any;
|
|
30
26
|
operator: XtStoreCriteriaOperator;
|
|
31
27
|
constructor(name: string, value: any, operator?: XtStoreCriteriaOperator);
|
|
28
|
+
filter(toFilter: any): boolean;
|
|
32
29
|
}
|
|
33
30
|
type XtSortBy = {
|
|
34
31
|
by: string;
|
|
@@ -213,6 +210,7 @@ declare class XtStoreManager {
|
|
|
213
210
|
removeProvider(name?: string): void;
|
|
214
211
|
removeProviderForSourceType(srcType: string): void;
|
|
215
212
|
removeDefaultProvider(): void;
|
|
213
|
+
newStoreCriteria(name: string, value: any, operator: XtStoreCriteriaOperator): XtStoreCriteria;
|
|
216
214
|
storeEntity<T extends ManagedData = ManagedData>(name: string, entity: T): Promise<T>;
|
|
217
215
|
loadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T | undefined>;
|
|
218
216
|
safeLoadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T>;
|
|
@@ -232,6 +230,11 @@ declare global {
|
|
|
232
230
|
}
|
|
233
231
|
declare function xtStoreManager(): XtStoreManager;
|
|
234
232
|
|
|
233
|
+
declare function selectId<T extends ManagedData = ManagedData>(): SelectEntityId<T>;
|
|
234
|
+
declare function xtStoreEntityConfig<T extends ManagedData = ManagedData>(): {
|
|
235
|
+
entity: T;
|
|
236
|
+
selectId: SelectEntityId<NoInfer<T>>;
|
|
237
|
+
};
|
|
235
238
|
type StoreState = {
|
|
236
239
|
entityName: string;
|
|
237
240
|
loading: boolean;
|
|
@@ -247,24 +250,30 @@ type XtSignalStore<T> = {
|
|
|
247
250
|
safeLoadEntity(id: string): Promise<T>;
|
|
248
251
|
storeEntity(toStore: T): Promise<T>;
|
|
249
252
|
deleteEntity(id: string): Promise<boolean>;
|
|
253
|
+
searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]>;
|
|
250
254
|
};
|
|
251
|
-
declare function withXtStoreProvider(entityName: string, storeProvider: XtStoreProvider<
|
|
255
|
+
declare function withXtStoreProvider<T extends ManagedData = ManagedData>(entityName: string, storeProvider: XtStoreProvider<T>, storeMgr?: XtStoreManager): _ngrx_signals.SignalStoreFeature<_ngrx_signals.EmptyFeatureResult, {
|
|
252
256
|
state: {
|
|
253
257
|
entityName: string;
|
|
254
258
|
loading: boolean;
|
|
255
|
-
entityMap: EntityMap<
|
|
259
|
+
entityMap: EntityMap<T>;
|
|
256
260
|
ids: EntityId[];
|
|
257
261
|
};
|
|
258
262
|
props: {
|
|
259
|
-
entities: Signal<
|
|
260
|
-
_storeProvider: XtStoreProvider<
|
|
263
|
+
entities: Signal<T[]>;
|
|
264
|
+
_storeProvider: XtStoreProvider<T>;
|
|
265
|
+
_entityConfig: {
|
|
266
|
+
entity: T;
|
|
267
|
+
selectId: SelectEntityId<NoInfer<T>>;
|
|
268
|
+
};
|
|
261
269
|
};
|
|
262
270
|
methods: {
|
|
263
|
-
storeEntity: (toStore:
|
|
271
|
+
storeEntity: (toStore: T) => Promise<T>;
|
|
264
272
|
fetchEntities: () => Promise<void>;
|
|
265
|
-
loadEntity: (id: string) => Promise<
|
|
266
|
-
safeLoadEntity: (id: string) => Promise<
|
|
273
|
+
loadEntity: (id: string) => Promise<T | undefined>;
|
|
274
|
+
safeLoadEntity: (id: string) => Promise<T>;
|
|
267
275
|
deleteEntity: (id: string) => Promise<boolean>;
|
|
276
|
+
searchEntities: (...criteria: XtStoreCriteria[]) => Observable<T[]>;
|
|
268
277
|
};
|
|
269
278
|
}>;
|
|
270
279
|
|
|
@@ -363,5 +372,5 @@ declare class StoreTestBed {
|
|
|
363
372
|
getStoreProviderFor(entityName: string): XtStoreProvider;
|
|
364
373
|
}
|
|
365
374
|
|
|
366
|
-
export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria,
|
|
367
|
-
export type { DontCodeReportDisplayType, DontCodeReportType, StoreState, UploadedDocumentInfo, XtGroupBy, XtGroupByAggregate, XtSignalStore, XtSortBy, XtStoreProvider };
|
|
375
|
+
export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria, XtStoreGroupBy, XtStoreGroupByAggregate, XtStoreManager, XtStoreManagerService, XtStoreProviderHelper, XtStoreSortBy, selectId, withXtStoreProvider, xtStoreEntityConfig, xtStoreManager };
|
|
376
|
+
export type { DontCodeReportDisplayType, DontCodeReportType, StoreState, UploadedDocumentInfo, XtGroupBy, XtGroupByAggregate, XtSignalStore, XtSortBy, XtStoreCriteriaOperator, XtStoreProvider };
|