@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.
- package/.editorconfig +23 -0
- package/package.json +33 -0
- package/src/classes/ApiFormatter.ts +338 -0
- package/src/classes/BatchStatus.ts +86 -0
- package/src/classes/ChangesCompiler.ts +161 -0
- package/src/classes/ChangesProcessor.ts +475 -0
- package/src/classes/CollectionCache.ts +234 -0
- package/src/classes/CollectionEntryService.ts +83 -0
- package/src/classes/CollectionHandler.ts +619 -0
- package/src/classes/CollectionResourceService.ts +38 -0
- package/src/classes/ColumnCache.ts +114 -0
- package/src/classes/ColumnExpansion.ts +74 -0
- package/src/classes/ColumnHandler.ts +90 -0
- package/src/classes/ColumnSet.ts +181 -0
- package/src/classes/ColumnUtil.ts +589 -0
- package/src/classes/CreateRequest.ts +158 -0
- package/src/classes/ItemAdministrator.ts +571 -0
- package/src/classes/ItemCache.ts +158 -0
- package/src/classes/ItemEntryService.ts +488 -0
- package/src/classes/ItemHandler.ts +592 -0
- package/src/classes/ItemRequestService.ts +229 -0
- package/src/classes/ItemResourceService.ts +36 -0
- package/src/classes/KeyService.ts +76 -0
- package/src/classes/LockService.ts +184 -0
- package/src/classes/ModuleChangesCompiler.ts +123 -0
- package/src/classes/PromiseService.ts +19 -0
- package/src/classes/QueryMatcher.ts +135 -0
- package/src/classes/QueryParser.ts +209 -0
- package/src/classes/QueryService.ts +35 -0
- package/src/classes/RequestColumnExpansion.ts +31 -0
- package/src/classes/ResourceCache.ts +289 -0
- package/src/classes/Util.ts +422 -0
- package/src/constants.ts +11 -0
- package/src/factories/BatchStatusFactory.ts +18 -0
- package/src/factories/ChangesCompilerFactory.ts +20 -0
- package/src/factories/ChangesProcessorFactory.ts +53 -0
- package/src/factories/CollectionCacheFactory.ts +15 -0
- package/src/factories/CollectionEntryFactory.ts +35 -0
- package/src/factories/CollectionResourceFactory.ts +36 -0
- package/src/factories/ColumnExpansionFactory.ts +25 -0
- package/src/factories/ColumnSetFactory.ts +24 -0
- package/src/factories/CreateRequestFactory.ts +28 -0
- package/src/factories/ItemCacheFactory.ts +18 -0
- package/src/factories/ItemEntryFactory.ts +18 -0
- package/src/factories/ItemResourceFactory.ts +28 -0
- package/src/factories/ModuleChangesCompilerFactory.ts +21 -0
- package/src/factories/QueryMatcherFactory.ts +20 -0
- package/src/factories/QueryParserFactory.ts +10 -0
- package/src/factories/RequestColumnExpansionFactory.ts +15 -0
- package/src/factories/ResourceCacheFactory.ts +55 -0
- package/src/index.ts +188 -0
- package/src/interfaces/ApiRequestServiceInterface.ts +17 -0
- package/src/interfaces/AuthInterface.ts +5 -0
- package/src/interfaces/ErrorHandlerInterface.ts +3 -0
- package/src/interfaces/ResourceCacheInterface.ts +9 -0
- package/src/models/CollectionEditResource.ts +139 -0
- package/src/models/CollectionEntry.ts +448 -0
- package/src/models/CollectionResource.ts +223 -0
- package/src/models/CollectionViewResource.ts +23 -0
- package/src/models/EditResource.ts +15 -0
- package/src/models/ItemEntry.ts +24 -0
- package/src/models/ItemResource.ts +35 -0
- package/src/models/ViewResource.ts +14 -0
- package/tsconfig.json +12 -0
- package/tslint.json +63 -0
- package/webpack.common.js +35 -0
- package/webpack.dev.js +10 -0
- 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
|
+
}
|