@rentman/rm-core 1.0.0 → 1.0.2

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 (126) hide show
  1. package/dist/definitions/classes/ApiFormatter.d.ts +36 -0
  2. package/dist/definitions/classes/BatchStatus.d.ts +16 -0
  3. package/dist/definitions/classes/ChangesCompiler.d.ts +34 -0
  4. package/dist/definitions/classes/ChangesProcessor.d.ts +46 -0
  5. package/dist/definitions/classes/CollectionCache.d.ts +39 -0
  6. package/dist/definitions/classes/CollectionEntryService.d.ts +15 -0
  7. package/dist/definitions/classes/CollectionHandler.d.ts +79 -0
  8. package/dist/definitions/classes/CollectionResourceService.d.ts +5 -0
  9. package/dist/definitions/classes/ColumnCache.d.ts +18 -0
  10. package/dist/definitions/classes/ColumnExpansion.d.ts +16 -0
  11. package/dist/definitions/classes/ColumnHandler.d.ts +19 -0
  12. package/dist/definitions/classes/ColumnSet.d.ts +54 -0
  13. package/dist/definitions/classes/ColumnUtil.d.ts +80 -0
  14. package/dist/definitions/classes/CreateRequest.d.ts +28 -0
  15. package/dist/definitions/classes/ItemAdministrator.d.ts +114 -0
  16. package/dist/definitions/classes/ItemCache.d.ts +22 -0
  17. package/dist/definitions/classes/ItemEntryService.d.ts +50 -0
  18. package/dist/definitions/classes/ItemHandler.d.ts +70 -0
  19. package/dist/definitions/classes/ItemRequestService.d.ts +31 -0
  20. package/dist/definitions/classes/ItemResourceService.d.ts +8 -0
  21. package/dist/definitions/classes/KeyService.d.ts +28 -0
  22. package/dist/definitions/classes/LockService.d.ts +25 -0
  23. package/dist/definitions/classes/ModuleChangesCompiler.d.ts +18 -0
  24. package/dist/definitions/classes/PromiseService.d.ts +10 -0
  25. package/dist/definitions/classes/QueryMatcher.d.ts +14 -0
  26. package/dist/definitions/classes/QueryParser.d.ts +16 -0
  27. package/dist/definitions/classes/QueryService.d.ts +19 -0
  28. package/dist/definitions/classes/RequestColumnExpansion.d.ts +9 -0
  29. package/dist/definitions/classes/ResourceCache.d.ts +78 -0
  30. package/dist/definitions/classes/Util.d.ts +25 -0
  31. package/dist/definitions/constants.d.ts +10 -0
  32. package/dist/definitions/factories/BatchStatusFactory.d.ts +8 -0
  33. package/dist/definitions/factories/ChangesCompilerFactory.d.ts +9 -0
  34. package/dist/definitions/factories/ChangesProcessorFactory.d.ts +31 -0
  35. package/{src/factories/CollectionCacheFactory.ts → dist/definitions/factories/CollectionCacheFactory.d.ts} +3 -11
  36. package/dist/definitions/factories/CollectionEntryFactory.d.ts +19 -0
  37. package/dist/definitions/factories/CollectionResourceFactory.d.ts +18 -0
  38. package/dist/definitions/factories/ColumnExpansionFactory.d.ts +11 -0
  39. package/dist/definitions/factories/ColumnSetFactory.d.ts +9 -0
  40. package/dist/definitions/factories/CreateRequestFactory.d.ts +13 -0
  41. package/dist/definitions/factories/ItemCacheFactory.d.ts +9 -0
  42. package/dist/definitions/factories/ItemEntryFactory.d.ts +6 -0
  43. package/dist/definitions/factories/ItemResourceFactory.d.ts +12 -0
  44. package/{src/factories/ModuleChangesCompilerFactory.ts → dist/definitions/factories/ModuleChangesCompilerFactory.d.ts} +3 -14
  45. package/dist/definitions/factories/QueryMatcherFactory.d.ts +7 -0
  46. package/dist/definitions/factories/QueryParserFactory.d.ts +5 -0
  47. package/{src/factories/RequestColumnExpansionFactory.ts → dist/definitions/factories/RequestColumnExpansionFactory.d.ts} +3 -11
  48. package/dist/definitions/factories/ResourceCacheFactory.d.ts +33 -0
  49. package/dist/definitions/index.d.ts +121 -0
  50. package/dist/definitions/interfaces/ApiRequestServiceInterface.d.ts +10 -0
  51. package/dist/definitions/interfaces/AuthInterface.d.ts +4 -0
  52. package/{src/interfaces/ErrorHandlerInterface.ts → dist/definitions/interfaces/ErrorHandlerInterface.d.ts} +2 -2
  53. package/dist/definitions/interfaces/ResourceCacheInterface.d.ts +6 -0
  54. package/dist/definitions/models/CollectionEditResource.d.ts +23 -0
  55. package/dist/definitions/models/CollectionEntry.d.ts +61 -0
  56. package/dist/definitions/models/CollectionResource.d.ts +29 -0
  57. package/{src/models/CollectionViewResource.ts → dist/definitions/models/CollectionViewResource.d.ts} +6 -13
  58. package/dist/definitions/models/EditResource.d.ts +7 -0
  59. package/dist/definitions/models/ItemEntry.d.ts +18 -0
  60. package/dist/definitions/models/ItemResource.d.ts +14 -0
  61. package/dist/definitions/models/ViewResource.d.ts +7 -0
  62. package/dist/rm-core.js +29 -0
  63. package/dist/rm-core.js.map +1 -0
  64. package/package.json +5 -1
  65. package/.editorconfig +0 -23
  66. package/src/classes/ApiFormatter.ts +0 -338
  67. package/src/classes/BatchStatus.ts +0 -86
  68. package/src/classes/ChangesCompiler.ts +0 -161
  69. package/src/classes/ChangesProcessor.ts +0 -475
  70. package/src/classes/CollectionCache.ts +0 -234
  71. package/src/classes/CollectionEntryService.ts +0 -83
  72. package/src/classes/CollectionHandler.ts +0 -619
  73. package/src/classes/CollectionResourceService.ts +0 -38
  74. package/src/classes/ColumnCache.ts +0 -114
  75. package/src/classes/ColumnExpansion.ts +0 -74
  76. package/src/classes/ColumnHandler.ts +0 -90
  77. package/src/classes/ColumnSet.ts +0 -181
  78. package/src/classes/ColumnUtil.ts +0 -589
  79. package/src/classes/CreateRequest.ts +0 -158
  80. package/src/classes/ItemAdministrator.ts +0 -571
  81. package/src/classes/ItemCache.ts +0 -158
  82. package/src/classes/ItemEntryService.ts +0 -488
  83. package/src/classes/ItemHandler.ts +0 -592
  84. package/src/classes/ItemRequestService.ts +0 -229
  85. package/src/classes/ItemResourceService.ts +0 -36
  86. package/src/classes/KeyService.ts +0 -76
  87. package/src/classes/LockService.ts +0 -184
  88. package/src/classes/ModuleChangesCompiler.ts +0 -123
  89. package/src/classes/PromiseService.ts +0 -19
  90. package/src/classes/QueryMatcher.ts +0 -135
  91. package/src/classes/QueryParser.ts +0 -209
  92. package/src/classes/QueryService.ts +0 -35
  93. package/src/classes/RequestColumnExpansion.ts +0 -31
  94. package/src/classes/ResourceCache.ts +0 -289
  95. package/src/classes/Util.ts +0 -422
  96. package/src/constants.ts +0 -11
  97. package/src/factories/BatchStatusFactory.ts +0 -18
  98. package/src/factories/ChangesCompilerFactory.ts +0 -20
  99. package/src/factories/ChangesProcessorFactory.ts +0 -53
  100. package/src/factories/CollectionEntryFactory.ts +0 -35
  101. package/src/factories/CollectionResourceFactory.ts +0 -36
  102. package/src/factories/ColumnExpansionFactory.ts +0 -25
  103. package/src/factories/ColumnSetFactory.ts +0 -24
  104. package/src/factories/CreateRequestFactory.ts +0 -28
  105. package/src/factories/ItemCacheFactory.ts +0 -18
  106. package/src/factories/ItemEntryFactory.ts +0 -18
  107. package/src/factories/ItemResourceFactory.ts +0 -28
  108. package/src/factories/QueryMatcherFactory.ts +0 -20
  109. package/src/factories/QueryParserFactory.ts +0 -10
  110. package/src/factories/ResourceCacheFactory.ts +0 -55
  111. package/src/index.ts +0 -188
  112. package/src/interfaces/ApiRequestServiceInterface.ts +0 -17
  113. package/src/interfaces/AuthInterface.ts +0 -5
  114. package/src/interfaces/ResourceCacheInterface.ts +0 -9
  115. package/src/models/CollectionEditResource.ts +0 -139
  116. package/src/models/CollectionEntry.ts +0 -448
  117. package/src/models/CollectionResource.ts +0 -223
  118. package/src/models/EditResource.ts +0 -15
  119. package/src/models/ItemEntry.ts +0 -24
  120. package/src/models/ItemResource.ts +0 -35
  121. package/src/models/ViewResource.ts +0 -14
  122. package/tsconfig.json +0 -12
  123. package/tslint.json +0 -63
  124. package/webpack.common.js +0 -35
  125. package/webpack.dev.js +0 -10
  126. package/webpack.prod.js +0 -17
@@ -1,158 +0,0 @@
1
- import QueryMatcherFactory from "../factories/QueryMatcherFactory";
2
- import ItemEntry from "../models/ItemEntry";
3
- import ItemEntryService from "./ItemEntryService";
4
-
5
- export default class ItemCache {
6
- entries = {};
7
-
8
- constructor (
9
- private queryMatcherFactory: QueryMatcherFactory,
10
- private itemEntryService: ItemEntryService
11
- ) {
12
- }
13
-
14
- some (callback) {
15
- for (const itemType in this.entries) {
16
- for (const itemId in this.entries[itemType]) {
17
- if (callback(this.entries[itemType][itemId]))
18
- return true;
19
- }
20
- }
21
-
22
- return false;
23
- }
24
-
25
- getByItemType (itemType) {
26
- const result = [];
27
-
28
- if (this.entries[itemType] === undefined)
29
- return result;
30
-
31
- for (const itemId in this.entries[itemType])
32
- result.push(this.entries[itemType][itemId]);
33
-
34
- return result;
35
- }
36
-
37
- getByQuery (itemType, query) {
38
- const result = [];
39
-
40
- if (this.entries[itemType] === undefined)
41
- return result;
42
-
43
- for (const itemId in this.entries[itemType]) {
44
- const itemEntry = this.entries[itemType][itemId];
45
-
46
- if (this.matchQuery(itemEntry, query))
47
- result.push(itemEntry);
48
- }
49
-
50
- return result;
51
- }
52
-
53
- getLocalByQuery (itemType, query) {
54
- const result = [];
55
-
56
- if (this.entries[itemType] === undefined)
57
- return result;
58
-
59
- for (const itemId in this.entries[itemType]) {
60
- const itemEntry = this.entries[itemType][itemId];
61
-
62
- if (!this.itemEntryService.isLocal(itemEntry))
63
- continue;
64
-
65
- if (this.matchQuery(itemEntry, query))
66
- result.push(itemEntry);
67
- }
68
-
69
- return result;
70
- }
71
-
72
- forEach (callback) {
73
- for (const itemType in this.entries) {
74
- for (const itemId in this.entries[itemType])
75
- callback(this.entries[itemType][itemId]);
76
- }
77
- }
78
-
79
- toArray () {
80
- const result = [];
81
-
82
- for (const itemType in this.entries) {
83
- for (const itemId in this.entries[itemType])
84
- result.push(this.entries[itemType][itemId]);
85
- }
86
-
87
- return result;
88
- }
89
-
90
- add (itemEntry: ItemEntry) {
91
- const itemType = itemEntry.itemType;
92
-
93
- if (this.entries[itemType] === undefined)
94
- this.entries[itemType] = {};
95
-
96
- return this.entries[itemType][itemEntry.itemId] = itemEntry;
97
- }
98
-
99
- get (itemType, itemId) {
100
- return this.entries[itemType] === undefined ? undefined : this.entries[itemType][itemId];
101
- }
102
-
103
- getByParent (parentType, parentId, itemType) {
104
- const result = [];
105
-
106
- if (this.entries[itemType] === undefined)
107
- return result;
108
-
109
- for (const itemId in this.entries[itemType]) {
110
- const itemEntry = this.entries[itemType][itemId];
111
- const parent = itemEntry.parent;
112
-
113
- if (parent === undefined)
114
- continue;
115
-
116
- if (parentType === parent.itemType && parentId == parent.itemId)
117
- result.push(itemEntry);
118
- }
119
-
120
- return result;
121
- }
122
-
123
- // should be fast
124
- contains (itemType, itemId) {
125
- return this.entries[itemType] !== undefined &&
126
- this.entries[itemType][itemId] !== undefined;
127
- }
128
-
129
- updateItemId (itemEntry: ItemEntry, oldItemId) {
130
- const entryMap = this.entries[itemEntry.itemType];
131
-
132
- delete entryMap[oldItemId];
133
- return entryMap[itemEntry.itemId] = itemEntry;
134
- }
135
-
136
- clear (itemEntry: ItemEntry) {
137
- if (itemEntry === undefined) {
138
- this.entries = {};
139
- return true;
140
- }
141
-
142
- if (this.entries[itemEntry.itemType] === undefined)
143
- return false;
144
-
145
- return delete this.entries[itemEntry.itemType][itemEntry.itemId];
146
- }
147
-
148
- matchQuery (itemEntry: ItemEntry, query) {
149
- const parent: any = itemEntry.parent !== undefined ? itemEntry.parent : {};
150
- const queryMatcher = this.queryMatcherFactory.construct(
151
- parent.itemType,
152
- parent.itemId,
153
- this.itemEntryService.getFields(itemEntry)
154
- );
155
-
156
- return queryMatcher.matchQuery(query.object) === true; // TODO: maybe?
157
- }
158
- }
@@ -1,488 +0,0 @@
1
- import * as moment from 'moment';
2
- import ApiFormatter from './ApiFormatter';
3
- import KeyService from './KeyService';
4
- import PromiseService from "./PromiseService";
5
- import { shallowMerge } from './Util';
6
-
7
- export default class ItemEntryService {
8
- // todo: translate
9
- undefinedItemError = 'Het opgevraagde item bestaat niet / Je hebt niet voldoende rechten om dit item te bekijken';
10
- ALL_PERMISSIONS = 7;
11
-
12
- constructor (
13
- private apiFormatter: ApiFormatter,
14
- private keyService: KeyService,
15
- private promiseService: PromiseService
16
- ) {
17
-
18
- }
19
-
20
- resetDerived (itemEntry, columnIds) {
21
- const rootColumns = itemEntry.columns.root;
22
- const filteredColumns = [];
23
-
24
- for (const column of rootColumns) {
25
- if (columnIds.indexOf(column.id) !== -1)
26
- filteredColumns.push(column);
27
- }
28
-
29
- resetDerivedRecursively(filteredColumns);
30
-
31
- function resetDerivedRecursively (columns) {
32
- for (const column of columns) {
33
- if (!column.isLeaf)
34
- resetDerivedRecursively(column.children);
35
-
36
- delete itemEntry.derived[column.path];
37
- }
38
- }
39
- }
40
-
41
- defer (itemEntry, deferRequest) {
42
- itemEntry.deferred = this.promiseService.defer();
43
- itemEntry.deferRequest = deferRequest;
44
-
45
- return itemEntry;
46
- }
47
-
48
- resolve (itemEntry) {
49
- const deferred = itemEntry.deferred;
50
-
51
- // the resolve function might defer the item again, so delete the properties first
52
- delete itemEntry.deferred;
53
- delete itemEntry.deferRequest;
54
-
55
- deferred.resolve(itemEntry);
56
- return itemEntry;
57
- }
58
-
59
- reject (itemEntry, error = this.undefinedItemError) {
60
- itemEntry.deferred.reject(error);
61
-
62
- delete itemEntry.deferred;
63
- delete itemEntry.deferRequest;
64
-
65
- return itemEntry;
66
- }
67
-
68
- clearResources (itemEntry) {
69
- itemEntry.resources = [];
70
- }
71
-
72
- deactivateResources (itemEntry) {
73
- const resources = itemEntry.resources; // on of the deactivate callbacks might call clearResources
74
-
75
- for (const resource of resources)
76
- resource.deactivate();
77
- }
78
-
79
- getFields (itemEntry) {
80
- if (itemEntry.modified !== undefined)
81
- return itemEntry.modified;
82
-
83
- return itemEntry.initial;
84
- }
85
-
86
- // should be fast
87
- expand (entry, main, derived, expandResource) {
88
- const difference = expandResource.difference;
89
- entry.columns = expandResource.merged;
90
-
91
- this.apiFormatter.expandResponse(
92
- entry.initial,
93
- main,
94
- difference.main
95
- );
96
-
97
- this.apiFormatter.expandResponse(
98
- entry.derived,
99
- derived,
100
- difference.derived
101
- );
102
-
103
- if (entry.modified === undefined)
104
- return entry;
105
-
106
- this.apiFormatter.expandResponse(
107
- entry.modified,
108
- main,
109
- difference.main
110
- );
111
-
112
- return entry;
113
- }
114
-
115
- processOptions (options) {
116
- return shallowMerge(
117
- options,
118
- {
119
- columns: true,
120
- parent: null,
121
- templateOptions: {},
122
- templateColumns: {},
123
- deferRequest: false
124
- }
125
- );
126
- }
127
-
128
- getConversionValue (itemType, itemId, map) {
129
- if (map[itemType] === undefined)
130
- return undefined;
131
-
132
- return map[itemType][itemId];
133
- }
134
-
135
- // key: initial / modified
136
- // fields *haven't* been formatted yet
137
- updateFields (entry, source, overwrite = true) {
138
- const mainColumns = entry.columns.main;
139
- const formattedColumns = entry.columns.formatted.main;
140
- const initial = entry.initial;
141
- const modified = entry.modified;
142
-
143
- if (modified !== undefined) {
144
- for (const column of mainColumns) {
145
- const columnId = column.id;
146
-
147
- if (overwrite || this.apiFormatter.compareFields(column.apiColumn.type, initial[columnId], modified[columnId]))
148
- modified[columnId] = source[columnId];
149
- }
150
-
151
- this.apiFormatter.formatResponse(modified, formattedColumns);
152
- }
153
-
154
- for (const column of mainColumns) {
155
- const columnId = column.id;
156
-
157
- initial[columnId] = source[columnId];
158
- }
159
-
160
- this.apiFormatter.formatResponse(initial, formattedColumns);
161
-
162
- return entry;
163
- }
164
-
165
- updateItemValue (entry, fields, apiColumn, conversionMap) {
166
- const columnId = apiColumn.id;
167
- const currentValue = fields[columnId];
168
-
169
- let newValue;
170
-
171
- if (apiColumn.type === 'link' && currentValue === undefined) {
172
- if (entry.parent !== undefined)
173
- newValue = entry.parent.itemId;
174
- } else
175
- newValue = this.getConversionValue(apiColumn.itemType, currentValue, conversionMap);
176
-
177
- if (newValue !== undefined)
178
- fields[columnId] = newValue;
179
- }
180
-
181
- updateItemFields (entry, conversionMap) {
182
- const itemColumns = entry.columns.item;
183
- const initial = entry.initial;
184
- const modified = entry.modified;
185
-
186
- for (const column of itemColumns) {
187
- const apiColumn = column.apiColumn;
188
-
189
- this.updateItemValue(entry, initial, apiColumn, conversionMap);
190
-
191
- if (modified === undefined)
192
- continue;
193
-
194
- this.updateItemValue(entry, modified, apiColumn, conversionMap);
195
- }
196
- }
197
-
198
- process (entry) {
199
- const formattedColumns = entry.columns.formatted;
200
-
201
- this.apiFormatter.formatResponse(entry.initial, formattedColumns.main);
202
- this.apiFormatter.formatResponse(entry.derived, formattedColumns.derived);
203
-
204
- return entry;
205
- }
206
-
207
- formatRequest (entry) {
208
- if (entry.modified === undefined)
209
- return {};
210
-
211
- return this.apiFormatter.formatRequest(
212
- this.keyService.isLocalId(entry.itemId) ? {} : entry.initial,
213
- entry.modified,
214
- entry.columns.main
215
- );
216
- }
217
-
218
- setDisplayName (entry) {
219
- if (entry.modified === undefined)
220
- return;
221
-
222
- const result = this.getDisplayName(entry);
223
-
224
- if (result)
225
- entry.modified.displayname = result;
226
- }
227
-
228
- getDisplayName (entry) {
229
- const fields = typeof entry.modified === 'undefined' ?
230
- entry.initial : entry.modified;
231
-
232
- switch (entry.itemType) {
233
- case 'Contact':
234
- return fields.type === 'bedrijf' ?
235
- fields.bedrijf : this.getFullName(
236
- fields.voornaam,
237
- fields.tussenvoegsel,
238
- fields.naam
239
- );
240
- case 'Medewerker':
241
- case 'Person':
242
- return this.getFullName(
243
- fields.voornaam,
244
- fields.tussenvoegsel,
245
- fields.achternaam
246
- );
247
- case 'Reparatie':
248
- return entry.derived['materiaal>naam']; // TODO!
249
- default:
250
- return fields[this.getTitleField(entry.itemType)];
251
- }
252
- }
253
-
254
- getFullName (firstName, infix, lastName) {
255
- return firstName.trim()
256
- .concat(' ', infix).trim() // infix can be an empty string
257
- .concat(' ', lastName);
258
- }
259
-
260
- getTitleField (itemType) {
261
- switch (itemType) {
262
- case 'Exemplaar':
263
- return 'serienummer';
264
- case 'Factuur':
265
- return 'nummer';
266
- case 'Files':
267
- return 'friendlyname';
268
- case 'Functie':
269
- case 'Standaardfunctie':
270
- return 'naamintern';
271
- case 'Voorraadmutatie':
272
- return 'omschrijving';
273
- case 'Barcode':
274
- return 'code';
275
- case 'Betaalmiddel':
276
- case 'Betalingsconditie':
277
- case 'Briefpapier':
278
- case 'TaxClass':
279
- case 'TaxSchema':
280
- case 'Condition':
281
- case 'Factuurmoment':
282
- case 'Functiegroep':
283
- case 'Grootboek':
284
- case 'Inhuur':
285
- case 'Inhuurgroep':
286
- case 'Inhuurmateriaal':
287
- case 'Materiaal':
288
- case 'MateriaalCat':
289
- case 'Medewerkertarief':
290
- case 'Notitie':
291
- case 'Planningmateriaal':
292
- case 'Project':
293
- case 'Staffelgroep':
294
- case 'Subproject':
295
- case 'Taak':
296
- case 'Tag':
297
- case 'Template':
298
- case 'Tijd':
299
- case 'Titel':
300
- case 'Type':
301
- case 'Voertuig':
302
- return 'naam';
303
- // case 'Contact':
304
- // case 'Medewerker':
305
- // case 'Person':
306
- default:
307
- // only use displayname for items that dont't have a simple, writable name field
308
- // this function is also used for templated items
309
- return 'displayname';
310
- }
311
- }
312
-
313
- /**
314
- *
315
- * @param {Object} entry
316
- * @param {Boolean} returnAll Returns all initial values if true
317
- * @returns {Object}
318
- */
319
- getChanges (entry, returnAll) {
320
- if (entry.modified === undefined && !returnAll)
321
- return [];
322
-
323
- return this.apiFormatter.getChanges(
324
- entry.initial,
325
- returnAll ? {} : entry.modified,
326
- entry.columns.main
327
- );
328
- }
329
-
330
- isLocal (entry) {
331
- return this.keyService.isLocalId(entry.itemId);
332
- }
333
-
334
- isLockable (entry) {
335
- if (this.isLocal(entry))
336
- return false;
337
-
338
- switch (entry.itemType) {
339
- case 'Project':
340
- case 'Materiaal':
341
- case 'Contact':
342
- case 'Medewerker':
343
- case 'Voertuig':
344
- case 'Template':
345
- return true;
346
- default:
347
- return false;
348
- }
349
- }
350
-
351
- hasChanges (entry) {
352
- if (entry.modified === undefined)
353
- return false;
354
-
355
- return this.apiFormatter.hasChanges(
356
- entry.initial,
357
- entry.modified,
358
- entry.columns.main
359
- );
360
- }
361
-
362
- resetModified (entry) {
363
- const columns = entry.columns.main;
364
-
365
- if (entry.modified === undefined)
366
- return;
367
-
368
- for (const column of columns) {
369
- entry.modified[column.id] = this.apiFormatter.clone(
370
- column.apiColumn.type,
371
- entry.initial[column.id]
372
- );
373
- }
374
- }
375
-
376
- setInitial (entry, values, enableCallbacks) {
377
- let previous;
378
-
379
- for (const columnId in values)
380
- entry.initial[columnId] = values[columnId];
381
-
382
- if (entry.modified === undefined) {
383
- if (enableCallbacks)
384
- this.callOnChange(entry, this.apiFormatter.copyFields(entry.initial, {}, entry.columns.main));
385
-
386
- return entry;
387
- }
388
-
389
- previous = this.apiFormatter.copyFields(entry.modified, {}, entry.columns.main);
390
-
391
- for (const columnId in values)
392
- entry.modified[columnId] = values[columnId];
393
-
394
- if (enableCallbacks)
395
- this.callOnChange(entry, previous);
396
-
397
- return entry;
398
- }
399
-
400
- /**
401
- * Does a shallow copy of values!
402
- */
403
- setModified (entry, values?) {
404
- const columns = entry.columns;
405
- const responseColumns = columns.response[entry.itemType];
406
-
407
- if (entry.modified === undefined) {
408
- const resources = entry.resources;
409
- const initial = entry.initial;
410
- const modified = entry.modified = {};
411
-
412
- if (values === undefined)
413
- this.apiFormatter.copyFields(initial, modified, columns.main);
414
- else {
415
- this.apiFormatter.shallowCopyFields(values, initial, modified, columns.main);
416
-
417
- for (const columnId in values) {
418
- if (responseColumns[columnId] === undefined) {
419
- // todo: dev mode constant
420
- // if (DEV_MODE)
421
- // console.warn('setModified: no column found for', columnId);
422
-
423
- modified[columnId] = values[columnId];
424
- }
425
- }
426
- }
427
-
428
- for (const resource of resources)
429
- resource.fields = modified;
430
-
431
- return entry;
432
- }
433
-
434
- if (values === undefined)
435
- return entry;
436
-
437
- for (const columnId in values) {
438
- // todo: dev mode constant
439
- // if (DEV_MODE) {
440
- // if (responseColumns[columnId] === undefined)
441
- // console.warn('setModified: no column found for', columnId);
442
- // }
443
-
444
- entry.modified[columnId] = values[columnId];
445
- }
446
-
447
- return entry;
448
- }
449
-
450
- setDerived (entry, values) {
451
- for (const key in values)
452
- entry.derived[key] = values[key];
453
-
454
- return entry;
455
- }
456
-
457
- processLocal (entry, initial, modified, derived, conversionMap) {
458
- entry.initial = {permissions: this.ALL_PERMISSIONS};
459
-
460
- this.updateFields(entry, initial);
461
- this.updateItemFields(entry, conversionMap);
462
-
463
- this.setModified(entry, modified);
464
-
465
- entry.modified.created = moment();
466
- entry.derived = derived;
467
-
468
- return entry;
469
- }
470
-
471
- setParent (entry, parentType, parentId) {
472
- entry.parent = {
473
- itemType: parentType,
474
- itemId: parentId
475
- };
476
-
477
- return entry;
478
- }
479
-
480
- callOnChange (entry, previous) {
481
- for (let i = 0, l = entry.resources.length; i < l; i++) {
482
- const itemResource = entry.resources[i];
483
-
484
- if (itemResource !== null)
485
- itemResource.options.onChange(itemResource, previous);
486
- }
487
- }
488
- }