@sankhyalabs/sankhyablocks 0.0.0-bugfix-dev-KB-55889.0 → 0.0.0-bugfix-dev-KB-60622.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/dist/cjs/{IExporterProvider-9ac15aaf.js → ContinuousInsertUtils-b32220f0.js} +35 -2
- package/dist/cjs/{SnkMessageBuilder-cceebbae.js → SnkMessageBuilder-bae64d0d.js} +5 -1
- package/dist/cjs/{dataunit-fetcher-4b12f70c.js → dataunit-fetcher-f89461c1.js} +45 -17
- package/dist/cjs/{field-search-f56aa7d6.js → field-search-68e34bf4.js} +5 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/sankhyablocks.cjs.js +1 -1
- package/dist/cjs/snk-actions-button_4.cjs.entry.js +1 -1
- package/dist/cjs/snk-application.cjs.entry.js +2 -2
- package/dist/cjs/snk-attach.cjs.entry.js +2 -4
- package/dist/cjs/snk-crud.cjs.entry.js +5 -2
- package/dist/cjs/snk-data-exporter.cjs.entry.js +3 -3
- package/dist/cjs/{snk-data-unit-ed17da6b.js → snk-data-unit-004f781a.js} +10 -11
- package/dist/cjs/snk-data-unit.cjs.entry.js +3 -3
- package/dist/cjs/snk-detail-view.cjs.entry.js +4 -4
- package/dist/cjs/snk-grid.cjs.entry.js +52 -12
- package/dist/cjs/{snk-guides-viewer-866447ab.js → snk-guides-viewer-68777d37.js} +8 -4
- package/dist/cjs/snk-guides-viewer.cjs.entry.js +3 -3
- package/dist/cjs/snk-simple-crud.cjs.entry.js +51 -15
- package/dist/collection/components/snk-attach/structure/fetcher/factory/attach-fetcher-data-unit.factory.js +2 -4
- package/dist/collection/components/snk-crud/snk-crud.js +22 -1
- package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +24 -2
- package/dist/collection/components/snk-data-unit/snk-data-unit.js +8 -9
- package/dist/collection/components/snk-grid/snk-grid.js +66 -6
- package/dist/collection/components/snk-simple-crud/snk-simple-crud.js +67 -12
- package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +5 -1
- package/dist/collection/lib/DefaultCustomFormatters/RmPrecisionCustomValueFormatter.js +1 -1
- package/dist/collection/lib/dataUnit/InMemoryLoader.js +2 -4
- package/dist/collection/lib/dataUnit/dataUnitInMemoryUtils.js +34 -9
- package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +9 -2
- package/dist/collection/lib/message/resources/snk-grid.msg.js +5 -1
- package/dist/collection/lib/utils/ContinuousInsertUtils.js +31 -0
- package/dist/components/{IExporterProvider.js → ContinuousInsertUtils.js} +39 -4
- package/dist/components/SnkMessageBuilder.js +5 -1
- package/dist/components/dataunit-fetcher.js +45 -15
- package/dist/components/snk-attach2.js +2 -4
- package/dist/components/snk-crud.js +5 -1
- package/dist/components/snk-data-unit2.js +9 -10
- package/dist/components/snk-detail-view2.js +8 -3
- package/dist/components/snk-grid2.js +48 -6
- package/dist/components/snk-simple-crud2.js +47 -9
- package/dist/esm/{IExporterProvider-09df2e3e.js → ContinuousInsertUtils-aae77a37.js} +36 -4
- package/dist/esm/{SnkMessageBuilder-ae87b754.js → SnkMessageBuilder-6fff4a4c.js} +5 -1
- package/dist/esm/{dataunit-fetcher-3aac1a53.js → dataunit-fetcher-c24c76c6.js} +45 -15
- package/dist/esm/{field-search-efbe307f.js → field-search-f8b1d91e.js} +5 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/sankhyablocks.js +1 -1
- package/dist/esm/snk-actions-button_4.entry.js +1 -1
- package/dist/esm/snk-application.entry.js +2 -2
- package/dist/esm/snk-attach.entry.js +2 -4
- package/dist/esm/snk-crud.entry.js +5 -2
- package/dist/esm/snk-data-exporter.entry.js +3 -3
- package/dist/esm/{snk-data-unit-6888df8f.js → snk-data-unit-a90ce6f2.js} +10 -11
- package/dist/esm/snk-data-unit.entry.js +3 -3
- package/dist/esm/snk-detail-view.entry.js +4 -4
- package/dist/esm/snk-grid.entry.js +47 -7
- package/dist/esm/{snk-guides-viewer-cb8a0b48.js → snk-guides-viewer-b5dd30e6.js} +8 -4
- package/dist/esm/snk-guides-viewer.entry.js +3 -3
- package/dist/esm/snk-simple-crud.entry.js +47 -11
- package/dist/sankhyablocks/p-17425c72.js +1 -0
- package/dist/sankhyablocks/p-23736d75.js +1 -0
- package/dist/sankhyablocks/p-3e3cc017.js +1 -0
- package/dist/sankhyablocks/{p-559bfb9b.entry.js → p-43a73838.entry.js} +1 -1
- package/dist/sankhyablocks/p-47a038a3.js +1 -0
- package/dist/sankhyablocks/p-50779ad3.entry.js +1 -0
- package/dist/sankhyablocks/{p-16969508.entry.js → p-694e1c4a.entry.js} +1 -1
- package/dist/sankhyablocks/p-7ac7932c.js +60 -0
- package/dist/sankhyablocks/{p-bc4b94d2.entry.js → p-7eef0898.entry.js} +1 -1
- package/dist/sankhyablocks/{p-439a50fb.entry.js → p-7f918d0b.entry.js} +1 -1
- package/dist/sankhyablocks/{p-9cbef862.js → p-9132a0a1.js} +1 -1
- package/dist/sankhyablocks/p-9bc1c239.entry.js +1 -0
- package/dist/sankhyablocks/{p-640140b3.entry.js → p-a42e7a1e.entry.js} +1 -1
- package/dist/sankhyablocks/p-b82a7720.entry.js +1 -0
- package/dist/sankhyablocks/p-e16e87fc.entry.js +1 -0
- package/dist/sankhyablocks/{p-3d542b58.entry.js → p-eb9f0407.entry.js} +1 -1
- package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
- package/dist/types/components/snk-crud/snk-crud.d.ts +4 -0
- package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +5 -0
- package/dist/types/components/snk-data-unit/snk-data-unit.d.ts +0 -1
- package/dist/types/components/snk-grid/snk-grid.d.ts +12 -0
- package/dist/types/components/snk-simple-crud/snk-simple-crud.d.ts +10 -0
- package/dist/types/components/snk-taskbar/processor/taskbar-processor.d.ts +1 -0
- package/dist/types/components.d.ts +32 -0
- package/dist/types/lib/dataUnit/dataUnitInMemoryUtils.d.ts +12 -2
- package/dist/types/lib/utils/ContinuousInsertUtils.d.ts +10 -0
- package/package.json +1 -1
- package/dist/sankhyablocks/p-0e9a872d.entry.js +0 -1
- package/dist/sankhyablocks/p-1ab19772.js +0 -1
- package/dist/sankhyablocks/p-1f47a0b2.entry.js +0 -1
- package/dist/sankhyablocks/p-3757394b.entry.js +0 -1
- package/dist/sankhyablocks/p-53c1d25d.entry.js +0 -1
- package/dist/sankhyablocks/p-7c4aabe2.js +0 -1
- package/dist/sankhyablocks/p-a31e761f.js +0 -1
- package/dist/sankhyablocks/p-c2495304.js +0 -1
- package/dist/sankhyablocks/p-f8698ad3.js +0 -60
|
@@ -479,7 +479,14 @@ export class SnkDataUnit {
|
|
|
479
479
|
}
|
|
480
480
|
handleRecordsRemoved(action) {
|
|
481
481
|
var _a, _b;
|
|
482
|
-
|
|
482
|
+
const cachedRecords = action.payload.cachedRecords;
|
|
483
|
+
let removeFinishMsg;
|
|
484
|
+
if ((cachedRecords === null || cachedRecords === void 0 ? void 0 : cachedRecords.length) > 1) {
|
|
485
|
+
removeFinishMsg = this.getMessage("snkDataUnit.removeAllInfo", { size: cachedRecords.length });
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
removeFinishMsg = this.getMessage("snkDataUnit.removeInfo", action.payload.cachedRecords[0]);
|
|
489
|
+
}
|
|
483
490
|
if (removeFinishMsg != undefined) {
|
|
484
491
|
this.showSuccessMessage(removeFinishMsg);
|
|
485
492
|
}
|
|
@@ -490,14 +497,6 @@ export class SnkDataUnit {
|
|
|
490
497
|
this.dataUnit.gotoPage(page);
|
|
491
498
|
}
|
|
492
499
|
}
|
|
493
|
-
buildRemoveFinishMessage(action) {
|
|
494
|
-
const records = action.payload.records;
|
|
495
|
-
if (!records || !records.length)
|
|
496
|
-
return undefined;
|
|
497
|
-
if ((records === null || records === void 0 ? void 0 : records.length) > 1)
|
|
498
|
-
return this.getMessage('snkDataUnit.removeAllInfo', { size: records.length });
|
|
499
|
-
return this.getMessage('snkDataUnit.removeInfo', records);
|
|
500
|
-
}
|
|
501
500
|
/**
|
|
502
501
|
* Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
|
|
503
502
|
* através de um pequeno modulo na estrutura da aplicação:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h, Fragment } from '@stencil/core';
|
|
1
|
+
import { h, Fragment, } from '@stencil/core';
|
|
2
2
|
import { Action as DUAction, ApplicationContext, ElementIDUtils, StringUtils } from '@sankhyalabs/core';
|
|
3
3
|
import { TaskbarElement } from '../snk-taskbar/elements/taskbar-elements';
|
|
4
4
|
import { ConfigStorage } from '../../lib/configs/ConfigStorage';
|
|
@@ -11,6 +11,7 @@ import { buildFieldSearch, openFieldSearch } from '../snk-taskbar/subcomponents/
|
|
|
11
11
|
import { CrudUtils } from '../../lib';
|
|
12
12
|
import RmPrecisionCustomValueFormatter from '../../lib/DefaultCustomFormatters/RmPrecisionCustomValueFormatter';
|
|
13
13
|
import ServerSideExporterProvider from '../snk-data-exporter/providers/ServerSideExporterProvider';
|
|
14
|
+
import { ContinuousInsertUtils } from '../../lib/utils/ContinuousInsertUtils';
|
|
14
15
|
export class SnkGrid {
|
|
15
16
|
constructor() {
|
|
16
17
|
this._customEditors = new Map();
|
|
@@ -19,7 +20,7 @@ export class SnkGrid {
|
|
|
19
20
|
"snkGridTopTaskbar.regular": ["FORM_MODE", "CONFIGURATOR", "INSERT"],
|
|
20
21
|
"snkGridTopTaskbar.regular.secondary": ["FORM_MODE", "CONFIGURATOR", "INSERT"],
|
|
21
22
|
"snkGridTopTaskbar.regular.singleTaskbar": [],
|
|
22
|
-
"snkGridTopTaskbar.finish_edition": ["CANCEL", "SAVE"],
|
|
23
|
+
"snkGridTopTaskbar.finish_edition": ["CANCEL", "SAVE", this.handleAddFormMode()],
|
|
23
24
|
"snkGridTopTaskbar.finish_edition.secondary": [],
|
|
24
25
|
"snkGridTopTaskbar.finish_edition.singleTaskbar": [],
|
|
25
26
|
});
|
|
@@ -32,7 +33,7 @@ export class SnkGrid {
|
|
|
32
33
|
"snkGridHeaderTaskbar.singleTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "ATTACH", "FORM_MODE", "CONFIGURATOR", "REFRESH", "DATA_EXPORTER", "ACTIONS_BUTTON"],
|
|
33
34
|
"snkGridHeaderTaskbar.singleTaskbar.detail.unselected": ["INSERT", "FORM_MODE", "CONFIGURATOR", "REFRESH", "MORE_OPTIONS"],
|
|
34
35
|
"snkGridHeaderTaskbar.singleTaskbar.detail.selected": ["UPDATE", "ATTACH", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "FORM_MODE", "CONFIGURATOR", "REFRESH"],
|
|
35
|
-
"snkGridHeaderTaskbar.singleTaskbar.finish_edition": ["CANCEL", "SAVE"]
|
|
36
|
+
"snkGridHeaderTaskbar.singleTaskbar.finish_edition": ["CANCEL", "SAVE", this.handleAddFormMode()]
|
|
36
37
|
});
|
|
37
38
|
this.dataUnitInterceptor = {
|
|
38
39
|
interceptAction: async (action) => {
|
|
@@ -47,6 +48,7 @@ export class SnkGrid {
|
|
|
47
48
|
this._gridConfig = undefined;
|
|
48
49
|
this._popUpGridConfig = false;
|
|
49
50
|
this._showSnkFilterBar = true;
|
|
51
|
+
this._enableContinuousInsert = false;
|
|
50
52
|
this.columnFilterDataSource = new SnkMultiSelectionListDataSource();
|
|
51
53
|
this.configName = undefined;
|
|
52
54
|
this.filterBarTitle = undefined;
|
|
@@ -70,6 +72,7 @@ export class SnkGrid {
|
|
|
70
72
|
this.filterBarLegacyConfigName = undefined;
|
|
71
73
|
this.autoLoad = undefined;
|
|
72
74
|
this.autoFocus = true;
|
|
75
|
+
this.enableGridInsert = false;
|
|
73
76
|
}
|
|
74
77
|
/**
|
|
75
78
|
* Exibe a janela de configurações da grade.
|
|
@@ -156,6 +159,16 @@ export class SnkGrid {
|
|
|
156
159
|
async setFocus() {
|
|
157
160
|
this._grid.setFocus();
|
|
158
161
|
}
|
|
162
|
+
async handleClick(event) {
|
|
163
|
+
if (this.hasToBlockEvent(event)) {
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
event.stopPropagation();
|
|
166
|
+
await this._dataUnit.cancelEdition();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
hasToBlockEvent(event) {
|
|
170
|
+
return this._snkFilterBar.contains(event.target) && this.enableGridInsert && this._dataUnit.hasNewRecord();
|
|
171
|
+
}
|
|
159
172
|
async handleGridLegacyConfigName(newLegacyConfig, oldLegacyConfig) {
|
|
160
173
|
if (!newLegacyConfig) {
|
|
161
174
|
return;
|
|
@@ -166,6 +179,9 @@ export class SnkGrid {
|
|
|
166
179
|
this.addGridLegacyConfigName();
|
|
167
180
|
this.loadConfig();
|
|
168
181
|
}
|
|
182
|
+
handleAddFormMode() {
|
|
183
|
+
return this.enableGridInsert ? TaskbarElement.FORM_MODE : "";
|
|
184
|
+
}
|
|
169
185
|
openGridConfig() {
|
|
170
186
|
this._grid.getColumnsState()
|
|
171
187
|
.then((gridColumns) => {
|
|
@@ -290,13 +306,21 @@ export class SnkGrid {
|
|
|
290
306
|
}
|
|
291
307
|
parent = parent.parentElement;
|
|
292
308
|
}
|
|
309
|
+
if (this._snkFilterBar) {
|
|
310
|
+
this._snkFilterBar.addEventListener('click', this.handleClick);
|
|
311
|
+
}
|
|
293
312
|
this._rmPrecisionCustomValueFormatter = new RmPrecisionCustomValueFormatter();
|
|
294
313
|
this.addGridLegacyConfigName();
|
|
295
314
|
this.loadConfig();
|
|
315
|
+
this._continuousInsertUtils = new ContinuousInsertUtils(this._application, this.resourceID, this.configName);
|
|
316
|
+
if (this.enableGridInsert) {
|
|
317
|
+
this._continuousInsertUtils.getConfig().then(value => this._enableContinuousInsert = value);
|
|
318
|
+
}
|
|
296
319
|
}
|
|
297
320
|
componentDidRender() {
|
|
321
|
+
var _a, _b;
|
|
298
322
|
this._rmPrecisionCustomValueFormatter.setGrid(this._grid);
|
|
299
|
-
this.loadGridCustomFormatters(this._dataUnit.metadata.fields);
|
|
323
|
+
this.loadGridCustomFormatters((_b = (_a = this._dataUnit) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.fields);
|
|
300
324
|
this.setCustomRenders();
|
|
301
325
|
this.setCustomEditors();
|
|
302
326
|
}
|
|
@@ -394,12 +418,21 @@ export class SnkGrid {
|
|
|
394
418
|
eagerInitialize: true,
|
|
395
419
|
itemBuilder: (actionButton, item) => this.getColumnSearch(actionButton, item)
|
|
396
420
|
}];
|
|
421
|
+
if (this.enableGridInsert) {
|
|
422
|
+
hardList.push(this._continuousInsertUtils.actionContinuousInsert(this._enableContinuousInsert, this.handleEnableContinuousInsert));
|
|
423
|
+
}
|
|
424
|
+
if (this.isGridInsertActive())
|
|
425
|
+
return hardList;
|
|
397
426
|
if (this.taskbarManager != undefined && this.taskbarManager.getMoreOptions != undefined) {
|
|
398
427
|
const taskbarID = this.getTopTaskBarId();
|
|
399
428
|
return hardList.concat(this.taskbarManager.getMoreOptions(taskbarID, this.configName, this._dataState, this.actionsList));
|
|
400
429
|
}
|
|
401
430
|
return hardList.concat(this.actionsList);
|
|
402
431
|
}
|
|
432
|
+
handleEnableContinuousInsert() {
|
|
433
|
+
this._enableContinuousInsert = !this._enableContinuousInsert;
|
|
434
|
+
this._continuousInsertUtils.handleSaveConfig(this._enableContinuousInsert);
|
|
435
|
+
}
|
|
403
436
|
handleFilterConfigUpdated(filterConfig) {
|
|
404
437
|
if (!filterConfig.length) {
|
|
405
438
|
this._showSnkFilterBar = false;
|
|
@@ -411,12 +444,20 @@ export class SnkGrid {
|
|
|
411
444
|
}
|
|
412
445
|
this._showSnkFilterBar = true;
|
|
413
446
|
}
|
|
447
|
+
getGridHeaderButtons() {
|
|
448
|
+
if (this.isGridInsertActive())
|
|
449
|
+
return TaskbarElement.MORE_OPTIONS;
|
|
450
|
+
return this._headerTaskbarProcessor.buttons;
|
|
451
|
+
}
|
|
452
|
+
isGridInsertActive() {
|
|
453
|
+
return this.enableGridInsert && this._dataUnit.hasNewRecord();
|
|
454
|
+
}
|
|
414
455
|
render() {
|
|
415
456
|
if (!this._dataUnit) {
|
|
416
457
|
return undefined;
|
|
417
458
|
}
|
|
418
459
|
return (h("div", { class: "snk-grid__container ez-flex ez-flex--column ez-flex-item--auto" }, h("div", { class: "snk-grid__header ez-margin-bottom--medium" }, this._showSnkFilterBar &&
|
|
419
|
-
h(Fragment, null, h("snk-filter-bar", { ref: (ref) => this._snkFilterBar = ref, title: this.filterBarTitle, dataUnit: this._dataUnit, "data-element-id": "gridFilter", class: "snk-grid__filter-bar ez-align--top", configName: this.configName, messagesBuilder: this.messagesBuilder, resourceID: this.resourceID, onConfigUpdated: evt => this.handleFilterConfigUpdated(evt.detail), disablePersonalizedFilter: this.disablePersonalizedFilter, filterBarLegacyConfigName: this.filterBarLegacyConfigName, autoLoad: this.autoLoad }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" })), h("snk-taskbar", { class: "ez-padding-left--medium", "data-element-id": "grid_top", key: "topTaskbar", configName: this.configName, dataUnit: this._dataUnit, messagesBuilder: this.messagesBuilder, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.topTaskbarCustomSlotId, overflowStrategy: 'none' }, h("slot", { name: this.topTaskbarCustomSlotId }))), h("ez-grid", { ref: ref => this._grid = ref, class: (this.presentationMode === PresentationMode.SECONDARY ? "snk-grid-container__without-shadow " : "") + "snk-grid__table", "data-element-id": "embedded", dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: (evt) => { this.gridConfigChangeHandler(evt); }, onEzDoubleClick: (evt) => this.gridDoubleClick.emit(evt.detail), statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, columnfilterDataSource: this.columnFilterDataSource, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, recordsValidator: this.recordsValidator, canEdit: this.canEdit, autoFocus: this.autoFocus }, h("snk-taskbar", { id: 'teste', dataUnit: this._dataUnit, configName: this.configName, messagesBuilder: this.messagesBuilder, "data-element-id": "grid_left", buttons: this.
|
|
460
|
+
h(Fragment, null, h("snk-filter-bar", { ref: (ref) => this._snkFilterBar = ref, title: this.filterBarTitle, dataUnit: this._dataUnit, "data-element-id": "gridFilter", class: "snk-grid__filter-bar ez-align--top", configName: this.configName, messagesBuilder: this.messagesBuilder, resourceID: this.resourceID, onConfigUpdated: evt => this.handleFilterConfigUpdated(evt.detail), disablePersonalizedFilter: this.disablePersonalizedFilter, filterBarLegacyConfigName: this.filterBarLegacyConfigName, autoLoad: this.autoLoad }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" })), h("snk-taskbar", { class: "ez-padding-left--medium", "data-element-id": "grid_top", key: "topTaskbar", configName: this.configName, dataUnit: this._dataUnit, messagesBuilder: this.messagesBuilder, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.topTaskbarCustomSlotId, overflowStrategy: 'none' }, h("slot", { name: this.topTaskbarCustomSlotId }))), h("ez-grid", { ref: ref => this._grid = ref, class: (this.presentationMode === PresentationMode.SECONDARY ? "snk-grid-container__without-shadow " : "") + "snk-grid__table", "data-element-id": "embedded", dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: (evt) => { this.gridConfigChangeHandler(evt); }, onEzDoubleClick: (evt) => this.gridDoubleClick.emit(evt.detail), statusResolver: this.statusResolver, multipleSelection: this.multipleSelection, columnfilterDataSource: this.columnFilterDataSource, selectionToastConfig: this.selectionToastConfig, useEnterLikeTab: this.useEnterLikeTab, recordsValidator: this.recordsValidator, canEdit: this.canEdit, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableContinuousInsert: this._enableContinuousInsert }, h("snk-taskbar", { id: 'teste', dataUnit: this._dataUnit, configName: this.configName, messagesBuilder: this.messagesBuilder, "data-element-id": "grid_left", buttons: this.getGridHeaderButtons(), presentationMode: this.presentationMode, disabledButtons: this._headerTaskbarProcessor.disabledButtons, customButtons: this._headerTaskbarProcessor.customButtons, slot: "leftButtons", actionsList: this.getActionsList(), primaryButton: this.getPrimaryButton(), resourceID: this.resourceID, customContainerId: this.taskbarCustomContainerId, customSlotId: this.gridHeaderCustomSlotId }, h("slot", { name: this.gridHeaderCustomSlotId }))), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" })), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._popUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this._gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resourceID }))));
|
|
420
461
|
}
|
|
421
462
|
static get is() { return "snk-grid"; }
|
|
422
463
|
static get encapsulation() { return "scoped"; }
|
|
@@ -862,6 +903,24 @@ export class SnkGrid {
|
|
|
862
903
|
"attribute": "auto-focus",
|
|
863
904
|
"reflect": false,
|
|
864
905
|
"defaultValue": "true"
|
|
906
|
+
},
|
|
907
|
+
"enableGridInsert": {
|
|
908
|
+
"type": "boolean",
|
|
909
|
+
"mutable": false,
|
|
910
|
+
"complexType": {
|
|
911
|
+
"original": "boolean",
|
|
912
|
+
"resolved": "boolean",
|
|
913
|
+
"references": {}
|
|
914
|
+
},
|
|
915
|
+
"required": false,
|
|
916
|
+
"optional": true,
|
|
917
|
+
"docs": {
|
|
918
|
+
"tags": [],
|
|
919
|
+
"text": "Ativa inser\u00E7\u00E3o de registros no modo grade."
|
|
920
|
+
},
|
|
921
|
+
"attribute": "enable-grid-insert",
|
|
922
|
+
"reflect": false,
|
|
923
|
+
"defaultValue": "false"
|
|
865
924
|
}
|
|
866
925
|
};
|
|
867
926
|
}
|
|
@@ -871,7 +930,8 @@ export class SnkGrid {
|
|
|
871
930
|
"_dataState": {},
|
|
872
931
|
"_gridConfig": {},
|
|
873
932
|
"_popUpGridConfig": {},
|
|
874
|
-
"_showSnkFilterBar": {}
|
|
933
|
+
"_showSnkFilterBar": {},
|
|
934
|
+
"_enableContinuousInsert": {}
|
|
875
935
|
};
|
|
876
936
|
}
|
|
877
937
|
static get events() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApplicationContext, DataType, ElementIDUtils, FloatingManager, JSUtils, ObjectUtils, StringUtils, UserInterface, } from '@sankhyalabs/core';
|
|
2
|
-
import { CSSVarsUtils } from
|
|
2
|
+
import { CSSVarsUtils } from '@sankhyalabs/ezui/dist/collection/utils';
|
|
3
3
|
import { h } from '@stencil/core';
|
|
4
4
|
import { SIMPLE_CRUD_MODE, VIEW_MODE } from '../../lib/utils/constants';
|
|
5
5
|
import { TaskbarElement } from '../snk-taskbar/elements/taskbar-elements';
|
|
@@ -13,7 +13,8 @@ import { SnkFormConfigManager } from '../snk-form-config/SnkFormConfigManager';
|
|
|
13
13
|
import { REGULAR_DEFAULT_BTNS, REGULAR_SELECTED_BTNS } from './regular-buttons';
|
|
14
14
|
import RmPrecisionCustomValueFormatter from '../../lib/DefaultCustomFormatters/RmPrecisionCustomValueFormatter';
|
|
15
15
|
import ClientSideExporterProvider from '../snk-data-exporter/providers/ClientSideExporterProvider';
|
|
16
|
-
import store from
|
|
16
|
+
import store from '../../lib/store';
|
|
17
|
+
import { ContinuousInsertUtils } from '../../lib/utils/ContinuousInsertUtils';
|
|
17
18
|
export class SnkSimpleCrud {
|
|
18
19
|
constructor() {
|
|
19
20
|
this._multiSelectionListDataSource = new SnkMultiSelectionListDataSource();
|
|
@@ -22,11 +23,11 @@ export class SnkSimpleCrud {
|
|
|
22
23
|
this._customEditors = new Map();
|
|
23
24
|
this._customRenders = new Map();
|
|
24
25
|
this._taskbarProcessor = new TaskbarProcessor({
|
|
25
|
-
"snkSimpleCrudTaskbar.form_regular": this.getButtons(false, [TaskbarElement.GRID_MODE]),
|
|
26
|
+
"snkSimpleCrudTaskbar.form_regular": this.getButtons(false, [TaskbarElement.GRID_MODE], true),
|
|
26
27
|
"snkSimpleCrudTaskbar.grid_regular": this.getButtons(false, [TaskbarElement.DATA_EXPORTER, TaskbarElement.FORM_MODE]),
|
|
27
|
-
"snkSimpleCrudTaskbar.form_selected": this.getButtons(true, [TaskbarElement.GRID_MODE]),
|
|
28
|
+
"snkSimpleCrudTaskbar.form_selected": this.getButtons(true, [TaskbarElement.GRID_MODE], true),
|
|
28
29
|
"snkSimpleCrudTaskbar.grid_selected": this.getButtons(true, [TaskbarElement.DATA_EXPORTER, TaskbarElement.FORM_MODE]),
|
|
29
|
-
"snkSimpleCrudTaskbar.finish_edition":
|
|
30
|
+
"snkSimpleCrudTaskbar.finish_edition": this.getFinishEditionButtonsCallback.bind(this)
|
|
30
31
|
});
|
|
31
32
|
this._showPopUpGridConfig = false;
|
|
32
33
|
this._showFormConfig = false;
|
|
@@ -42,10 +43,12 @@ export class SnkSimpleCrud {
|
|
|
42
43
|
this.formConfig = undefined;
|
|
43
44
|
this._formFields = [];
|
|
44
45
|
this._fieldsProps = new Map();
|
|
46
|
+
this._enableContinuousInsert = true;
|
|
45
47
|
this.multipleSelection = undefined;
|
|
46
48
|
this.useCancelConfirm = true;
|
|
47
49
|
this.pageSize = 150;
|
|
48
50
|
this.resourceID = undefined;
|
|
51
|
+
this.enableGridInsert = false;
|
|
49
52
|
this.taskbarManager = undefined;
|
|
50
53
|
this.messagesBuilder = undefined;
|
|
51
54
|
this.useEnterLikeTab = false;
|
|
@@ -115,8 +118,19 @@ export class SnkSimpleCrud {
|
|
|
115
118
|
newCustomFieldProps.set(fieldName, Object.assign(Object.assign({}, currentProps), { [propName]: value }));
|
|
116
119
|
this._fieldsProps = newCustomFieldProps;
|
|
117
120
|
}
|
|
118
|
-
|
|
119
|
-
|
|
121
|
+
getFinishEditionButtonsCallback() {
|
|
122
|
+
const btns = ["CANCEL", "SAVE"];
|
|
123
|
+
if (this.enableGridInsert && this._currentViewMode !== VIEW_MODE.ATTACHMENT) {
|
|
124
|
+
btns.push(this._currentViewMode === VIEW_MODE.GRID ? TaskbarElement.FORM_MODE : TaskbarElement.GRID_MODE);
|
|
125
|
+
}
|
|
126
|
+
return btns;
|
|
127
|
+
}
|
|
128
|
+
getButtons(selected, extraButtons, removeRefresh) {
|
|
129
|
+
let btnList = selected ? REGULAR_SELECTED_BTNS : REGULAR_DEFAULT_BTNS;
|
|
130
|
+
if (removeRefresh) {
|
|
131
|
+
btnList = btnList.filter(item => item !== TaskbarElement.REFRESH);
|
|
132
|
+
}
|
|
133
|
+
return this.addConfigButton(this.resolveInMemoryBtns(btnList)
|
|
120
134
|
.concat(extraButtons));
|
|
121
135
|
}
|
|
122
136
|
addConfigButton(buttons) {
|
|
@@ -197,7 +211,6 @@ export class SnkSimpleCrud {
|
|
|
197
211
|
await this.setFieldProp(field, 'precision', rmPrecision);
|
|
198
212
|
await this.setFieldProp(field, 'prettyPrecision', rmPrecision);
|
|
199
213
|
}
|
|
200
|
-
;
|
|
201
214
|
this._rmPrecisionCustomValueFormatter.setDataState(this.dataState);
|
|
202
215
|
}
|
|
203
216
|
async handleUpdateGridLegacyConfig(newValue, oldValue) {
|
|
@@ -320,6 +333,10 @@ export class SnkSimpleCrud {
|
|
|
320
333
|
this.onModeChange();
|
|
321
334
|
this.configDatasource();
|
|
322
335
|
this._rmPrecisionCustomValueFormatter = new RmPrecisionCustomValueFormatter();
|
|
336
|
+
this._continuousInsertUtils = new ContinuousInsertUtils(this.application, this.resolveResourceID(), this.configName);
|
|
337
|
+
if (this.enableGridInsert) {
|
|
338
|
+
this._continuousInsertUtils.getConfig().then(value => this._enableContinuousInsert = value);
|
|
339
|
+
}
|
|
323
340
|
}
|
|
324
341
|
componentDidLoad() {
|
|
325
342
|
CSSVarsUtils.applyVarsGrid(this._element, this._grid);
|
|
@@ -554,6 +571,9 @@ export class SnkSimpleCrud {
|
|
|
554
571
|
const options = filteredFields.map(field => ({ value: field.name, label: field.label }));
|
|
555
572
|
return Promise.resolve(options);
|
|
556
573
|
}
|
|
574
|
+
isGridInsertActive() {
|
|
575
|
+
return this.enableGridInsert && this.dataUnit.hasNewRecord();
|
|
576
|
+
}
|
|
557
577
|
getActionsList() {
|
|
558
578
|
var _a, _b;
|
|
559
579
|
const hardList = [{
|
|
@@ -565,11 +585,22 @@ export class SnkSimpleCrud {
|
|
|
565
585
|
? this.getColumnSearch(actionButton, item)
|
|
566
586
|
: this.getFieldSearch(actionButton, item)
|
|
567
587
|
}];
|
|
588
|
+
if (this.enableGridInsert) {
|
|
589
|
+
hardList.push(this._continuousInsertUtils.actionContinuousInsert(this._enableContinuousInsert, this.handleEnableContinuousInsert));
|
|
590
|
+
}
|
|
591
|
+
if (this.isGridInsertActive())
|
|
592
|
+
return hardList;
|
|
568
593
|
if (this.taskbarManager != undefined && this.taskbarManager.getMoreOptions != undefined) {
|
|
569
594
|
const taskbarID = this.getTopTaskBarId();
|
|
570
595
|
return hardList.concat(this.taskbarManager.getMoreOptions(taskbarID, this.configName, this.dataState, this.actionsList));
|
|
571
596
|
}
|
|
572
|
-
|
|
597
|
+
if (this.actionsList)
|
|
598
|
+
return hardList.concat(this.actionsList);
|
|
599
|
+
return hardList;
|
|
600
|
+
}
|
|
601
|
+
handleEnableContinuousInsert() {
|
|
602
|
+
this._enableContinuousInsert = !this._enableContinuousInsert;
|
|
603
|
+
this._continuousInsertUtils.handleSaveConfig(this._enableContinuousInsert);
|
|
573
604
|
}
|
|
574
605
|
getTopTaskBarId() {
|
|
575
606
|
var _a;
|
|
@@ -688,6 +719,11 @@ export class SnkSimpleCrud {
|
|
|
688
719
|
}
|
|
689
720
|
this._formConfigManager.setConfig(this.formConfig);
|
|
690
721
|
}
|
|
722
|
+
handleDataUnitOnInsertionMode() {
|
|
723
|
+
if (this.enableGridInsert)
|
|
724
|
+
return;
|
|
725
|
+
this.goToView(VIEW_MODE.FORM);
|
|
726
|
+
}
|
|
691
727
|
/* istanbul ignore next */
|
|
692
728
|
render() {
|
|
693
729
|
var _a;
|
|
@@ -695,9 +731,9 @@ export class SnkSimpleCrud {
|
|
|
695
731
|
return;
|
|
696
732
|
}
|
|
697
733
|
const taskbarContent = (h("snk-taskbar", { class: this._currentViewMode === VIEW_MODE.FORM && "ez-box ez-box--shadow ez-padding--medium", dataUnit: this.dataUnit, primaryButton: ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", "data-element-id": "grid_left", messagesBuilder: this.messagesBuilder, buttons: this._taskbarProcessor.buttons, actionsList: this.getActionsList(), disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, "data-exporter-store-key": this.getDataExporterStoreKey(), slot: "leftButtons", presentationMode: PresentationMode.SECONDARY }, h("slot", { name: "TASKBAR_CUSTOM_ELEMENTS" })));
|
|
698
|
-
return (h("snk-data-unit", { ref: ref => this._snkDataUnit = ref, class: "simple-crud__container", dataUnit: this.dataUnit, useCancelConfirm: this.useCancelConfirm, onDataStateChange: evt => this.onDataStateChange(evt), onCancelEdition: this.handleCancelEdit.bind(this), pageSize: this.getPageSize(), onInsertionMode:
|
|
734
|
+
return (h("snk-data-unit", { ref: ref => this._snkDataUnit = ref, class: "simple-crud__container", dataUnit: this.dataUnit, useCancelConfirm: this.useCancelConfirm, onDataStateChange: evt => this.onDataStateChange(evt), onCancelEdition: this.handleCancelEdit.bind(this), pageSize: this.getPageSize(), onInsertionMode: this.handleDataUnitOnInsertionMode.bind(this), onDataUnitReady: (evt) => this.dataUnitReady.emit(evt.detail), ignoreSaveMessage: this._currentViewMode === VIEW_MODE.GRID, onMessagesBuilderUpdated: evt => this.messagesBuilder = evt.detail, onDataUnitFieldsHidded: this.updateFormConfig.bind(this), domainMessagesBuilder: this.domainMessagesBuilder }, h("header", null, h("slot", { name: "snkSimpleCrudHeader" })), h("section", { class: "ez-box ez-box--shadow simple-crud__container-section" }, this._currentViewMode === VIEW_MODE.FORM && taskbarContent, h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "simple-crud" }, h("stack-item", null, h("ez-grid", { class: "ez-margin-bottom--large", ref: ref => this._grid = ref, dataUnit: this.dataUnit, config: this.gridConfig, "no-header": true, multipleSelection: this.multipleSelection, onEzDoubleClick: () => this.goToView(VIEW_MODE.FORM), onConfigChange: evt => this.gridConfigChangeHandler(evt), columnfilterDataSource: this.dataUnit.name && this.dataUnit.name.includes(InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME)
|
|
699
735
|
? undefined
|
|
700
|
-
: this._multiSelectionListDataSource, useEnterLikeTab: this.useEnterLikeTab, autoFocus: this.autoFocus }, this._currentViewMode === VIEW_MODE.GRID && taskbarContent, h("div", { slot: "footer" }, h("slot", { name: "snkSimpleCrudFooter" })))), h("stack-item", null, h("ez-form", { ref: (ref) => this._form = ref, class: `ez-margin-top--large ${this.handleShowFormConfig() ? "simple-crud__form--hidden" : ""}`, dataUnit: this.dataUnit, config: this.getFormConfig(), fieldToFocus: this._fieldToGetFocus, onEzFormSetFields: (evt) => this.handleFormSetFields(evt.detail), onEzFormRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this) }), this.handleShowFormConfig() && h("snk-form-config", { messagesBuilder: this.messagesBuilder, dataUnit: this.dataUnit, configManager: this._formConfigManager, onConfigClose: () => this.closeFormConfig() })), this.messagesBuilder && h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.goToView(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showConfiguratorButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this.resolveResourceID(), customContainerId: this._customContainerId })), h("div", { id: `${this._customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }))), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._showPopUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this.gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resolveResourceID() }))));
|
|
736
|
+
: this._multiSelectionListDataSource, useEnterLikeTab: this.useEnterLikeTab, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableContinuousInsert: this._enableContinuousInsert }, this._currentViewMode === VIEW_MODE.GRID && taskbarContent, h("div", { slot: "footer" }, h("slot", { name: "snkSimpleCrudFooter" })))), h("stack-item", null, h("ez-form", { ref: (ref) => this._form = ref, class: `ez-margin-top--large ${this.handleShowFormConfig() ? "simple-crud__form--hidden" : ""}`, dataUnit: this.dataUnit, config: this.getFormConfig(), fieldToFocus: this._fieldToGetFocus, onEzFormSetFields: (evt) => this.handleFormSetFields(evt.detail), onEzFormRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this) }), this.handleShowFormConfig() && h("snk-form-config", { messagesBuilder: this.messagesBuilder, dataUnit: this.dataUnit, configManager: this._formConfigManager, onConfigClose: () => this.closeFormConfig() })), this.messagesBuilder && h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.goToView(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showConfiguratorButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this.resolveResourceID(), customContainerId: this._customContainerId })), h("div", { id: `${this._customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }))), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._showPopUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this.gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resolveResourceID() }))));
|
|
701
737
|
}
|
|
702
738
|
static get is() { return "snk-simple-crud"; }
|
|
703
739
|
static get encapsulation() { return "scoped"; }
|
|
@@ -903,6 +939,24 @@ export class SnkSimpleCrud {
|
|
|
903
939
|
"attribute": "resource-i-d",
|
|
904
940
|
"reflect": false
|
|
905
941
|
},
|
|
942
|
+
"enableGridInsert": {
|
|
943
|
+
"type": "boolean",
|
|
944
|
+
"mutable": false,
|
|
945
|
+
"complexType": {
|
|
946
|
+
"original": "boolean",
|
|
947
|
+
"resolved": "boolean",
|
|
948
|
+
"references": {}
|
|
949
|
+
},
|
|
950
|
+
"required": false,
|
|
951
|
+
"optional": true,
|
|
952
|
+
"docs": {
|
|
953
|
+
"tags": [],
|
|
954
|
+
"text": "Ativa inser\u00E7\u00E3o de registros no modo grade."
|
|
955
|
+
},
|
|
956
|
+
"attribute": "enable-grid-insert",
|
|
957
|
+
"reflect": false,
|
|
958
|
+
"defaultValue": "false"
|
|
959
|
+
},
|
|
906
960
|
"taskbarManager": {
|
|
907
961
|
"type": "unknown",
|
|
908
962
|
"mutable": false,
|
|
@@ -1133,7 +1187,8 @@ export class SnkSimpleCrud {
|
|
|
1133
1187
|
"_fieldToGetFocus": {},
|
|
1134
1188
|
"_customContainerId": {},
|
|
1135
1189
|
"_formFields": {},
|
|
1136
|
-
"_fieldsProps": {}
|
|
1190
|
+
"_fieldsProps": {},
|
|
1191
|
+
"_enableContinuousInsert": {}
|
|
1137
1192
|
};
|
|
1138
1193
|
}
|
|
1139
1194
|
static get events() {
|
|
@@ -29,12 +29,16 @@ export default class TaskbarProcessor {
|
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
getButtonsArray(taskbarId, taskbarManager, dataState) {
|
|
32
|
-
const defaults = this.
|
|
32
|
+
const defaults = this.getButtonsFromKey(taskbarId);
|
|
33
33
|
if (taskbarManager) {
|
|
34
34
|
return taskbarManager.getButtons(taskbarId, dataState, [...defaults]);
|
|
35
35
|
}
|
|
36
36
|
return defaults;
|
|
37
37
|
}
|
|
38
|
+
getButtonsFromKey(taskbarId) {
|
|
39
|
+
const btnsValue = this._defaultButtons[taskbarId];
|
|
40
|
+
return typeof btnsValue === 'function' ? btnsValue() : btnsValue;
|
|
41
|
+
}
|
|
38
42
|
isEnabled(taskbarId, taskbarManager, buttonName, dataState, disabled) {
|
|
39
43
|
const originalValue = disabled.includes(buttonName) ? false : true;
|
|
40
44
|
if (taskbarManager && taskbarManager.isEnabled) {
|
|
@@ -8,7 +8,7 @@ export default class RmPrecisionCustomValueFormatter {
|
|
|
8
8
|
this.refreshSelectedRows();
|
|
9
9
|
}
|
|
10
10
|
setDataState(dataState) {
|
|
11
|
-
if (ObjectUtils.
|
|
11
|
+
if (this._dataState && ObjectUtils.equals(dataState === null || dataState === void 0 ? void 0 : dataState.metadataByRow, this._dataState.metadataByRow)) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
this._dataState = dataState;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeOperation, DataType, DataUnit, DateUtils, StringUtils, } from '@sankhyalabs/core';
|
|
2
|
-
import {
|
|
2
|
+
import { buildLoadDataResponse } from './dataUnitInMemoryUtils';
|
|
3
3
|
export default class InMemoryLoader {
|
|
4
4
|
constructor(metadata, records, config) {
|
|
5
5
|
this.metadata = metadata;
|
|
@@ -82,9 +82,7 @@ export default class InMemoryLoader {
|
|
|
82
82
|
return StringUtils.generateUUID();
|
|
83
83
|
}
|
|
84
84
|
inMemoryLoader(dataUnit, request, recordsIn) {
|
|
85
|
-
|
|
86
|
-
records = applySorting(records, dataUnit, request.sort);
|
|
87
|
-
return Promise.resolve({ records, paginationInfo: buildPaginationInfo(records, request.offset, request.limit) });
|
|
85
|
+
return buildLoadDataResponse(recordsIn, dataUnit, request);
|
|
88
86
|
}
|
|
89
87
|
metadaLoader() {
|
|
90
88
|
return Promise.resolve(this._metadata);
|
|
@@ -11,6 +11,21 @@ export function applyFilter(records, dataUnit, filters) {
|
|
|
11
11
|
}
|
|
12
12
|
return records.filter(filterFunction);
|
|
13
13
|
}
|
|
14
|
+
export function buildLoadDataResponse(recordsIn, dataUnit, request) {
|
|
15
|
+
let records = recordsIn ? [...recordsIn] : [];
|
|
16
|
+
records = applyFilter(records, dataUnit, request.filters);
|
|
17
|
+
records = applySorting(records, dataUnit, request.sort);
|
|
18
|
+
const { offset, limit } = request;
|
|
19
|
+
const paginationInfoBuilderParams = {
|
|
20
|
+
recordsLength: records.length,
|
|
21
|
+
offset,
|
|
22
|
+
recordsPerPage: limit,
|
|
23
|
+
};
|
|
24
|
+
return Promise.resolve({
|
|
25
|
+
records: getPagesByRecords(records, offset, limit),
|
|
26
|
+
paginationInfo: buildPaginationInfo(paginationInfoBuilderParams),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
14
29
|
export function applySorting(records, dataUnit, sorting) {
|
|
15
30
|
if (sorting == undefined || sorting.length == 0) {
|
|
16
31
|
return records;
|
|
@@ -21,17 +36,27 @@ export function applySorting(records, dataUnit, sorting) {
|
|
|
21
36
|
}
|
|
22
37
|
return records.sort(sortingFunction);
|
|
23
38
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
39
|
+
function hasValidLimitAndOffset(offset, limit) {
|
|
40
|
+
return offset >= 0 && limit >= 0;
|
|
41
|
+
}
|
|
42
|
+
export function getPagesByRecords(records, offset = 0, limit = 0) {
|
|
43
|
+
if (!records || !records.length || !hasValidLimitAndOffset(offset, limit))
|
|
44
|
+
return [];
|
|
45
|
+
if (limit === 0 && offset === 0)
|
|
46
|
+
return records;
|
|
47
|
+
return records.slice(offset, offset + limit);
|
|
48
|
+
}
|
|
49
|
+
export function buildPaginationInfo({ recordsLength = 0, offset = 0, recordsPerPage = 0 }) {
|
|
50
|
+
if (!recordsLength) {
|
|
51
|
+
return { currentPage: 0, firstRecord: 0, lastRecord: 0, total: 0, hasMore: false };
|
|
27
52
|
}
|
|
28
|
-
const
|
|
29
|
-
const lastRecord = Math.min(
|
|
53
|
+
const lastRecordIndex = offset + recordsPerPage;
|
|
54
|
+
const lastRecord = lastRecordIndex ? Math.min(lastRecordIndex, recordsLength) : recordsLength;
|
|
30
55
|
return {
|
|
31
|
-
currentPage:
|
|
32
|
-
firstRecord: offset,
|
|
56
|
+
currentPage: recordsPerPage === 0 ? 0 : Math.ceil(offset / recordsPerPage),
|
|
57
|
+
firstRecord: offset + 1,
|
|
33
58
|
lastRecord: lastRecord,
|
|
34
|
-
total:
|
|
35
|
-
hasMore:
|
|
59
|
+
total: recordsLength,
|
|
60
|
+
hasMore: lastRecord < recordsLength,
|
|
36
61
|
};
|
|
37
62
|
}
|
package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js
CHANGED
|
@@ -44,12 +44,19 @@ export class DatasetStrategy {
|
|
|
44
44
|
const records = this.processRecords(dataUnit, fields, responseRecords);
|
|
45
45
|
const loadingInProgress = pagerId != undefined;
|
|
46
46
|
const count = loadingInfo.count + records.length;
|
|
47
|
+
const isInsertingNewRecord = dataUnit.hasNewRecord();
|
|
47
48
|
const needReload = !loadingInProgress && localSorting.length > 0;
|
|
49
|
+
/**
|
|
50
|
+
* Caso precise recarregar dados, porém está no meio de uma inserção, os dados não devem recarregados instantaneamente,
|
|
51
|
+
* Mas sim, sinalizar que o dataUnit está aguardando para der recarregado.
|
|
52
|
+
*/
|
|
53
|
+
if (needReload && isInsertingNewRecord) {
|
|
54
|
+
dataUnit.setWaitingToReload(true);
|
|
55
|
+
}
|
|
48
56
|
return Promise.resolve({
|
|
49
57
|
records,
|
|
50
58
|
loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
|
|
51
|
-
loadingInProgress, total: loadingInProgress ? undefined : count, count,
|
|
52
|
-
needReload })
|
|
59
|
+
loadingInProgress, total: loadingInProgress ? undefined : count, count, needReload: needReload && !isInsertingNewRecord })
|
|
53
60
|
});
|
|
54
61
|
}
|
|
55
62
|
catch (error) {
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export const snkGridMessages = {
|
|
2
|
-
findColumn: "Busca de colunas"
|
|
2
|
+
findColumn: "Busca de colunas",
|
|
3
|
+
cancelConfirmation: {
|
|
4
|
+
title: "Aviso",
|
|
5
|
+
message: "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?</b>",
|
|
6
|
+
}
|
|
3
7
|
};
|
|
4
8
|
export const snkGridConfigMessages = {
|
|
5
9
|
gridConfiguration: "Configuração da Grade",
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { h } from '@stencil/core';
|
|
2
|
+
import { StringUtils } from '@sankhyalabs/core';
|
|
3
|
+
export class ContinuousInsertUtils {
|
|
4
|
+
constructor(snkApplication, resourceID, configName) {
|
|
5
|
+
this.snkApplication = snkApplication;
|
|
6
|
+
this.keyConfigEnableContinuousInsert = `${resourceID}enableContinuousInsert${configName ? configName : ''}`;
|
|
7
|
+
}
|
|
8
|
+
handleSaveConfig(enableContinuousInsert) {
|
|
9
|
+
return this.snkApplication.saveConfig(this.keyConfigEnableContinuousInsert, enableContinuousInsert);
|
|
10
|
+
}
|
|
11
|
+
getConfig() {
|
|
12
|
+
return this.snkApplication.getConfig(this.keyConfigEnableContinuousInsert).then(value => {
|
|
13
|
+
if (value) {
|
|
14
|
+
return value == "true" ? true : false;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}).catch(() => {
|
|
18
|
+
return false;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
actionContinuousInsert(enableContinuousInsert, handleEnableContinuousInsert) {
|
|
22
|
+
return {
|
|
23
|
+
value: StringUtils.generateUUID(),
|
|
24
|
+
label: enableContinuousInsert ? 'Desativar inclusão contínua' : 'Ativar inclusão contínua',
|
|
25
|
+
enabled: true,
|
|
26
|
+
itemBuilder: () => {
|
|
27
|
+
return (h("div", { class: "ez-dropdown__item-wrapper", onClick: () => handleEnableContinuousInsert() }, h("span", { class: "ez-dropdown__item-label" }, enableContinuousInsert ? 'Desativar inclusão contínua' : 'Ativar inclusão contínua')));
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { D as DataFetcher } from './DataFetcher.js';
|
|
2
2
|
import './pesquisa-fetcher.js';
|
|
3
|
-
import { SortMode, ApplicationContext, UserInterface, DateUtils, ObjectUtils, NumberUtils, DataType } from '@sankhyalabs/core';
|
|
3
|
+
import { SortMode, ApplicationContext, UserInterface, DateUtils, ObjectUtils, NumberUtils, DataType, StringUtils } from '@sankhyalabs/core';
|
|
4
4
|
import './ISave.js';
|
|
5
5
|
import '@sankhyalabs/ezui/dist/collection/utils/constants';
|
|
6
6
|
import { UserInterface as UserInterface$1 } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
|
|
@@ -124,12 +124,16 @@ class TaskbarProcessor {
|
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
126
|
getButtonsArray(taskbarId, taskbarManager, dataState) {
|
|
127
|
-
const defaults = this.
|
|
127
|
+
const defaults = this.getButtonsFromKey(taskbarId);
|
|
128
128
|
if (taskbarManager) {
|
|
129
129
|
return taskbarManager.getButtons(taskbarId, dataState, [...defaults]);
|
|
130
130
|
}
|
|
131
131
|
return defaults;
|
|
132
132
|
}
|
|
133
|
+
getButtonsFromKey(taskbarId) {
|
|
134
|
+
const btnsValue = this._defaultButtons[taskbarId];
|
|
135
|
+
return typeof btnsValue === 'function' ? btnsValue() : btnsValue;
|
|
136
|
+
}
|
|
133
137
|
isEnabled(taskbarId, taskbarManager, buttonName, dataState, disabled) {
|
|
134
138
|
const originalValue = disabled.includes(buttonName) ? false : true;
|
|
135
139
|
if (taskbarManager && taskbarManager.isEnabled) {
|
|
@@ -217,7 +221,7 @@ class RmPrecisionCustomValueFormatter {
|
|
|
217
221
|
this.refreshSelectedRows();
|
|
218
222
|
}
|
|
219
223
|
setDataState(dataState) {
|
|
220
|
-
if (ObjectUtils.
|
|
224
|
+
if (this._dataState && ObjectUtils.equals(dataState === null || dataState === void 0 ? void 0 : dataState.metadataByRow, this._dataState.metadataByRow)) {
|
|
221
225
|
return;
|
|
222
226
|
}
|
|
223
227
|
this._dataState = dataState;
|
|
@@ -295,4 +299,35 @@ class CommonsExporter {
|
|
|
295
299
|
}
|
|
296
300
|
}
|
|
297
301
|
|
|
298
|
-
|
|
302
|
+
class ContinuousInsertUtils {
|
|
303
|
+
constructor(snkApplication, resourceID, configName) {
|
|
304
|
+
this.snkApplication = snkApplication;
|
|
305
|
+
this.keyConfigEnableContinuousInsert = `${resourceID}enableContinuousInsert${configName ? configName : ''}`;
|
|
306
|
+
}
|
|
307
|
+
handleSaveConfig(enableContinuousInsert) {
|
|
308
|
+
return this.snkApplication.saveConfig(this.keyConfigEnableContinuousInsert, enableContinuousInsert);
|
|
309
|
+
}
|
|
310
|
+
getConfig() {
|
|
311
|
+
return this.snkApplication.getConfig(this.keyConfigEnableContinuousInsert).then(value => {
|
|
312
|
+
if (value) {
|
|
313
|
+
return value == "true" ? true : false;
|
|
314
|
+
}
|
|
315
|
+
return false;
|
|
316
|
+
}).catch(() => {
|
|
317
|
+
return false;
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
actionContinuousInsert(enableContinuousInsert, handleEnableContinuousInsert) {
|
|
321
|
+
return {
|
|
322
|
+
value: StringUtils.generateUUID(),
|
|
323
|
+
label: enableContinuousInsert ? 'Desativar inclusão contínua' : 'Ativar inclusão contínua',
|
|
324
|
+
enabled: true,
|
|
325
|
+
itemBuilder: () => {
|
|
326
|
+
return (h("div", { class: "ez-dropdown__item-wrapper", onClick: () => handleEnableContinuousInsert() },
|
|
327
|
+
h("span", { class: "ez-dropdown__item-label" }, enableContinuousInsert ? 'Desativar inclusão contínua' : 'Ativar inclusão contínua')));
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export { CommonsExporter as C, RmPrecisionCustomValueFormatter as R, SnkMultiSelectionListDataSource as S, TaskbarProcessor as T, CrudUtils as a, buildFieldSearch as b, ContinuousInsertUtils as c, openFieldSearch as o };
|