@sankhyalabs/ezui 5.22.0-dev.20 → 5.22.0-dev.21
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/{RecordValidationProcessor-4c893e04.js → RecordValidationProcessor-10846595.js} +7 -1
- package/dist/cjs/ez-form.cjs.entry.js +2 -2
- package/dist/cjs/ez-grid.cjs.entry.js +252 -15
- package/dist/cjs/ezui.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/ez-grid/controller/ag-grid/AgGridController.js +106 -4
- package/dist/collection/components/ez-grid/controller/ag-grid/DataSource.js +83 -5
- package/dist/collection/components/ez-grid/controller/ag-grid/GridEditionManager.js +57 -6
- package/dist/collection/components/ez-grid/controller/ag-grid/test/constants/GridEditionMock.js +1 -0
- package/dist/collection/components/ez-grid/ez-grid.js +42 -0
- package/dist/collection/utils/form/DataBinder.js +1 -1
- package/dist/collection/utils/validators/recordvalidator/IInvalidCells.js +1 -0
- package/dist/collection/utils/validators/recordvalidator/RecordValidationProcessor.js +7 -1
- package/dist/custom-elements/index.js +260 -17
- package/dist/esm/{RecordValidationProcessor-b00b8b77.js → RecordValidationProcessor-9c6cc267.js} +7 -1
- package/dist/esm/ez-form.entry.js +2 -2
- package/dist/esm/ez-grid.entry.js +252 -15
- package/dist/esm/ezui.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/ezui/ezui.esm.js +1 -1
- package/dist/ezui/{p-fcf0acce.entry.js → p-4d64a3e4.entry.js} +1 -1
- package/dist/ezui/{p-5ee2dc4e.entry.js → p-a9156fef.entry.js} +2 -2
- package/dist/ezui/p-f42855b9.js +1 -0
- package/dist/types/components/ez-grid/controller/EzGridController.d.ts +32 -4
- package/dist/types/components/ez-grid/controller/ag-grid/AgGridController.d.ts +19 -3
- package/dist/types/components/ez-grid/controller/ag-grid/DataSource.d.ts +18 -0
- package/dist/types/components/ez-grid/controller/ag-grid/GridEditionManager.d.ts +13 -2
- package/dist/types/components/ez-grid/ez-grid.d.ts +9 -0
- package/dist/types/components.d.ts +16 -0
- package/dist/types/utils/validators/recordvalidator/IInvalidCells.d.ts +5 -0
- package/dist/types/utils/validators/recordvalidator/RecordValidationProcessor.d.ts +1 -1
- package/package.json +1 -1
- package/dist/ezui/p-04f24913.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{UserInterface as e}from"@sankhyalabs/core";import{A as s}from"./p-2187f86c.js";const i=(s,i)=>{let r,t,{name:a,label:o,group:n}=Object.assign({},i),{readOnly:l,required:c}=Object.assign({},i);return s&&(o=o||s.label,a=a||s.name,c=s.required||(null==i?void 0:i.required),l=s.readOnly||(null==i?void 0:i.readOnly),r=s.properties,t=s.userInterface),{name:a,label:o,group:n,readOnly:l,required:c,props:r,userInterface:t||e.SHORTTEXT}};class r{constructor(e,s,i){this._dataUnit=e,this._validationSource=s,this._validator=i}validate(e=!0){return new Promise(((s,i)=>{const r=this._dataUnit.getModifiedRecords();for(let s=0;s<r.length;s++){const t=r[s],a=[];let o=this.validateRequired(t);if(o&&!o.isValid&&a.push(o),this._validator&&(o=this._validator.validateRecord(t),o&&!o.isValid&&a.push(o)),a.length>0){if(!e&&a[0].invalidFields.length>0){this._validationSource.markAsInvalid(a[0].invalidFields[0],t.__record__id__),i();break}this.processValidationResult(a,t.__record__id__),i();break}}return s()}))}validateRequired(e){const s=this._validationSource.getRequiredFields(),i=[];if(new Set(s).forEach((s=>{const r=e[s];if(null==r||""===r){const r=this._validationSource.getMessageForField(s,e.__record__id__);i.push(r?{name:s,message:r}:{name:s,message:"Essa informação é obrigatória"})}})),i.length>0)return{isValid:!1,invalidFields:i,infoMessage:"Há pelo menos um campo obrigatório não preenchido."}}processValidationResult(e,i){e.forEach((e=>{const r=e.invalidFields;if(this._dataUnit.savingCanceled(r,i),r&&r.forEach((e=>{this.markAsInvalid(e,i)})),e.infoMessage&&s.info(e.infoMessage),e.errorMessage){const{errorTitle:i,errorMessage:r}=e;s.error(i,r)}}))}markAsInvalid(e,s){this._dataUnit.setInvalidField(e.name,e.message,s),this._validationSource.markAsInvalid(e,s)}}export{r as R,i as b}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DataUnit, Filter } from '@sankhyalabs/core';
|
|
1
|
+
import { Action, DataUnit, Filter } from '@sankhyalabs/core';
|
|
2
2
|
import { Components } from '../../../components';
|
|
3
3
|
import FilterCollumn = Components.FilterColumn;
|
|
4
|
-
import { IRecordValidator } from '../../../utils/form/interfaces';
|
|
4
|
+
import { IInvalidField, IRecordValidator } from '../../../utils/form/interfaces';
|
|
5
5
|
import { ICustomEditorInfo } from '../../../utils/customEditor/interfaces/ICustomEditorInfo';
|
|
6
6
|
import { ICustomRenderInfo } from '../../../utils/customRender/interfaces/ICustomRenderInfo';
|
|
7
7
|
import { ICustomFormatter } from '../interfaces';
|
|
@@ -89,7 +89,11 @@ export default interface EzGridController {
|
|
|
89
89
|
/**
|
|
90
90
|
* Método responsável por atualizar as linhas da grade
|
|
91
91
|
*/
|
|
92
|
-
refresh(): void;
|
|
92
|
+
refresh(scrollToSelectedRow?: boolean): void;
|
|
93
|
+
/**
|
|
94
|
+
* Método responsável limpar celulas invalidas
|
|
95
|
+
*/
|
|
96
|
+
clearInvalidCells(action: Action): void;
|
|
93
97
|
/**
|
|
94
98
|
* Método responsável por atualizar as linhas selecionadas da grade
|
|
95
99
|
*/
|
|
@@ -107,9 +111,22 @@ export default interface EzGridController {
|
|
|
107
111
|
*/
|
|
108
112
|
setFocusFirstRow(): void;
|
|
109
113
|
/**
|
|
110
|
-
*
|
|
114
|
+
* Foca em uma linha específica, garante que ela está visível e inicia edição.
|
|
115
|
+
*/
|
|
116
|
+
startEditionOnRowByIndex(index: number): void;
|
|
117
|
+
/**
|
|
118
|
+
* Define se a grade será focada automaticamente.
|
|
111
119
|
*/
|
|
112
120
|
setAutoFocus(autoFocus: boolean): void;
|
|
121
|
+
/**
|
|
122
|
+
* Ativa inserção de registros no modo grade.
|
|
123
|
+
*/
|
|
124
|
+
setEnableGridInsert(enable: boolean): void;
|
|
125
|
+
/**
|
|
126
|
+
* Ativa/desativa a inserção continua na grade
|
|
127
|
+
* Só funciona quando a prop enableGridInsert está ativa
|
|
128
|
+
*/
|
|
129
|
+
setEnableContinuousInsert(enable: boolean): void;
|
|
113
130
|
/**
|
|
114
131
|
* Método responsável por retornar a configuração da grade.
|
|
115
132
|
*/
|
|
@@ -132,6 +149,8 @@ export default interface EzGridController {
|
|
|
132
149
|
clearFilter(): void;
|
|
133
150
|
setCustomFormatters(customFormatters: Map<string, ICustomFormatter>): void;
|
|
134
151
|
setFocus(): void;
|
|
152
|
+
savingCanceled(fields: Array<IInvalidField>, recordId: string): void;
|
|
153
|
+
destroy(): void;
|
|
135
154
|
}
|
|
136
155
|
/**
|
|
137
156
|
* Carrega as informações necessárias para contextualizar corretamente a instância.
|
|
@@ -206,6 +225,15 @@ export interface EzGridOptions {
|
|
|
206
225
|
* Define se a grid será focada ao ser carregada.
|
|
207
226
|
*/
|
|
208
227
|
autoFocus: boolean;
|
|
228
|
+
/**
|
|
229
|
+
* Ativa inserção de registros no modo grade.
|
|
230
|
+
*/
|
|
231
|
+
enableGridInsert?: boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Ativa/desativa a inserção continua na grade
|
|
234
|
+
* Só funciona quando a prop enableGridInsert está ativa
|
|
235
|
+
*/
|
|
236
|
+
enableContinuousInsert?: boolean;
|
|
209
237
|
}
|
|
210
238
|
/**
|
|
211
239
|
* Representa cada coluna da grade.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { Sort, SortingProvider } from '@sankhyalabs/core';
|
|
1
|
+
import { Action, Sort, SortingProvider } from '@sankhyalabs/core';
|
|
2
2
|
import { Filter, FilterProvider } from '@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata';
|
|
3
3
|
import EzGridController, { EzGridColumn, EzGridColumnConfig, EzGridColumnMenuItemDef, EzGridOptions } from '../EzGridController';
|
|
4
4
|
import { ICustomEditorInfo } from '../../../../utils/customEditor/interfaces/ICustomEditorInfo';
|
|
5
5
|
import { ICustomRenderInfo } from '../../../../utils/customRender/interfaces/ICustomRenderInfo';
|
|
6
6
|
import { ICustomFormatter } from '../../interfaces';
|
|
7
|
+
import { IInvalidField } from '../../../../utils/form/interfaces';
|
|
7
8
|
export default class AgGridController implements EzGridController, SortingProvider, FilterProvider {
|
|
8
9
|
private readonly DEFAULT_ROW_HEIGHT;
|
|
9
10
|
private readonly DEFAULT_HEADER_ROW_HEIGHT;
|
|
@@ -36,6 +37,9 @@ export default class AgGridController implements EzGridController, SortingProvid
|
|
|
36
37
|
private _customFormatters;
|
|
37
38
|
private _container;
|
|
38
39
|
private _options;
|
|
40
|
+
private observer;
|
|
41
|
+
private _gridShowDom;
|
|
42
|
+
private peddingExecutionsOnGridShow;
|
|
39
43
|
configFilterColumn(filterColumn: HTMLFilterColumnElement): void;
|
|
40
44
|
private handleFilteredColumnsChanged;
|
|
41
45
|
clearFilter(): void;
|
|
@@ -64,18 +68,28 @@ export default class AgGridController implements EzGridController, SortingProvid
|
|
|
64
68
|
private updateSelectionForAll;
|
|
65
69
|
setData(data: Array<any>): void;
|
|
66
70
|
addRows(): void;
|
|
67
|
-
updateRows(): void;
|
|
71
|
+
updateRows(rows?: Array<any>): void;
|
|
72
|
+
private updateRowData;
|
|
68
73
|
selectAll(quietly?: boolean): void;
|
|
69
74
|
selectRows(rowIds: Array<string>, quietly?: boolean): void;
|
|
70
75
|
removeRows(): void;
|
|
71
76
|
changeValues(changes: any, rowIds?: Array<string>): void;
|
|
72
|
-
|
|
77
|
+
savingCanceled(fields: Array<IInvalidField>, recordId: string): void;
|
|
78
|
+
refresh(scrollToSelectedRow?: boolean): void;
|
|
79
|
+
private scrollToSelectedRow;
|
|
73
80
|
private focusOnGridContainer;
|
|
74
81
|
setFocus(): void;
|
|
75
82
|
setAutoFocus(autoFocus: boolean): void;
|
|
83
|
+
setEnableGridInsert(enable: boolean): void;
|
|
84
|
+
setEnableContinuousInsert(enable: boolean): void;
|
|
76
85
|
setFocusFirstRow(): void;
|
|
77
86
|
setFocusLastRow(): void;
|
|
87
|
+
startEditionOnRowByIndex(rowIndex: number): void;
|
|
88
|
+
private startEdition;
|
|
89
|
+
private getFirstEditableColl;
|
|
90
|
+
private isColumnEditable;
|
|
78
91
|
private setFocusOnRow;
|
|
92
|
+
private focusByCollAndRow;
|
|
79
93
|
setColumnsDef(cols: Array<EzGridColumn>): void;
|
|
80
94
|
getColumnsDef(): Array<EzGridColumn>;
|
|
81
95
|
setColumnsState(state: Array<EzGridColumnConfig>): void;
|
|
@@ -101,4 +115,6 @@ export default class AgGridController implements EzGridController, SortingProvid
|
|
|
101
115
|
private conditionalSet;
|
|
102
116
|
setCellEditors(customEditors: Map<string, ICustomEditorInfo>): void;
|
|
103
117
|
setCellRenders(customRenders: Map<string, ICustomRenderInfo>): void;
|
|
118
|
+
clearInvalidCells(action: Action): void;
|
|
119
|
+
destroy(): void;
|
|
104
120
|
}
|
|
@@ -10,12 +10,30 @@ export default class DataSource implements IServerSideDatasource {
|
|
|
10
10
|
quickFilter: QuickFilter;
|
|
11
11
|
readonly RECORD_ARCHIVE = "__RECORD_ARCHIVE__";
|
|
12
12
|
private duObserver;
|
|
13
|
+
private handleSavingCanceled;
|
|
14
|
+
private handleDataChanged;
|
|
15
|
+
/**
|
|
16
|
+
* Nesse ponto, o registro já se encontra atualizado no DU,
|
|
17
|
+
* basta então passar seu valor para que a garde possa atualizar sua linha.
|
|
18
|
+
*/
|
|
19
|
+
private updateGridRowNodes;
|
|
20
|
+
private getRecordById;
|
|
21
|
+
/**
|
|
22
|
+
* Em caso de necessidade de reload (isWaitingToReload), eh preciso chamar o dataUnit.gotoPage, pois ele aplica tambem a ordenacao dos registros,
|
|
23
|
+
* enquanto que o _controller.refresh apenas recarrega os dados na ordem que atua.
|
|
24
|
+
*/
|
|
25
|
+
private handleRefreshOrReload;
|
|
26
|
+
private handleReload;
|
|
27
|
+
private handleRefresh;
|
|
28
|
+
private handleRecordsAdded;
|
|
29
|
+
private focusOnNewRecord;
|
|
13
30
|
private updateLoadedRecords;
|
|
14
31
|
private handleFocusFirstRow;
|
|
15
32
|
private isSilentChange;
|
|
16
33
|
constructor(dataUnit: DataUnit, controller: EzGridController, options: EzGridOptions);
|
|
17
34
|
private updateSelection;
|
|
18
35
|
setAutoFocus(autoFocus: boolean): void;
|
|
36
|
+
setEnableGridInsert(enable: boolean): void;
|
|
19
37
|
getRows(params: IServerSideGetRowsParams): void;
|
|
20
38
|
needReload(currentLoading: IServerSideGetRowsParams): boolean;
|
|
21
39
|
private callbackGetRows;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { DataUnit } from "@sankhyalabs/core";
|
|
1
|
+
import { Action, DataUnit } from "@sankhyalabs/core";
|
|
2
2
|
import { CellPosition, ColDef, GridApi, GridOptions } from "ag-grid-community";
|
|
3
3
|
import { IRecordValidator } from "../../../../utils/form/interfaces";
|
|
4
4
|
import { ICustomEditorInfo } from "../../../../utils/customEditor/interfaces/ICustomEditorInfo";
|
|
5
5
|
import { ICustomRenderInfo } from "../../../../utils/customRender/interfaces/ICustomRenderInfo";
|
|
6
|
+
import { IInvalidCell } from "../../../../utils/validators/recordvalidator/IInvalidCells";
|
|
6
7
|
export default class GridEditionManager {
|
|
7
8
|
private _dataUnit;
|
|
8
9
|
private _lastCellClicked;
|
|
@@ -15,9 +16,13 @@ export default class GridEditionManager {
|
|
|
15
16
|
private _isGridEdition;
|
|
16
17
|
private _customEditors;
|
|
17
18
|
private _customRenders;
|
|
18
|
-
|
|
19
|
+
private _enableContinuousInsert;
|
|
20
|
+
private _invalidCell;
|
|
21
|
+
constructor(dataUnit: DataUnit, useEnterLikeTab: boolean, recordsValidator: IRecordValidator, editionIsDisabled: () => boolean, customEditors?: Map<string, ICustomEditorInfo>, customRenders?: Map<string, ICustomRenderInfo>, enableContinuousInsert?: boolean);
|
|
19
22
|
configureGrid(options: GridOptions): GridOptions;
|
|
23
|
+
private canContinuousInsert;
|
|
20
24
|
proceedAutoSave(): void;
|
|
25
|
+
recordValidate(): Promise<void>;
|
|
21
26
|
navigateByEnterKey(keyboardEvent: KeyboardEvent): void;
|
|
22
27
|
getComponents(): {
|
|
23
28
|
[p: string]: any;
|
|
@@ -41,4 +46,10 @@ export default class GridEditionManager {
|
|
|
41
46
|
private onCellEditRequest;
|
|
42
47
|
setCellEditors(customEditors: Map<string, ICustomEditorInfo>): void;
|
|
43
48
|
setCellRenders(customRenders: Map<string, ICustomRenderInfo>): void;
|
|
49
|
+
private setInvalidCell;
|
|
50
|
+
getInvalidCell(): IInvalidCell;
|
|
51
|
+
clearInvalidCells(action: Action): void;
|
|
52
|
+
setEnableContinuousInsert(enable: boolean): void;
|
|
53
|
+
hasInvalidField(fieldName: string, recordId: string): boolean;
|
|
54
|
+
hasInvalidCell(): boolean;
|
|
44
55
|
}
|
|
@@ -94,6 +94,15 @@ export declare class EzGrid {
|
|
|
94
94
|
* Define se a grid será focada ao ser carregada.
|
|
95
95
|
*/
|
|
96
96
|
autoFocus?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Ativa inserção de registros no modo grade.
|
|
99
|
+
*/
|
|
100
|
+
enableGridInsert?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Ativa/desativa a inserção continua na grade
|
|
103
|
+
* Só funciona quando a prop enableGridInsert está ativa
|
|
104
|
+
*/
|
|
105
|
+
enableContinuousInsert?: boolean;
|
|
97
106
|
/**
|
|
98
107
|
* Aplica a definição de colunas.
|
|
99
108
|
*/
|
|
@@ -825,6 +825,14 @@ export namespace Components {
|
|
|
825
825
|
* Unidade de dados. Responsável pelo controle de edição de registros e informações pertinentes aos campos.
|
|
826
826
|
*/
|
|
827
827
|
"dataUnit": DataUnit;
|
|
828
|
+
/**
|
|
829
|
+
* Ativa/desativa a inserção continua na grade Só funciona quando a prop enableGridInsert está ativa
|
|
830
|
+
*/
|
|
831
|
+
"enableContinuousInsert"?: boolean;
|
|
832
|
+
/**
|
|
833
|
+
* Ativa inserção de registros no modo grade.
|
|
834
|
+
*/
|
|
835
|
+
"enableGridInsert"?: boolean;
|
|
828
836
|
/**
|
|
829
837
|
* Usa um argumento para filtrar as colunas po label
|
|
830
838
|
*/
|
|
@@ -3154,6 +3162,14 @@ declare namespace LocalJSX {
|
|
|
3154
3162
|
* Unidade de dados. Responsável pelo controle de edição de registros e informações pertinentes aos campos.
|
|
3155
3163
|
*/
|
|
3156
3164
|
"dataUnit"?: DataUnit;
|
|
3165
|
+
/**
|
|
3166
|
+
* Ativa/desativa a inserção continua na grade Só funciona quando a prop enableGridInsert está ativa
|
|
3167
|
+
*/
|
|
3168
|
+
"enableContinuousInsert"?: boolean;
|
|
3169
|
+
/**
|
|
3170
|
+
* Ativa inserção de registros no modo grade.
|
|
3171
|
+
*/
|
|
3172
|
+
"enableGridInsert"?: boolean;
|
|
3157
3173
|
/**
|
|
3158
3174
|
* Habilita a seleção de várias linhas.
|
|
3159
3175
|
*/
|
|
@@ -6,7 +6,7 @@ export declare class RecordValidationProcessor {
|
|
|
6
6
|
private _validationSource;
|
|
7
7
|
private _validator;
|
|
8
8
|
constructor(dataUnit: DataUnit, validationSource: IValidationSource, validator: IRecordValidator);
|
|
9
|
-
validate(): Promise<void>;
|
|
9
|
+
validate(isSaving?: boolean): Promise<void>;
|
|
10
10
|
private validateRequired;
|
|
11
11
|
private processValidationResult;
|
|
12
12
|
private markAsInvalid;
|
package/package.json
CHANGED
package/dist/ezui/p-04f24913.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{UserInterface as e}from"@sankhyalabs/core";import{A as s}from"./p-2187f86c.js";const r=(s,r)=>{let t,i,{name:o,label:a,group:n}=Object.assign({},r),{readOnly:l,required:c}=Object.assign({},r);return s&&(a=a||s.label,o=o||s.name,c=s.required||(null==r?void 0:r.required),l=s.readOnly||(null==r?void 0:r.readOnly),t=s.properties,i=s.userInterface),{name:o,label:a,group:n,readOnly:l,required:c,props:t,userInterface:i||e.SHORTTEXT}};class t{constructor(e,s,r){this._dataUnit=e,this._validationSource=s,this._validator=r}validate(){return new Promise(((e,s)=>{const r=this._dataUnit.getModifiedRecords();for(let e=0;e<r.length;e++){const t=r[e],i=[];let o=this.validateRequired(t);if(o&&!o.isValid&&i.push(o),this._validator&&(o=this._validator.validateRecord(t),o&&!o.isValid&&i.push(o)),i.length>0){this.processValidationResult(i,t.__record__id__),s();break}}return e()}))}validateRequired(e){const s=this._validationSource.getRequiredFields(),r=[];if(new Set(s).forEach((s=>{const t=e[s];if(null==t||""===t){const t=this._validationSource.getMessageForField(s,e.__record__id__);r.push(t?{name:s,message:t}:{name:s,message:"Essa informação é obrigatória"})}})),r.length>0)return{isValid:!1,invalidFields:r,infoMessage:"Há pelo menos um campo obrigatório não preenchido."}}processValidationResult(e,r){e.forEach((e=>{const t=e.invalidFields;if(t&&t.forEach((e=>{this.markAsInvalid(e,r)})),e.infoMessage&&s.info(e.infoMessage),e.errorMessage){const{errorTitle:r,errorMessage:t}=e;s.error(r,t)}}))}markAsInvalid(e,s){this._dataUnit.setInvalidField(e.name,e.message,s),this._validationSource.markAsInvalid(e,s)}}export{t as R,r as b}
|