@sankhyalabs/core 4.1.0 → 4.2.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/.docs/classes/Change.md +11 -11
- package/.docs/classes/DataUnit.md +194 -102
- package/.docs/enums/Action.md +22 -0
- package/.docs/enums/ChangeOperation.md +4 -4
- package/.docs/interfaces/AllRecord.md +6 -6
- package/.docs/interfaces/DUActionInterceptor.md +1 -1
- package/.docs/interfaces/PageRequest.md +3 -3
- package/.docs/interfaces/QuickFilter.md +2 -2
- 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.d.ts +36 -0
- package/dist/dataunit/DataUnit.js +47 -1
- package/dist/dataunit/DataUnit.js.map +1 -1
- package/dist/dataunit/state/action/DataUnitAction.d.ts +3 -1
- package/dist/dataunit/state/action/DataUnitAction.js +2 -0
- package/dist/dataunit/state/action/DataUnitAction.js.map +1 -1
- package/dist/dataunit/state/slice/ChangesSlice.js +9 -1
- package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
- package/dist/dataunit/state/slice/InvalidFieldsSlice.d.ts +10 -0
- package/dist/dataunit/state/slice/InvalidFieldsSlice.js +66 -0
- package/dist/dataunit/state/slice/InvalidFieldsSlice.js.map +1 -0
- package/package.json +1 -1
- package/src/dataunit/DataUnit.ts +51 -1
- package/src/dataunit/state/action/DataUnitAction.ts +5 -1
- package/src/dataunit/state/slice/ChangesSlice.ts +9 -1
- package/src/dataunit/state/slice/InvalidFieldsSlice.ts +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvalidFieldsSlice.js","sourceRoot":"","sources":["../../../../src/dataunit/state/slice/InvalidFieldsSlice.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/dataunit/DataUnit.ts
CHANGED
|
@@ -24,6 +24,7 @@ import { canRedo, canUndo, HistReducer } from "./state/HistReducer.js";
|
|
|
24
24
|
import { getFormattedValue } from "./formatting/PrettyFormatter.js";
|
|
25
25
|
import { v4 as uuid } from "uuid"
|
|
26
26
|
import { DataUnitStorage } from "./DataUnitStorage.js";
|
|
27
|
+
import { getInvalidFieldMessage, InvalidFieldsReducer } from "./state/slice/InvalidFieldsSlice.js";
|
|
27
28
|
|
|
28
29
|
const DEFAULT_DATAUNIT_NAME = "dataunit";
|
|
29
30
|
|
|
@@ -63,7 +64,8 @@ export default class DataUnit {
|
|
|
63
64
|
SelectionReducer,
|
|
64
65
|
ChangesReducer,
|
|
65
66
|
WaitingChangesReducer,
|
|
66
|
-
CurrentRecordsReducer
|
|
67
|
+
CurrentRecordsReducer,
|
|
68
|
+
InvalidFieldsReducer
|
|
67
69
|
]
|
|
68
70
|
);
|
|
69
71
|
this._observers = [];
|
|
@@ -693,6 +695,17 @@ export default class DataUnit {
|
|
|
693
695
|
return modified || [];
|
|
694
696
|
}
|
|
695
697
|
|
|
698
|
+
/**
|
|
699
|
+
*
|
|
700
|
+
* Obtém os registros adicionados no DataUnit.
|
|
701
|
+
*
|
|
702
|
+
* @returns - Lista dos registros adicionados.
|
|
703
|
+
*
|
|
704
|
+
*/
|
|
705
|
+
public getAddedRecords(): Array<Record> {
|
|
706
|
+
return getAddedRecords(this._stateManager);
|
|
707
|
+
}
|
|
708
|
+
|
|
696
709
|
/**
|
|
697
710
|
*
|
|
698
711
|
* Obtém metadados de um campo específico.
|
|
@@ -802,6 +815,43 @@ export default class DataUnit {
|
|
|
802
815
|
}
|
|
803
816
|
}
|
|
804
817
|
|
|
818
|
+
/**
|
|
819
|
+
*
|
|
820
|
+
* Marca campos como inválidos.
|
|
821
|
+
*
|
|
822
|
+
* @param fieldName - Nome do campo inválido.
|
|
823
|
+
* @param message - Mensagem descrevendo o motivo da invalidade.
|
|
824
|
+
* @param recordId - Indica qual registro está com o campo inválido.
|
|
825
|
+
*
|
|
826
|
+
*/
|
|
827
|
+
public setInvalidField(fieldName: string, message: string, recordId: string): void {
|
|
828
|
+
this.dispatchAction(Action.FIELD_INVALIDATED, { fieldName, message, recordId }, undefined);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/**
|
|
832
|
+
*
|
|
833
|
+
* Limpa campos inválidos.
|
|
834
|
+
*
|
|
835
|
+
* @param recordId - Indica em qual registro o campo não está mais inválido.
|
|
836
|
+
* @param fieldName - Nome do campo. Caso omitido, todos os campos serão limpos.
|
|
837
|
+
*
|
|
838
|
+
*/
|
|
839
|
+
public clearInvalid(recordId: string, fieldName?: string): void {
|
|
840
|
+
this.dispatchAction(Action.INVALIDATE_CLEAN, { fieldName, recordId }, undefined);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
*
|
|
845
|
+
* Obtém a mensagem de campo inválido para determinado registro.
|
|
846
|
+
*
|
|
847
|
+
* @param recordId - Identificador do registro.
|
|
848
|
+
* @param fieldName - Nome do campo.
|
|
849
|
+
*
|
|
850
|
+
*/
|
|
851
|
+
public getInvalidMessage(recordId: string, fieldName: string): string|undefined {
|
|
852
|
+
return getInvalidFieldMessage(this._stateManager, fieldName, recordId);
|
|
853
|
+
}
|
|
854
|
+
|
|
805
855
|
/**
|
|
806
856
|
*
|
|
807
857
|
* Inicia alteração no campo.
|
|
@@ -99,7 +99,15 @@ export const getChangesToSave = (dataUnit: string, stateManager: StateManager):
|
|
|
99
99
|
if (addedRecords) {
|
|
100
100
|
addedRecords.forEach(r => {
|
|
101
101
|
const operation: ChangeOperation = r.__copy__ ? ChangeOperation.COPY : ChangeOperation.INSERT;
|
|
102
|
-
|
|
102
|
+
const changedFields = {...changes?.get(r.__record__id__)};
|
|
103
|
+
if(operation === ChangeOperation.INSERT){
|
|
104
|
+
Object.keys(r).forEach(fieldName => {
|
|
105
|
+
if(!fieldName.startsWith("__")){
|
|
106
|
+
changedFields[fieldName] = r[fieldName];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
result.push(new Change(dataUnit, r, changedFields, operation, r.__record__source__id__));
|
|
103
111
|
});
|
|
104
112
|
}
|
|
105
113
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
|
|
2
|
+
import { ActionReducer, StateAction } from "../StateManager.js";
|
|
3
|
+
import { UnitMetadata, FieldDescriptor } from "../../metadata/UnitMetadata.js";
|
|
4
|
+
import { Action } from "../action/DataUnitAction.js";
|
|
5
|
+
import StateManager from "../StateManager.js";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class InvalidFieldsReducerImpl implements ActionReducer{
|
|
9
|
+
|
|
10
|
+
public sliceName: string = "hist::invalidFields";
|
|
11
|
+
|
|
12
|
+
public reduce(_stateManager:StateManager, currentState: Map<string, Map<string, string>>, action: StateAction): Map<string, Map<string, string>>|undefined {
|
|
13
|
+
|
|
14
|
+
switch(action.type){
|
|
15
|
+
case Action.FIELD_INVALIDATED:
|
|
16
|
+
return makeInvalid(currentState, action.payload);
|
|
17
|
+
case Action.INVALIDATE_CLEAN:
|
|
18
|
+
return clearRecord(currentState, action.payload);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return currentState;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const InvalidFieldsReducer = new InvalidFieldsReducerImpl();
|
|
26
|
+
|
|
27
|
+
export const getInvalidFields = (stateManager: StateManager): Map<string, Map<string, string>> => {
|
|
28
|
+
return stateManager.select(InvalidFieldsReducer.sliceName, (state: Map<string, Map<string, string>>) => state);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const getInvalidFieldMessage = (stateManager: StateManager, fieldName: string, recordId: string): string | undefined => {
|
|
32
|
+
const invalidFields = getInvalidFields(stateManager);
|
|
33
|
+
if(invalidFields){
|
|
34
|
+
const recordInvalidFields = invalidFields.get(recordId);
|
|
35
|
+
if(recordInvalidFields){
|
|
36
|
+
return recordInvalidFields.get(fieldName);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const clearRecord = (currentState:Map<string, Map<string, string>>, payload: any): Map<string, Map<string, string>>|undefined => {
|
|
43
|
+
|
|
44
|
+
const {recordId, fieldName} = payload;
|
|
45
|
+
|
|
46
|
+
if(recordId == undefined){
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if(currentState){
|
|
51
|
+
const recordInvalidFields = currentState.get(recordId);
|
|
52
|
+
if(recordInvalidFields){
|
|
53
|
+
const newState: Map<string, Map<string, string>> = new Map(currentState);
|
|
54
|
+
if(fieldName == undefined){
|
|
55
|
+
newState.delete(recordId);
|
|
56
|
+
} else {
|
|
57
|
+
const newRecorcInvalidFields: Map<string, string> = new Map(recordInvalidFields);
|
|
58
|
+
newRecorcInvalidFields.delete(fieldName);
|
|
59
|
+
if(newRecorcInvalidFields.size > 0){
|
|
60
|
+
newState.set(recordId, newRecorcInvalidFields);
|
|
61
|
+
} else {
|
|
62
|
+
newState.delete(recordId);
|
|
63
|
+
}
|
|
64
|
+
return newState;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return currentState;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const makeInvalid = (currentState:Map<string, Map<string, string>>, payload: any): Map<string, Map<string, string>>|undefined => {
|
|
75
|
+
|
|
76
|
+
const {recordId, message, fieldName} = payload;
|
|
77
|
+
|
|
78
|
+
const recordInvalidFields = new Map(currentState?.get(recordId));
|
|
79
|
+
recordInvalidFields.set(fieldName, message);
|
|
80
|
+
|
|
81
|
+
const newState = new Map(currentState);
|
|
82
|
+
newState.set(recordId, recordInvalidFields);
|
|
83
|
+
|
|
84
|
+
return newState;
|
|
85
|
+
}
|