@sankhyalabs/core 1.0.23 → 1.0.24
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/dataunit/DataUnit.d.ts +17 -7
- package/dist/dataunit/DataUnit.js +60 -24
- package/dist/dataunit/DataUnit.js.map +1 -1
- package/dist/dataunit/metadata/DataType.d.ts +1 -1
- package/dist/dataunit/metadata/DataType.js +4 -4
- package/dist/dataunit/metadata/DataType.js.map +1 -1
- package/dist/dataunit/metadata/UnitMetadata.d.ts +29 -8
- package/dist/dataunit/metadata/UnitMetadata.js +5 -0
- package/dist/dataunit/metadata/UnitMetadata.js.map +1 -1
- package/dist/dataunit/state/slice/ChangesSlice.d.ts +1 -1
- package/dist/dataunit/state/slice/ChangesSlice.js +5 -5
- package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
- package/dist/dataunit/state/slice/UnitMetadataSlice.d.ts +2 -2
- package/dist/dataunit/state/slice/UnitMetadataSlice.js +1 -1
- package/dist/dataunit/state/slice/UnitMetadataSlice.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/dataunit/DataUnit.ts +83 -37
- package/src/dataunit/metadata/DataType.ts +4 -4
- package/src/dataunit/metadata/UnitMetadata.ts +35 -9
- package/src/dataunit/state/slice/ChangesSlice.ts +5 -5
- package/src/dataunit/state/slice/UnitMetadataSlice.ts +2 -2
- package/src/index.ts +12 -2
|
@@ -1,29 +1,38 @@
|
|
|
1
|
-
import { UnitMetadata } from "./metadata/UnitMetadata";
|
|
1
|
+
import { UnitMetadata, FieldDescriptor, SortingProvider, FilterProvider, Sort, Filter } from "./metadata/UnitMetadata";
|
|
2
2
|
import { DataUnitAction } from "./state/action/DataUnitAction";
|
|
3
3
|
export default class DataUnit {
|
|
4
4
|
private _name;
|
|
5
5
|
private _observers;
|
|
6
|
+
private _sortingProvider?;
|
|
7
|
+
private _filterProviders;
|
|
6
8
|
private _stateManager;
|
|
7
9
|
metadataLoader?: (dataUnit: string) => Promise<UnitMetadata>;
|
|
8
|
-
dataLoader?: (dataUnit: string) => Promise<Array<Record>>;
|
|
10
|
+
dataLoader?: (dataUnit: string, sort?: Array<Sort>, filters?: Array<Filter>) => Promise<Array<Record>>;
|
|
9
11
|
saveLoader?: (dataUnit: string, changes: Array<Change>) => Promise<Array<SavedRecord>>;
|
|
10
12
|
constructor(name: string);
|
|
11
13
|
get name(): string;
|
|
12
14
|
private validateAndTypeValue;
|
|
15
|
+
private getFilters;
|
|
16
|
+
private getSort;
|
|
13
17
|
loadMetadata(): void;
|
|
14
|
-
loadData():
|
|
18
|
+
loadData(): Promise<Array<Record>>;
|
|
15
19
|
saveData(): void;
|
|
16
|
-
|
|
20
|
+
addFilterProvider(provider: FilterProvider): void;
|
|
21
|
+
set sortingProvider(provider: SortingProvider);
|
|
22
|
+
set metadata(md: UnitMetadata);
|
|
23
|
+
get metadata(): UnitMetadata;
|
|
24
|
+
set records(r: Array<Record>);
|
|
25
|
+
get records(): Array<Record>;
|
|
26
|
+
getField(fieldName: string): FieldDescriptor | undefined;
|
|
17
27
|
addRecord(): void;
|
|
18
28
|
removeSelectedRecords(): void;
|
|
19
|
-
getRecords(): Array<Record> | undefined;
|
|
20
29
|
getFieldValue(fieldName: string): any;
|
|
30
|
+
setFieldValue(fieldName: string, newValue: any, records?: Array<string>): void;
|
|
21
31
|
getSelection(): Array<string>;
|
|
22
32
|
setSelection(selection: Array<string>): void;
|
|
23
33
|
setSelectionByIndex(selection: Array<number>): void;
|
|
24
34
|
nextRecord(): void;
|
|
25
35
|
previousRecord(): void;
|
|
26
|
-
setFieldValue(fieldName: string, newValue: any): void;
|
|
27
36
|
cancelEdition(): void;
|
|
28
37
|
isDirty(): boolean;
|
|
29
38
|
hasNext(): boolean;
|
|
@@ -50,10 +59,11 @@ export declare enum ChangeOperation {
|
|
|
50
59
|
DELETE = 2
|
|
51
60
|
}
|
|
52
61
|
export declare class Change {
|
|
62
|
+
dataUnit: string;
|
|
53
63
|
record: Record;
|
|
54
64
|
updatingFields: any;
|
|
55
65
|
private _operation;
|
|
56
|
-
constructor(record: Record, updates: any, operation: ChangeOperation);
|
|
66
|
+
constructor(dataUnit: string, record: Record, updates: any, operation: ChangeOperation);
|
|
57
67
|
isInsert(): boolean;
|
|
58
68
|
isDelete(): boolean;
|
|
59
69
|
isUpdate(): boolean;
|
|
@@ -2,7 +2,7 @@ import { convertType } from "./metadata/DataType";
|
|
|
2
2
|
import { DataUnitAction, Action } from "./state/action/DataUnitAction";
|
|
3
3
|
import StateManager from "./state/StateManager";
|
|
4
4
|
import { HistReducer, canRedo, canUndo } from "./state/HistReducer";
|
|
5
|
-
import { UnitMetadataReducer,
|
|
5
|
+
import { UnitMetadataReducer, getField, getMetadata } from "./state/slice/UnitMetadataSlice";
|
|
6
6
|
import { RecordsReducer } from "./state/slice/RecordsSlice";
|
|
7
7
|
import { SelectionReducer, getSelection, hasNext, hasPrevious } from "./state/slice/SelectionSlice";
|
|
8
8
|
import { ChangesReducer, isDirty, getChangesToSave } from "./state/slice/ChangesSlice";
|
|
@@ -23,33 +23,53 @@ export default class DataUnit {
|
|
|
23
23
|
CurrentRecordsReducer
|
|
24
24
|
]);
|
|
25
25
|
this._observers = [];
|
|
26
|
+
this._filterProviders = [];
|
|
27
|
+
this._sortingProvider = undefined;
|
|
26
28
|
}
|
|
27
29
|
get name() {
|
|
28
30
|
return this._name;
|
|
29
31
|
}
|
|
30
32
|
// Métodos privados
|
|
31
33
|
validateAndTypeValue(fieldName, newValue) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
//FIXME: Validações devem ser feitas aqui
|
|
35
|
+
const descriptor = this.getField(fieldName);
|
|
36
|
+
return descriptor ? convertType(descriptor.dataType, newValue) : newValue;
|
|
37
|
+
}
|
|
38
|
+
getFilters() {
|
|
39
|
+
let filters = undefined;
|
|
40
|
+
this._filterProviders.forEach(p => {
|
|
41
|
+
const f = p.getFilter(this.name);
|
|
42
|
+
if (f) {
|
|
43
|
+
filters = (filters || []).concat(f);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return filters;
|
|
47
|
+
}
|
|
48
|
+
getSort() {
|
|
49
|
+
return this._sortingProvider ? this._sortingProvider.getSort(this._name) : undefined;
|
|
37
50
|
}
|
|
38
51
|
// Loaders
|
|
39
52
|
loadMetadata() {
|
|
40
53
|
this.dispatchAction(Action.LOADING_METADATA);
|
|
41
54
|
if (this.metadataLoader) {
|
|
42
|
-
this.metadataLoader(this._name).then(metadata => this.
|
|
55
|
+
this.metadataLoader(this._name).then(metadata => this.metadata = metadata);
|
|
43
56
|
}
|
|
44
57
|
}
|
|
45
58
|
loadData() {
|
|
46
59
|
this.dispatchAction(Action.LOADING_DATA);
|
|
47
|
-
|
|
48
|
-
this.dataLoader
|
|
49
|
-
|
|
60
|
+
return new Promise((resolve, fail) => {
|
|
61
|
+
if (this.dataLoader) {
|
|
62
|
+
const sort = this.getSort();
|
|
63
|
+
const filters = this.getFilters();
|
|
64
|
+
this.dataLoader(this._name, sort, filters).then(records => {
|
|
65
|
+
this.records = records;
|
|
66
|
+
resolve(this.records);
|
|
67
|
+
}).catch(() => fail());
|
|
68
|
+
}
|
|
69
|
+
});
|
|
50
70
|
}
|
|
51
71
|
saveData() {
|
|
52
|
-
const changes = getChangesToSave(this._stateManager);
|
|
72
|
+
const changes = getChangesToSave(this._name, this._stateManager);
|
|
53
73
|
if (changes.length > 0) {
|
|
54
74
|
this.dispatchAction(Action.SAVING_DATA);
|
|
55
75
|
if (this.saveLoader) {
|
|
@@ -58,9 +78,28 @@ export default class DataUnit {
|
|
|
58
78
|
}
|
|
59
79
|
}
|
|
60
80
|
// API
|
|
61
|
-
|
|
81
|
+
addFilterProvider(provider) {
|
|
82
|
+
this._filterProviders.push(provider);
|
|
83
|
+
}
|
|
84
|
+
set sortingProvider(provider) {
|
|
85
|
+
this._sortingProvider = provider;
|
|
86
|
+
}
|
|
87
|
+
set metadata(md) {
|
|
88
|
+
this.dispatchAction(Action.METADATA_LOADED, md);
|
|
89
|
+
}
|
|
90
|
+
get metadata() {
|
|
62
91
|
return getMetadata(this._stateManager);
|
|
63
92
|
}
|
|
93
|
+
set records(r) {
|
|
94
|
+
this.dispatchAction(Action.DATA_LOADED, r);
|
|
95
|
+
}
|
|
96
|
+
get records() {
|
|
97
|
+
const records = getCurrentRecords(this._stateManager);
|
|
98
|
+
return records ? Array.from(records.values()) : [];
|
|
99
|
+
}
|
|
100
|
+
getField(fieldName) {
|
|
101
|
+
return getField(this._stateManager, fieldName);
|
|
102
|
+
}
|
|
64
103
|
addRecord() {
|
|
65
104
|
this.dispatchAction(Action.RECORDS_ADDED, [{}]);
|
|
66
105
|
}
|
|
@@ -70,13 +109,16 @@ export default class DataUnit {
|
|
|
70
109
|
this.dispatchAction(Action.RECORDS_REMOVED, selection);
|
|
71
110
|
}
|
|
72
111
|
}
|
|
73
|
-
getRecords() {
|
|
74
|
-
const records = getCurrentRecords(this._stateManager);
|
|
75
|
-
return records ? Array.from(records.values()) : undefined;
|
|
76
|
-
}
|
|
77
112
|
getFieldValue(fieldName) {
|
|
78
113
|
return getFieldValue(this._stateManager, fieldName);
|
|
79
114
|
}
|
|
115
|
+
setFieldValue(fieldName, newValue, records) {
|
|
116
|
+
const typedValue = this.validateAndTypeValue(fieldName, newValue);
|
|
117
|
+
const currentValue = this.getFieldValue(fieldName);
|
|
118
|
+
if (currentValue !== typedValue) {
|
|
119
|
+
this.dispatchAction(Action.DATA_CHANGED, { [fieldName]: typedValue, records });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
80
122
|
getSelection() {
|
|
81
123
|
return getSelection(this._stateManager);
|
|
82
124
|
}
|
|
@@ -92,13 +134,6 @@ export default class DataUnit {
|
|
|
92
134
|
previousRecord() {
|
|
93
135
|
this.dispatchAction(Action.PREVIOUS_SELECTED);
|
|
94
136
|
}
|
|
95
|
-
setFieldValue(fieldName, newValue) {
|
|
96
|
-
const typedValue = this.validateAndTypeValue(fieldName, newValue);
|
|
97
|
-
const currentValue = this.getFieldValue(fieldName);
|
|
98
|
-
if (currentValue !== typedValue) {
|
|
99
|
-
this.dispatchAction(Action.DATA_CHANGED, { [fieldName]: typedValue });
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
137
|
cancelEdition() {
|
|
103
138
|
this.dispatchAction(Action.EDITION_CANCELED);
|
|
104
139
|
}
|
|
@@ -144,7 +179,8 @@ export var ChangeOperation;
|
|
|
144
179
|
ChangeOperation[ChangeOperation["DELETE"] = 2] = "DELETE";
|
|
145
180
|
})(ChangeOperation || (ChangeOperation = {}));
|
|
146
181
|
export class Change {
|
|
147
|
-
constructor(record, updates, operation) {
|
|
182
|
+
constructor(dataUnit, record, updates, operation) {
|
|
183
|
+
this.dataUnit = dataUnit;
|
|
148
184
|
this.record = record;
|
|
149
185
|
this.updatingFields = updates;
|
|
150
186
|
this._operation = operation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataUnit.js","sourceRoot":"","sources":["../../src/dataunit/DataUnit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"DataUnit.js","sourceRoot":"","sources":["../../src/dataunit/DataUnit.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ export declare enum DataType {
|
|
|
3
3
|
DATE = "DATE",
|
|
4
4
|
TEXT = "TEXT",
|
|
5
5
|
BOOLEAN = "BOOLEAN",
|
|
6
|
-
|
|
6
|
+
OBJECT = "OBJECT"
|
|
7
7
|
}
|
|
8
8
|
export declare const convertType: (dataType: DataType, value: any) => any;
|
|
9
9
|
export declare const toString: (dataType: DataType, value: any) => string;
|
|
@@ -4,7 +4,7 @@ export var DataType;
|
|
|
4
4
|
DataType["DATE"] = "DATE";
|
|
5
5
|
DataType["TEXT"] = "TEXT";
|
|
6
6
|
DataType["BOOLEAN"] = "BOOLEAN";
|
|
7
|
-
DataType["
|
|
7
|
+
DataType["OBJECT"] = "OBJECT";
|
|
8
8
|
})(DataType || (DataType = {}));
|
|
9
9
|
export const convertType = (dataType, value) => {
|
|
10
10
|
if (value === undefined || value === null) {
|
|
@@ -13,8 +13,8 @@ export const convertType = (dataType, value) => {
|
|
|
13
13
|
switch (dataType) {
|
|
14
14
|
case DataType.NUMBER:
|
|
15
15
|
return value === "" || isNaN(value) ? null : Number(value);
|
|
16
|
-
case DataType.
|
|
17
|
-
return JSON.parse(value);
|
|
16
|
+
case DataType.OBJECT:
|
|
17
|
+
return typeof value === "string" ? JSON.parse(value) : value;
|
|
18
18
|
case DataType.BOOLEAN:
|
|
19
19
|
return Boolean(value);
|
|
20
20
|
case DataType.DATE:
|
|
@@ -27,7 +27,7 @@ export const toString = (dataType, value) => {
|
|
|
27
27
|
if (value === undefined || value === null) {
|
|
28
28
|
return value;
|
|
29
29
|
}
|
|
30
|
-
if (dataType === DataType.
|
|
30
|
+
if (dataType === DataType.OBJECT) {
|
|
31
31
|
return JSON.stringify(value);
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataType.js","sourceRoot":"","sources":["../../../src/dataunit/metadata/DataType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,
|
|
1
|
+
{"version":3,"file":"DataType.js","sourceRoot":"","sources":["../../../src/dataunit/metadata/DataType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAChB,6BAAiB,CAAA;IACjB,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;AACrB,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAiB,EAAE,KAAU,EAAO,EAAE;IAC9D,IAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAC;QACrC,OAAO,KAAK,CAAC;KAChB;IACD,QAAQ,QAAQ,EAAC;QACb,KAAK,QAAQ,CAAC,MAAM;YAChB,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/D,KAAK,QAAQ,CAAC,MAAM;YAChB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACjE,KAAK,QAAQ,CAAC,OAAO;YACjB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,QAAQ,CAAC,IAAI;YACd,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrC;YACI,OAAO,KAAK,CAAC;KACpB;AACL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAiB,EAAE,KAAU,EAAU,EAAE;IAE9D,IAAG,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAC;QACrC,OAAO,KAAK,CAAC;KAChB;IAED,IAAG,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAChC;SAAM;QACH,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC3B;AACL,CAAC,CAAA"}
|
|
@@ -2,28 +2,49 @@ import { DataType } from "./DataType";
|
|
|
2
2
|
export interface UnitMetadata {
|
|
3
3
|
name: string;
|
|
4
4
|
label: string;
|
|
5
|
-
fields: Array<
|
|
5
|
+
fields: Array<FieldDescriptor>;
|
|
6
6
|
}
|
|
7
|
-
export interface
|
|
7
|
+
export interface FieldDescriptor {
|
|
8
8
|
name: string;
|
|
9
9
|
label: string;
|
|
10
10
|
dataType: DataType;
|
|
11
11
|
userInterface?: UserInterface;
|
|
12
|
-
defaultValue?:
|
|
12
|
+
defaultValue?: any;
|
|
13
|
+
visible?: boolean;
|
|
13
14
|
readOnly?: boolean;
|
|
14
15
|
required?: boolean;
|
|
15
|
-
properties?:
|
|
16
|
+
properties?: any;
|
|
16
17
|
dependencies?: Array<FieldDependency>;
|
|
17
18
|
}
|
|
18
|
-
export interface UIProperty {
|
|
19
|
-
name: string;
|
|
20
|
-
value: string;
|
|
21
|
-
}
|
|
22
19
|
export interface FieldDependency {
|
|
23
20
|
masterFields: Array<string>;
|
|
24
21
|
type: DependencyType;
|
|
25
22
|
expression: string;
|
|
26
23
|
}
|
|
24
|
+
export interface Filter {
|
|
25
|
+
name: string;
|
|
26
|
+
expression: string;
|
|
27
|
+
params?: Array<FilterParam>;
|
|
28
|
+
}
|
|
29
|
+
export interface FilterParam {
|
|
30
|
+
name: string;
|
|
31
|
+
value: any;
|
|
32
|
+
}
|
|
33
|
+
export interface Sort {
|
|
34
|
+
field: string;
|
|
35
|
+
mode: SortMode;
|
|
36
|
+
dataType: DataType;
|
|
37
|
+
}
|
|
38
|
+
export interface FilterProvider {
|
|
39
|
+
getFilter(dataUnit: string): Array<Filter> | undefined;
|
|
40
|
+
}
|
|
41
|
+
export interface SortingProvider {
|
|
42
|
+
getSort(dataUnit: string): Array<Sort> | undefined;
|
|
43
|
+
}
|
|
44
|
+
export declare enum SortMode {
|
|
45
|
+
ASC = "ASC",
|
|
46
|
+
DESC = "DESC"
|
|
47
|
+
}
|
|
27
48
|
export declare enum DependencyType {
|
|
28
49
|
SEARCHING = "SEARCHING",
|
|
29
50
|
REQUIREMENT = "REQUIREMENT",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnitMetadata.js","sourceRoot":"","sources":["../../../src/dataunit/metadata/UnitMetadata.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UnitMetadata.js","sourceRoot":"","sources":["../../../src/dataunit/metadata/UnitMetadata.ts"],"names":[],"mappings":"AAoDA,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAChB,uBAAW,CAAA;IACX,yBAAa,CAAA;AACjB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACtB,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,4CAA0B,CAAA;AAC9B,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AAED,MAAM,CAAN,IAAY,aAiBX;AAjBD,WAAY,aAAa;IACrB,8BAAa,CAAA;IACb,gCAAe,CAAA;IACf,8BAAa,CAAA;IACb,sCAAqB,CAAA;IACrB,4CAA2B,CAAA;IAC3B,sCAAqB,CAAA;IACrB,kCAAiB,CAAA;IACjB,kDAAiC,CAAA;IACjC,gDAA+B,CAAA;IAC/B,gDAA+B,CAAA;IAC/B,kCAAiB,CAAA;IACjB,wCAAuB,CAAA;IACvB,sCAAqB,CAAA;IACrB,0CAAyB,CAAA;IACzB,sCAAqB,CAAA;IACrB,8BAAa,CAAA;AACjB,CAAC,EAjBW,aAAa,KAAb,aAAa,QAiBxB"}
|
|
@@ -8,5 +8,5 @@ declare class ChangesReducerImpl implements ActionReducer {
|
|
|
8
8
|
export declare const ChangesReducer: ChangesReducerImpl;
|
|
9
9
|
export declare const getChanges: (stateManager: StateManager) => Map<string, any>;
|
|
10
10
|
export declare const isDirty: (stateManager: StateManager) => boolean;
|
|
11
|
-
export declare const getChangesToSave: (stateManager: StateManager) => Array<Change>;
|
|
11
|
+
export declare const getChangesToSave: (dataUnit: string, stateManager: StateManager) => Array<Change>;
|
|
12
12
|
export {};
|
|
@@ -11,7 +11,7 @@ class ChangesReducerImpl {
|
|
|
11
11
|
reduce(stateManager, currentState, action) {
|
|
12
12
|
switch (action.type) {
|
|
13
13
|
case Action.DATA_CHANGED:
|
|
14
|
-
const selection = getSelection(stateManager);
|
|
14
|
+
const selection = action.payload.records || getSelection(stateManager);
|
|
15
15
|
if (selection) {
|
|
16
16
|
const newState = new Map(currentState);
|
|
17
17
|
selection.forEach(recordId => {
|
|
@@ -40,7 +40,7 @@ export const isDirty = (stateManager) => {
|
|
|
40
40
|
}
|
|
41
41
|
return getChanges(stateManager) !== undefined;
|
|
42
42
|
};
|
|
43
|
-
export const getChangesToSave = (stateManager) => {
|
|
43
|
+
export const getChangesToSave = (dataUnit, stateManager) => {
|
|
44
44
|
const result = [];
|
|
45
45
|
const changes = getChanges(stateManager);
|
|
46
46
|
const records = getRecords(stateManager);
|
|
@@ -49,7 +49,7 @@ export const getChangesToSave = (stateManager) => {
|
|
|
49
49
|
if (changes) {
|
|
50
50
|
const c = changes.get(r.__record__id__);
|
|
51
51
|
if (c) {
|
|
52
|
-
result.push(new Change(r, c, ChangeOperation.UPDATE));
|
|
52
|
+
result.push(new Change(dataUnit, r, c, ChangeOperation.UPDATE));
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
});
|
|
@@ -57,7 +57,7 @@ export const getChangesToSave = (stateManager) => {
|
|
|
57
57
|
const addedRecords = getAddedRecords(stateManager);
|
|
58
58
|
if (addedRecords) {
|
|
59
59
|
addedRecords.forEach(r => {
|
|
60
|
-
result.push(new Change(r, changes === null || changes === void 0 ? void 0 : changes.get(r.__record__id__), ChangeOperation.INSERT));
|
|
60
|
+
result.push(new Change(dataUnit, r, changes === null || changes === void 0 ? void 0 : changes.get(r.__record__id__), ChangeOperation.INSERT));
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
const removedRecords = getRemovedRecords(stateManager);
|
|
@@ -65,7 +65,7 @@ export const getChangesToSave = (stateManager) => {
|
|
|
65
65
|
records.forEach(r => recordsById[r.__record__id__] = r);
|
|
66
66
|
if (removedRecords) {
|
|
67
67
|
removedRecords.forEach(id => {
|
|
68
|
-
result.push(new Change(recordsById[id], undefined, ChangeOperation.DELETE));
|
|
68
|
+
result.push(new Change(dataUnit, recordsById[id], undefined, ChangeOperation.DELETE));
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangesSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/ChangesSlice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,kBAAkB;IAAxB;QAEW,cAAS,GAAW,eAAe,CAAC;IAuB/C,CAAC;IArBU,MAAM,CAAC,YAAyB,EAAE,YAA8B,EAAE,MAAmB;QACxF,QAAO,MAAM,CAAC,IAAI,EAAC;YAEf,KAAK,MAAM,CAAC,YAAY;gBACpB,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"ChangesSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/ChangesSlice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActionReducer, StateAction } from "../StateManager";
|
|
2
|
-
import { UnitMetadata,
|
|
2
|
+
import { UnitMetadata, FieldDescriptor } from "../../metadata/UnitMetadata";
|
|
3
3
|
import StateManager from "../StateManager";
|
|
4
4
|
declare class UnitMetadataReducerImpl implements ActionReducer {
|
|
5
5
|
sliceName: string;
|
|
@@ -7,5 +7,5 @@ declare class UnitMetadataReducerImpl implements ActionReducer {
|
|
|
7
7
|
}
|
|
8
8
|
export declare const UnitMetadataReducer: UnitMetadataReducerImpl;
|
|
9
9
|
export declare const getMetadata: (stateManager: StateManager) => UnitMetadata;
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const getField: (stateManager: StateManager, fieldName: string) => FieldDescriptor | undefined;
|
|
11
11
|
export {};
|
|
@@ -14,7 +14,7 @@ export const UnitMetadataReducer = new UnitMetadataReducerImpl();
|
|
|
14
14
|
export const getMetadata = (stateManager) => {
|
|
15
15
|
return stateManager.select(UnitMetadataReducer.sliceName, (state) => state);
|
|
16
16
|
};
|
|
17
|
-
export const
|
|
17
|
+
export const getField = (stateManager, fieldName) => {
|
|
18
18
|
const md = getMetadata(stateManager);
|
|
19
19
|
return md ? md.fields.find(fmd => fmd.name === fieldName) : undefined;
|
|
20
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnitMetadataSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/UnitMetadataSlice.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIlD,MAAM,uBAAuB;IAA7B;QAEW,cAAS,GAAW,cAAc,CAAC;IAS9C,CAAC;IAPU,MAAM,CAAC,aAA0B,EAAE,YAA0B,EAAE,MAAmB;QACrF,IAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,eAAe,EAAC;YACtC,OAAO,MAAM,CAAC,OAAO,CAAC;SACzB;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CAEJ;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAA0B,EAAgB,EAAE;IACpE,OAAO,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"UnitMetadataSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/UnitMetadataSlice.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIlD,MAAM,uBAAuB;IAA7B;QAEW,cAAS,GAAW,cAAc,CAAC;IAS9C,CAAC;IAPU,MAAM,CAAC,aAA0B,EAAE,YAA0B,EAAE,MAAmB;QACrF,IAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,eAAe,EAAC;YACtC,OAAO,MAAM,CAAC,OAAO,CAAC;SACzB;QACD,OAAO,YAAY,CAAC;IACxB,CAAC;CAEJ;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,uBAAuB,EAAE,CAAC;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAA0B,EAAgB,EAAE;IACpE,OAAO,YAAY,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,YAA0B,EAAE,SAAiB,EAA6B,EAAE;IACjG,MAAM,EAAE,GAAiB,WAAW,CAAC,YAAY,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,5 +8,8 @@ import { HttpProvider } from "./http/HttpProvider";
|
|
|
8
8
|
import { SkwHttpProvider } from "./http/SkwHttpProvider";
|
|
9
9
|
import { RequestMetadata } from "./http/RequestMetadata";
|
|
10
10
|
import { AuthorizedServiceCaller } from "./http/AuthorizedServiceCaller";
|
|
11
|
-
import DataUnit from "./dataunit/DataUnit";
|
|
12
|
-
|
|
11
|
+
import DataUnit, { Record } from "./dataunit/DataUnit";
|
|
12
|
+
import { DataType } from "./dataunit/metadata/DataType";
|
|
13
|
+
import { UnitMetadata, FieldDescriptor, UserInterface } from "./dataunit/metadata/UnitMetadata";
|
|
14
|
+
import { DataUnitAction, Action } from "./dataunit/state/action/DataUnitAction";
|
|
15
|
+
export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit, Record, DataType, UnitMetadata, FieldDescriptor, UserInterface, DataUnitAction, Action };
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,9 @@ import { SkwHttpProvider } from "./http/SkwHttpProvider";
|
|
|
9
9
|
import { RequestMetadata } from "./http/RequestMetadata";
|
|
10
10
|
import { AuthorizedServiceCaller } from "./http/AuthorizedServiceCaller";
|
|
11
11
|
import DataUnit from "./dataunit/DataUnit";
|
|
12
|
+
import { DataType } from "./dataunit/metadata/DataType";
|
|
13
|
+
import { UserInterface } from "./dataunit/metadata/UnitMetadata";
|
|
14
|
+
import { DataUnitAction, Action } from "./dataunit/state/action/DataUnitAction";
|
|
12
15
|
/*Classes públicas no pacote*/
|
|
13
|
-
export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit };
|
|
16
|
+
export { StringUtils, MaskFormatter, NumberUtils, FloatingManager, DateUtils, TimeFormatter, SkwHttpProvider, HttpProvider, RequestMetadata, AuthorizedServiceCaller, DataUnit, DataType, UserInterface, DataUnitAction, Action };
|
|
14
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,QAAkB,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAiC,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,wCAAwC,CAAC;AAEhF,8BAA8B;AAC9B,OAAO,EACH,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,eAAe,EACf,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,QAAQ,EAER,QAAQ,EAGR,aAAa,EACb,cAAc,EACd,MAAM,EACT,CAAC"}
|
package/package.json
CHANGED
package/src/dataunit/DataUnit.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { UnitMetadata,
|
|
1
|
+
import { UnitMetadata, FieldDescriptor, SortingProvider, FilterProvider, Sort, Filter } from "./metadata/UnitMetadata";
|
|
2
2
|
import { convertType } from "./metadata/DataType";
|
|
3
3
|
|
|
4
4
|
import { DataUnitAction, Action } from "./state/action/DataUnitAction";
|
|
5
5
|
import StateManager from "./state/StateManager";
|
|
6
6
|
|
|
7
7
|
import { HistReducer, canRedo, canUndo } from "./state/HistReducer";
|
|
8
|
-
import { UnitMetadataReducer,
|
|
8
|
+
import { UnitMetadataReducer, getField, getMetadata } from "./state/slice/UnitMetadataSlice";
|
|
9
9
|
import { RecordsReducer } from "./state/slice/RecordsSlice";
|
|
10
10
|
import { SelectionReducer, getSelection, hasNext, hasPrevious } from "./state/slice/SelectionSlice";
|
|
11
11
|
import { ChangesReducer, isDirty, getChangesToSave } from "./state/slice/ChangesSlice";
|
|
@@ -13,14 +13,17 @@ import { RemovedRecordsReducer } from "./state/slice/RemovedRecordsSlice";
|
|
|
13
13
|
import { AddedRecordsReducer } from "./state/slice/AddedRecordsSlice";
|
|
14
14
|
import { CurrentRecordsReducer, getCurrentRecords, getFieldValue } from "./state/slice/CurrentRecordsSlice";
|
|
15
15
|
|
|
16
|
+
|
|
16
17
|
export default class DataUnit {
|
|
17
18
|
|
|
18
19
|
private _name: string;
|
|
19
20
|
private _observers: Array<(action: DataUnitAction) => void>;
|
|
21
|
+
private _sortingProvider?: SortingProvider;
|
|
22
|
+
private _filterProviders: Array<FilterProvider>;
|
|
20
23
|
private _stateManager: StateManager;
|
|
21
24
|
|
|
22
25
|
public metadataLoader?: (dataUnit: string) => Promise<UnitMetadata>;
|
|
23
|
-
public dataLoader?: (dataUnit: string) => Promise<Array<Record>>;
|
|
26
|
+
public dataLoader?: (dataUnit: string, sort?: Array<Sort>, filters?: Array<Filter>) => Promise<Array<Record>>;
|
|
24
27
|
public saveLoader?: (dataUnit: string, changes: Array<Change>) => Promise<Array<SavedRecord>>;
|
|
25
28
|
|
|
26
29
|
constructor(name: string) {
|
|
@@ -38,6 +41,8 @@ export default class DataUnit {
|
|
|
38
41
|
]
|
|
39
42
|
);
|
|
40
43
|
this._observers = [];
|
|
44
|
+
this._filterProviders = [];
|
|
45
|
+
this._sortingProvider = undefined;
|
|
41
46
|
}
|
|
42
47
|
|
|
43
48
|
public get name(): string {
|
|
@@ -46,12 +51,24 @@ export default class DataUnit {
|
|
|
46
51
|
|
|
47
52
|
// Métodos privados
|
|
48
53
|
private validateAndTypeValue(fieldName: string, newValue: any): any {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
//FIXME: Validações devem ser feitas aqui
|
|
55
|
+
const descriptor: FieldDescriptor | undefined = this.getField(fieldName);
|
|
56
|
+
return descriptor ? convertType(descriptor.dataType, newValue) : newValue;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private getFilters(): Array<Filter> | undefined{
|
|
60
|
+
let filters: Array<Filter> | undefined = undefined;
|
|
61
|
+
this._filterProviders.forEach(p => {
|
|
62
|
+
const f = p.getFilter(this.name);
|
|
63
|
+
if(f){
|
|
64
|
+
filters = (filters||[]).concat(f);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return filters;
|
|
68
|
+
}
|
|
53
69
|
|
|
54
|
-
|
|
70
|
+
private getSort(): Array<Sort> | undefined{
|
|
71
|
+
return this._sortingProvider ? this._sortingProvider.getSort(this._name) : undefined;
|
|
55
72
|
}
|
|
56
73
|
|
|
57
74
|
// Loaders
|
|
@@ -59,39 +76,71 @@ export default class DataUnit {
|
|
|
59
76
|
this.dispatchAction(Action.LOADING_METADATA);
|
|
60
77
|
if (this.metadataLoader) {
|
|
61
78
|
this.metadataLoader(this._name).then(
|
|
62
|
-
metadata => this.
|
|
79
|
+
metadata => this.metadata = metadata
|
|
63
80
|
);
|
|
64
81
|
}
|
|
65
82
|
}
|
|
66
83
|
|
|
67
|
-
public loadData():
|
|
84
|
+
public loadData(): Promise<Array<Record>> {
|
|
68
85
|
this.dispatchAction(Action.LOADING_DATA);
|
|
69
|
-
|
|
70
|
-
this.dataLoader
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
return new Promise((resolve, fail)=>{
|
|
87
|
+
if (this.dataLoader) {
|
|
88
|
+
const sort = this.getSort();
|
|
89
|
+
const filters = this.getFilters();
|
|
90
|
+
this.dataLoader(this._name, sort, filters).then(
|
|
91
|
+
records => {
|
|
92
|
+
this.records = records;
|
|
93
|
+
resolve(this.records);
|
|
94
|
+
}
|
|
95
|
+
).catch(()=>fail());
|
|
96
|
+
}
|
|
97
|
+
});
|
|
74
98
|
}
|
|
75
99
|
|
|
76
100
|
public saveData(): void {
|
|
77
101
|
|
|
78
|
-
const changes: Array<Change> = getChangesToSave(this._stateManager);
|
|
102
|
+
const changes: Array<Change> = getChangesToSave(this._name, this._stateManager);
|
|
79
103
|
|
|
80
|
-
if(changes.length > 0){
|
|
104
|
+
if (changes.length > 0) {
|
|
81
105
|
this.dispatchAction(Action.SAVING_DATA);
|
|
82
|
-
if(this.saveLoader){
|
|
106
|
+
if (this.saveLoader) {
|
|
83
107
|
this.saveLoader(this._name, changes).then(
|
|
84
|
-
records => this.dispatchAction(Action.DATA_SAVED, {changes, records})
|
|
108
|
+
records => this.dispatchAction(Action.DATA_SAVED, { changes, records })
|
|
85
109
|
);
|
|
86
110
|
}
|
|
87
111
|
}
|
|
88
112
|
}
|
|
89
113
|
|
|
90
114
|
// API
|
|
91
|
-
public
|
|
115
|
+
public addFilterProvider(provider: FilterProvider): void{
|
|
116
|
+
this._filterProviders.push(provider);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public set sortingProvider(provider: SortingProvider){
|
|
120
|
+
this._sortingProvider = provider;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
public set metadata(md: UnitMetadata) {
|
|
124
|
+
this.dispatchAction(Action.METADATA_LOADED, md);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
public get metadata(): UnitMetadata {
|
|
92
128
|
return getMetadata(this._stateManager);
|
|
93
129
|
}
|
|
94
130
|
|
|
131
|
+
public set records(r: Array<Record>){
|
|
132
|
+
this.dispatchAction(Action.DATA_LOADED, r);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public get records(): Array<Record>{
|
|
136
|
+
const records = getCurrentRecords(this._stateManager);
|
|
137
|
+
return records ? Array.from(records.values()) : [];
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
public getField(fieldName: string): FieldDescriptor | undefined{
|
|
141
|
+
return getField(this._stateManager, fieldName);
|
|
142
|
+
}
|
|
143
|
+
|
|
95
144
|
public addRecord(): void {
|
|
96
145
|
this.dispatchAction(Action.RECORDS_ADDED, [{}]);
|
|
97
146
|
}
|
|
@@ -103,15 +152,20 @@ export default class DataUnit {
|
|
|
103
152
|
}
|
|
104
153
|
}
|
|
105
154
|
|
|
106
|
-
public getRecords(): Array<Record>|undefined {
|
|
107
|
-
const records = getCurrentRecords(this._stateManager);
|
|
108
|
-
return records ? Array.from(records.values()) : undefined;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
155
|
public getFieldValue(fieldName: string): any {
|
|
112
156
|
return getFieldValue(this._stateManager, fieldName);
|
|
113
157
|
}
|
|
114
158
|
|
|
159
|
+
public setFieldValue(fieldName: string, newValue: any, records?: Array<string>): void {
|
|
160
|
+
|
|
161
|
+
const typedValue = this.validateAndTypeValue(fieldName, newValue);
|
|
162
|
+
const currentValue = this.getFieldValue(fieldName);
|
|
163
|
+
|
|
164
|
+
if (currentValue !== typedValue) {
|
|
165
|
+
this.dispatchAction(Action.DATA_CHANGED, { [fieldName]: typedValue, records });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
115
169
|
public getSelection(): Array<string> {
|
|
116
170
|
return getSelection(this._stateManager);
|
|
117
171
|
}
|
|
@@ -132,16 +186,6 @@ export default class DataUnit {
|
|
|
132
186
|
this.dispatchAction(Action.PREVIOUS_SELECTED);
|
|
133
187
|
}
|
|
134
188
|
|
|
135
|
-
public setFieldValue(fieldName: string, newValue: any): void {
|
|
136
|
-
|
|
137
|
-
const typedValue = this.validateAndTypeValue(fieldName, newValue);
|
|
138
|
-
const currentValue = this.getFieldValue(fieldName);
|
|
139
|
-
|
|
140
|
-
if (currentValue !== typedValue) {
|
|
141
|
-
this.dispatchAction(Action.DATA_CHANGED, { [fieldName]: typedValue });
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
189
|
public cancelEdition(): void {
|
|
146
190
|
this.dispatchAction(Action.EDITION_CANCELED);
|
|
147
191
|
}
|
|
@@ -199,7 +243,7 @@ export interface Record {
|
|
|
199
243
|
[key: string]: any;
|
|
200
244
|
}
|
|
201
245
|
|
|
202
|
-
export interface SavedRecord extends Record{
|
|
246
|
+
export interface SavedRecord extends Record {
|
|
203
247
|
__old__id__?: string;
|
|
204
248
|
}
|
|
205
249
|
|
|
@@ -211,12 +255,14 @@ export enum ChangeOperation {
|
|
|
211
255
|
|
|
212
256
|
export class Change {
|
|
213
257
|
|
|
258
|
+
public dataUnit: string;
|
|
214
259
|
public record: Record;
|
|
215
260
|
public updatingFields: any;
|
|
216
261
|
|
|
217
262
|
private _operation: ChangeOperation;
|
|
218
263
|
|
|
219
|
-
constructor(record: Record, updates: any, operation: ChangeOperation) {
|
|
264
|
+
constructor(dataUnit: string, record: Record, updates: any, operation: ChangeOperation) {
|
|
265
|
+
this.dataUnit = dataUnit;
|
|
220
266
|
this.record = record;
|
|
221
267
|
this.updatingFields = updates;
|
|
222
268
|
this._operation = operation;
|
|
@@ -3,7 +3,7 @@ export enum DataType{
|
|
|
3
3
|
DATE = "DATE",
|
|
4
4
|
TEXT = "TEXT",
|
|
5
5
|
BOOLEAN = "BOOLEAN",
|
|
6
|
-
|
|
6
|
+
OBJECT = "OBJECT"
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export const convertType = (dataType:DataType, value: any): any => {
|
|
@@ -13,8 +13,8 @@ export const convertType = (dataType:DataType, value: any): any => {
|
|
|
13
13
|
switch (dataType){
|
|
14
14
|
case DataType.NUMBER:
|
|
15
15
|
return value === "" || isNaN(value) ? null : Number(value);
|
|
16
|
-
case DataType.
|
|
17
|
-
return JSON.parse(value);
|
|
16
|
+
case DataType.OBJECT:
|
|
17
|
+
return typeof value === "string" ? JSON.parse(value) : value;
|
|
18
18
|
case DataType.BOOLEAN:
|
|
19
19
|
return Boolean(value);
|
|
20
20
|
case DataType.DATE:
|
|
@@ -30,7 +30,7 @@ export const toString = (dataType:DataType, value: any): string => {
|
|
|
30
30
|
return value;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if(dataType === DataType.
|
|
33
|
+
if(dataType === DataType.OBJECT){
|
|
34
34
|
return JSON.stringify(value);
|
|
35
35
|
} else {
|
|
36
36
|
return value.toString();
|
|
@@ -3,32 +3,58 @@ import { DataType } from "./DataType";
|
|
|
3
3
|
export interface UnitMetadata{
|
|
4
4
|
name: string;
|
|
5
5
|
label: string;
|
|
6
|
-
fields: Array<
|
|
6
|
+
fields: Array<FieldDescriptor>;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export interface
|
|
9
|
+
export interface FieldDescriptor {
|
|
10
10
|
name: string;
|
|
11
11
|
label: string;
|
|
12
12
|
dataType: DataType;
|
|
13
13
|
userInterface?: UserInterface;
|
|
14
|
-
defaultValue?:
|
|
14
|
+
defaultValue?: any;
|
|
15
|
+
visible?: boolean;
|
|
15
16
|
readOnly?: boolean;
|
|
16
17
|
required?: boolean;
|
|
17
|
-
properties?:
|
|
18
|
+
properties?: any;
|
|
18
19
|
dependencies?: Array<FieldDependency>;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
export interface UIProperty {
|
|
22
|
-
name: string;
|
|
23
|
-
value: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
22
|
export interface FieldDependency {
|
|
27
23
|
masterFields: Array<string>;
|
|
28
24
|
type: DependencyType;
|
|
29
25
|
expression: string;
|
|
30
26
|
}
|
|
31
27
|
|
|
28
|
+
export interface Filter{
|
|
29
|
+
name: string;
|
|
30
|
+
expression: string;
|
|
31
|
+
params?: Array<FilterParam>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface FilterParam{
|
|
35
|
+
name: string
|
|
36
|
+
value: any
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface Sort{
|
|
40
|
+
field: string
|
|
41
|
+
mode: SortMode
|
|
42
|
+
dataType: DataType
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface FilterProvider{
|
|
46
|
+
getFilter(dataUnit: string): Array<Filter> | undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface SortingProvider{
|
|
50
|
+
getSort(dataUnit: string): Array<Sort> | undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export enum SortMode{
|
|
54
|
+
ASC = "ASC",
|
|
55
|
+
DESC = "DESC"
|
|
56
|
+
}
|
|
57
|
+
|
|
32
58
|
export enum DependencyType {
|
|
33
59
|
SEARCHING = "SEARCHING",
|
|
34
60
|
REQUIREMENT = "REQUIREMENT",
|
|
@@ -16,7 +16,7 @@ class ChangesReducerImpl implements ActionReducer{
|
|
|
16
16
|
switch(action.type){
|
|
17
17
|
|
|
18
18
|
case Action.DATA_CHANGED:
|
|
19
|
-
const selection = getSelection(stateManager);
|
|
19
|
+
const selection: Array<string> = action.payload.records || getSelection(stateManager);
|
|
20
20
|
if(selection){
|
|
21
21
|
const newState = new Map(currentState);
|
|
22
22
|
selection.forEach(recordId => {
|
|
@@ -54,7 +54,7 @@ export const isDirty = (stateManager: StateManager): boolean => {
|
|
|
54
54
|
return getChanges(stateManager) !== undefined;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
export const getChangesToSave = (stateManager: StateManager): Array<Change> => {
|
|
57
|
+
export const getChangesToSave = (dataUnit: string, stateManager: StateManager): Array<Change> => {
|
|
58
58
|
const result: Array<Change> = [];
|
|
59
59
|
|
|
60
60
|
const changes = getChanges(stateManager);
|
|
@@ -65,7 +65,7 @@ export const getChangesToSave = (stateManager: StateManager): Array<Change> => {
|
|
|
65
65
|
if(changes){
|
|
66
66
|
const c = changes.get(r.__record__id__);
|
|
67
67
|
if (c) {
|
|
68
|
-
result.push(new Change(r, c, ChangeOperation.UPDATE));
|
|
68
|
+
result.push(new Change(dataUnit, r, c, ChangeOperation.UPDATE));
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
});
|
|
@@ -74,7 +74,7 @@ export const getChangesToSave = (stateManager: StateManager): Array<Change> => {
|
|
|
74
74
|
const addedRecords = getAddedRecords(stateManager);
|
|
75
75
|
if (addedRecords) {
|
|
76
76
|
addedRecords.forEach(r => {
|
|
77
|
-
result.push(new Change(r, changes?.get(r.__record__id__), ChangeOperation.INSERT));
|
|
77
|
+
result.push(new Change(dataUnit, r, changes?.get(r.__record__id__), ChangeOperation.INSERT));
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
|
|
@@ -83,7 +83,7 @@ export const getChangesToSave = (stateManager: StateManager): Array<Change> => {
|
|
|
83
83
|
records.forEach(r=>recordsById[r.__record__id__] = r);
|
|
84
84
|
if (removedRecords) {
|
|
85
85
|
removedRecords.forEach(id => {
|
|
86
|
-
result.push(new Change(recordsById[id], undefined, ChangeOperation.DELETE));
|
|
86
|
+
result.push(new Change(dataUnit, recordsById[id], undefined, ChangeOperation.DELETE));
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import { ActionReducer, StateAction } from "../StateManager";
|
|
3
|
-
import { UnitMetadata,
|
|
3
|
+
import { UnitMetadata, FieldDescriptor } from "../../metadata/UnitMetadata";
|
|
4
4
|
import { Action } from "../action/DataUnitAction";
|
|
5
5
|
import StateManager from "../StateManager";
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ export const getMetadata = (stateManager: StateManager): UnitMetadata => {
|
|
|
24
24
|
return stateManager.select(UnitMetadataReducer.sliceName, (state: UnitMetadata) => state);
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
export const
|
|
27
|
+
export const getField = (stateManager: StateManager, fieldName: string): FieldDescriptor|undefined => {
|
|
28
28
|
const md: UnitMetadata = getMetadata(stateManager);
|
|
29
29
|
return md ? md.fields.find(fmd => fmd.name === fieldName) : undefined;
|
|
30
30
|
}
|
package/src/index.ts
CHANGED
|
@@ -8,7 +8,10 @@ import { HttpProvider } from "./http/HttpProvider";
|
|
|
8
8
|
import { SkwHttpProvider } from "./http/SkwHttpProvider";
|
|
9
9
|
import { RequestMetadata } from "./http/RequestMetadata";
|
|
10
10
|
import { AuthorizedServiceCaller } from "./http/AuthorizedServiceCaller";
|
|
11
|
-
import DataUnit from "./dataunit/DataUnit";
|
|
11
|
+
import DataUnit, {Record} from "./dataunit/DataUnit";
|
|
12
|
+
import { DataType } from "./dataunit/metadata/DataType";
|
|
13
|
+
import { UnitMetadata, FieldDescriptor, UserInterface } from "./dataunit/metadata/UnitMetadata";
|
|
14
|
+
import { DataUnitAction, Action } from "./dataunit/state/action/DataUnitAction";
|
|
12
15
|
|
|
13
16
|
/*Classes públicas no pacote*/
|
|
14
17
|
export {
|
|
@@ -22,5 +25,12 @@ export {
|
|
|
22
25
|
HttpProvider,
|
|
23
26
|
RequestMetadata,
|
|
24
27
|
AuthorizedServiceCaller,
|
|
25
|
-
DataUnit
|
|
28
|
+
DataUnit,
|
|
29
|
+
Record,
|
|
30
|
+
DataType,
|
|
31
|
+
UnitMetadata,
|
|
32
|
+
FieldDescriptor,
|
|
33
|
+
UserInterface,
|
|
34
|
+
DataUnitAction,
|
|
35
|
+
Action
|
|
26
36
|
};
|