@sankhyalabs/core 5.20.0-dev.1 → 5.20.0-dev.11
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/README.md +3 -1
- package/.docs/classes/ApplicationContext.md +31 -32
- package/.docs/classes/ArrayUtils.md +95 -83
- package/.docs/classes/AuthorizedServiceCaller.md +25 -34
- package/.docs/classes/Change.md +59 -74
- package/.docs/classes/DataUnit.md +1025 -1078
- package/.docs/classes/DataUnitAction.md +25 -42
- package/.docs/classes/DataUnitStorage.md +40 -43
- package/.docs/classes/DateUtils.md +133 -126
- package/.docs/classes/ElementIDUtils.md +123 -122
- package/.docs/classes/ErrorException.md +67 -88
- package/.docs/classes/ErrorTracking.md +20 -23
- package/.docs/classes/FieldComparator.md +35 -39
- package/.docs/classes/FloatingManager.md +195 -198
- package/.docs/classes/HTMLBuilder.md +14 -20
- package/.docs/classes/HttpProvider.md +45 -41
- package/.docs/classes/IDBRepository.md +179 -196
- package/.docs/classes/JSUtils.md +65 -66
- package/.docs/classes/KeyboardManager.md +95 -87
- package/.docs/classes/{MaskFormatter-1.md → MaskFormatter.md} +81 -120
- package/.docs/classes/NumberUtils.md +163 -152
- package/.docs/classes/ObjectUtils.md +66 -71
- package/.docs/classes/OnboardingUtils.md +36 -51
- package/.docs/classes/OverflowWatcher.md +269 -0
- package/.docs/classes/PromiseSync.md +25 -42
- package/.docs/classes/ReadyUtil.md +31 -41
- package/.docs/classes/RequestMetadata.md +29 -30
- package/.docs/classes/SearchUtils.md +18 -20
- package/.docs/classes/SelectionInfo.md +59 -74
- package/.docs/classes/SkwHttpProvider.md +33 -45
- package/.docs/classes/StringUtils.md +297 -322
- package/.docs/classes/TimeFormatter.md +43 -44
- package/.docs/classes/UserAgentUtils.md +17 -20
- package/.docs/classes/VersionUtils.md +15 -18
- package/.docs/classes/WaitingChangeException.md +63 -84
- package/.docs/classes/WarningException.md +67 -88
- package/.docs/enumerations/Action.md +297 -0
- package/.docs/enumerations/ChangeOperation.md +47 -0
- package/.docs/enumerations/DataType.md +57 -0
- package/.docs/enumerations/DependencyType.md +37 -0
- package/.docs/enumerations/OverflowDirection.md +29 -0
- package/.docs/enumerations/SelectionMode.md +27 -0
- package/.docs/enumerations/SortMode.md +27 -0
- package/.docs/enumerations/UserInterface.md +177 -0
- package/.docs/functions/defaultDataLoader.md +25 -0
- package/.docs/{modules.md → globals.md} +21 -37
- package/.docs/interfaces/ChildDescriptor.md +12 -16
- package/.docs/interfaces/ChildLink.md +9 -12
- package/.docs/interfaces/DUActionInterceptor.md +10 -14
- package/.docs/interfaces/ExecutionContext.md +17 -32
- package/.docs/interfaces/FieldDescriptor.md +52 -66
- package/.docs/interfaces/Filter.md +13 -17
- package/.docs/interfaces/IElementIDInfo.md +11 -14
- package/.docs/interfaces/ILoadResult.md +11 -16
- package/.docs/interfaces/IRepository.md +88 -93
- package/.docs/interfaces/IRepositoryIndex.md +23 -30
- package/.docs/interfaces/LoadDataRequest.md +36 -45
- package/.docs/interfaces/LoadDataResponse.md +11 -14
- package/.docs/interfaces/PageRequest.md +16 -20
- package/.docs/interfaces/PaginationInfo.md +24 -31
- package/.docs/interfaces/PromiseSyncCallback.md +13 -17
- package/.docs/interfaces/QuickFilter.md +17 -21
- package/.docs/interfaces/Record.md +26 -33
- package/.docs/interfaces/SavedRecord.md +33 -41
- package/.docs/interfaces/Sort.md +12 -16
- package/.docs/interfaces/SortingProvider.md +10 -13
- package/.docs/interfaces/UnitMetadata.md +16 -21
- package/.docs/interfaces/WaitingChange.md +16 -20
- package/.docs/namespaces/MaskFormatter/README.md +17 -0
- package/.docs/namespaces/MaskFormatter/type-aliases/MaskCharacter.md +13 -0
- package/.docs/namespaces/MaskFormatter/variables/MaskCharacter.md +13 -0
- package/.docs/type-aliases/OnOverflowCallBack.md +25 -0
- package/.releaserc +10 -10
- package/dist/dataunit/DataUnit.d.ts +23 -1
- package/dist/dataunit/DataUnit.js +49 -9
- package/dist/dataunit/DataUnit.js.map +1 -1
- package/dist/dataunit/formatting/PrettyFormatter.js +7 -5
- package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -1
- package/dist/dataunit/metadata/DataType.js +10 -1
- package/dist/dataunit/metadata/DataType.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 +12 -11
- package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
- package/dist/dataunit/state/slice/InvalidFieldsSlice.js +2 -0
- package/dist/dataunit/state/slice/InvalidFieldsSlice.js.map +1 -1
- package/dist/dataunit/state/slice/LoadingProperties.d.ts +9 -0
- package/dist/dataunit/state/slice/LoadingProperties.js +31 -0
- package/dist/dataunit/state/slice/LoadingProperties.js.map +1 -0
- package/dist/dataunit/state/slice/SelectionSlice.js +3 -2
- package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/OverflowWatcher/index.d.ts +31 -0
- package/dist/utils/OverflowWatcher/index.js +107 -0
- package/dist/utils/OverflowWatcher/index.js.map +1 -0
- package/dist/utils/OverflowWatcher/types/overflow-callback.d.ts +6 -0
- package/dist/utils/OverflowWatcher/types/overflow-callback.js +2 -0
- package/dist/utils/OverflowWatcher/types/overflow-callback.js.map +1 -0
- package/dist/utils/OverflowWatcher/types/overflow-direction.d.ts +7 -0
- package/dist/utils/OverflowWatcher/types/overflow-direction.js +9 -0
- package/dist/utils/OverflowWatcher/types/overflow-direction.js.map +1 -0
- package/jest.config.ts +1 -1
- package/package.json +11 -4
- package/sonar-project.properties +7 -0
- package/src/dataunit/DataUnit.ts +56 -9
- package/src/dataunit/formatting/PrettyFormatter.ts +7 -5
- package/src/dataunit/metadata/DataType.ts +10 -1
- package/src/dataunit/state/action/DataUnitAction.ts +3 -1
- package/src/dataunit/state/slice/ChangesSlice.ts +15 -14
- package/src/dataunit/state/slice/InvalidFieldsSlice.ts +2 -0
- package/src/dataunit/state/slice/LoadingProperties.ts +37 -0
- package/src/dataunit/state/slice/SelectionSlice.ts +3 -2
- package/src/index.ts +4 -0
- package/src/utils/OverflowWatcher/index.ts +151 -0
- package/src/utils/OverflowWatcher/types/overflow-callback.ts +6 -0
- package/src/utils/OverflowWatcher/types/overflow-direction.ts +7 -0
- package/test/util/OverflowWatcher.spec.ts +118 -0
- package/.docs/.nojekyll +0 -1
- package/.docs/enums/Action.md +0 -305
- package/.docs/enums/ChangeOperation.md +0 -52
- package/.docs/enums/DataType.md +0 -63
- package/.docs/enums/DependencyType.md +0 -41
- package/.docs/enums/SelectionMode.md +0 -30
- package/.docs/enums/SortMode.md +0 -30
- package/.docs/enums/UserInterface.md +0 -195
- package/.docs/modules/MaskFormatter.md +0 -37
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { JSUtils } from "../JSUtils.js";
|
|
2
|
+
import { OverflowDirection } from "./types/overflow-direction.js";
|
|
3
|
+
export * from "./types/overflow-direction.js";
|
|
4
|
+
export * from "./types/overflow-callback.js";
|
|
5
|
+
export default class OverflowWatcher {
|
|
6
|
+
/**
|
|
7
|
+
* Cria uma instancia do OverflowWatcher
|
|
8
|
+
*
|
|
9
|
+
* @param element - Elemento HTML que o overflow será observado.
|
|
10
|
+
* @param callback - Função que sera chamada quando ocorrer overflow no elemento.
|
|
11
|
+
* @param overFlowDirection - Indica direção que o overflow será monitorado.
|
|
12
|
+
* @param deltaSize - Variação de tamanho que será considerada como overflow.
|
|
13
|
+
*/
|
|
14
|
+
constructor(element, callback, overFlowDirection = OverflowDirection.HORIZONTAL, deltaSize = 10) {
|
|
15
|
+
this._lastContentRect = undefined;
|
|
16
|
+
this._scrollDirection = OverflowDirection.HORIZONTAL;
|
|
17
|
+
this._hiddenItems = [];
|
|
18
|
+
this._onResize = callback;
|
|
19
|
+
this._scrollDirection = overFlowDirection;
|
|
20
|
+
this._resizeObserver = new ResizeObserver(JSUtils.debounce((entries) => this.handleResize(entries), 200));
|
|
21
|
+
this._resizeObserver.observe(element);
|
|
22
|
+
this._propSize = this.getPropSizeByDirection();
|
|
23
|
+
this._deltaSize = deltaSize;
|
|
24
|
+
}
|
|
25
|
+
destroy() {
|
|
26
|
+
this._resizeObserver.disconnect();
|
|
27
|
+
}
|
|
28
|
+
handleResize(entries) {
|
|
29
|
+
if (!entries || entries.length === 0) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const resizeItem = entries[0];
|
|
33
|
+
const contentRect = resizeItem.contentRect;
|
|
34
|
+
if (this.isChangedSize(contentRect)) {
|
|
35
|
+
const children = Array.from(resizeItem.target.children);
|
|
36
|
+
this.proccessElements(contentRect[this._propSize], children);
|
|
37
|
+
this._lastContentRect = contentRect;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
isChangedSize(newContentRect) {
|
|
41
|
+
if (this._lastContentRect == undefined) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
return Math.abs(newContentRect[this._propSize] - this._lastContentRect[this._propSize]) >= this._deltaSize;
|
|
45
|
+
}
|
|
46
|
+
getPropSizeByDirection() {
|
|
47
|
+
if (OverflowDirection.HORIZONTAL === this._scrollDirection) {
|
|
48
|
+
return "width";
|
|
49
|
+
}
|
|
50
|
+
return "height";
|
|
51
|
+
}
|
|
52
|
+
proccessElements(elementSize, children) {
|
|
53
|
+
if (children.length === 0) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const childrenSize = this.calcChildrenSize(children);
|
|
57
|
+
let diff = Number((elementSize - childrenSize).toFixed(4));
|
|
58
|
+
if (diff > 0) {
|
|
59
|
+
this.proccessElementsWithoutOverFlow(diff);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
this.proccessElementsOverFlow(children, diff);
|
|
63
|
+
}
|
|
64
|
+
proccessElementsWithoutOverFlow(diff) {
|
|
65
|
+
this._hiddenItems.forEach((item) => {
|
|
66
|
+
if (item.getBoundingClientRect().width < diff) {
|
|
67
|
+
this._hiddenItems.pop();
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
this._onResize(this._hiddenItems);
|
|
71
|
+
}
|
|
72
|
+
proccessElementsOverFlow(children, diff) {
|
|
73
|
+
const elementsOverflow = [];
|
|
74
|
+
let sumRemovedItems = 0;
|
|
75
|
+
while (elementsOverflow.length < children.length && sumRemovedItems < (diff * -1)) {
|
|
76
|
+
const itemToRemove = children.pop();
|
|
77
|
+
if (itemToRemove != undefined && itemToRemove.style.display === 'none') {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (itemToRemove != undefined) {
|
|
81
|
+
elementsOverflow.push(itemToRemove);
|
|
82
|
+
sumRemovedItems += itemToRemove.getBoundingClientRect()[this._propSize];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this._hiddenItems = elementsOverflow;
|
|
86
|
+
this._onResize(elementsOverflow);
|
|
87
|
+
}
|
|
88
|
+
calcChildrenSize(children) {
|
|
89
|
+
let sumChildren = 0;
|
|
90
|
+
Array.from(children).forEach(el => {
|
|
91
|
+
sumChildren += el.getBoundingClientRect()[this._propSize];
|
|
92
|
+
sumChildren += this.calcMarginSize(el);
|
|
93
|
+
});
|
|
94
|
+
if (sumChildren > 0) {
|
|
95
|
+
sumChildren += this._deltaSize;
|
|
96
|
+
}
|
|
97
|
+
return sumChildren;
|
|
98
|
+
}
|
|
99
|
+
calcMarginSize(el) {
|
|
100
|
+
const computedStyle = getComputedStyle(el);
|
|
101
|
+
if (OverflowDirection.HORIZONTAL === this._scrollDirection) {
|
|
102
|
+
return (parseInt(computedStyle.marginLeft || '0') + parseInt(computedStyle.marginRight || '0'));
|
|
103
|
+
}
|
|
104
|
+
return (parseInt(computedStyle.marginTop || '0') + parseInt(computedStyle.marginBottom || '0'));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/OverflowWatcher/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callback que será chamado quando o overflow de um elemento for alterado.
|
|
3
|
+
*
|
|
4
|
+
* @param elementsOverFlow - Conjunto de elementos filhos que estão causando overflow no elemento pai.
|
|
5
|
+
*/
|
|
6
|
+
export type OnOverflowCallBack = (elementsOverFlow: Array<Element>) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overflow-callback.js","sourceRoot":"","sources":["../../../../src/utils/OverflowWatcher/types/overflow-callback.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Define em qual direção o overflow será observado
|
|
3
|
+
*/
|
|
4
|
+
export var OverflowDirection;
|
|
5
|
+
(function (OverflowDirection) {
|
|
6
|
+
OverflowDirection[OverflowDirection["VERTICAL"] = 0] = "VERTICAL";
|
|
7
|
+
OverflowDirection[OverflowDirection["HORIZONTAL"] = 1] = "HORIZONTAL";
|
|
8
|
+
})(OverflowDirection || (OverflowDirection = {}));
|
|
9
|
+
//# sourceMappingURL=overflow-direction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overflow-direction.js","sourceRoot":"","sources":["../../../../src/utils/OverflowWatcher/types/overflow-direction.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IACzB,iEAAU,CAAA;IACV,qEAAY,CAAA;AAChB,CAAC,EAHW,iBAAiB,KAAjB,iBAAiB,QAG5B"}
|
package/jest.config.ts
CHANGED
|
@@ -2,7 +2,7 @@ module.exports = {
|
|
|
2
2
|
transform: {'^.+\\.ts?$': 'ts-jest'},
|
|
3
3
|
testEnvironment: 'jsdom',
|
|
4
4
|
testRegex: '\\.(test|spec)?\\.(ts|tsx)$',
|
|
5
|
-
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
5
|
+
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
6
6
|
coverageThreshold: {
|
|
7
7
|
"global": {
|
|
8
8
|
"branches": 10,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sankhyalabs/core",
|
|
3
|
-
"version": "5.20.0-dev.
|
|
3
|
+
"version": "5.20.0-dev.11",
|
|
4
4
|
"description": "Modulo core JavaScript da Sankhya.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"build": "tsc",
|
|
11
11
|
"build:watch": "tsc --watch",
|
|
12
12
|
"compile": "tsc",
|
|
13
|
-
"test": "jest",
|
|
13
|
+
"test": "jest --coverage --silent --testResultsProcessor jest-sonar-reporter",
|
|
14
14
|
"coverage": "jest --coverage",
|
|
15
15
|
"serve": "es-dev-server --node-resolve --watch",
|
|
16
16
|
"eslint": "eslint src/**",
|
|
@@ -43,11 +43,18 @@
|
|
|
43
43
|
"eslint-plugin-import": "^2.26.0",
|
|
44
44
|
"husky": "^8.0.3",
|
|
45
45
|
"jest": "^29.4.1",
|
|
46
|
+
"jest-sonar-reporter": "^2.0.0",
|
|
46
47
|
"jest-environment-jsdom": "^29.4.1",
|
|
47
48
|
"ts-jest": "^29.0.5",
|
|
48
49
|
"ts-node": "^10.9.1",
|
|
49
|
-
"typedoc": "^0.
|
|
50
|
-
"typedoc-plugin-markdown": "^
|
|
50
|
+
"typedoc": "^0.25.13",
|
|
51
|
+
"typedoc-plugin-markdown": "^4.0.1",
|
|
51
52
|
"typescript": "^4.9.5"
|
|
53
|
+
},
|
|
54
|
+
"jestSonar": {
|
|
55
|
+
"sonar56x": true,
|
|
56
|
+
"reportPath": "reports",
|
|
57
|
+
"reportFile": "test-report.xml",
|
|
58
|
+
"indent": 4
|
|
52
59
|
}
|
|
53
60
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
sonar.testExecutionReportPaths=./reports/test-report.xml
|
|
2
|
+
sonar.typescript.lcov.reportPaths=./coverage/lcov.info
|
|
3
|
+
sonar.test.inclusions="**/test/*.e2e.ts","**/test/*.spec.ts","**/test/*.spec.tsx","**/utils/*.spec.ts"
|
|
4
|
+
sonar.tests=.
|
|
5
|
+
sonar.c.file.suffixes=-
|
|
6
|
+
sonar.cpp.file.suffixes=-
|
|
7
|
+
sonar.objc.file.suffixes=-
|
package/src/dataunit/DataUnit.ts
CHANGED
|
@@ -25,6 +25,7 @@ import { getFormattedValue } from "./formatting/PrettyFormatter.js";
|
|
|
25
25
|
import { v4 as uuid } from "uuid";
|
|
26
26
|
import { DataUnitStorage } from "./DataUnitStorage.js";
|
|
27
27
|
import { getInvalidFieldMessage, InvalidFieldsReducer } from "./state/slice/InvalidFieldsSlice.js";
|
|
28
|
+
import { getLoadingProperties, LoadingPropertiesReducer } from "./state/slice/LoadingProperties.js";
|
|
28
29
|
|
|
29
30
|
/***
|
|
30
31
|
* `DataUnit`: Atua como uma camada de abstração entre o back-end e a interface do usuário.
|
|
@@ -61,6 +62,7 @@ export default class DataUnit {
|
|
|
61
62
|
this._stateManager = new StateManager(
|
|
62
63
|
[
|
|
63
64
|
HistReducer,
|
|
65
|
+
LoadingPropertiesReducer,
|
|
64
66
|
UnitMetadataReducer,
|
|
65
67
|
LoadingControlReducer,
|
|
66
68
|
RecordsReducer,
|
|
@@ -114,6 +116,27 @@ export default class DataUnit {
|
|
|
114
116
|
this._interceptors = [];
|
|
115
117
|
}
|
|
116
118
|
|
|
119
|
+
/**
|
|
120
|
+
* Adiciona uma propriedade transacional que será envida aos
|
|
121
|
+
* loaders (dataLoader, saveLoader, removeLoader e recordLoader) na chamada.
|
|
122
|
+
* Essas propriedades serão limpas ao final da execução de cada método.
|
|
123
|
+
*
|
|
124
|
+
* @param name - Nome da propriedade
|
|
125
|
+
* @param value - Valor da propriedade
|
|
126
|
+
*
|
|
127
|
+
*/
|
|
128
|
+
public addGlobalLoaderProp(name: string, value: string):void{
|
|
129
|
+
this.dispatchAction(Action.LOADING_PROPERTY_ADDED, {[name]: value});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Retorna as propriedades transacionais adicionados anteriores à chamada.
|
|
134
|
+
*
|
|
135
|
+
* @returns - Todas as propriedades desde o final do último loader.
|
|
136
|
+
*/
|
|
137
|
+
public getGlobalLoaderProps(): Map<string, string>{
|
|
138
|
+
return getLoadingProperties(this._stateManager) || new Map();
|
|
139
|
+
}
|
|
117
140
|
|
|
118
141
|
public get dataUnitId(): string{
|
|
119
142
|
return this._uuid;
|
|
@@ -215,18 +238,24 @@ export default class DataUnit {
|
|
|
215
238
|
if (await this.dispatchAction(Action.LOADING_DATA, request, executionCtx)) {
|
|
216
239
|
if (this.dataLoader) {
|
|
217
240
|
this.dataLoader(this, request).then(
|
|
218
|
-
response => {
|
|
219
|
-
this.dispatchAction(
|
|
241
|
+
async response => {
|
|
242
|
+
await this.dispatchAction(
|
|
243
|
+
Action.DATA_LOADED,
|
|
244
|
+
{...response, keepSelection: request.keepSelection, filters: request.filters},
|
|
245
|
+
executionCtx
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
await this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
220
249
|
|
|
221
250
|
if(selectFirstRecord){
|
|
222
251
|
this.requestSelectFirst(executionCtx);
|
|
223
252
|
}
|
|
224
|
-
|
|
225
253
|
resolve(response);
|
|
226
254
|
}
|
|
227
255
|
).catch(error => {
|
|
228
256
|
console.error(error);
|
|
229
257
|
const {errorCode} = error;
|
|
258
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
230
259
|
fail(new ErrorException("Erro ao carregar registros", error, errorCode))
|
|
231
260
|
});
|
|
232
261
|
}
|
|
@@ -427,6 +456,7 @@ export default class DataUnit {
|
|
|
427
456
|
const changes: Array<Change> = this.getAllChangesToSave();
|
|
428
457
|
|
|
429
458
|
this.saveLoader(this, changes).then((records) => {
|
|
459
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
430
460
|
const recordsByDataUnit = this.getRecordsByDataUnit(records);
|
|
431
461
|
|
|
432
462
|
const dispatchPromisses = [];
|
|
@@ -441,9 +471,11 @@ export default class DataUnit {
|
|
|
441
471
|
Promise.all(dispatchPromisses).then(() => resolve());
|
|
442
472
|
}).catch(cause => {
|
|
443
473
|
const {errorCode} = cause;
|
|
474
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
444
475
|
fail(new ErrorException("Erro ao salvar alterações", cause, errorCode));
|
|
445
476
|
});
|
|
446
477
|
} else {
|
|
478
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
447
479
|
resolve();
|
|
448
480
|
}
|
|
449
481
|
});
|
|
@@ -532,6 +564,7 @@ export default class DataUnit {
|
|
|
532
564
|
public async removeRecords(recordIds: Array<string>, cachedRecords: Array<Record>, buffered: boolean = false, executionCtx?: ExecutionContext, silent: boolean = false): Promise<Array<string>> {
|
|
533
565
|
if (recordIds) {
|
|
534
566
|
if (buffered || !this.removeLoader) {
|
|
567
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
535
568
|
this.dispatchAction(Action.RECORDS_REMOVED, { records: recordIds, cachedRecords, buffered: true }, executionCtx);
|
|
536
569
|
} else {
|
|
537
570
|
if (await this.dispatchAction(Action.REMOVING_RECORDS, {silent}, executionCtx)) {
|
|
@@ -549,9 +582,11 @@ export default class DataUnit {
|
|
|
549
582
|
const selectionAfterRemove = [currentRecordsKeys[nextIndex]];
|
|
550
583
|
|
|
551
584
|
this.dispatchAction(Action.RECORDS_REMOVED, { records: removedIds, cachedRecords, removedIndex, buffered: false, selectionAfterRemove }, executionCtx);
|
|
585
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
552
586
|
resolve(removedIds);
|
|
553
587
|
}
|
|
554
588
|
).catch(error => {
|
|
589
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
555
590
|
const {errorCode} = error;
|
|
556
591
|
fail(new ErrorException("Erro ao remover registros", error, errorCode))
|
|
557
592
|
});
|
|
@@ -608,15 +643,14 @@ export default class DataUnit {
|
|
|
608
643
|
*
|
|
609
644
|
*/
|
|
610
645
|
public getFormattedValue(fieldName: string, value?: any): string {
|
|
611
|
-
|
|
612
646
|
const descriptor = this.getField(fieldName);
|
|
613
|
-
if (value
|
|
647
|
+
if (value === undefined) {
|
|
614
648
|
value = this.getFieldValue(fieldName);
|
|
615
649
|
} else if (typeof value === "string" && descriptor?.dataType != DataType.TEXT){
|
|
616
650
|
value = this.valueFromString(fieldName, value);
|
|
617
651
|
}
|
|
618
652
|
|
|
619
|
-
if(value
|
|
653
|
+
if(value === undefined){
|
|
620
654
|
return "";
|
|
621
655
|
}
|
|
622
656
|
|
|
@@ -1523,12 +1557,16 @@ export default class DataUnit {
|
|
|
1523
1557
|
const selection = getSelection(this._stateManager);
|
|
1524
1558
|
this.dispatchAction(Action.LOADING_RECORD, selection);
|
|
1525
1559
|
|
|
1526
|
-
if(!this.dataLoader)
|
|
1527
|
-
|
|
1560
|
+
if(!this.recordLoader || !this.dataLoader) {
|
|
1561
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
1562
|
+
return;
|
|
1563
|
+
}
|
|
1528
1564
|
|
|
1529
1565
|
this.recordLoader(this, selection).then(response => {
|
|
1530
1566
|
this.dispatchAction(Action.RECORD_LOADED, response)
|
|
1567
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
1531
1568
|
}).catch(cause => {
|
|
1569
|
+
this.dispatchAction(Action.LOADING_PROPERTIES_CLEANED);
|
|
1532
1570
|
const {errorCode} = cause;
|
|
1533
1571
|
fail(new ErrorException("Erro ao recarregar registro", cause, errorCode));
|
|
1534
1572
|
});
|
|
@@ -1693,12 +1731,21 @@ export default class DataUnit {
|
|
|
1693
1731
|
return selection?.recordIds || [];
|
|
1694
1732
|
}
|
|
1695
1733
|
|
|
1734
|
+
/**
|
|
1735
|
+
* Adiciona um campo stand-alone ao dataUnit.
|
|
1736
|
+
*
|
|
1737
|
+
* @deprecated - metodo depreciado, utilizar o metodo addField
|
|
1738
|
+
*/
|
|
1739
|
+
public addStandAloneField() : void {
|
|
1740
|
+
console.warn("metodo depreciado, para adicionar um campo standAlone, utilizar o metodo addField")
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1696
1743
|
/**
|
|
1697
1744
|
* Adiciona um campo stand-alone ao dataUnit.
|
|
1698
1745
|
*
|
|
1699
1746
|
* @param field - Campo a ser adicionado.
|
|
1700
1747
|
*/
|
|
1701
|
-
public
|
|
1748
|
+
public addField(field: Omit<FieldDescriptor, 'standAlone'>) : void {
|
|
1702
1749
|
const standAloneField = {...field, standAlone: true};
|
|
1703
1750
|
this.metadata = {...this.metadata, fields: [...this.metadata.fields, standAloneField]};
|
|
1704
1751
|
}
|
|
@@ -10,10 +10,10 @@ export const getFormattedValue = (value: any, descriptor?: FieldDescriptor) => {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
if(descriptor?.dataType === DataType.OBJECT){
|
|
13
|
-
if(Object.hasOwn(value, "value")){
|
|
13
|
+
if(value && Object.hasOwn(value, "value")){
|
|
14
14
|
return getSearchFormat(value, descriptor);
|
|
15
15
|
}
|
|
16
|
-
return value
|
|
16
|
+
return !value ? "" : value.toString();
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
if(descriptor?.userInterface === UserInterface.OPTIONSELECTOR){
|
|
@@ -79,10 +79,12 @@ const getOptionFormat = (value: any, descriptor: FieldDescriptor) => {
|
|
|
79
79
|
options = JSON.parse(prop);
|
|
80
80
|
} else {
|
|
81
81
|
options = {};
|
|
82
|
-
prop
|
|
82
|
+
if(prop != undefined){
|
|
83
|
+
prop.forEach(opt => options[opt.label] = opt.value);
|
|
84
|
+
}
|
|
83
85
|
}
|
|
84
86
|
|
|
85
|
-
if(typeof value === "object"){
|
|
87
|
+
if(value && typeof value === "object" ){
|
|
86
88
|
value = value.value
|
|
87
89
|
}
|
|
88
90
|
|
|
@@ -90,7 +92,7 @@ const getOptionFormat = (value: any, descriptor: FieldDescriptor) => {
|
|
|
90
92
|
return options[value];
|
|
91
93
|
}
|
|
92
94
|
|
|
93
|
-
return value;
|
|
95
|
+
return value ?? "";
|
|
94
96
|
}
|
|
95
97
|
|
|
96
98
|
|
|
@@ -67,7 +67,16 @@ export const getConvertedValue = (dataType: DataType, value: any): any => {
|
|
|
67
67
|
case DataType.NUMBER:
|
|
68
68
|
return value === "" || isNaN(Number(value)) ? null : Number(value);
|
|
69
69
|
case DataType.OBJECT:
|
|
70
|
-
|
|
70
|
+
//Caso de uso campo DataType do tipo STRING e UserInterface do tipo TEXT, que tem relacionamento (TGFPRO.GRUPOPIS)
|
|
71
|
+
if(typeof value === "string") {
|
|
72
|
+
try{
|
|
73
|
+
return JSON.parse(value);
|
|
74
|
+
}catch(e){
|
|
75
|
+
console.warn(`Erro ao fazer parse do valor ${value} para objeto, dataType: ${dataType}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return value;
|
|
71
80
|
case DataType.BOOLEAN:
|
|
72
81
|
if (typeof value === "string") {
|
|
73
82
|
return Boolean(value === 'true');
|
|
@@ -63,6 +63,8 @@ export enum Action{
|
|
|
63
63
|
CHILD_CHANGED = "childChanged",
|
|
64
64
|
|
|
65
65
|
FIELD_INVALIDATED = "fieldInvalidated",
|
|
66
|
-
INVALIDATE_CLEAN = "invalidateClean"
|
|
66
|
+
INVALIDATE_CLEAN = "invalidateClean",
|
|
67
67
|
|
|
68
|
+
LOADING_PROPERTY_ADDED = "loadingPropertyAdded",
|
|
69
|
+
LOADING_PROPERTIES_CLEANED = "loadingPropertiesCleaned"
|
|
68
70
|
}
|
|
@@ -94,27 +94,28 @@ export const getChangedFieldValue = (fieldName: string, record: Record, stateMan
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
export const getChangesToSave = (dataUnit: string, stateManager: StateManager): Array<Change> => {
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
|
|
99
98
|
const changes = getChanges(stateManager);
|
|
100
99
|
const selectedRecords = getSelectionRecords(stateManager) || [];
|
|
101
|
-
const records:
|
|
100
|
+
const records: Map<string, Record> = new Map(
|
|
102
101
|
getRecords(stateManager)
|
|
103
102
|
.concat(
|
|
104
|
-
selectedRecords
|
|
105
|
-
.filter(record => !isAddedRecord(record.__record__id__, stateManager)
|
|
106
|
-
)
|
|
103
|
+
selectedRecords.filter(record => !isAddedRecord(record.__record__id__, stateManager))
|
|
107
104
|
)
|
|
105
|
+
.map(r => [r.__record__id__, r])
|
|
108
106
|
);
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
|
|
108
|
+
const result: Array<Change> = [];
|
|
109
|
+
|
|
110
|
+
if(changes != undefined){
|
|
111
|
+
Array.from(changes.entries())
|
|
112
|
+
.forEach(([recordId, change]) =>{
|
|
113
|
+
const record = records.get(recordId);
|
|
114
|
+
if(record != undefined){
|
|
115
|
+
result.push(new Change(dataUnit, record, change, ChangeOperation.UPDATE, record.__record__source__id__));
|
|
115
116
|
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
118
119
|
|
|
119
120
|
const addedRecords = getAddedRecords(stateManager);
|
|
120
121
|
if (addedRecords) {
|
|
@@ -15,6 +15,8 @@ class InvalidFieldsReducerImpl implements ActionReducer{
|
|
|
15
15
|
return makeInvalid(currentState, action.payload);
|
|
16
16
|
case Action.INVALIDATE_CLEAN:
|
|
17
17
|
return clearRecord(currentState, action.payload);
|
|
18
|
+
case Action.EDITION_CANCELED:
|
|
19
|
+
return undefined;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
return currentState;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
|
|
2
|
+
import { ActionReducer, StateAction } from "../StateManager.js";
|
|
3
|
+
import { Action } from "../action/DataUnitAction.js";
|
|
4
|
+
import StateManager from "../StateManager.js";
|
|
5
|
+
|
|
6
|
+
class LoadingPropertiesImpl implements ActionReducer{
|
|
7
|
+
|
|
8
|
+
public sliceName: string = "loadingProperties";
|
|
9
|
+
|
|
10
|
+
public reduce(_stateManager:StateManager, currentState: Map<string, string>, action: StateAction): Map<string, string>|undefined {
|
|
11
|
+
switch(action.type){
|
|
12
|
+
case Action.LOADING_PROPERTY_ADDED:
|
|
13
|
+
return buildNewState(currentState, action.payload);
|
|
14
|
+
case Action.LOADING_PROPERTIES_CLEANED:
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
return currentState;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const LoadingPropertiesReducer = new LoadingPropertiesImpl();
|
|
22
|
+
|
|
23
|
+
export const getLoadingProperties = (stateManager: StateManager): Map<string, string>|undefined => {
|
|
24
|
+
return stateManager.select(LoadingPropertiesReducer.sliceName, (state: Map<string, string>) => state);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
function buildNewState(currentState: Map<string, string>, payload: any): Map<string, string>{
|
|
28
|
+
const newState = new Map(currentState);
|
|
29
|
+
if(payload != undefined){
|
|
30
|
+
for (const [key, value] of Object.entries(payload)) {
|
|
31
|
+
if(typeof key === "string" && typeof value === "string"){
|
|
32
|
+
newState.set(key, value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return newState;
|
|
37
|
+
}
|
|
@@ -17,7 +17,8 @@ class SelectionReducerImpl implements ActionReducer {
|
|
|
17
17
|
return !action.payload?.keepSelection ? undefined : currentState;
|
|
18
18
|
case Action.RECORDS_ADDED:
|
|
19
19
|
case Action.RECORDS_COPIED:
|
|
20
|
-
|
|
20
|
+
const lastSelection = currentState?.currentSelection || [];
|
|
21
|
+
return {currentSelection: action.payload.map((r: Record)=>r.__record__id__), lastSelection};
|
|
21
22
|
case Action.DATA_SAVED:
|
|
22
23
|
return {currentSelection: updateSavedIds(stateManager, action.payload.records)};
|
|
23
24
|
case Action.RECORDS_REMOVED:
|
|
@@ -67,7 +68,7 @@ class SelectionReducerImpl implements ActionReducer {
|
|
|
67
68
|
if(currentState?.lastSelection){
|
|
68
69
|
return { currentSelection: currentState.lastSelection };
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
+
return { currentSelection: [] }
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
return currentState;
|
package/src/index.ts
CHANGED
|
@@ -39,6 +39,7 @@ import { IRepositoryIndex } from "./repository/indexeddb/IRepositoryIndex.js"
|
|
|
39
39
|
import { FieldComparator } from "./dataunit/sorting/FieldComparator.js";
|
|
40
40
|
import { KeyboardManager } from "./utils/KeyboardManager/index.js";
|
|
41
41
|
import { SearchUtils } from "./utils/SearchUtils.js";
|
|
42
|
+
import OverflowWatcher, { OnOverflowCallBack, OverflowDirection } from "./utils/OverflowWatcher/index.js";
|
|
42
43
|
|
|
43
44
|
/*Classes públicas no pacote*/
|
|
44
45
|
export {
|
|
@@ -106,4 +107,7 @@ export {
|
|
|
106
107
|
defaultDataLoader,
|
|
107
108
|
KeyboardManager,
|
|
108
109
|
SearchUtils,
|
|
110
|
+
OverflowWatcher,
|
|
111
|
+
OnOverflowCallBack,
|
|
112
|
+
OverflowDirection
|
|
109
113
|
};
|