@sankhyalabs/sankhyablocks 0.0.0-bugfix-dev-KB-74406.1 → 0.0.0-bugfix-dev-KB-83855.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 (79) hide show
  1. package/dist/cjs/{ClientSideExporterProvider-6b781452.js → ClientSideExporterProvider-2f5f350c.js} +1 -1
  2. package/dist/cjs/{dataunit-fetcher-8291ac21.js → dataunit-fetcher-449d51a3.js} +11 -161
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/pesquisa-grid_2.cjs.entry.js +1 -1
  5. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  6. package/dist/cjs/snk-actions-button_5.cjs.entry.js +1 -1
  7. package/dist/cjs/snk-application.cjs.entry.js +1 -1
  8. package/dist/cjs/snk-attach.cjs.entry.js +2 -2
  9. package/dist/cjs/snk-crud.cjs.entry.js +3 -2
  10. package/dist/cjs/snk-data-exporter.cjs.entry.js +2 -2
  11. package/dist/cjs/{snk-data-unit-d75e6220.js → snk-data-unit-bbd384bf.js} +4 -2
  12. package/dist/cjs/snk-data-unit.cjs.entry.js +2 -2
  13. package/dist/cjs/snk-detail-view.cjs.entry.js +5 -4
  14. package/dist/cjs/snk-grid.cjs.entry.js +2 -2
  15. package/dist/cjs/{snk-guides-viewer-a029ff50.js → snk-guides-viewer-495a2d2f.js} +2 -2
  16. package/dist/cjs/snk-guides-viewer.cjs.entry.js +2 -2
  17. package/dist/cjs/snk-pesquisa.cjs.entry.js +1 -1
  18. package/dist/cjs/snk-simple-crud.cjs.entry.js +2 -2
  19. package/dist/collection/components/snk-attach/structure/fetcher/factory/attach-fetcher-data-unit.factory.js +2 -3
  20. package/dist/collection/components/snk-crud/snk-crud.js +26 -1
  21. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.css +10 -1
  22. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +25 -1
  23. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +1 -1
  24. package/dist/collection/components/snk-data-unit/snk-data-unit.js +3 -1
  25. package/dist/collection/lib/dataUnit/InMemoryLoader.js +12 -101
  26. package/dist/collection/lib/dataUnit/dataUnitInMemoryUtils.js +7 -53
  27. package/dist/components/dataunit-fetcher.js +30 -179
  28. package/dist/components/snk-attach2.js +3 -3
  29. package/dist/components/snk-crud.js +4 -2
  30. package/dist/components/snk-data-unit2.js +3 -1
  31. package/dist/components/snk-detail-view2.js +5 -3
  32. package/dist/esm/{ClientSideExporterProvider-ff89c7e9.js → ClientSideExporterProvider-3537805a.js} +1 -1
  33. package/dist/esm/{dataunit-fetcher-5247a708.js → dataunit-fetcher-91b094f2.js} +13 -162
  34. package/dist/esm/loader.js +1 -1
  35. package/dist/esm/pesquisa-grid_2.entry.js +1 -1
  36. package/dist/esm/sankhyablocks.js +1 -1
  37. package/dist/esm/snk-actions-button_5.entry.js +1 -1
  38. package/dist/esm/snk-application.entry.js +1 -1
  39. package/dist/esm/snk-attach.entry.js +3 -3
  40. package/dist/esm/snk-crud.entry.js +4 -3
  41. package/dist/esm/snk-data-exporter.entry.js +2 -2
  42. package/dist/esm/{snk-data-unit-bfd10c71.js → snk-data-unit-b03bb5cf.js} +4 -2
  43. package/dist/esm/snk-data-unit.entry.js +2 -2
  44. package/dist/esm/snk-detail-view.entry.js +5 -4
  45. package/dist/esm/snk-grid.entry.js +2 -2
  46. package/dist/esm/{snk-guides-viewer-fa45714d.js → snk-guides-viewer-cd2814a0.js} +2 -2
  47. package/dist/esm/snk-guides-viewer.entry.js +2 -2
  48. package/dist/esm/snk-pesquisa.entry.js +1 -1
  49. package/dist/esm/snk-simple-crud.entry.js +2 -2
  50. package/dist/sankhyablocks/{p-b0ff53b7.entry.js → p-13391b3d.entry.js} +1 -1
  51. package/dist/sankhyablocks/p-23b47a92.js +1 -0
  52. package/dist/sankhyablocks/p-3653374d.js +60 -0
  53. package/dist/sankhyablocks/{p-c82deea7.entry.js → p-389ba782.entry.js} +1 -1
  54. package/dist/sankhyablocks/{p-f8db6795.entry.js → p-44efbeed.entry.js} +1 -1
  55. package/dist/sankhyablocks/p-4d87cd45.entry.js +1 -0
  56. package/dist/sankhyablocks/{p-e36f89d1.entry.js → p-4fa79d68.entry.js} +1 -1
  57. package/dist/sankhyablocks/p-51e88546.js +1 -0
  58. package/dist/sankhyablocks/{p-40e323f9.js → p-5dd7f4c7.js} +1 -1
  59. package/dist/sankhyablocks/{p-aa1a0f3e.entry.js → p-6234bda8.entry.js} +1 -1
  60. package/dist/sankhyablocks/p-64230808.entry.js +1 -0
  61. package/dist/sankhyablocks/{p-e10faff0.entry.js → p-647f9830.entry.js} +1 -1
  62. package/dist/sankhyablocks/{p-172848d4.entry.js → p-8ecac412.entry.js} +1 -1
  63. package/dist/sankhyablocks/{p-d2d0535f.entry.js → p-ad5e4f9d.entry.js} +1 -1
  64. package/dist/sankhyablocks/p-ca316523.entry.js +1 -0
  65. package/dist/sankhyablocks/{p-700a4cc3.entry.js → p-ee53b000.entry.js} +1 -1
  66. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  67. package/dist/types/components/snk-crud/snk-crud.d.ts +5 -0
  68. package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +5 -0
  69. package/dist/types/components.d.ts +17 -1
  70. package/dist/types/lib/dataUnit/InMemoryLoader.d.ts +4 -11
  71. package/dist/types/lib/dataUnit/dataUnitInMemoryUtils.d.ts +3 -6
  72. package/dist/types/lib/dataUnit/interfaces/InMemoryLoaderConfig.d.ts +2 -2
  73. package/package.json +1 -1
  74. package/dist/sankhyablocks/p-0b00d69c.entry.js +0 -1
  75. package/dist/sankhyablocks/p-29d08446.entry.js +0 -1
  76. package/dist/sankhyablocks/p-38179225.js +0 -60
  77. package/dist/sankhyablocks/p-655bdd60.js +0 -1
  78. package/dist/sankhyablocks/p-b02e58fd.entry.js +0 -1
  79. package/dist/sankhyablocks/p-de9da2f2.js +0 -1
@@ -1,4 +1,4 @@
1
- import { ObjectUtils, DataUnit, DataType, DateUtils, StringUtils, ChangeOperation, ApplicationContext, UserInterface, DataUnitStorage } from '@sankhyalabs/core';
1
+ import { DataUnitInMemoryLoader, ObjectUtils, DataUnit, ApplicationContext, StringUtils, UserInterface, DataUnitStorage, DataType, ChangeOperation } from '@sankhyalabs/core';
2
2
  import { D as DataFetcher, d as dist } from './DataFetcher.js';
3
3
  import { DISTINCT_FILTER_NAME_PREFIX } from '@sankhyalabs/ezui/dist/collection/utils/constants';
4
4
  import { DataUnitTransient } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
@@ -6,6 +6,34 @@ import { ColumnFilterManager } from '@sankhyalabs/ezui/dist/collection/component
6
6
  import SortingUtils from '@sankhyalabs/core/dist/utils/SortingUtils';
7
7
  import { R as ResourceIDUtils } from './ResourceIDUtils.js';
8
8
 
9
+ class InMemoryLoader {
10
+ constructor(metadata, records, config) {
11
+ this._dataUnitInMemoryLoader = new DataUnitInMemoryLoader(metadata, records, config);
12
+ }
13
+ get dataUnit() {
14
+ return this._dataUnitInMemoryLoader.dataUnit;
15
+ }
16
+ get records() {
17
+ return this._dataUnitInMemoryLoader.records;
18
+ }
19
+ set records(records) {
20
+ this._dataUnitInMemoryLoader.records = records;
21
+ }
22
+ get metadata() {
23
+ return this._dataUnitInMemoryLoader.metadata;
24
+ }
25
+ set metadata(metadata) {
26
+ this._dataUnitInMemoryLoader.metadata = metadata;
27
+ }
28
+ removeLoader(_dataUnit, recordIds) {
29
+ return this._dataUnitInMemoryLoader.removeLoader(_dataUnit, recordIds);
30
+ }
31
+ static getConvertedValue(descriptor, strValue, dateFormat) {
32
+ return DataUnitInMemoryLoader.getConvertedValue(descriptor, strValue, dateFormat);
33
+ }
34
+ }
35
+ InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME = DataUnitInMemoryLoader.IN_MEMORY_DATA_UNIT_NAME;
36
+
9
37
  class ArrayRepository {
10
38
  constructor(equalsFunction) {
11
39
  this._list = [];
@@ -238,183 +266,6 @@ class PreloadManager {
238
266
  PreloadManager._repositories = new Map();
239
267
  PreloadManager._loadingStatus = new Map();
240
268
 
241
- function applyFilter(records, dataUnit, filters) {
242
- const columnFilters = ColumnFilterManager.getColumnFilters(filters, "");
243
- if (!(columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.size)) {
244
- return records;
245
- }
246
- const filterFunction = ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
247
- if (filterFunction == undefined) {
248
- return records;
249
- }
250
- return records.filter(filterFunction);
251
- }
252
- function buildLoadDataResponse(recordsIn, dataUnit, request) {
253
- let records = recordsIn ? [...recordsIn] : [];
254
- records = applyFilter(records, dataUnit, request.filters);
255
- records = applySorting(records, dataUnit, request.sort);
256
- const { offset, limit } = request;
257
- const paginationInfoBuilderParams = {
258
- recordsLength: records.length,
259
- offset,
260
- recordsPerPage: limit,
261
- };
262
- return Promise.resolve({
263
- records: getPagesByRecords(records, offset, limit),
264
- paginationInfo: dataUnit.pageSize ? buildPaginationInfo(paginationInfoBuilderParams) : undefined,
265
- });
266
- }
267
- function applySorting(records, dataUnit, sorting) {
268
- if (sorting == undefined || sorting.length == 0) {
269
- return records;
270
- }
271
- const sortingFunction = PreloadManager.getSortingFunction(dataUnit, sorting);
272
- if (sortingFunction == undefined) {
273
- return records;
274
- }
275
- return records.sort(sortingFunction);
276
- }
277
- function hasValidLimitAndOffset(offset, limit) {
278
- return offset >= 0 && limit >= 0;
279
- }
280
- function getPagesByRecords(records, offset = 0, limit = 0) {
281
- if (!records || !records.length || !hasValidLimitAndOffset(offset, limit))
282
- return [];
283
- if (limit === 0 && offset === 0)
284
- return records;
285
- return records.slice(offset, offset + limit);
286
- }
287
- function buildPaginationInfo({ recordsLength = 0, offset = 0, recordsPerPage = 0 }) {
288
- if (!recordsLength) {
289
- return { currentPage: 0, firstRecord: 0, lastRecord: 0, total: 0, hasMore: false };
290
- }
291
- const lastRecordIndex = offset + recordsPerPage;
292
- const lastRecord = lastRecordIndex ? Math.min(lastRecordIndex, recordsLength) : recordsLength;
293
- return {
294
- currentPage: recordsPerPage === 0 ? 0 : Math.ceil(offset / recordsPerPage),
295
- firstRecord: offset + 1,
296
- lastRecord: lastRecord,
297
- total: recordsLength,
298
- hasMore: lastRecord < recordsLength,
299
- };
300
- }
301
-
302
- class InMemoryLoader {
303
- constructor(metadata, records, config) {
304
- this.metadata = metadata;
305
- this.records = records;
306
- this._dataUnit = new DataUnit(InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME);
307
- this._dataUnit.pageSize = 150;
308
- this._dataUnit.metadataLoader = () => this.metadaLoader();
309
- this._dataUnit.dataLoader = (dataUnit, request) => this.inMemoryLoader(dataUnit, request, this.getRecordsToLoad());
310
- this._dataUnit.saveLoader = (_dataUnit, changes) => this.saveLoader(_dataUnit, changes);
311
- this._dataUnit.removeLoader = (_dataUnit, recordIds) => this.removeLoader(_dataUnit, recordIds);
312
- this.dataUnit.loadMetadata().then(() => {
313
- if ((config === null || config === void 0 ? void 0 : config.autoLoad) !== false) {
314
- this.dataUnit.loadData();
315
- }
316
- });
317
- }
318
- getRecordsToLoad() {
319
- if (this._initialRecords == undefined && this.dataUnit.records.length > 0) {
320
- this._initialRecords = this.dataUnit.records;
321
- }
322
- const addedRecords = this.dataUnit.getAddedRecords();
323
- if (addedRecords) {
324
- return [...this._initialRecords, ...addedRecords];
325
- }
326
- return this._initialRecords;
327
- }
328
- get dataUnit() {
329
- return this._dataUnit;
330
- }
331
- get records() {
332
- return this.dataUnit.records;
333
- }
334
- static getConvertedValue(descriptor, strValue) {
335
- if (descriptor.dataType === DataType.BOOLEAN) {
336
- return strValue === "S";
337
- }
338
- if (descriptor.dataType === DataType.NUMBER) {
339
- return Number(strValue);
340
- }
341
- if (descriptor.dataType === DataType.DATE) {
342
- return DateUtils.strToDate(strValue, true);
343
- }
344
- if (descriptor.dataType === DataType.OBJECT) {
345
- return JSON.parse(strValue);
346
- }
347
- return strValue;
348
- }
349
- set records(records) {
350
- const columns = this._metadata ? new Map(this._metadata.fields.map(descriptor => [descriptor.name, descriptor])) : undefined;
351
- const newRecords = records === null || records === void 0 ? void 0 : records.map(record => {
352
- if (!record["__record__id__"]) {
353
- record["__record__id__"] = this.generateUniqueId();
354
- }
355
- if (columns != undefined) {
356
- for (const name in record) {
357
- const value = record[name];
358
- if (typeof value === "string" && columns.has(name)) {
359
- record[name] = InMemoryLoader.getConvertedValue(columns.get(name), value);
360
- }
361
- }
362
- }
363
- return record;
364
- });
365
- this._initialRecords = newRecords;
366
- if (this._dataUnit) {
367
- //Isso força o refresh internamente no datunit
368
- this._dataUnit.loadData();
369
- }
370
- }
371
- get metadata() {
372
- return this._metadata;
373
- }
374
- set metadata(metadata) {
375
- this._metadata = metadata;
376
- if (this._dataUnit) {
377
- this._dataUnit.metadata = this._metadata;
378
- }
379
- }
380
- generateUniqueId() {
381
- return StringUtils.generateUUID();
382
- }
383
- inMemoryLoader(dataUnit, request, recordsIn) {
384
- return buildLoadDataResponse(recordsIn, dataUnit, request);
385
- }
386
- metadaLoader() {
387
- return Promise.resolve(this._metadata);
388
- }
389
- saveLoader(_dataUnit, changes) {
390
- return new Promise((resolve) => {
391
- let dataUnitRecords = [];
392
- changes.forEach(change => {
393
- let { record, updatingFields, operation } = change;
394
- const changedRecord = Object.assign(Object.assign({}, record), updatingFields);
395
- if (operation === ChangeOperation.INSERT ||
396
- operation === ChangeOperation.COPY) {
397
- changedRecord["__old__id__"] = record["__record__id__"];
398
- changedRecord["__record__id__"] = this.generateUniqueId();
399
- this.records.push(changedRecord);
400
- }
401
- else {
402
- const recordIndex = this.records.findIndex(r => r["__record__id__"] == changedRecord["__record__id__"]);
403
- this.records[recordIndex] = changedRecord;
404
- }
405
- dataUnitRecords.push(changedRecord);
406
- });
407
- resolve(dataUnitRecords);
408
- });
409
- }
410
- removeLoader(_dataUnit, recordIds) {
411
- return new Promise((resolve) => {
412
- resolve(recordIds);
413
- });
414
- }
415
- }
416
- InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME = "InMemoryDataUnit";
417
-
418
269
  function getRecordValue(record, fieldName) {
419
270
  var _a, _b;
420
271
  return ((_a = record[fieldName]) === null || _a === void 0 ? void 0 : _a.value) !== undefined ? (_b = record[fieldName]) === null || _b === void 0 ? void 0 : _b.value : record[fieldName];
@@ -1250,4 +1101,4 @@ class DataUnitFetcher {
1250
1101
  }
1251
1102
  }
1252
1103
 
1253
- export { DataUnitFetcher as D, InMemoryLoader as I, PreloadManager as P, DatasetStrategy as a, buildLoadDataResponse as b, getRecordValue as g };
1104
+ export { DataUnitFetcher as D, InMemoryLoader as I, PreloadManager as P, DatasetStrategy as a, getRecordValue as g };
@@ -1,8 +1,8 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h } from '@stencil/core/internal/client';
2
- import { ApplicationContext, DataType, Action, UserInterface, StringUtils, DataUnit } from '@sankhyalabs/core';
2
+ import { ApplicationContext, DataType, Action, UserInterface, StringUtils, DataUnitLoaderUtils, DataUnit } from '@sankhyalabs/core';
3
3
  import { D as DataFetcher } from './DataFetcher.js';
4
4
  import { S as SaveErrorsEnum } from './ISave.js';
5
- import { P as PreloadManager, b as buildLoadDataResponse, D as DataUnitFetcher, I as InMemoryLoader } from './dataunit-fetcher.js';
5
+ import { P as PreloadManager, D as DataUnitFetcher, I as InMemoryLoader } from './dataunit-fetcher.js';
6
6
  import './filter-item-type.enum.js';
7
7
  import './form-config-fetcher.js';
8
8
  import { V as VIEW_MODE } from './constants.js';
@@ -462,7 +462,7 @@ class AttachFetcherDataUnitFactory {
462
462
  });
463
463
  this._records = records;
464
464
  }
465
- return buildLoadDataResponse(this._records, dataUnit, request);
465
+ return DataUnitLoaderUtils.buildLoadDataResponse(this._records, dataUnit, request);
466
466
  }
467
467
  saveLoader(changes, fetcher) {
468
468
  return new Promise((resolve) => {
@@ -2,7 +2,7 @@ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/
2
2
  import { StringUtils, ElementIDUtils, ApplicationContext, JSUtils, FloatingManager } from '@sankhyalabs/core';
3
3
  import { T as TaskbarElement, d as defineCustomElement$3 } from './snk-taskbar2.js';
4
4
  import './DataFetcher.js';
5
- import { P as PresentationMode } from './ISave.js';
5
+ import { P as PresentationMode, E as ExporterStrategy } from './ISave.js';
6
6
  import '@sankhyalabs/ezui/dist/collection/utils/constants';
7
7
  import '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
8
8
  import './dataunit-fetcher.js';
@@ -86,6 +86,7 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
86
86
  this.domainMessagesBuilder = undefined;
87
87
  this.ignoreReadOnlyFormFields = undefined;
88
88
  this.setCustomFormTitle = undefined;
89
+ this.strategyExporter = ExporterStrategy.SERVER_SIDE;
89
90
  this.customContainerId = `SNK-CRUD-CUSTOM-CONTAINER-${StringUtils.generateUUID()}`;
90
91
  }
91
92
  /**
@@ -420,7 +421,7 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
420
421
  return;
421
422
  }
422
423
  this._snkDataUnit.ignoreSaveMessage = (this._currentViewMode === VIEW_MODE.GRID && !this.enableGridInsert);
423
- return (h(Host, null, h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "crud" }, h("stack-item", { class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full ez-padding--medium' }, h("snk-grid", { ref: (ref) => this._snkGrid = ref, class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full', filterBarTitle: this.filterBarTitle, "data-element-id": "crud_grid", configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), taskbarManager: this.taskbarManager, onActionClick: evt => this.executeAction(evt.detail), messagesBuilder: this.messagesBuilder, actionsList: this.actionsList, statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, presentationMode: this.presentationMode, recordsValidator: this.recordsValidator, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, canEdit: this._canEdit, resourceID: this._resourceID, disablePersonalizedFilter: this.disablePersonalizedFilter, gridLegacyConfigName: this.gridLegacyConfigName, filterBarLegacyConfigName: this.filterBarLegacyConfigName, autoLoad: this.autoLoad, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableLockManagerTaskbarClick: this.enableLockManagerTaskbarClick, enableLockManagerLoadingComp: this.enableLockManagerLoadingComp }, h("slot", { name: "GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }), h("slot", { name: "SnkGridTaskBar" }))), h("stack-item", null, h("snk-guides-viewer", { ref: ref => this._guidesViewer = ref, entityPath: this._snkDataUnit.entityName, messagesBuilder: this.messagesBuilder, onExit: () => this.setViewMode(VIEW_MODE.GRID), dataState: this._dataState, dataUnit: this._dataUnit, actionsList: this.actionsList, taskbarManager: this.taskbarManager, configName: this.configName, onActionClick: evt => this.executeAction(evt.detail), presentationMode: this.presentationMode, "data-element-id": "crud_form", canEdit: this._canEdit, recordsValidator: this.recordsValidator, resourceID: this._resourceID, detailTaskbarCustomContainerId: this.customContainerId, formLegacyConfigName: this.formLegacyConfigName, enableGridInsert: this.enableGridInsert, getCustomTitle: this.setCustomFormTitle, ignoreReadOnlyFormFields: this.ignoreReadOnlyFormFields }, h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkFormTaskBar" }))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this._snkDataUnit.entityName, onBack: this.backView.bind(this) })), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.setViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showActionButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this._resourceID, customContainerId: this.customContainerId })), h("div", { id: `${this.customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }), h("slot", { name: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))));
424
+ return (h(Host, null, h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "crud" }, h("stack-item", { class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full ez-padding--medium' }, h("snk-grid", { ref: (ref) => this._snkGrid = ref, class: 'ez-flex ez-flex--column ez-size-height--full ez-size-width--full', filterBarTitle: this.filterBarTitle, "data-element-id": "crud_grid", configName: this.configName, onGridDoubleClick: () => this.gridToForm(true), taskbarManager: this.taskbarManager, onActionClick: evt => this.executeAction(evt.detail), messagesBuilder: this.messagesBuilder, actionsList: this.actionsList, statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, presentationMode: this.presentationMode, recordsValidator: this.recordsValidator, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, canEdit: this._canEdit, resourceID: this._resourceID, disablePersonalizedFilter: this.disablePersonalizedFilter, gridLegacyConfigName: this.gridLegacyConfigName, filterBarLegacyConfigName: this.filterBarLegacyConfigName, autoLoad: this.autoLoad, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableLockManagerTaskbarClick: this.enableLockManagerTaskbarClick, enableLockManagerLoadingComp: this.enableLockManagerLoadingComp, strategyExporter: this.strategyExporter }, h("slot", { name: "GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkGridHeader" }), h("slot", { name: "SnkGridFooter" }), h("slot", { name: "SnkGridTaskBar" }))), h("stack-item", null, h("snk-guides-viewer", { ref: ref => this._guidesViewer = ref, entityPath: this._snkDataUnit.entityName, messagesBuilder: this.messagesBuilder, onExit: () => this.setViewMode(VIEW_MODE.GRID), dataState: this._dataState, dataUnit: this._dataUnit, actionsList: this.actionsList, taskbarManager: this.taskbarManager, configName: this.configName, onActionClick: evt => this.executeAction(evt.detail), presentationMode: this.presentationMode, "data-element-id": "crud_form", canEdit: this._canEdit, recordsValidator: this.recordsValidator, resourceID: this._resourceID, detailTaskbarCustomContainerId: this.customContainerId, formLegacyConfigName: this.formLegacyConfigName, enableGridInsert: this.enableGridInsert, getCustomTitle: this.setCustomFormTitle, ignoreReadOnlyFormFields: this.ignoreReadOnlyFormFields }, h("slot", { name: "GUIDES_VIEWER_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "SnkFormTaskBar" }))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this._snkDataUnit.entityName, onBack: this.backView.bind(this) })), h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.setViewMode(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showActionButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this._resourceID, customContainerId: this.customContainerId })), h("div", { id: `${this.customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }), h("slot", { name: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS" }), h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }))));
424
425
  }
425
426
  get _element() { return this; }
426
427
  static get watchers() { return {
@@ -452,6 +453,7 @@ const SnkCrud$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
452
453
  "domainMessagesBuilder": [1, "domain-messages-builder"],
453
454
  "ignoreReadOnlyFormFields": [4, "ignore-read-only-form-fields"],
454
455
  "setCustomFormTitle": [16],
456
+ "strategyExporter": [1025, "strategy-exporter"],
455
457
  "_dataUnit": [32],
456
458
  "_dataState": [32],
457
459
  "attachmentRegisterKey": [32],
@@ -257,7 +257,9 @@ const SnkDataUnit = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
257
257
  return new DataUnitAction(Action.RECORDS_COPIED, this.handleRecordsCopied(action.payload));
258
258
  }
259
259
  async interceptDataChange(action) {
260
- if (this.isAllowed("UPDATE")) {
260
+ var _a;
261
+ const recordId = (_a = this.dataUnit.getSelectedRecord()) === null || _a === void 0 ? void 0 : _a.__record__id__;
262
+ if (this.isAllowed("UPDATE") || this.dataUnit.isNewRecord(recordId)) {
261
263
  return action;
262
264
  }
263
265
  if (this._openedAlert) {
@@ -327,7 +327,7 @@ const SnkGuidesViewer = /*@__PURE__*/ proxyCustomElement(class extends HTMLEleme
327
327
  else {
328
328
  detailBranch = this.selectedGuide;
329
329
  }
330
- content = this.wrapDetail(levels, h("snk-detail-view", { ref: (ref) => this._currentDetail = ref, dataUnitName: this.getDataUnitName(levels, childEntityName), onSnkDetailGuidesChange: (evt) => this.updateGuide(evt.detail), entityName: childEntityName, selectedForm: formName, branchGuide: detailBranch, guideItemPath: this._breadcrumbItems, key: `detail${detailId}`, canEdit: this.canEdit, onSnkSwitchGuide: evt => this._guideNavigator.selectGuide(evt.detail), resourceID: this.resourceID, taskbarCustomContainerId: this.detailTaskbarCustomContainerId, customEditors: this._customEditors, customRenders: this._customRenders }));
330
+ content = this.wrapDetail(levels, h("snk-detail-view", { ref: (ref) => this._currentDetail = ref, dataUnitName: this.getDataUnitName(levels, childEntityName), onSnkDetailGuidesChange: (evt) => this.updateGuide(evt.detail), entityName: childEntityName, selectedForm: formName, branchGuide: detailBranch, guideItemPath: this._breadcrumbItems, key: `detail${detailId}`, canEdit: this.canEdit, onSnkSwitchGuide: evt => this._guideNavigator.selectGuide(evt.detail), resourceID: this.resourceID, taskbarCustomContainerId: this.detailTaskbarCustomContainerId, customEditors: this._customEditors, customRenders: this._customRenders, presentationMode: this.presentationMode }));
331
331
  }
332
332
  else {
333
333
  const cardId = this.selectedGuide.id;
@@ -805,7 +805,7 @@ class GuideBuilder {
805
805
  }
806
806
  }
807
807
 
808
- const snkDetailViewCss = ".sc-snk-detail-view-h{display:flex;row-gap:24px;flex-direction:column;width:100%;height:100%}.level-path.sc-snk-detail-view{color:var(--color--title-primary, #2B3A54);font-weight:var(--text-weight--medium, 400);padding-right:3px}.form-taskbar.sc-snk-detail-view{padding-bottom:var(--space--medium)}.grid-container.sc-snk-detail-view{background-color:#FFF;min-height:100px}.detail-header.sc-snk-detail-view{padding-bottom:0}";
808
+ const snkDetailViewCss = ".sc-snk-detail-view-h{display:flex;row-gap:24px;flex-direction:column;width:100%;height:100%}.level-path.sc-snk-detail-view{color:var(--color--title-primary, #2B3A54);font-weight:var(--text-weight--medium, 400);padding-right:3px}.form-taskbar.sc-snk-detail-view{padding-bottom:var(--space--medium)}.grid-container.sc-snk-detail-view{background-color:#FFF;min-height:100px;height:100%}.detail-header.sc-snk-detail-view{padding-bottom:0}snk-data-unit.sc-snk-detail-view{flex:1}snk-grid.sc-snk-detail-view{height:calc(100% - 43px)}";
809
809
 
810
810
  const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
811
811
  constructor() {
@@ -832,6 +832,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
832
832
  this.taskbarCustomContainerId = undefined;
833
833
  this.customEditors = undefined;
834
834
  this.customRenders = undefined;
835
+ this.presentationMode = PresentationMode.SECONDARY;
835
836
  }
836
837
  observeDataUnit(newDataUnit, oldDataUnit) {
837
838
  newDataUnit === null || newDataUnit === void 0 ? void 0 : newDataUnit.subscribe(this.dataUnitActionHandler.bind(this));
@@ -1051,7 +1052,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
1051
1052
  render() {
1052
1053
  this.updateLabel();
1053
1054
  //const cardConfig: IFormCardConfig = this._cardsState?.get(this.selectedForm);
1054
- return (h(Host, null, h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-flex ez-title--primary ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full ez-size-height--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: PresentationMode.SECONDARY, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS", outlineMode: false }))), h("stack-item", null, h("snk-form-view", { ref: (ref) => this._snkFormView = ref, canExpand: false, canFix: false, name: this.selectedForm, formMetadata: this._formMetadata, dataUnit: this.dataUnit, fields: this.getFormFields(), label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems) }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: PresentationMode.SECONDARY, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }, h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" })))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName, onBack: this.handleAttachBack.bind(this) }))))));
1055
+ return (h(Host, null, h("snk-data-unit", { ref: (el) => this._snkDataUnit = el, dataUnitName: `${this.dataUnitName}`, onDataUnitReady: evt => this.dataUnitReadyHandler(evt), entityName: this.entityName, onDataStateChange: this.handleDataStateChange.bind(this), ignoreSaveMessage: this._currentView === VIEW_MODE.GRID, messagesBuilder: this.messagesBuilder, configName: this._configName }, h("ez-view-stack", { ref: (ref) => this.updateViewStack(ref) }, h("stack-item", null, h("div", { class: "ez-box ez-box--shadow grid-container" }, h("div", { class: "ez-title--primary ez-size-width--full ez-padding--large detail-header" }, h("div", { class: "ez-flex ez-text ez-text--bold ez-flex--justify-start ez-flex--align-items-center" }, this._levelPath ? h("span", { class: "level-path" }, this._levelPath + " /") : undefined, this.label)), h("snk-grid", { class: "ez-size-width--full", ref: (ref) => this._snkGrid = ref, configName: this._configName, messagesBuilder: this.messagesBuilder, onGridDoubleClick: () => this.emitSwitchEvent(VIEW_MODE.FORM), onActionClick: (evt) => this.executeActionHandler(evt), presentationMode: this.presentationMode, canEdit: this.canEdit, isDetail: true, taskbarCustomContainerId: this.taskbarCustomContainerId, gridHeaderCustomSlotId: "DETAIL_GRID_HEADER_CUSTOM_ELEMENTS", topTaskbarCustomSlotId: "DETAIL_GRID_TASKBAR_CUSTOM_ELEMENTS", outlineMode: false }))), h("stack-item", null, h("snk-form-view", { ref: (ref) => this._snkFormView = ref, canExpand: false, canFix: false, name: this.selectedForm, formMetadata: this._formMetadata, dataUnit: this.dataUnit, fields: this.getFormFields(), label: this.label, levelPath: this._levelPath, onFormItemsReady: ({ detail: formItems }) => this.formItemsReady.emit(formItems) }, h("snk-taskbar", { key: "guideViewerTaskbar", class: "form-taskbar", "data-element-id": "guideViewer", configName: this._configName, messagesBuilder: this.messagesBuilder, disabledButtons: this._disabledButtons, buttons: "INSERT,PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,GRID_MODE,CONFIGURATOR", primaryButton: "INSERT", presentationMode: this.presentationMode, onActionClick: evt => this.executeActionHandler(evt), dataUnit: this.dataUnit, resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" }, h("slot", { name: "DETAIL_TASKBAR_CUSTOM_ELEMENTS" })))), h("stack-item", null, h("snk-attach", { registerKey: this.attachmentRegisterKey, messagesBuilder: this.messagesBuilder, entityName: this.entityName, onBack: this.handleAttachBack.bind(this) }))))));
1055
1056
  }
1056
1057
  static get watchers() { return {
1057
1058
  "dataUnit": ["observeDataUnit"],
@@ -1076,6 +1077,7 @@ const SnkDetailView = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
1076
1077
  "taskbarCustomContainerId": [1, "taskbar-custom-container-id"],
1077
1078
  "customEditors": [16],
1078
1079
  "customRenders": [16],
1080
+ "presentationMode": [1, "presentation-mode"],
1079
1081
  "_disabledButtons": [32],
1080
1082
  "_currentView": [32],
1081
1083
  "attachmentRegisterKey": [32],
@@ -5,7 +5,7 @@ import { D as DataExporterOption } from './index-b40568ff.js';
5
5
  import './ISave-d8c8bc59.js';
6
6
  import '@sankhyalabs/ezui/dist/collection/utils/constants';
7
7
  import { UserInterface as UserInterface$1 } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
8
- import { P as PreloadManager } from './dataunit-fetcher-5247a708.js';
8
+ import { P as PreloadManager } from './dataunit-fetcher-91b094f2.js';
9
9
  import './filter-item-type.enum-d45e026f.js';
10
10
  import './form-config-fetcher-126e2471.js';
11
11
  import './constants-75abb876.js';
@@ -1,4 +1,4 @@
1
- import { ObjectUtils, DataUnit, DataType, DateUtils, StringUtils, ChangeOperation, ApplicationContext, UserInterface, DataUnitStorage } from '@sankhyalabs/core';
1
+ import { ObjectUtils, DataUnit, DataUnitInMemoryLoader, ApplicationContext, StringUtils, UserInterface, DataUnitStorage, DataType, ChangeOperation } from '@sankhyalabs/core';
2
2
  import { D as DataFetcher, d as dist } from './DataFetcher-5221b992.js';
3
3
  import { DISTINCT_FILTER_NAME_PREFIX } from '@sankhyalabs/ezui/dist/collection/utils/constants';
4
4
  import { DataUnitTransient } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
@@ -238,182 +238,33 @@ class PreloadManager {
238
238
  PreloadManager._repositories = new Map();
239
239
  PreloadManager._loadingStatus = new Map();
240
240
 
241
- function applyFilter(records, dataUnit, filters) {
242
- const columnFilters = ColumnFilterManager.getColumnFilters(filters, "");
243
- if (!(columnFilters === null || columnFilters === void 0 ? void 0 : columnFilters.size)) {
244
- return records;
245
- }
246
- const filterFunction = ColumnFilterManager.getFilterFunction(dataUnit, Array.from(columnFilters.values()));
247
- if (filterFunction == undefined) {
248
- return records;
249
- }
250
- return records.filter(filterFunction);
251
- }
252
- function buildLoadDataResponse(recordsIn, dataUnit, request) {
253
- let records = recordsIn ? [...recordsIn] : [];
254
- records = applyFilter(records, dataUnit, request.filters);
255
- records = applySorting(records, dataUnit, request.sort);
256
- const { offset, limit } = request;
257
- const paginationInfoBuilderParams = {
258
- recordsLength: records.length,
259
- offset,
260
- recordsPerPage: limit,
261
- };
262
- return Promise.resolve({
263
- records: getPagesByRecords(records, offset, limit),
264
- paginationInfo: dataUnit.pageSize ? buildPaginationInfo(paginationInfoBuilderParams) : undefined,
265
- });
266
- }
267
- function applySorting(records, dataUnit, sorting) {
268
- if (sorting == undefined || sorting.length == 0) {
269
- return records;
270
- }
271
- const sortingFunction = PreloadManager.getSortingFunction(dataUnit, sorting);
272
- if (sortingFunction == undefined) {
273
- return records;
274
- }
275
- return records.sort(sortingFunction);
276
- }
277
- function hasValidLimitAndOffset(offset, limit) {
278
- return offset >= 0 && limit >= 0;
279
- }
280
- function getPagesByRecords(records, offset = 0, limit = 0) {
281
- if (!records || !records.length || !hasValidLimitAndOffset(offset, limit))
282
- return [];
283
- if (limit === 0 && offset === 0)
284
- return records;
285
- return records.slice(offset, offset + limit);
286
- }
287
- function buildPaginationInfo({ recordsLength = 0, offset = 0, recordsPerPage = 0 }) {
288
- if (!recordsLength) {
289
- return { currentPage: 0, firstRecord: 0, lastRecord: 0, total: 0, hasMore: false };
290
- }
291
- const lastRecordIndex = offset + recordsPerPage;
292
- const lastRecord = lastRecordIndex ? Math.min(lastRecordIndex, recordsLength) : recordsLength;
293
- return {
294
- currentPage: recordsPerPage === 0 ? 0 : Math.ceil(offset / recordsPerPage),
295
- firstRecord: offset + 1,
296
- lastRecord: lastRecord,
297
- total: recordsLength,
298
- hasMore: lastRecord < recordsLength,
299
- };
300
- }
301
-
302
241
  class InMemoryLoader {
303
242
  constructor(metadata, records, config) {
304
- this.metadata = metadata;
305
- this.records = records;
306
- this._dataUnit = new DataUnit(InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME);
307
- this._dataUnit.pageSize = 150;
308
- this._dataUnit.metadataLoader = () => this.metadaLoader();
309
- this._dataUnit.dataLoader = (dataUnit, request) => this.inMemoryLoader(dataUnit, request, this.getRecordsToLoad());
310
- this._dataUnit.saveLoader = (_dataUnit, changes) => this.saveLoader(_dataUnit, changes);
311
- this._dataUnit.removeLoader = (_dataUnit, recordIds) => this.removeLoader(_dataUnit, recordIds);
312
- this.dataUnit.loadMetadata().then(() => {
313
- if ((config === null || config === void 0 ? void 0 : config.autoLoad) !== false) {
314
- this.dataUnit.loadData();
315
- }
316
- });
317
- }
318
- getRecordsToLoad() {
319
- if (this._initialRecords == undefined && this.dataUnit.records.length > 0) {
320
- this._initialRecords = this.dataUnit.records;
321
- }
322
- const addedRecords = this.dataUnit.getAddedRecords();
323
- if (addedRecords) {
324
- return [...this._initialRecords, ...addedRecords];
325
- }
326
- return this._initialRecords;
243
+ this._dataUnitInMemoryLoader = new DataUnitInMemoryLoader(metadata, records, config);
327
244
  }
328
245
  get dataUnit() {
329
- return this._dataUnit;
246
+ return this._dataUnitInMemoryLoader.dataUnit;
330
247
  }
331
248
  get records() {
332
- return this.dataUnit.records;
333
- }
334
- static getConvertedValue(descriptor, strValue) {
335
- if (descriptor.dataType === DataType.BOOLEAN) {
336
- return strValue === "S";
337
- }
338
- if (descriptor.dataType === DataType.NUMBER) {
339
- return Number(strValue);
340
- }
341
- if (descriptor.dataType === DataType.DATE) {
342
- return DateUtils.strToDate(strValue, true);
343
- }
344
- if (descriptor.dataType === DataType.OBJECT) {
345
- return JSON.parse(strValue);
346
- }
347
- return strValue;
249
+ return this._dataUnitInMemoryLoader.records;
348
250
  }
349
251
  set records(records) {
350
- const columns = this._metadata ? new Map(this._metadata.fields.map(descriptor => [descriptor.name, descriptor])) : undefined;
351
- const newRecords = records === null || records === void 0 ? void 0 : records.map(record => {
352
- if (!record["__record__id__"]) {
353
- record["__record__id__"] = this.generateUniqueId();
354
- }
355
- if (columns != undefined) {
356
- for (const name in record) {
357
- const value = record[name];
358
- if (typeof value === "string" && columns.has(name)) {
359
- record[name] = InMemoryLoader.getConvertedValue(columns.get(name), value);
360
- }
361
- }
362
- }
363
- return record;
364
- });
365
- this._initialRecords = newRecords;
366
- if (this._dataUnit) {
367
- //Isso força o refresh internamente no datunit
368
- this._dataUnit.loadData();
369
- }
252
+ this._dataUnitInMemoryLoader.records = records;
370
253
  }
371
254
  get metadata() {
372
- return this._metadata;
255
+ return this._dataUnitInMemoryLoader.metadata;
373
256
  }
374
257
  set metadata(metadata) {
375
- this._metadata = metadata;
376
- if (this._dataUnit) {
377
- this._dataUnit.metadata = this._metadata;
378
- }
379
- }
380
- generateUniqueId() {
381
- return StringUtils.generateUUID();
382
- }
383
- inMemoryLoader(dataUnit, request, recordsIn) {
384
- return buildLoadDataResponse(recordsIn, dataUnit, request);
385
- }
386
- metadaLoader() {
387
- return Promise.resolve(this._metadata);
388
- }
389
- saveLoader(_dataUnit, changes) {
390
- return new Promise((resolve) => {
391
- let dataUnitRecords = [];
392
- changes.forEach(change => {
393
- let { record, updatingFields, operation } = change;
394
- const changedRecord = Object.assign(Object.assign({}, record), updatingFields);
395
- if (operation === ChangeOperation.INSERT ||
396
- operation === ChangeOperation.COPY) {
397
- changedRecord["__old__id__"] = record["__record__id__"];
398
- changedRecord["__record__id__"] = this.generateUniqueId();
399
- this.records.push(changedRecord);
400
- }
401
- else {
402
- const recordIndex = this.records.findIndex(r => r["__record__id__"] == changedRecord["__record__id__"]);
403
- this.records[recordIndex] = changedRecord;
404
- }
405
- dataUnitRecords.push(changedRecord);
406
- });
407
- resolve(dataUnitRecords);
408
- });
258
+ this._dataUnitInMemoryLoader.metadata = metadata;
409
259
  }
410
260
  removeLoader(_dataUnit, recordIds) {
411
- return new Promise((resolve) => {
412
- resolve(recordIds);
413
- });
261
+ return this._dataUnitInMemoryLoader.removeLoader(_dataUnit, recordIds);
262
+ }
263
+ static getConvertedValue(descriptor, strValue, dateFormat) {
264
+ return DataUnitInMemoryLoader.getConvertedValue(descriptor, strValue, dateFormat);
414
265
  }
415
266
  }
416
- InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME = "InMemoryDataUnit";
267
+ InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME = DataUnitInMemoryLoader.IN_MEMORY_DATA_UNIT_NAME;
417
268
 
418
269
  function getRecordValue(record, fieldName) {
419
270
  var _a, _b;
@@ -1250,4 +1101,4 @@ class DataUnitFetcher {
1250
1101
  }
1251
1102
  }
1252
1103
 
1253
- export { DataUnitFetcher as D, InMemoryLoader as I, PreloadManager as P, DatasetStrategy as a, buildLoadDataResponse as b, getRecordValue as g };
1104
+ export { DataUnitFetcher as D, InMemoryLoader as I, PreloadManager as P, DatasetStrategy as a, getRecordValue as g };