@sankhyalabs/core 5.10.0-dev.5 → 5.10.0-dev.7
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/.docs/classes/Change.md +11 -11
- package/.docs/classes/DataUnit.md +118 -118
- package/.docs/classes/SelectionInfo.md +11 -11
- package/.docs/enums/ChangeOperation.md +4 -4
- package/.docs/enums/SelectionMode.md +2 -2
- package/.docs/interfaces/DUActionInterceptor.md +1 -1
- package/.docs/interfaces/PageRequest.md +3 -3
- package/.docs/interfaces/QuickFilter.md +3 -3
- package/.docs/interfaces/Record.md +4 -4
- package/.docs/interfaces/SavedRecord.md +5 -5
- package/.docs/interfaces/WaitingChange.md +3 -3
- package/dist/dataunit/DataUnit.js +4 -4
- package/dist/dataunit/DataUnit.js.map +1 -1
- package/dist/dataunit/metadata/DataType.js +3 -0
- package/dist/dataunit/metadata/DataType.js.map +1 -1
- package/dist/dataunit/state/slice/ChangesSlice.js +4 -4
- package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
- package/dist/dataunit/state/slice/RecordsSlice.d.ts +1 -0
- package/dist/dataunit/state/slice/RecordsSlice.js +6 -2
- package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -1
- package/dist/dataunit/state/slice/SnapshotSlice.d.ts +1 -0
- package/dist/dataunit/state/slice/SnapshotSlice.js +24 -3
- package/dist/dataunit/state/slice/SnapshotSlice.js.map +1 -1
- package/package.json +1 -1
- package/src/dataunit/DataUnit.ts +10 -4
- package/src/dataunit/metadata/DataType.ts +3 -0
- package/src/dataunit/state/slice/ChangesSlice.ts +4 -4
- package/src/dataunit/state/slice/RecordsSlice.ts +8 -3
- package/src/dataunit/state/slice/SnapshotSlice.ts +29 -3
|
@@ -19,12 +19,16 @@ export const getCurrentRecords = (stateManager) => {
|
|
|
19
19
|
const snapshot = getSnapshot(stateManager);
|
|
20
20
|
return snapshot ? snapshot.records : new Map();
|
|
21
21
|
};
|
|
22
|
+
export const getSelectionRecordsMap = (stateManager) => {
|
|
23
|
+
const snapshot = getSnapshot(stateManager);
|
|
24
|
+
return snapshot ? snapshot.selectionRecords : new Map();
|
|
25
|
+
};
|
|
22
26
|
export const getSelectionRecords = (stateManager) => {
|
|
23
27
|
const snapshot = getSnapshot(stateManager);
|
|
24
28
|
return snapshot ? Array.from(snapshot.selectionRecords.values()) : undefined;
|
|
25
29
|
};
|
|
26
30
|
export const getModifiedRecords = (stateManager) => {
|
|
27
|
-
const currentRecords =
|
|
31
|
+
const currentRecords = buildCurrentRecords(stateManager);
|
|
28
32
|
if (!currentRecords) {
|
|
29
33
|
return undefined;
|
|
30
34
|
}
|
|
@@ -42,9 +46,9 @@ export const getModifiedRecords = (stateManager) => {
|
|
|
42
46
|
export const getFieldValue = (stateManager, fieldName) => {
|
|
43
47
|
const selection = getSelection(stateManager);
|
|
44
48
|
if (selection && selection.length > 0) {
|
|
45
|
-
const currentRecords =
|
|
49
|
+
const currentRecords = getSelectionRecords(stateManager);
|
|
46
50
|
if (currentRecords) {
|
|
47
|
-
const record = currentRecords.
|
|
51
|
+
const record = currentRecords.find(record => record.__record__id__ === selection[0]);
|
|
48
52
|
return record ? record[fieldName] : undefined;
|
|
49
53
|
}
|
|
50
54
|
}
|
|
@@ -63,6 +67,9 @@ function buildSnapshot(oldSnapshot, stateManager) {
|
|
|
63
67
|
const changes = getChanges(stateManager);
|
|
64
68
|
const snapshotRecords = new Map(records.map(source => [source.__record__id__, Object.assign(Object.assign({}, source), changes === null || changes === void 0 ? void 0 : changes.get(source.__record__id__))]));
|
|
65
69
|
const selectionRecords = new Map(oldSnapshot === null || oldSnapshot === void 0 ? void 0 : oldSnapshot.selectionRecords);
|
|
70
|
+
for (let [chave, valor] of selectionRecords) {
|
|
71
|
+
selectionRecords.set(chave, Object.assign(Object.assign({}, valor), changes === null || changes === void 0 ? void 0 : changes.get(chave)));
|
|
72
|
+
}
|
|
66
73
|
const selection = getSelection(stateManager);
|
|
67
74
|
if (selection && selection.length > 0) {
|
|
68
75
|
selection.forEach(recordId => {
|
|
@@ -82,4 +89,18 @@ function buildSnapshot(oldSnapshot, stateManager) {
|
|
|
82
89
|
selectionRecords
|
|
83
90
|
};
|
|
84
91
|
}
|
|
92
|
+
function buildCurrentRecords(stateManager) {
|
|
93
|
+
const currentRecords = getCurrentRecords(stateManager);
|
|
94
|
+
const selectionRecords = getSelectionRecordsMap(stateManager);
|
|
95
|
+
/**
|
|
96
|
+
* Precisamos verificar tanto os registros da seleção quanto os da página atual, pois o usuário pode estar tentando
|
|
97
|
+
* editar um registro que não está na página atual ou que não está selecionado.
|
|
98
|
+
*/
|
|
99
|
+
selectionRecords.forEach(record => {
|
|
100
|
+
if (!currentRecords.has(record.__record__id__)) {
|
|
101
|
+
currentRecords.set(record.__record__id__, record);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return currentRecords;
|
|
105
|
+
}
|
|
85
106
|
//# sourceMappingURL=SnapshotSlice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnapshotSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/SnapshotSlice.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,mBAAmB;IAAzB;QAEW,cAAS,GAAW,UAAU,CAAC;IAK1C,CAAC;IAHU,MAAM,CAAC,YAA0B,EAAE,eAAyB;QAChE,OAAO,aAAa,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAA0B,EAAwB,EAAE;IAC5E,OAAO,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;AACtF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,YAA0B,EAAuB,EAAE;IACjF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAA0B,EAA6B,EAAE;IACzF,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,YAA0B,EAA6B,EAAE;IAExF,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"SnapshotSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/SnapshotSlice.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/dataunit/DataUnit.ts
CHANGED
|
@@ -13,7 +13,13 @@ import { LoadDataResponse } from "./loading/LoadDataResponse.js";
|
|
|
13
13
|
import { PaginationInfo } from "./loading/PaginationInfo.js";
|
|
14
14
|
import { AddedRecordsReducer, getAddedRecords, prepareAddedRecordId, prepareCopiedRecord } from "./state/slice/AddedRecordsSlice.js";
|
|
15
15
|
import { ChangesReducer, getChangesToSave, isDirty, hasDirtyRecords } from "./state/slice/ChangesSlice.js";
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
SnapshotReducer,
|
|
18
|
+
getCurrentRecords,
|
|
19
|
+
getFieldValue,
|
|
20
|
+
getModifiedRecords,
|
|
21
|
+
getSelectionRecords,
|
|
22
|
+
} from './state/slice/SnapshotSlice.js';
|
|
17
23
|
import { getCurrentPage, getLastPage, getPaginationInfo, getCurrentRequest, LoadingControlReducer, hasMorePages, hasPreviousPages } from "./state/slice/LoadingControlSlice.js";
|
|
18
24
|
import { getRecords, RecordsReducer } from "./state/slice/RecordsSlice.js";
|
|
19
25
|
import { RemovedRecordsReducer } from "./state/slice/RemovedRecordsSlice.js";
|
|
@@ -1091,9 +1097,9 @@ export default class DataUnit {
|
|
|
1091
1097
|
*
|
|
1092
1098
|
*/
|
|
1093
1099
|
public getSelectedRecord(): Record | undefined {
|
|
1094
|
-
const selection
|
|
1095
|
-
if (!selection) return;
|
|
1096
|
-
return
|
|
1100
|
+
const selection = getSelectionRecords(this._stateManager);
|
|
1101
|
+
if (!selection || selection.length == 0) return;
|
|
1102
|
+
return selection[0];
|
|
1097
1103
|
}
|
|
1098
1104
|
|
|
1099
1105
|
/**
|
|
@@ -105,6 +105,9 @@ export const toString = ( dataType: DataType|undefined, value: any): string => {
|
|
|
105
105
|
}
|
|
106
106
|
return JSON.stringify(value);
|
|
107
107
|
} else if (dataType === DataType.DATE) {
|
|
108
|
+
if (typeof value === "string") {
|
|
109
|
+
value = DateUtils.strToDate(value);
|
|
110
|
+
}
|
|
108
111
|
return DateUtils.formatRfc3339(value as Date);
|
|
109
112
|
} else {
|
|
110
113
|
return value.toString();
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
import { ActionReducer, StateAction } from "../StateManager.js";
|
|
3
3
|
import { Action } from "../action/DataUnitAction.js";
|
|
4
4
|
import StateManager from "../StateManager.js";
|
|
5
|
-
import { getSelection } from "./SelectionSlice.js";
|
|
6
5
|
import { getRecords } from "./RecordsSlice.js";
|
|
7
6
|
import { getRemovedRecords } from "./RemovedRecordsSlice.js";
|
|
8
7
|
import { getAddedRecords } from "./AddedRecordsSlice.js";
|
|
9
8
|
import { Change, ChangeOperation, Record } from "../../DataUnit.js";
|
|
10
9
|
import { getWaitingChanges } from "./WaitingChangesSlice.js";
|
|
10
|
+
import { getSelectionRecords } from './SnapshotSlice.js';
|
|
11
11
|
|
|
12
12
|
class ChangesReducerImpl implements ActionReducer{
|
|
13
13
|
|
|
@@ -32,8 +32,8 @@ class ChangesReducerImpl implements ActionReducer{
|
|
|
32
32
|
}
|
|
33
33
|
);
|
|
34
34
|
return changes;
|
|
35
|
-
case Action.DATA_CHANGED:
|
|
36
|
-
const selection: Array<string> = action.payload.records ||
|
|
35
|
+
case Action.DATA_CHANGED:
|
|
36
|
+
const selection: Array<string> = action.payload.records || getSelectionRecords(stateManager)?.map(record => record.__record__id__);
|
|
37
37
|
if(selection){
|
|
38
38
|
const newState = new Map(currentState);
|
|
39
39
|
selection.forEach(recordId => {
|
|
@@ -85,7 +85,7 @@ export const getChangesToSave = (dataUnit: string, stateManager: StateManager):
|
|
|
85
85
|
const result: Array<Change> = [];
|
|
86
86
|
|
|
87
87
|
const changes = getChanges(stateManager);
|
|
88
|
-
const records =
|
|
88
|
+
const records = getSelectionRecords(stateManager);
|
|
89
89
|
|
|
90
90
|
records?.forEach(r => {
|
|
91
91
|
if(changes){
|
|
@@ -40,18 +40,18 @@ class RecordsReducerImpl implements ActionReducer {
|
|
|
40
40
|
savedRecords.forEach(sr => {
|
|
41
41
|
const recordId = sr.__old__id__ || sr.__record__id__;
|
|
42
42
|
const newRecord: Record = { ...sr };
|
|
43
|
-
delete newRecord["__old__id__"];
|
|
44
43
|
if(recordsMap.has(recordId)){
|
|
45
44
|
recordsMap.set(recordId, newRecord);
|
|
46
|
-
} else {
|
|
45
|
+
} else if(this.isNewRecord(newRecord)){
|
|
47
46
|
newRecords.push(newRecord);
|
|
48
47
|
}
|
|
48
|
+
delete newRecord["__old__id__"];
|
|
49
49
|
});
|
|
50
50
|
return newRecords.concat(Array.from(recordsMap.values()));
|
|
51
51
|
|
|
52
52
|
case Action.RECORD_LOADED:
|
|
53
53
|
action.payload.forEach((record: any) => {
|
|
54
|
-
for(let i = 0; i < currentState.length; i++){
|
|
54
|
+
for(let i = 0; i < currentState.length; i++){
|
|
55
55
|
if(currentState[i].__record__id__ === record.__record__id__){
|
|
56
56
|
currentState[i] = record;
|
|
57
57
|
}
|
|
@@ -60,6 +60,11 @@ class RecordsReducerImpl implements ActionReducer {
|
|
|
60
60
|
}
|
|
61
61
|
return currentState;
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
private isNewRecord(record: Record){
|
|
65
|
+
return (!Object.prototype.hasOwnProperty.call(record,"__old__id__")
|
|
66
|
+
|| record["__old__id__"] !== record["__record__id__"]);
|
|
67
|
+
}
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
export const RecordsReducer = new RecordsReducerImpl();
|
|
@@ -28,6 +28,11 @@ export const getCurrentRecords = (stateManager: StateManager): Map<string, Recor
|
|
|
28
28
|
return snapshot ? snapshot.records : new Map();
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
export const getSelectionRecordsMap = (stateManager: StateManager): Map<string, Record> => {
|
|
32
|
+
const snapshot = getSnapshot(stateManager);
|
|
33
|
+
return snapshot ? snapshot.selectionRecords : new Map();
|
|
34
|
+
};
|
|
35
|
+
|
|
31
36
|
export const getSelectionRecords = (stateManager: StateManager): Array<Record> | undefined => {
|
|
32
37
|
const snapshot = getSnapshot(stateManager);
|
|
33
38
|
return snapshot ? Array.from(snapshot.selectionRecords.values()) : undefined;
|
|
@@ -35,7 +40,7 @@ export const getSelectionRecords = (stateManager: StateManager): Array<Record> |
|
|
|
35
40
|
|
|
36
41
|
export const getModifiedRecords = (stateManager: StateManager): Array<Record> | undefined => {
|
|
37
42
|
|
|
38
|
-
const currentRecords =
|
|
43
|
+
const currentRecords = buildCurrentRecords(stateManager);
|
|
39
44
|
if(!currentRecords){
|
|
40
45
|
return undefined
|
|
41
46
|
}
|
|
@@ -58,9 +63,9 @@ export const getModifiedRecords = (stateManager: StateManager): Array<Record> |
|
|
|
58
63
|
export const getFieldValue = (stateManager: StateManager, fieldName: string): any => {
|
|
59
64
|
const selection = getSelection(stateManager);
|
|
60
65
|
if(selection && selection.length > 0){
|
|
61
|
-
const currentRecords =
|
|
66
|
+
const currentRecords = getSelectionRecords(stateManager);
|
|
62
67
|
if(currentRecords){
|
|
63
|
-
const record = currentRecords.
|
|
68
|
+
const record = currentRecords.find(record => record.__record__id__ === selection[0]);
|
|
64
69
|
return record ? record[fieldName] : undefined;
|
|
65
70
|
}
|
|
66
71
|
}
|
|
@@ -89,6 +94,11 @@ function buildSnapshot(oldSnapshot: Snapshot, stateManager: StateManager): Snaps
|
|
|
89
94
|
const changes = getChanges(stateManager);
|
|
90
95
|
const snapshotRecords: Map<string, Record> = new Map(records.map(source => [source.__record__id__, {...source, ...changes?.get(source.__record__id__)}]));
|
|
91
96
|
const selectionRecords: Map<string, Record> = new Map(oldSnapshot?.selectionRecords);
|
|
97
|
+
|
|
98
|
+
for (let [chave, valor] of selectionRecords) {
|
|
99
|
+
selectionRecords.set(chave, {...valor, ...changes?.get(chave)});
|
|
100
|
+
}
|
|
101
|
+
|
|
92
102
|
const selection: Array<string> = getSelection(stateManager);
|
|
93
103
|
|
|
94
104
|
if(selection && selection.length > 0){
|
|
@@ -110,4 +120,20 @@ function buildSnapshot(oldSnapshot: Snapshot, stateManager: StateManager): Snaps
|
|
|
110
120
|
records: snapshotRecords,
|
|
111
121
|
selectionRecords
|
|
112
122
|
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function buildCurrentRecords(stateManager: StateManager) {
|
|
126
|
+
const currentRecords = getCurrentRecords(stateManager);
|
|
127
|
+
const selectionRecords = getSelectionRecordsMap(stateManager);
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Precisamos verificar tanto os registros da seleção quanto os da página atual, pois o usuário pode estar tentando
|
|
131
|
+
* editar um registro que não está na página atual ou que não está selecionado.
|
|
132
|
+
*/
|
|
133
|
+
selectionRecords.forEach(record => {
|
|
134
|
+
if (!currentRecords.has(record.__record__id__)) {
|
|
135
|
+
currentRecords.set(record.__record__id__, record);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return currentRecords;
|
|
113
139
|
}
|