@sankhyalabs/core 0.0.0-bugfix-dev-KB-6165.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/.nojekyll +1 -0
- package/.docs/README.md +63 -0
- package/.docs/classes/ApplicationContext.md +90 -0
- package/.docs/classes/ArrayUtils.md +99 -0
- package/.docs/classes/AuthorizedServiceCaller.md +76 -0
- package/.docs/classes/Change.md +190 -0
- package/.docs/classes/DataUnit.md +2453 -0
- package/.docs/classes/DataUnitAction.md +96 -0
- package/.docs/classes/DataUnitStorage.md +116 -0
- package/.docs/classes/DateUtils.md +327 -0
- package/.docs/classes/ElementIDUtils.md +308 -0
- package/.docs/classes/ErrorException.md +214 -0
- package/.docs/classes/ErrorTracking.md +62 -0
- package/.docs/classes/FloatingManager.md +530 -0
- package/.docs/classes/HTMLBuilder.md +45 -0
- package/.docs/classes/HttpProvider.md +96 -0
- package/.docs/classes/JSUtils.md +115 -0
- package/.docs/classes/MaskFormatter-1.md +347 -0
- package/.docs/classes/NumberUtils.md +335 -0
- package/.docs/classes/ObjectUtils.md +160 -0
- package/.docs/classes/OnboardingUtils.md +126 -0
- package/.docs/classes/PromiseSync.md +91 -0
- package/.docs/classes/ReadyUtil.md +115 -0
- package/.docs/classes/RequestMetadata.md +84 -0
- package/.docs/classes/SelectionInfo.md +168 -0
- package/.docs/classes/SkwHttpProvider.md +109 -0
- package/.docs/classes/StringUtils.md +562 -0
- package/.docs/classes/TimeFormatter.md +98 -0
- package/.docs/classes/UserAgentUtils.md +58 -0
- package/.docs/classes/VersionUtils.md +42 -0
- package/.docs/classes/WaitingChangeException.md +200 -0
- package/.docs/classes/WarningException.md +214 -0
- package/.docs/enums/Action.md +294 -0
- package/.docs/enums/ChangeOperation.md +52 -0
- package/.docs/enums/DataType.md +63 -0
- package/.docs/enums/DependencyType.md +41 -0
- package/.docs/enums/SelectionMode.md +30 -0
- package/.docs/enums/SortMode.md +30 -0
- package/.docs/enums/UserInterface.md +195 -0
- package/.docs/interfaces/ChildDescriptor.md +41 -0
- package/.docs/interfaces/ChildLink.md +30 -0
- package/.docs/interfaces/DUActionInterceptor.md +29 -0
- package/.docs/interfaces/ExecutionContext.md +58 -0
- package/.docs/interfaces/FieldDescriptor.md +140 -0
- package/.docs/interfaces/Filter.md +41 -0
- package/.docs/interfaces/IElementIDInfo.md +30 -0
- package/.docs/interfaces/LoadDataRequest.md +101 -0
- package/.docs/interfaces/LoadDataResponse.md +36 -0
- package/.docs/interfaces/PageRequest.md +41 -0
- package/.docs/interfaces/PaginationInfo.md +75 -0
- package/.docs/interfaces/PromiseSyncCallback.md +39 -0
- package/.docs/interfaces/QuickFilter.md +41 -0
- package/.docs/interfaces/Record.md +62 -0
- package/.docs/interfaces/SavedRecord.md +85 -0
- package/.docs/interfaces/Sort.md +41 -0
- package/.docs/interfaces/SortingProvider.md +29 -0
- package/.docs/interfaces/UnitMetadata.md +52 -0
- package/.docs/interfaces/WaitingChange.md +41 -0
- package/.docs/modules/MaskFormatter.md +37 -0
- package/.docs/modules.md +74 -0
- package/.docs/package.json +15 -0
- package/.eslintignore +2 -0
- package/.eslintrc.cjs +35 -0
- package/.husky/commit-msg +4 -0
- package/.releaserc +58 -0
- package/README.md +62 -0
- package/commitlint.config.cjs +14 -0
- package/dist/async/PromiseSync.d.ts +29 -0
- package/dist/async/PromiseSync.js +31 -0
- package/dist/async/PromiseSync.js.map +1 -0
- package/dist/dataunit/DataUnit.d.ts +924 -0
- package/dist/dataunit/DataUnit.js +1621 -0
- package/dist/dataunit/DataUnit.js.map +1 -0
- package/dist/dataunit/DataUnitStorage.d.ts +24 -0
- package/dist/dataunit/DataUnitStorage.js +39 -0
- package/dist/dataunit/DataUnitStorage.js.map +1 -0
- package/dist/dataunit/formatting/PrettyFormatter.d.ts +2 -0
- package/dist/dataunit/formatting/PrettyFormatter.js +94 -0
- package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -0
- package/dist/dataunit/loading/LoadDataRequest.d.ts +19 -0
- package/dist/dataunit/loading/LoadDataRequest.js +2 -0
- package/dist/dataunit/loading/LoadDataRequest.js.map +1 -0
- package/dist/dataunit/loading/LoadDataResponse.d.ts +9 -0
- package/dist/dataunit/loading/LoadDataResponse.js +2 -0
- package/dist/dataunit/loading/LoadDataResponse.js.map +1 -0
- package/dist/dataunit/loading/PaginationInfo.d.ts +13 -0
- package/dist/dataunit/loading/PaginationInfo.js +2 -0
- package/dist/dataunit/loading/PaginationInfo.js.map +1 -0
- package/dist/dataunit/metadata/DataType.d.ts +54 -0
- package/dist/dataunit/metadata/DataType.js +124 -0
- package/dist/dataunit/metadata/DataType.js.map +1 -0
- package/dist/dataunit/metadata/UnitMetadata.d.ts +88 -0
- package/dist/dataunit/metadata/UnitMetadata.js +36 -0
- package/dist/dataunit/metadata/UnitMetadata.js.map +1 -0
- package/dist/dataunit/state/HistReducer.d.ts +10 -0
- package/dist/dataunit/state/HistReducer.js +28 -0
- package/dist/dataunit/state/HistReducer.js.map +1 -0
- package/dist/dataunit/state/StateManager.d.ts +57 -0
- package/dist/dataunit/state/StateManager.js +97 -0
- package/dist/dataunit/state/StateManager.js.map +1 -0
- package/dist/dataunit/state/action/DataUnitAction.d.ts +40 -0
- package/dist/dataunit/state/action/DataUnitAction.js +42 -0
- package/dist/dataunit/state/action/DataUnitAction.js.map +1 -0
- package/dist/dataunit/state/slice/AddedRecordsSlice.d.ts +12 -0
- package/dist/dataunit/state/slice/AddedRecordsSlice.js +30 -0
- package/dist/dataunit/state/slice/AddedRecordsSlice.js.map +1 -0
- package/dist/dataunit/state/slice/ChangesSlice.d.ts +13 -0
- package/dist/dataunit/state/slice/ChangesSlice.js +105 -0
- package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -0
- 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/dist/dataunit/state/slice/LoadingControlSlice.d.ts +19 -0
- package/dist/dataunit/state/slice/LoadingControlSlice.js +45 -0
- package/dist/dataunit/state/slice/LoadingControlSlice.js.map +1 -0
- package/dist/dataunit/state/slice/RecordsSlice.d.ts +11 -0
- package/dist/dataunit/state/slice/RecordsSlice.js +62 -0
- package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -0
- package/dist/dataunit/state/slice/RemovedRecordsSlice.d.ts +9 -0
- package/dist/dataunit/state/slice/RemovedRecordsSlice.js +25 -0
- package/dist/dataunit/state/slice/RemovedRecordsSlice.js.map +1 -0
- package/dist/dataunit/state/slice/SelectionSlice.d.ts +19 -0
- package/dist/dataunit/state/slice/SelectionSlice.js +155 -0
- package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -0
- package/dist/dataunit/state/slice/SnapshotSlice.d.ts +19 -0
- package/dist/dataunit/state/slice/SnapshotSlice.js +106 -0
- package/dist/dataunit/state/slice/SnapshotSlice.js.map +1 -0
- package/dist/dataunit/state/slice/UnitMetadataSlice.d.ts +11 -0
- package/dist/dataunit/state/slice/UnitMetadataSlice.js +21 -0
- package/dist/dataunit/state/slice/UnitMetadataSlice.js.map +1 -0
- package/dist/dataunit/state/slice/WaitingChangesSlice.d.ts +12 -0
- package/dist/dataunit/state/slice/WaitingChangesSlice.js +56 -0
- package/dist/dataunit/state/slice/WaitingChangesSlice.js.map +1 -0
- package/dist/exceptions/ErrorException.d.ts +14 -0
- package/dist/exceptions/ErrorException.js +13 -0
- package/dist/exceptions/ErrorException.js.map +1 -0
- package/dist/exceptions/WaitingChangeException.d.ts +12 -0
- package/dist/exceptions/WaitingChangeException.js +12 -0
- package/dist/exceptions/WaitingChangeException.js.map +1 -0
- package/dist/exceptions/WarningException.d.ts +14 -0
- package/dist/exceptions/WarningException.js +13 -0
- package/dist/exceptions/WarningException.js.map +1 -0
- package/dist/html/HTMLBuilder.d.ts +3 -0
- package/dist/html/HTMLBuilder.js +9 -0
- package/dist/html/HTMLBuilder.js.map +1 -0
- package/dist/http/AuthorizedServiceCaller.d.ts +11 -0
- package/dist/http/AuthorizedServiceCaller.js +54 -0
- package/dist/http/AuthorizedServiceCaller.js.map +1 -0
- package/dist/http/HttpProvider.d.ts +25 -0
- package/dist/http/HttpProvider.js +74 -0
- package/dist/http/HttpProvider.js.map +1 -0
- package/dist/http/RequestMetadata.d.ts +30 -0
- package/dist/http/RequestMetadata.js +25 -0
- package/dist/http/RequestMetadata.js.map +1 -0
- package/dist/http/SkwHttpProvider.d.ts +9 -0
- package/dist/http/SkwHttpProvider.js +67 -0
- package/dist/http/SkwHttpProvider.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/traking/ErrorTraking.d.ts +19 -0
- package/dist/traking/ErrorTraking.js +34 -0
- package/dist/traking/ErrorTraking.js.map +1 -0
- package/dist/ui/FloatingManager.d.ts +164 -0
- package/dist/ui/FloatingManager.js +358 -0
- package/dist/ui/FloatingManager.js.map +1 -0
- package/dist/utils/ApplicationContext.d.ts +26 -0
- package/dist/utils/ApplicationContext.js +38 -0
- package/dist/utils/ApplicationContext.js.map +1 -0
- package/dist/utils/ArrayUtils.d.ts +29 -0
- package/dist/utils/ArrayUtils.js +57 -0
- package/dist/utils/ArrayUtils.js.map +1 -0
- package/dist/utils/CriteriaModel.d.ts +107 -0
- package/dist/utils/CriteriaModel.js +172 -0
- package/dist/utils/CriteriaModel.js.map +1 -0
- package/dist/utils/CriteriaParameter.d.ts +69 -0
- package/dist/utils/CriteriaParameter.js +83 -0
- package/dist/utils/CriteriaParameter.js.map +1 -0
- package/dist/utils/DateUtils.d.ts +97 -0
- package/dist/utils/DateUtils.js +171 -0
- package/dist/utils/DateUtils.js.map +1 -0
- package/dist/utils/ElementIDUtils.d.ts +72 -0
- package/dist/utils/ElementIDUtils.js +161 -0
- package/dist/utils/ElementIDUtils.js.map +1 -0
- package/dist/utils/JSUtils.d.ts +36 -0
- package/dist/utils/JSUtils.js +66 -0
- package/dist/utils/JSUtils.js.map +1 -0
- package/dist/utils/MaskFormatter.d.ts +148 -0
- package/dist/utils/MaskFormatter.js +356 -0
- package/dist/utils/MaskFormatter.js.map +1 -0
- package/dist/utils/NumberUtils.d.ts +127 -0
- package/dist/utils/NumberUtils.js +245 -0
- package/dist/utils/NumberUtils.js.map +1 -0
- package/dist/utils/ObjectUtils.d.ts +47 -0
- package/dist/utils/ObjectUtils.js +68 -0
- package/dist/utils/ObjectUtils.js.map +1 -0
- package/dist/utils/OnboardingUtils.d.ts +17 -0
- package/dist/utils/OnboardingUtils.js +41 -0
- package/dist/utils/OnboardingUtils.js.map +1 -0
- package/dist/utils/ReadyUtil.d.ts +24 -0
- package/dist/utils/ReadyUtil.js +41 -0
- package/dist/utils/ReadyUtil.js.map +1 -0
- package/dist/utils/StringUtils.d.ts +167 -0
- package/dist/utils/StringUtils.js +328 -0
- package/dist/utils/StringUtils.js.map +1 -0
- package/dist/utils/TimeFormatter.d.ts +33 -0
- package/dist/utils/TimeFormatter.js +98 -0
- package/dist/utils/TimeFormatter.js.map +1 -0
- package/dist/utils/UserAgentUtils/index.d.ts +15 -0
- package/dist/utils/UserAgentUtils/index.js +48 -0
- package/dist/utils/UserAgentUtils/index.js.map +1 -0
- package/dist/utils/UserAgentUtils/navigatorAgentList.d.ts +17 -0
- package/dist/utils/UserAgentUtils/navigatorAgentList.js +40 -0
- package/dist/utils/UserAgentUtils/navigatorAgentList.js.map +1 -0
- package/dist/utils/VersionUtils.d.ts +7 -0
- package/dist/utils/VersionUtils.js +31 -0
- package/dist/utils/VersionUtils.js.map +1 -0
- package/jest.config.ts +17 -0
- package/mock/http/XMLHttpRequest-mock.js +26 -0
- package/package.json +52 -0
- package/scripts/runlink.bat +1 -0
- package/scripts/runlink.sh +1 -0
- package/src/async/PromiseSync.ts +49 -0
- package/src/dataunit/DataUnit.ts +1835 -0
- package/src/dataunit/DataUnitStorage.ts +43 -0
- package/src/dataunit/formatting/PrettyFormatter.ts +113 -0
- package/src/dataunit/loading/LoadDataRequest.ts +26 -0
- package/src/dataunit/loading/LoadDataResponse.ts +11 -0
- package/src/dataunit/loading/PaginationInfo.ts +18 -0
- package/src/dataunit/metadata/DataType.ts +127 -0
- package/src/dataunit/metadata/UnitMetadata.ts +102 -0
- package/src/dataunit/state/HistReducer.ts +34 -0
- package/src/dataunit/state/StateManager.ts +142 -0
- package/src/dataunit/state/action/DataUnitAction.ts +67 -0
- package/src/dataunit/state/slice/AddedRecordsSlice.ts +48 -0
- package/src/dataunit/state/slice/ChangesSlice.ts +125 -0
- package/src/dataunit/state/slice/InvalidFieldsSlice.ts +85 -0
- package/src/dataunit/state/slice/LoadingControlSlice.ts +60 -0
- package/src/dataunit/state/slice/RecordsSlice.ts +74 -0
- package/src/dataunit/state/slice/RemovedRecordsSlice.ts +30 -0
- package/src/dataunit/state/slice/SelectionSlice.ts +193 -0
- package/src/dataunit/state/slice/SnapshotSlice.ts +139 -0
- package/src/dataunit/state/slice/UnitMetadataSlice.ts +30 -0
- package/src/dataunit/state/slice/WaitingChangesSlice.ts +74 -0
- package/src/exceptions/ErrorException.ts +25 -0
- package/src/exceptions/WaitingChangeException.ts +21 -0
- package/src/exceptions/WarningException.ts +26 -0
- package/src/html/HTMLBuilder.ts +8 -0
- package/src/http/AuthorizedServiceCaller.ts +58 -0
- package/src/http/HttpProvider.ts +94 -0
- package/src/http/RequestMetadata.ts +42 -0
- package/src/http/SkwHttpProvider.ts +78 -0
- package/src/index.ts +93 -0
- package/src/traking/ErrorTraking.ts +37 -0
- package/src/ui/FloatingManager.ts +417 -0
- package/src/utils/ApplicationContext.ts +42 -0
- package/src/utils/ArrayUtils.ts +61 -0
- package/src/utils/CriteriaModel.ts +205 -0
- package/src/utils/CriteriaParameter.ts +108 -0
- package/src/utils/DateUtils.ts +195 -0
- package/src/utils/ElementIDUtils.ts +184 -0
- package/src/utils/JSUtils.ts +69 -0
- package/src/utils/MaskFormatter.ts +407 -0
- package/src/utils/NumberUtils.ts +283 -0
- package/src/utils/ObjectUtils.ts +76 -0
- package/src/utils/OnboardingUtils.ts +46 -0
- package/src/utils/ReadyUtil.ts +45 -0
- package/src/utils/StringUtils.ts +359 -0
- package/src/utils/TimeFormatter.ts +98 -0
- package/src/utils/UserAgentUtils/index.ts +62 -0
- package/src/utils/UserAgentUtils/navigatorAgentList.ts +39 -0
- package/src/utils/VersionUtils.ts +37 -0
- package/test/http/HttpProvider.spec.ts +35 -0
- package/test/http/SkwHttpProvider.ts.spec.ts +34 -0
- package/test/util/CriteriaModel.spec.ts +232 -0
- package/test/util/CriteriaParameter.spec.ts +52 -0
- package/test/util/DataUnitStorage.spec.ts +63 -0
- package/test/util/ElementIDUtils.spec.ts +272 -0
- package/test/util/MaskFormatter.spec.ts +138 -0
- package/test/util/NumberUtils.spec.ts +182 -0
- package/test/util/StringUtils.spec.ts +51 -0
- package/test/util/TimeFormatter.spec.ts +26 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { v4 as uuid } from "uuid"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Classe com utiliários comuns para funções genéricas em JavaScript.
|
|
5
|
+
*/
|
|
6
|
+
export class JSUtils{
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Método responsável em criar um timer para processar uma determinada função.
|
|
10
|
+
*
|
|
11
|
+
* @param callback - Função de callback para processar após o timer.
|
|
12
|
+
* @param timeout - Valor dos milissegundos desejados para processar a função (o padrão é 300).
|
|
13
|
+
*
|
|
14
|
+
* @returns - Retorna um método com controle de timer para processar a função de callback.
|
|
15
|
+
*/
|
|
16
|
+
public static debounce(callback: any, timeout: number = 300): any {
|
|
17
|
+
let timer: any;
|
|
18
|
+
return (...args: any) => {
|
|
19
|
+
clearTimeout(timer);
|
|
20
|
+
timer = setTimeout(() => { callback.apply(this, args); }, timeout);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Método responsável em validar se um elemento HTML está com o ellipsis ativo.
|
|
26
|
+
*
|
|
27
|
+
* @param element - Elemento HTML que será verificado.
|
|
28
|
+
*
|
|
29
|
+
* @returns - Retorna um valor booleando informando se o elemento está com o ellipsis ativo.
|
|
30
|
+
*/
|
|
31
|
+
public static isEllipsisActive(element: HTMLElement | any): boolean {
|
|
32
|
+
if (element == undefined) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (element.clientWidth < element.scrollWidth) {
|
|
37
|
+
const style = element.currentStyle || window.getComputedStyle(element);
|
|
38
|
+
return style?.textOverflow === 'ellipsis';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Método que verifica se uma string está encodada com base64.
|
|
46
|
+
*
|
|
47
|
+
* @param str - String que será verificada.
|
|
48
|
+
*
|
|
49
|
+
* @returns - Retorna um valor booleando informando se a string está encodada com base64.
|
|
50
|
+
*/
|
|
51
|
+
public static isBase64(str: string): boolean {
|
|
52
|
+
str = (str || '').replaceAll("\n", "");
|
|
53
|
+
if (str === '' || str.trim() === ''){ return false; }
|
|
54
|
+
try {
|
|
55
|
+
return window.btoa(window.atob(str)) == str;
|
|
56
|
+
} catch (err) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Método responsável em gerar um UUID.
|
|
63
|
+
*
|
|
64
|
+
* @returns - Retorna um UUID.
|
|
65
|
+
*/
|
|
66
|
+
public static generateUUID(): string {
|
|
67
|
+
return uuid();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `MaskFormatter` é usado para formatar strings. Seu comportamento
|
|
3
|
+
* é controlado pelo formato do atributo `mask` que especifica quais
|
|
4
|
+
* caracteres são válidos e onde devem estar posicionados, intercalando-os
|
|
5
|
+
* com eventuais caracteres literais expressados no padrão informado.
|
|
6
|
+
* Sua implementação é inspirada pela implementação em Java do [MaskFormatter](https://docs.oracle.com/javase/7/docs/api/javax/swing/text/MaskFormatter.html).
|
|
7
|
+
*
|
|
8
|
+
* Para o padrão da máscara podem ser usados os seguintes caracteres especiais:
|
|
9
|
+
*
|
|
10
|
+
* | Caractere | Comportamento |
|
|
11
|
+
* |:---------:|-------------------------------------------------------------------------------------------------------------|
|
|
12
|
+
* | # | Qualquer número |
|
|
13
|
+
* | ' | "Escapa" o caractere que vem na sequência. Útil quando desejamos converter um caractere especial em literal.|
|
|
14
|
+
* | U | Qualquer letra. Transforma letras minúsculas em maiúsculas. |
|
|
15
|
+
* | L | Qualquer letra. Transforma letras maiúsculas em minúsculas. |
|
|
16
|
+
* | A | Qualquer letra ou número. |
|
|
17
|
+
* | ? | Qualquer letra. Preserva maiúsculas e minúsculas. |
|
|
18
|
+
* | * | Qualquer caractere. |
|
|
19
|
+
*
|
|
20
|
+
* Os demais caracteres presentes no padrão serão tratados como literais, isto é,
|
|
21
|
+
* serão apenas inseridos naquela posição.
|
|
22
|
+
*
|
|
23
|
+
* Quando o valor a ser formatado é menor que a máscara, um 'placeHolder'
|
|
24
|
+
* será inserido em cada posição ausente, completando a formatação.
|
|
25
|
+
* Por padrão será usado um espaço em branco como 'placeHolder', mas
|
|
26
|
+
* esse valor pode ser alterado.
|
|
27
|
+
*
|
|
28
|
+
* Por exemplo:
|
|
29
|
+
* '''
|
|
30
|
+
* const formatter: MaskFormatter = new MaskFormatter("###-####");
|
|
31
|
+
* formatter.placeholder = '_';
|
|
32
|
+
* console.log(formatter.format("123"));
|
|
33
|
+
* '''
|
|
34
|
+
* resultaria na string '123-____'.
|
|
35
|
+
*
|
|
36
|
+
* ##Veja mais alguns exemplos:
|
|
37
|
+
* |Padrão |Máscara |Entrada |Saída |
|
|
38
|
+
* |----------------|------------------|--------------|------------------|
|
|
39
|
+
* |Telefone |(##) ####-#### |3432192515 |(34) 3219-2515 |
|
|
40
|
+
* |CPF |###.###.###-## |12345678901 |123.456.789-01 |
|
|
41
|
+
* |CNPJ |##.###.###/####-##|12345678901234|12.345.678/9012-34|
|
|
42
|
+
* |CEP |##.###-### |12345678 |12.345-678 |
|
|
43
|
+
* |PLACA (veículo) |UUU-#### |abc1234 |ABC-1234 |
|
|
44
|
+
* |Cor RGB |'#AAAAAA |00000F0 |#0000F0 |
|
|
45
|
+
*
|
|
46
|
+
*/
|
|
47
|
+
export class MaskFormatter {
|
|
48
|
+
|
|
49
|
+
private static DIGIT_KEY: string = "#";
|
|
50
|
+
private static LITERAL_KEY: string = "'";
|
|
51
|
+
private static UPPERCASE_KEY: string = "U";
|
|
52
|
+
private static LOWERCASE_KEY: string = "L";
|
|
53
|
+
private static ALPHA_NUMERIC_KEY: string = "A";
|
|
54
|
+
private static CHARACTER_KEY: string = "?";
|
|
55
|
+
private static ANYTHING_KEY: string = "*";
|
|
56
|
+
|
|
57
|
+
public static DEFAULT_MASKS: any = {
|
|
58
|
+
"cnpj": "##.###.###/####-##",
|
|
59
|
+
"cpf": "###.###.###-##",
|
|
60
|
+
"phone": "(##) ####-####",
|
|
61
|
+
"cep": "##.###-###"
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
private _mask: string = '';
|
|
66
|
+
private _maskChars: Array<MaskFormatter.MaskCharacter> = new Array<MaskFormatter.MaskCharacter>();
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Determina qual caractere será usado dos caracteres não presentes no valor,
|
|
70
|
+
* ou seja, aqueles que o usuário ainda não informou. Por padrão usamos um espaço.
|
|
71
|
+
*/
|
|
72
|
+
public placeholder: string = ' ';
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Setter para mask. Trata-se do padrão que se espera ao formatar o texto.
|
|
76
|
+
*/
|
|
77
|
+
public set mask(mask: string) {
|
|
78
|
+
this._mask = mask;
|
|
79
|
+
this.updateInternalMask();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Getter para mask.
|
|
84
|
+
*
|
|
85
|
+
* @return A última máscara informada.
|
|
86
|
+
*/
|
|
87
|
+
public get mask(): string {
|
|
88
|
+
return this._mask;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
constructor(mask: string) {
|
|
92
|
+
this.mask = mask;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Formata a string passada baseada na máscara definda pelo atributo mask.
|
|
97
|
+
*
|
|
98
|
+
* @param value Valor a ser formatado.
|
|
99
|
+
* @return O valor processado de acordo com o padrão.
|
|
100
|
+
*/
|
|
101
|
+
public format(value: string): string {
|
|
102
|
+
let result: string = '';
|
|
103
|
+
const index: Array<number> = [0];
|
|
104
|
+
|
|
105
|
+
let counter: number = 0;
|
|
106
|
+
const maxCounter: number = this._maskChars.length;
|
|
107
|
+
while (counter < maxCounter) {
|
|
108
|
+
result = this._maskChars[counter].append(result, value, index);
|
|
109
|
+
counter++;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Prepara a formatação internamente de acordo com o padrão.
|
|
117
|
+
*/
|
|
118
|
+
private updateInternalMask(): void {
|
|
119
|
+
|
|
120
|
+
this._maskChars.length = 0;
|
|
121
|
+
|
|
122
|
+
if (this.mask != null) {
|
|
123
|
+
let counter: number = 0;
|
|
124
|
+
const maxCounter: number = this.mask.length;
|
|
125
|
+
while (counter < maxCounter) {
|
|
126
|
+
|
|
127
|
+
let maskChar: string = this.mask.charAt(counter);
|
|
128
|
+
|
|
129
|
+
switch (maskChar) {
|
|
130
|
+
case MaskFormatter.DIGIT_KEY:
|
|
131
|
+
this._maskChars.push(new MaskFormatter.DigitMaskCharacter(this, maskChar));
|
|
132
|
+
break;
|
|
133
|
+
case MaskFormatter.LITERAL_KEY:
|
|
134
|
+
if (++counter < maxCounter) {
|
|
135
|
+
maskChar = this.mask.charAt(counter);
|
|
136
|
+
this._maskChars.push(new MaskFormatter.LiteralCharacter(this, maskChar));
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
139
|
+
case MaskFormatter.UPPERCASE_KEY:
|
|
140
|
+
this._maskChars.push(new MaskFormatter.UpperCaseCharacter(this, maskChar));
|
|
141
|
+
break;
|
|
142
|
+
case MaskFormatter.LOWERCASE_KEY:
|
|
143
|
+
this._maskChars.push(new MaskFormatter.LowerCaseCharacter(this, maskChar));
|
|
144
|
+
break;
|
|
145
|
+
case MaskFormatter.ALPHA_NUMERIC_KEY:
|
|
146
|
+
this._maskChars.push(new MaskFormatter.AlphaNumericCharacter(this, maskChar));
|
|
147
|
+
break;
|
|
148
|
+
case MaskFormatter.CHARACTER_KEY:
|
|
149
|
+
this._maskChars.push(new MaskFormatter.CharCharacter(this, maskChar));
|
|
150
|
+
break;
|
|
151
|
+
case MaskFormatter.ANYTHING_KEY:
|
|
152
|
+
this._maskChars.push(new MaskFormatter.MaskCharacter(this, maskChar));
|
|
153
|
+
break;
|
|
154
|
+
default:
|
|
155
|
+
this._maskChars.push(new MaskFormatter.LiteralCharacter(this, maskChar));
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
counter++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
//
|
|
164
|
+
// Classes internas usadas para representar a máscara.
|
|
165
|
+
//
|
|
166
|
+
public static MaskCharacter = class {
|
|
167
|
+
|
|
168
|
+
public maskFormatter: MaskFormatter;
|
|
169
|
+
public type: string;
|
|
170
|
+
|
|
171
|
+
constructor(maskFormatter: MaskFormatter, type: string) {
|
|
172
|
+
this.maskFormatter = maskFormatter;
|
|
173
|
+
this.type = type;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Cada subclasse deve sobrescrever retornando true caso represente.
|
|
177
|
+
* um caractere literal. Por padrão o retorno é false.
|
|
178
|
+
*/
|
|
179
|
+
public isLiteral(): boolean {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Retorna se é um texto válido.
|
|
185
|
+
*
|
|
186
|
+
* @param aChar - Valor a ser validado.
|
|
187
|
+
* @returns - Retorna se é um texto válido.
|
|
188
|
+
*/
|
|
189
|
+
public isValidCharacter(aChar: string): boolean {
|
|
190
|
+
if (this.isLiteral()) {
|
|
191
|
+
return (this.getChar(aChar) == aChar);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
aChar = this.getChar(aChar);
|
|
195
|
+
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Retorna o texto informado.
|
|
201
|
+
*
|
|
202
|
+
* @param aChar - Texto a ser retornado.
|
|
203
|
+
* @returns - Texto informado.
|
|
204
|
+
*/
|
|
205
|
+
public getChar(aChar: string): string {
|
|
206
|
+
return aChar;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Adiciona valor encontrado.
|
|
211
|
+
*
|
|
212
|
+
* @param result - String a ser manipulada.
|
|
213
|
+
* @param formatting - String de formatação a ser adicionada na result.
|
|
214
|
+
* @param index - Índice que será utilizado para buscar no parâmetro formatting.
|
|
215
|
+
*
|
|
216
|
+
* @returns - Valor passado na result incrementado com o valor encontrado na formatting.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ``` const result = "";
|
|
220
|
+
* const formatting = "123456";
|
|
221
|
+
* const index = [0];
|
|
222
|
+
* const returnedResult = append(result, formatting, index);
|
|
223
|
+
* ```
|
|
224
|
+
* Retorna:
|
|
225
|
+
* ```returnedResult = "1";
|
|
226
|
+
* index = [1];
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
public append(result: string, formatting: string, index: Array<number>): string {
|
|
230
|
+
|
|
231
|
+
const inString: boolean = index[0] < formatting.length;
|
|
232
|
+
const aChar: string = inString ? formatting.charAt(index[0]) : '';
|
|
233
|
+
|
|
234
|
+
if (this.isLiteral()) {
|
|
235
|
+
const literal: string = this.getChar(aChar);
|
|
236
|
+
result += literal;
|
|
237
|
+
if(literal === aChar){
|
|
238
|
+
index[0] = index[0] + 1;
|
|
239
|
+
}
|
|
240
|
+
} else if (index[0] >= formatting.length) {
|
|
241
|
+
result += this.maskFormatter.placeholder;
|
|
242
|
+
index[0] = index[0] + 1;
|
|
243
|
+
} else if (this.isValidCharacter(aChar)) {
|
|
244
|
+
result += this.getChar(aChar);
|
|
245
|
+
index[0] = index[0] + 1;
|
|
246
|
+
} else {
|
|
247
|
+
throw new Error(`Valor inválido: "${aChar}". Na posição ${index[0] + 1} espera-se ${this.getFormatMessage()}.`);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Obtém tipo por extenso.
|
|
255
|
+
*
|
|
256
|
+
* @returns O tipo por extenso.
|
|
257
|
+
* @example
|
|
258
|
+
* Se o tipo for **ALPHA_NUMERIC_KEY** recebo **uma letra ou um número**
|
|
259
|
+
*/
|
|
260
|
+
public getFormatMessage(): string{
|
|
261
|
+
let message: string;
|
|
262
|
+
switch(this.type){
|
|
263
|
+
case MaskFormatter.UPPERCASE_KEY:
|
|
264
|
+
case MaskFormatter.LOWERCASE_KEY:
|
|
265
|
+
case MaskFormatter.CHARACTER_KEY:
|
|
266
|
+
message = 'uma letra';
|
|
267
|
+
break;
|
|
268
|
+
case MaskFormatter.DIGIT_KEY:
|
|
269
|
+
message = 'um número';
|
|
270
|
+
break;
|
|
271
|
+
case MaskFormatter.ALPHA_NUMERIC_KEY:
|
|
272
|
+
message = 'uma letra ou um número';
|
|
273
|
+
break;
|
|
274
|
+
default:
|
|
275
|
+
message = ''
|
|
276
|
+
}
|
|
277
|
+
return message;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
private static LiteralCharacter = class extends MaskFormatter.MaskCharacter {
|
|
282
|
+
|
|
283
|
+
private _fixedChar: string;
|
|
284
|
+
|
|
285
|
+
constructor(maskFormatter: MaskFormatter, fixedChar: string) {
|
|
286
|
+
super(maskFormatter, fixedChar);
|
|
287
|
+
this._fixedChar = fixedChar;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
public isLiteral(): boolean {
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
public getChar(aChar: string): string {
|
|
295
|
+
aChar;
|
|
296
|
+
return this._fixedChar;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
private static DigitMaskCharacter = class extends MaskFormatter.MaskCharacter {
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Valida se o caracter é válido.
|
|
304
|
+
*
|
|
305
|
+
* @param aChar - Caracter a ser validado.
|
|
306
|
+
* @returns - Se o caracter é valido ou não.
|
|
307
|
+
*/
|
|
308
|
+
public isValidCharacter(aChar: string): boolean {
|
|
309
|
+
return (this.isDigit(aChar) && super.isValidCharacter(aChar));
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Valida se é um numéro.
|
|
314
|
+
*
|
|
315
|
+
* @param char - String a ser verificada.
|
|
316
|
+
* @returns - Verdadeiro para caracteres numéricos.
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* ```Informado: "8" | Retorno: true ```
|
|
320
|
+
* @example
|
|
321
|
+
* ```Informado: "A" | Retorno: false ```
|
|
322
|
+
*/
|
|
323
|
+
private isDigit(char: string): boolean {
|
|
324
|
+
return char >= '0' && char <= '9'
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
private static UpperCaseCharacter = class extends MaskFormatter.MaskCharacter {
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Valida se a string é uma letra do alfabeto (a-z).
|
|
333
|
+
*
|
|
334
|
+
* @param aChar - String passada para validação.
|
|
335
|
+
* @returns - Verdadeiro se a string passada for uma letra do alfabeto.
|
|
336
|
+
*/
|
|
337
|
+
public isValidCharacter(aChar: string): boolean {
|
|
338
|
+
return (/[a-z]/i.test(aChar) && super.isValidCharacter(aChar));
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Obtém a string passada em maiúscula.
|
|
343
|
+
*
|
|
344
|
+
* @param aChar - String passada para validação.
|
|
345
|
+
* @returns - O caracter passado em letra maiúscula.
|
|
346
|
+
*/
|
|
347
|
+
public getChar(aChar: string): string {
|
|
348
|
+
return aChar.toUpperCase();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
private static LowerCaseCharacter = class extends MaskFormatter.MaskCharacter {
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Valida se a string é uma letra do alfabeto (a-z).
|
|
356
|
+
*
|
|
357
|
+
* @param aChar - String passada para validação.
|
|
358
|
+
* @returns - Verdadeiro se a string passada for uma letra do alfabeto.
|
|
359
|
+
*/
|
|
360
|
+
public isValidCharacter(aChar: string): boolean {
|
|
361
|
+
return (/[a-z]/i.test(aChar) && super.isValidCharacter(aChar));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Obtém a string passada em minúscula.
|
|
366
|
+
*
|
|
367
|
+
* @param aChar - String passada para validação.
|
|
368
|
+
* @returns - O caracter passado em letra minúscula.
|
|
369
|
+
*/
|
|
370
|
+
public getChar(aChar: string): string {
|
|
371
|
+
return aChar.toLocaleLowerCase();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
private static AlphaNumericCharacter = class extends MaskFormatter.MaskCharacter {
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Valida se a string é uma letra do alfabeto (a-z) ou um numero entre zero e nove.
|
|
379
|
+
*
|
|
380
|
+
* @param aChar - String passada para validação.
|
|
381
|
+
* @returns - Verdadeiro se a string passada for uma letra do alfabeto ou um numeral (de 0 a 9).
|
|
382
|
+
*/
|
|
383
|
+
public isValidCharacter(aChar: string): boolean {
|
|
384
|
+
//FIXME: talvez seja problema usar regex aqui... avaliar se existe forma mais barata.
|
|
385
|
+
return (/[a-z0-9]/i.test(aChar)) && super.isValidCharacter(aChar);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
private static CharCharacter = class extends MaskFormatter.MaskCharacter {
|
|
390
|
+
/**
|
|
391
|
+
* Valida se a string é uma letra do alfabeto (a-z).
|
|
392
|
+
*
|
|
393
|
+
* @param aChar - String passada para validação.
|
|
394
|
+
* @returns - Verdadeiro se a string passada for uma letra do alfabeto.
|
|
395
|
+
*/
|
|
396
|
+
public isValidCharacter(aChar: string): boolean {
|
|
397
|
+
//FIXME: talvez seja problema usar regex aqui... avaliar se existe forma mais barata
|
|
398
|
+
return (/[a-z]/i.test(aChar) && super.isValidCharacter(aChar));
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
export namespace MaskFormatter {
|
|
406
|
+
export type MaskCharacter = InstanceType<typeof MaskFormatter.MaskCharacter>;
|
|
407
|
+
}
|