@rentman/rm-core 1.0.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.
Files changed (68) hide show
  1. package/.editorconfig +23 -0
  2. package/package.json +33 -0
  3. package/src/classes/ApiFormatter.ts +338 -0
  4. package/src/classes/BatchStatus.ts +86 -0
  5. package/src/classes/ChangesCompiler.ts +161 -0
  6. package/src/classes/ChangesProcessor.ts +475 -0
  7. package/src/classes/CollectionCache.ts +234 -0
  8. package/src/classes/CollectionEntryService.ts +83 -0
  9. package/src/classes/CollectionHandler.ts +619 -0
  10. package/src/classes/CollectionResourceService.ts +38 -0
  11. package/src/classes/ColumnCache.ts +114 -0
  12. package/src/classes/ColumnExpansion.ts +74 -0
  13. package/src/classes/ColumnHandler.ts +90 -0
  14. package/src/classes/ColumnSet.ts +181 -0
  15. package/src/classes/ColumnUtil.ts +589 -0
  16. package/src/classes/CreateRequest.ts +158 -0
  17. package/src/classes/ItemAdministrator.ts +571 -0
  18. package/src/classes/ItemCache.ts +158 -0
  19. package/src/classes/ItemEntryService.ts +488 -0
  20. package/src/classes/ItemHandler.ts +592 -0
  21. package/src/classes/ItemRequestService.ts +229 -0
  22. package/src/classes/ItemResourceService.ts +36 -0
  23. package/src/classes/KeyService.ts +76 -0
  24. package/src/classes/LockService.ts +184 -0
  25. package/src/classes/ModuleChangesCompiler.ts +123 -0
  26. package/src/classes/PromiseService.ts +19 -0
  27. package/src/classes/QueryMatcher.ts +135 -0
  28. package/src/classes/QueryParser.ts +209 -0
  29. package/src/classes/QueryService.ts +35 -0
  30. package/src/classes/RequestColumnExpansion.ts +31 -0
  31. package/src/classes/ResourceCache.ts +289 -0
  32. package/src/classes/Util.ts +422 -0
  33. package/src/constants.ts +11 -0
  34. package/src/factories/BatchStatusFactory.ts +18 -0
  35. package/src/factories/ChangesCompilerFactory.ts +20 -0
  36. package/src/factories/ChangesProcessorFactory.ts +53 -0
  37. package/src/factories/CollectionCacheFactory.ts +15 -0
  38. package/src/factories/CollectionEntryFactory.ts +35 -0
  39. package/src/factories/CollectionResourceFactory.ts +36 -0
  40. package/src/factories/ColumnExpansionFactory.ts +25 -0
  41. package/src/factories/ColumnSetFactory.ts +24 -0
  42. package/src/factories/CreateRequestFactory.ts +28 -0
  43. package/src/factories/ItemCacheFactory.ts +18 -0
  44. package/src/factories/ItemEntryFactory.ts +18 -0
  45. package/src/factories/ItemResourceFactory.ts +28 -0
  46. package/src/factories/ModuleChangesCompilerFactory.ts +21 -0
  47. package/src/factories/QueryMatcherFactory.ts +20 -0
  48. package/src/factories/QueryParserFactory.ts +10 -0
  49. package/src/factories/RequestColumnExpansionFactory.ts +15 -0
  50. package/src/factories/ResourceCacheFactory.ts +55 -0
  51. package/src/index.ts +188 -0
  52. package/src/interfaces/ApiRequestServiceInterface.ts +17 -0
  53. package/src/interfaces/AuthInterface.ts +5 -0
  54. package/src/interfaces/ErrorHandlerInterface.ts +3 -0
  55. package/src/interfaces/ResourceCacheInterface.ts +9 -0
  56. package/src/models/CollectionEditResource.ts +139 -0
  57. package/src/models/CollectionEntry.ts +448 -0
  58. package/src/models/CollectionResource.ts +223 -0
  59. package/src/models/CollectionViewResource.ts +23 -0
  60. package/src/models/EditResource.ts +15 -0
  61. package/src/models/ItemEntry.ts +24 -0
  62. package/src/models/ItemResource.ts +35 -0
  63. package/src/models/ViewResource.ts +14 -0
  64. package/tsconfig.json +12 -0
  65. package/tslint.json +63 -0
  66. package/webpack.common.js +35 -0
  67. package/webpack.dev.js +10 -0
  68. package/webpack.prod.js +17 -0
@@ -0,0 +1,158 @@
1
+ import RequestColumnExpansionFactory from "../factories/RequestColumnExpansionFactory";
2
+ import CollectionHandler from "./CollectionHandler";
3
+ import ItemEntryService from "./ItemEntryService";
4
+ import KeyService from "./KeyService";
5
+ import { getPath } from "./Util";
6
+
7
+ export default class CreateRequest {
8
+ requests = [];
9
+
10
+ constructor (
11
+ private collectionHandler: CollectionHandler,
12
+ private requestColumnExpansionFactory: RequestColumnExpansionFactory,
13
+ private itemEntryService: ItemEntryService,
14
+ private keyService: KeyService,
15
+ private compilation,
16
+ private parameterMap,
17
+ private breakupByParent = false
18
+ ) {
19
+ }
20
+
21
+ finalizeRequest (requestResource) {
22
+ const collectionMap = requestResource.collections;
23
+ const columnExpansion = requestResource.columns;
24
+
25
+ for (const collectionId in collectionMap) {
26
+ const entry = collectionMap[collectionId];
27
+
28
+ if (entry.fitting.length > 0)
29
+ columnExpansion.expand(entry.collection.columns);
30
+ }
31
+
32
+ requestResource.request.columns = columnExpansion.get();
33
+
34
+ return requestResource;
35
+ }
36
+
37
+ setRequestParent (parentType, requestResource) {
38
+ const request = requestResource.request;
39
+
40
+ if (parentType === 'Void')
41
+ return false;
42
+
43
+ request.parentType = parentType;
44
+ request.parentId = {};
45
+
46
+ return true;
47
+ }
48
+
49
+ run () {
50
+ if (this.breakupByParent) {
51
+ for (const parentType in this.compilation) {
52
+ const parentMap = this.compilation[parentType];
53
+
54
+ for (const parentId in parentMap) {
55
+ if (this.keyService.isLocalId(parentId))
56
+ continue;
57
+
58
+ const requestResource = this.initializeRequest();
59
+
60
+ this.extendRequest(
61
+ parentMap[parentId],
62
+ this.setRequestParent(parentType, requestResource) ? parentId : null,
63
+ requestResource
64
+ );
65
+
66
+ this.requests.push(this.finalizeRequest(requestResource));
67
+ }
68
+ }
69
+ } else {
70
+ for (const parentType in this.compilation) {
71
+ const parentMap = this.compilation[parentType];
72
+ const requestResource = this.initializeRequest();
73
+ const hasParent = this.setRequestParent(parentType, requestResource);
74
+
75
+ let validRequest = false;
76
+
77
+ for (const parentId in parentMap) {
78
+ if (this.keyService.isLocalId(parentId))
79
+ continue;
80
+
81
+ this.extendRequest(
82
+ parentMap[parentId],
83
+ hasParent ? parentId : null,
84
+ requestResource
85
+ );
86
+
87
+ validRequest = true;
88
+ }
89
+
90
+ if (validRequest)
91
+ this.requests.push(this.finalizeRequest(requestResource));
92
+ }
93
+ }
94
+
95
+ return this.requests;
96
+ }
97
+
98
+ initializeRequest () {
99
+ return {
100
+ request: {
101
+ requestType: 'create',
102
+ items: {}
103
+ },
104
+ columns: this.requestColumnExpansionFactory.construct(),
105
+ items: {},
106
+ collections: {}
107
+ };
108
+ }
109
+
110
+ private extendRequest (itemEntries, requestParentId, destination) {
111
+ const request = destination.request;
112
+ const itemEntryMap = destination.items;
113
+
114
+ for (const itemType in itemEntries) {
115
+ if (request.itemType === undefined)
116
+ request.itemType = itemType;
117
+
118
+ if (itemEntryMap[itemType] === undefined) {
119
+ itemEntryMap[itemType] = {};
120
+ request.items[itemType] = {};
121
+ }
122
+
123
+ for (const itemId in itemEntries[itemType]) {
124
+ const itemEntry = itemEntries[itemType][itemId];
125
+ const childEntries = getPath(this.compilation, [itemType, itemId]);
126
+ const itemRequest: any = request.items[itemType][itemId] = {};
127
+ const parameters = getPath(this.parameterMap, [itemType, itemId]);
128
+
129
+ let links;
130
+
131
+ if (requestParentId !== null)
132
+ request.parentId[itemId] = requestParentId;
133
+
134
+ destination.columns.expand(itemEntry.columns);
135
+ this.collectionHandler.expandCollectionMap(itemEntry, destination.collections);
136
+
137
+ itemEntryMap[itemType][itemId] = itemEntry;
138
+
139
+ itemRequest.values = this.itemEntryService.formatRequest(itemEntry);
140
+ itemRequest.parameters = parameters;
141
+
142
+ if (childEntries === undefined)
143
+ continue;
144
+
145
+ links = itemRequest.links = {};
146
+
147
+ for (const childType in childEntries) {
148
+ links[childType] = [];
149
+
150
+ for (const childId in childEntries[childType])
151
+ links[childType].push(childId);
152
+ }
153
+
154
+ this.extendRequest(childEntries, null, destination);
155
+ }
156
+ }
157
+ }
158
+ }
@@ -0,0 +1,571 @@
1
+ import ColumnSetFactory from "../factories/ColumnSetFactory";
2
+ import ModuleChangesCompilerFactory from "../factories/ModuleChangesCompilerFactory";
3
+ import ResourceCacheFactory from "../factories/ResourceCacheFactory";
4
+ import ApiRequestServiceInterface from '../interfaces/ApiRequestServiceInterface';
5
+ import AuthInterface from '../interfaces/AuthInterface';
6
+ import ErrorHandlerInterface from '../interfaces/ErrorHandlerInterface';
7
+ import ResourceCacheInterface from '../interfaces/ResourceCacheInterface';
8
+ import CollectionEntryService from "./CollectionEntryService";
9
+ import CollectionHandler from "./CollectionHandler";
10
+ import CollectionResourceService from './CollectionResourceService';
11
+ import ItemEntryService from './ItemEntryService';
12
+ import ItemHandler from './ItemHandler';
13
+ import ItemRequestService from "./ItemRequestService";
14
+ import KeyService from "./KeyService";
15
+ import QueryService from "./QueryService";
16
+ import ResourceCache from "./ResourceCache";
17
+ import { createPath } from "./Util";
18
+
19
+ export default class ItemAdministrator {
20
+ constructor (
21
+ private apiRequestService: ApiRequestServiceInterface,
22
+ private resourceCacheInterface: ResourceCacheInterface,
23
+ private authInterface: AuthInterface,
24
+ private errorHandler: ErrorHandlerInterface,
25
+ private itemHandler: ItemHandler,
26
+ private collectionHandler: CollectionHandler,
27
+ private columnSetFactory: ColumnSetFactory,
28
+ private itemRequestService: ItemRequestService,
29
+ private resourceCacheFactory: ResourceCacheFactory,
30
+ private moduleChangesCompilerFactory: ModuleChangesCompilerFactory,
31
+ private collectionEntryService: CollectionEntryService,
32
+ private collectionResourceService: CollectionResourceService,
33
+ private itemEntryService: ItemEntryService,
34
+ private keyService: KeyService,
35
+ private queryService: QueryService
36
+ ) {
37
+
38
+ }
39
+
40
+ // id can be a keyword or a local id (in case of a refresh)
41
+ getItemDefinition (itemType: string, itemId: any, options: any) {
42
+ const stateKey: any = this.keyService.parseStateKey(itemId);
43
+ const result = {itemType: itemType, options: options, itemId: itemId};
44
+
45
+ if (stateKey !== null) {
46
+ switch (stateKey.type) {
47
+ case 'new':
48
+ // if (stateKey.template.length > 0)
49
+ // options.templateOptions = {type: stateKey.template};
50
+
51
+ result.itemId = this.keyService.getLocalId();
52
+ break;
53
+ case 'duplicate':
54
+ options.duplicate = stateKey.itemId;
55
+
56
+ if (options.templateOptions === undefined) // todo: refactor this
57
+ options.templateOptions = {};
58
+
59
+ if (options.templateOptions.item === undefined)
60
+ options.templateOptions.item = stateKey.itemId;
61
+
62
+ result.itemId = this.keyService.getLocalDuplicateId();
63
+ break;
64
+ }
65
+
66
+ return result;
67
+ }
68
+
69
+ result.itemId = itemId;
70
+ return result;
71
+ }
72
+
73
+ createCollectionMap (itemEntries: any[], addToTab: boolean) {
74
+ const resourceCache = this.getResourceCache();
75
+ const collectionCache = resourceCache.collections;
76
+ const result = {};
77
+
78
+ for (const itemEntry of itemEntries) {
79
+ if (addToTab)
80
+ resourceCache.addSingleItem(itemEntry, {}, false);
81
+
82
+ this.collectionHandler.expandCollectionMap(itemEntry, result, collectionCache);
83
+ }
84
+
85
+ return result;
86
+ }
87
+
88
+ getItemById (itemType: string, itemId: number, options: any) {
89
+ return this.itemHandler.fetchItem(
90
+ itemType, itemId, options
91
+ ).then(
92
+ itemEntry => {
93
+ return this.addSingleItem(itemEntry, options, false);
94
+ },
95
+ this.errorHandler.reject
96
+ );
97
+ }
98
+
99
+ getItemsById (itemType: string, itemIds: number[], options: any) {
100
+ return this.itemHandler.fetchItems(itemType, itemIds, this.itemEntryService.processOptions(options)).then(
101
+ itemEntries => {
102
+ return this.addSingleItems(itemEntries, options);
103
+ },
104
+ this.errorHandler.reject
105
+ );
106
+ }
107
+
108
+ getItemsByQuery (itemType: string, query: any, options: any) {
109
+ const entryOptions = this.itemEntryService.processOptions(options);
110
+ const requestColumns = {};
111
+
112
+ requestColumns[itemType] = entryOptions.columns;
113
+
114
+ return this.apiRequestService.query(
115
+ itemType,
116
+ this.queryService.addParentCondition(query, entryOptions.parent),
117
+ requestColumns
118
+ ).then(
119
+ response => {
120
+ return this.itemRequestService.processResponse(
121
+ response,
122
+ response.links[itemType],
123
+ entryOptions.parent,
124
+ this.columnSetFactory.construct(itemType, entryOptions.columns, response.fetchColumnsObject())
125
+ );
126
+ },
127
+ this.errorHandler.reject
128
+ ).then(
129
+ itemEntries => {
130
+ return this.addSingleItems(itemEntries, options);
131
+ },
132
+ this.errorHandler.reject
133
+ );
134
+ }
135
+
136
+ getDuplicateById (itemType: string, duplicateId: number, options: any) {
137
+ if (options === undefined)
138
+ options = {};
139
+
140
+ options.edit = true;
141
+
142
+ const definition = this.getItemDefinition(
143
+ itemType,
144
+ this.keyService.getDuplicateStateKey(duplicateId),
145
+ options
146
+ );
147
+
148
+ return this.getItemByDef(definition, false);
149
+ }
150
+
151
+ getNewResource (itemType: string, options: any, returnLinks: boolean, isRoot: boolean) {
152
+ if (options === undefined)
153
+ options = {};
154
+
155
+ options.edit = true;
156
+
157
+ if (isRoot === undefined)
158
+ isRoot = false;
159
+
160
+ return this.itemHandler.fetchItem(
161
+ itemType,
162
+ this.keyService.getLocalId(),
163
+ this.itemEntryService.processOptions(options)
164
+ ).then(
165
+ (itemEntryResource: any) => {
166
+ const main = this.addSingleItem(itemEntryResource.main, options, isRoot);
167
+ const linked = this.processLinkedItems(itemEntryResource.linked, options, true); // do this beforehand
168
+
169
+ return returnLinks ? {main: main, linked: linked} : main;
170
+ },
171
+ this.errorHandler.reject
172
+ );
173
+ }
174
+
175
+ getCollectionDef (itemType: string, options: any) {
176
+ return {
177
+ itemType: itemType,
178
+ options: {
179
+ entry: this.collectionEntryService.processOptions(options), // we need the default column value
180
+ resource: this.collectionResourceService.processOptions(options)
181
+ }
182
+ };
183
+ }
184
+
185
+ getLinkCollectionsDef (linkType: string, linkIdArray: number[], itemType: string, linkField: string, options: any) {
186
+ return {
187
+ itemType: itemType,
188
+ linkType: linkType,
189
+ linkIdArray: linkIdArray,
190
+ linkField: linkField,
191
+ options: {
192
+ entry: this.collectionEntryService.processOptions(options),
193
+ resource: this.collectionResourceService.processOptions(options)
194
+ }
195
+ };
196
+ }
197
+
198
+ /** @deprecated */
199
+ getCollection (itemType: string, query: any, options: any) {
200
+ const resourceCache = this.getResourceCache();
201
+ const entryOptions = this.collectionEntryService.processOptions(options);
202
+
203
+ entryOptions.query = query;
204
+
205
+ return this.collectionHandler.fetch(
206
+ itemType,
207
+ entryOptions,
208
+ resourceCache.items,
209
+ resourceCache.deferredCollections
210
+ ).then(
211
+ entry => {
212
+ return this.addCollection(entry, options);
213
+ },
214
+ this.errorHandler.reject
215
+ );
216
+ }
217
+
218
+ _getCollection (itemType: string, options: any) {
219
+ const resourceCache = this.getResourceCache();
220
+
221
+ return this.collectionHandler.fetch(
222
+ itemType,
223
+ this.collectionEntryService.processOptions(options),
224
+ resourceCache.items,
225
+ resourceCache.deferredCollections
226
+ ).then(
227
+ entry => {
228
+ return this.addCollection(entry, options);
229
+ },
230
+ this.errorHandler.reject
231
+ );
232
+ }
233
+
234
+ getCollectionFromDef (definition: any) {
235
+ const resourceCache = this.getResourceCache();
236
+
237
+ return this.collectionHandler.fetch(
238
+ definition.itemType,
239
+ definition.options.entry,
240
+ resourceCache.items,
241
+ resourceCache.deferredCollections
242
+ ).then(
243
+ entry => {
244
+ return this.addCollection(
245
+ entry,
246
+ definition.options.resource,
247
+ false
248
+ );
249
+ },
250
+ this.errorHandler.reject
251
+ );
252
+ }
253
+
254
+ getLinkCollection (linkType: string, linkId: number, itemType: string, options: any) {
255
+ const resourceCache = this.getResourceCache();
256
+ const entryOptions = this.collectionEntryService.processOptions(options);
257
+
258
+ entryOptions.parent = {itemType: linkType, itemId: linkId};
259
+
260
+ return this.collectionHandler.fetch(
261
+ itemType,
262
+ entryOptions,
263
+ resourceCache.items,
264
+ resourceCache.deferredCollections
265
+ ).then(
266
+ entry => {
267
+ return this.addCollection(entry, options);
268
+ },
269
+ this.errorHandler.reject
270
+ );
271
+ }
272
+
273
+ getLinkCollections (linkType: string, linkIdArray: number[], itemType: string, options: any) {
274
+ return this.collectionHandler.batchFetch(
275
+ linkType,
276
+ linkIdArray,
277
+ itemType,
278
+ this.collectionEntryService.processOptions(options),
279
+ this.getResourceCache().deferredCollections
280
+ ).then(
281
+ collectionEntries => {
282
+ return this.addCollections(
283
+ collectionEntries,
284
+ this.collectionEntryService.processOptions(options)
285
+ );
286
+ },
287
+ this.errorHandler.reject
288
+ );
289
+ }
290
+
291
+ getLinkCollectionsFromDef (definition: any) {
292
+ return this.collectionHandler.batchFetch(
293
+ definition.linkType,
294
+ definition.linkIdArray,
295
+ definition.itemType,
296
+ definition.options.entry,
297
+ this.getResourceCache().deferredCollections
298
+ ).then(
299
+ collectionEntries => {
300
+ return this.addCollections(
301
+ collectionEntries,
302
+ definition.options.resource
303
+ );
304
+ },
305
+ this.errorHandler.reject
306
+ );
307
+ }
308
+
309
+ getAllLinkCollections (linkType: string, itemType: string, options: any) {
310
+ // var requestColumns = {};
311
+ // requestColumns[linkType] = ['id'];
312
+
313
+ return this.apiRequestService.query(linkType, {}, {})
314
+ .then(
315
+ response => {
316
+ return this.getLinkCollections(
317
+ linkType,
318
+ response.links[linkType],
319
+ itemType,
320
+ options
321
+ );
322
+ },
323
+ this.errorHandler.reject
324
+ );
325
+ }
326
+
327
+ getItemByDef (definition: any, isRoot: boolean) {
328
+ return this.itemHandler.fetchItem(
329
+ definition.itemType,
330
+ definition.itemId,
331
+ this.itemEntryService.processOptions(definition.options)
332
+ ).then(
333
+ itemEntryResource => {
334
+ let mainEntry;
335
+
336
+ if (itemEntryResource.linked !== undefined) {
337
+ this.processLinkedItems(itemEntryResource.linked, definition.options, false);
338
+ mainEntry = itemEntryResource.main;
339
+ } else
340
+ mainEntry = itemEntryResource;
341
+
342
+ return this.addSingleItem(mainEntry, definition.options, isRoot); // isRoot
343
+ },
344
+ this.errorHandler.reject
345
+ );
346
+ }
347
+
348
+ cloneItem (newItemId: number, itemResource: any, options: any) {
349
+ return this.addSingleItem(
350
+ this.itemHandler.cloneItem(newItemId, itemResource.entry),
351
+ options
352
+ );
353
+ }
354
+
355
+ cloneCollection (collectionResource: any, options: any, conversionMap: any) {
356
+ return this.addCollection(
357
+ this.collectionHandler.clone(
358
+ collectionResource.entry,
359
+ this.collectionEntryService.processOptions(options),
360
+ conversionMap
361
+ ),
362
+ options
363
+ );
364
+ }
365
+
366
+ /**
367
+ * @deprecated
368
+ */
369
+ saveCurrentTab (closeTab, parameters, breakupByParent, onAfterCreateCallback, keepTabHeading) {
370
+ return this.saveCurrentResourceCache(closeTab, parameters, breakupByParent, onAfterCreateCallback, keepTabHeading);
371
+ }
372
+
373
+ saveCurrentResourceCache (closeTab: boolean, parameters: any, breakupByParent = false, onAfterCreateCallback: any, keepTabHeading = false) {
374
+ return this.getResourceCache()
375
+ .save(closeTab, parameters, breakupByParent, onAfterCreateCallback).then(
376
+ conversionMap => {
377
+ if (closeTab)
378
+ return conversionMap;
379
+
380
+ return this.resourceCacheInterface.updateTabParams(conversionMap, !keepTabHeading).then(
381
+ () => conversionMap,
382
+ this.errorHandler.reject
383
+ );
384
+ },
385
+ this.errorHandler.reject
386
+ );
387
+ }
388
+
389
+ getCurrentCollections () {
390
+ return this.getResourceCache().collections;
391
+ }
392
+
393
+ getCurrentItems () {
394
+ return this.getResourceCache().items;
395
+ }
396
+
397
+ getCurrentChanges () {
398
+ const resourceCache = this.getResourceCache();
399
+
400
+ if (resourceCache.rootItem === undefined)
401
+ throw new Error('itemAdministrator: No root item!');
402
+
403
+ return this.moduleChangesCompilerFactory.construct(resourceCache.rootItem, resourceCache.items, resourceCache.collections).process();
404
+ }
405
+
406
+ // used in timeRegistrationController
407
+ addSingleItem (itemEntry: any, options: any, isRoot?: boolean) {
408
+ return this.getResourceCache().addSingleItem(itemEntry, options, isRoot);
409
+ }
410
+
411
+ addSingleItems (itemEntries: any[], options: any) {
412
+ const resourceCache = this.getResourceCache();
413
+ const result = [];
414
+
415
+ for (const itemEntry of itemEntries)
416
+ result.push(resourceCache.addSingleItem(itemEntry, options, false));
417
+
418
+ return result;
419
+ }
420
+
421
+ // used in warehouseItemCacheFactory
422
+ addCollection (collectionEntry: any, resourceOptions: any, processOptions?: any) {
423
+ if (processOptions === undefined)
424
+ processOptions = true;
425
+
426
+ return this.getResourceCache().addCollection(
427
+ collectionEntry,
428
+ processOptions ? this.collectionEntryService.processOptions(resourceOptions) : resourceOptions
429
+ );
430
+ }
431
+
432
+ addCollections (collectionEntries: any[], resourceOptions: any) {
433
+ const resourceCache = this.getResourceCache();
434
+ const result = {};
435
+
436
+ for (const parentId in collectionEntries) {
437
+ result[parentId] = resourceCache.addCollection(
438
+ collectionEntries[parentId],
439
+ resourceOptions
440
+ );
441
+ }
442
+
443
+ return result;
444
+ }
445
+
446
+ processLinkedItems (linkedEntries: any[], options: any, addToCollections: boolean) {
447
+ const resourceCache = this.getResourceCache();
448
+ const collectionCache = resourceCache.collections;
449
+ const itemResources = {};
450
+
451
+ for (const entry of linkedEntries) {
452
+ const itemType = entry.itemType;
453
+ const itemEntries = entry.itemEntries;
454
+ const collectionMap = {};
455
+
456
+ itemResources[itemType] = [];
457
+
458
+ for (const itemEntry of itemEntries) {
459
+ itemResources[itemType].push(resourceCache.addSingleItem(itemEntry, options, false));
460
+
461
+ if (addToCollections)
462
+ this.collectionHandler.expandCollectionMap(itemEntry, collectionMap, collectionCache);
463
+
464
+ if (itemType === 'Projectnotitie') {
465
+ createPath(
466
+ resourceCache.tabRequestParameters,
467
+ [itemEntry.itemType, itemEntry.itemId],
468
+ [{}, {no_notification: true}]
469
+ );
470
+ }
471
+ }
472
+
473
+ // the itemEntries are in top-down order, so call for each item type separately
474
+ if (addToCollections)
475
+ this.collectionHandler.addToCollections(collectionMap, false);
476
+ }
477
+
478
+ return itemResources;
479
+ }
480
+
481
+ /**
482
+ * @deprecated
483
+ */
484
+ getTabEntry (): ResourceCache {
485
+ return this.getResourceCache();
486
+ }
487
+
488
+ getResourceCache (): ResourceCache {
489
+ return this.resourceCacheInterface.getCacheManager(this.authInterface.getUserId());
490
+ }
491
+
492
+ /**
493
+ * @deprecated
494
+ */
495
+ resetTabEntry () {
496
+ return this.resetResourceCache();
497
+ }
498
+
499
+ resetResourceCache () {
500
+ const oldResourceCache = this.getResourceCache();
501
+ const resourceCache = this.resourceCacheFactory.construct();
502
+
503
+ oldResourceCache.clearResources();
504
+
505
+ this.resourceCacheInterface.setCacheManager(this.authInterface.getUserId(), resourceCache);
506
+ }
507
+
508
+ addToCollections (itemEntries: any[], resultCollectionResource: any) {
509
+ return this.collectionHandler.addToCollections(
510
+ this.createCollectionMap(itemEntries, true),
511
+ false,
512
+ resultCollectionResource
513
+ );
514
+ }
515
+
516
+ removeFromCollections (itemEntries: any[], resultCollectionResource) {
517
+ return this.collectionHandler.removeFromCollections(
518
+ this.createCollectionMap(itemEntries, false),
519
+ false,
520
+ resultCollectionResource
521
+ );
522
+ }
523
+
524
+ updateItemIdMap (collectionMap: any, conversionMap) {
525
+ if (conversionMap === undefined)
526
+ return;
527
+
528
+ for (const oldId in conversionMap) {
529
+ const newId = conversionMap[oldId];
530
+
531
+ if (collectionMap[oldId] === undefined)
532
+ continue;
533
+
534
+ collectionMap[newId] = collectionMap[oldId];
535
+ delete collectionMap[oldId];
536
+ }
537
+ }
538
+
539
+ createCollectionResource (collectionEntry: any, resourceOptions: any, processOptions?: any) {
540
+ return this.addCollection(collectionEntry, resourceOptions, processOptions);
541
+ }
542
+
543
+ createItemResource (itemEntry: any, options: any, isRoot: boolean) {
544
+ return this.addSingleItem(itemEntry, options, isRoot);
545
+ }
546
+
547
+ createItemResources (itemEntries: any[], options: any) {
548
+ return this.addSingleItems(itemEntries, options);
549
+ }
550
+
551
+ /**
552
+ * @deprecated
553
+ */
554
+ onBeforeSave (key: string, callback) {
555
+ return this.getResourceCache().registerCallback('onBeforeSave', key, callback);
556
+ }
557
+
558
+ /**
559
+ * @deprecated
560
+ */
561
+ onSaveSuccess (key: string, callback) {
562
+ return this.getResourceCache().registerCallback('onSaveSuccess', key, callback);
563
+ }
564
+
565
+ /**
566
+ * @deprecated
567
+ */
568
+ onSaveWithoutClosing (key: string, callback) {
569
+ return this.getResourceCache().registerCallback('onSaveWithoutClosing', key, callback);
570
+ }
571
+ }