@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.
Files changed (283) hide show
  1. package/.docs/.nojekyll +1 -0
  2. package/.docs/README.md +63 -0
  3. package/.docs/classes/ApplicationContext.md +90 -0
  4. package/.docs/classes/ArrayUtils.md +99 -0
  5. package/.docs/classes/AuthorizedServiceCaller.md +76 -0
  6. package/.docs/classes/Change.md +190 -0
  7. package/.docs/classes/DataUnit.md +2453 -0
  8. package/.docs/classes/DataUnitAction.md +96 -0
  9. package/.docs/classes/DataUnitStorage.md +116 -0
  10. package/.docs/classes/DateUtils.md +327 -0
  11. package/.docs/classes/ElementIDUtils.md +308 -0
  12. package/.docs/classes/ErrorException.md +214 -0
  13. package/.docs/classes/ErrorTracking.md +62 -0
  14. package/.docs/classes/FloatingManager.md +530 -0
  15. package/.docs/classes/HTMLBuilder.md +45 -0
  16. package/.docs/classes/HttpProvider.md +96 -0
  17. package/.docs/classes/JSUtils.md +115 -0
  18. package/.docs/classes/MaskFormatter-1.md +347 -0
  19. package/.docs/classes/NumberUtils.md +335 -0
  20. package/.docs/classes/ObjectUtils.md +160 -0
  21. package/.docs/classes/OnboardingUtils.md +126 -0
  22. package/.docs/classes/PromiseSync.md +91 -0
  23. package/.docs/classes/ReadyUtil.md +115 -0
  24. package/.docs/classes/RequestMetadata.md +84 -0
  25. package/.docs/classes/SelectionInfo.md +168 -0
  26. package/.docs/classes/SkwHttpProvider.md +109 -0
  27. package/.docs/classes/StringUtils.md +562 -0
  28. package/.docs/classes/TimeFormatter.md +98 -0
  29. package/.docs/classes/UserAgentUtils.md +58 -0
  30. package/.docs/classes/VersionUtils.md +42 -0
  31. package/.docs/classes/WaitingChangeException.md +200 -0
  32. package/.docs/classes/WarningException.md +214 -0
  33. package/.docs/enums/Action.md +294 -0
  34. package/.docs/enums/ChangeOperation.md +52 -0
  35. package/.docs/enums/DataType.md +63 -0
  36. package/.docs/enums/DependencyType.md +41 -0
  37. package/.docs/enums/SelectionMode.md +30 -0
  38. package/.docs/enums/SortMode.md +30 -0
  39. package/.docs/enums/UserInterface.md +195 -0
  40. package/.docs/interfaces/ChildDescriptor.md +41 -0
  41. package/.docs/interfaces/ChildLink.md +30 -0
  42. package/.docs/interfaces/DUActionInterceptor.md +29 -0
  43. package/.docs/interfaces/ExecutionContext.md +58 -0
  44. package/.docs/interfaces/FieldDescriptor.md +140 -0
  45. package/.docs/interfaces/Filter.md +41 -0
  46. package/.docs/interfaces/IElementIDInfo.md +30 -0
  47. package/.docs/interfaces/LoadDataRequest.md +101 -0
  48. package/.docs/interfaces/LoadDataResponse.md +36 -0
  49. package/.docs/interfaces/PageRequest.md +41 -0
  50. package/.docs/interfaces/PaginationInfo.md +75 -0
  51. package/.docs/interfaces/PromiseSyncCallback.md +39 -0
  52. package/.docs/interfaces/QuickFilter.md +41 -0
  53. package/.docs/interfaces/Record.md +62 -0
  54. package/.docs/interfaces/SavedRecord.md +85 -0
  55. package/.docs/interfaces/Sort.md +41 -0
  56. package/.docs/interfaces/SortingProvider.md +29 -0
  57. package/.docs/interfaces/UnitMetadata.md +52 -0
  58. package/.docs/interfaces/WaitingChange.md +41 -0
  59. package/.docs/modules/MaskFormatter.md +37 -0
  60. package/.docs/modules.md +74 -0
  61. package/.docs/package.json +15 -0
  62. package/.eslintignore +2 -0
  63. package/.eslintrc.cjs +35 -0
  64. package/.husky/commit-msg +4 -0
  65. package/.releaserc +58 -0
  66. package/README.md +62 -0
  67. package/commitlint.config.cjs +14 -0
  68. package/dist/async/PromiseSync.d.ts +29 -0
  69. package/dist/async/PromiseSync.js +31 -0
  70. package/dist/async/PromiseSync.js.map +1 -0
  71. package/dist/dataunit/DataUnit.d.ts +924 -0
  72. package/dist/dataunit/DataUnit.js +1621 -0
  73. package/dist/dataunit/DataUnit.js.map +1 -0
  74. package/dist/dataunit/DataUnitStorage.d.ts +24 -0
  75. package/dist/dataunit/DataUnitStorage.js +39 -0
  76. package/dist/dataunit/DataUnitStorage.js.map +1 -0
  77. package/dist/dataunit/formatting/PrettyFormatter.d.ts +2 -0
  78. package/dist/dataunit/formatting/PrettyFormatter.js +94 -0
  79. package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -0
  80. package/dist/dataunit/loading/LoadDataRequest.d.ts +19 -0
  81. package/dist/dataunit/loading/LoadDataRequest.js +2 -0
  82. package/dist/dataunit/loading/LoadDataRequest.js.map +1 -0
  83. package/dist/dataunit/loading/LoadDataResponse.d.ts +9 -0
  84. package/dist/dataunit/loading/LoadDataResponse.js +2 -0
  85. package/dist/dataunit/loading/LoadDataResponse.js.map +1 -0
  86. package/dist/dataunit/loading/PaginationInfo.d.ts +13 -0
  87. package/dist/dataunit/loading/PaginationInfo.js +2 -0
  88. package/dist/dataunit/loading/PaginationInfo.js.map +1 -0
  89. package/dist/dataunit/metadata/DataType.d.ts +54 -0
  90. package/dist/dataunit/metadata/DataType.js +124 -0
  91. package/dist/dataunit/metadata/DataType.js.map +1 -0
  92. package/dist/dataunit/metadata/UnitMetadata.d.ts +88 -0
  93. package/dist/dataunit/metadata/UnitMetadata.js +36 -0
  94. package/dist/dataunit/metadata/UnitMetadata.js.map +1 -0
  95. package/dist/dataunit/state/HistReducer.d.ts +10 -0
  96. package/dist/dataunit/state/HistReducer.js +28 -0
  97. package/dist/dataunit/state/HistReducer.js.map +1 -0
  98. package/dist/dataunit/state/StateManager.d.ts +57 -0
  99. package/dist/dataunit/state/StateManager.js +97 -0
  100. package/dist/dataunit/state/StateManager.js.map +1 -0
  101. package/dist/dataunit/state/action/DataUnitAction.d.ts +40 -0
  102. package/dist/dataunit/state/action/DataUnitAction.js +42 -0
  103. package/dist/dataunit/state/action/DataUnitAction.js.map +1 -0
  104. package/dist/dataunit/state/slice/AddedRecordsSlice.d.ts +12 -0
  105. package/dist/dataunit/state/slice/AddedRecordsSlice.js +30 -0
  106. package/dist/dataunit/state/slice/AddedRecordsSlice.js.map +1 -0
  107. package/dist/dataunit/state/slice/ChangesSlice.d.ts +13 -0
  108. package/dist/dataunit/state/slice/ChangesSlice.js +105 -0
  109. package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -0
  110. package/dist/dataunit/state/slice/InvalidFieldsSlice.d.ts +10 -0
  111. package/dist/dataunit/state/slice/InvalidFieldsSlice.js +66 -0
  112. package/dist/dataunit/state/slice/InvalidFieldsSlice.js.map +1 -0
  113. package/dist/dataunit/state/slice/LoadingControlSlice.d.ts +19 -0
  114. package/dist/dataunit/state/slice/LoadingControlSlice.js +45 -0
  115. package/dist/dataunit/state/slice/LoadingControlSlice.js.map +1 -0
  116. package/dist/dataunit/state/slice/RecordsSlice.d.ts +11 -0
  117. package/dist/dataunit/state/slice/RecordsSlice.js +62 -0
  118. package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -0
  119. package/dist/dataunit/state/slice/RemovedRecordsSlice.d.ts +9 -0
  120. package/dist/dataunit/state/slice/RemovedRecordsSlice.js +25 -0
  121. package/dist/dataunit/state/slice/RemovedRecordsSlice.js.map +1 -0
  122. package/dist/dataunit/state/slice/SelectionSlice.d.ts +19 -0
  123. package/dist/dataunit/state/slice/SelectionSlice.js +155 -0
  124. package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -0
  125. package/dist/dataunit/state/slice/SnapshotSlice.d.ts +19 -0
  126. package/dist/dataunit/state/slice/SnapshotSlice.js +106 -0
  127. package/dist/dataunit/state/slice/SnapshotSlice.js.map +1 -0
  128. package/dist/dataunit/state/slice/UnitMetadataSlice.d.ts +11 -0
  129. package/dist/dataunit/state/slice/UnitMetadataSlice.js +21 -0
  130. package/dist/dataunit/state/slice/UnitMetadataSlice.js.map +1 -0
  131. package/dist/dataunit/state/slice/WaitingChangesSlice.d.ts +12 -0
  132. package/dist/dataunit/state/slice/WaitingChangesSlice.js +56 -0
  133. package/dist/dataunit/state/slice/WaitingChangesSlice.js.map +1 -0
  134. package/dist/exceptions/ErrorException.d.ts +14 -0
  135. package/dist/exceptions/ErrorException.js +13 -0
  136. package/dist/exceptions/ErrorException.js.map +1 -0
  137. package/dist/exceptions/WaitingChangeException.d.ts +12 -0
  138. package/dist/exceptions/WaitingChangeException.js +12 -0
  139. package/dist/exceptions/WaitingChangeException.js.map +1 -0
  140. package/dist/exceptions/WarningException.d.ts +14 -0
  141. package/dist/exceptions/WarningException.js +13 -0
  142. package/dist/exceptions/WarningException.js.map +1 -0
  143. package/dist/html/HTMLBuilder.d.ts +3 -0
  144. package/dist/html/HTMLBuilder.js +9 -0
  145. package/dist/html/HTMLBuilder.js.map +1 -0
  146. package/dist/http/AuthorizedServiceCaller.d.ts +11 -0
  147. package/dist/http/AuthorizedServiceCaller.js +54 -0
  148. package/dist/http/AuthorizedServiceCaller.js.map +1 -0
  149. package/dist/http/HttpProvider.d.ts +25 -0
  150. package/dist/http/HttpProvider.js +74 -0
  151. package/dist/http/HttpProvider.js.map +1 -0
  152. package/dist/http/RequestMetadata.d.ts +30 -0
  153. package/dist/http/RequestMetadata.js +25 -0
  154. package/dist/http/RequestMetadata.js.map +1 -0
  155. package/dist/http/SkwHttpProvider.d.ts +9 -0
  156. package/dist/http/SkwHttpProvider.js +67 -0
  157. package/dist/http/SkwHttpProvider.js.map +1 -0
  158. package/dist/index.d.ts +34 -0
  159. package/dist/index.js +33 -0
  160. package/dist/index.js.map +1 -0
  161. package/dist/traking/ErrorTraking.d.ts +19 -0
  162. package/dist/traking/ErrorTraking.js +34 -0
  163. package/dist/traking/ErrorTraking.js.map +1 -0
  164. package/dist/ui/FloatingManager.d.ts +164 -0
  165. package/dist/ui/FloatingManager.js +358 -0
  166. package/dist/ui/FloatingManager.js.map +1 -0
  167. package/dist/utils/ApplicationContext.d.ts +26 -0
  168. package/dist/utils/ApplicationContext.js +38 -0
  169. package/dist/utils/ApplicationContext.js.map +1 -0
  170. package/dist/utils/ArrayUtils.d.ts +29 -0
  171. package/dist/utils/ArrayUtils.js +57 -0
  172. package/dist/utils/ArrayUtils.js.map +1 -0
  173. package/dist/utils/CriteriaModel.d.ts +107 -0
  174. package/dist/utils/CriteriaModel.js +172 -0
  175. package/dist/utils/CriteriaModel.js.map +1 -0
  176. package/dist/utils/CriteriaParameter.d.ts +69 -0
  177. package/dist/utils/CriteriaParameter.js +83 -0
  178. package/dist/utils/CriteriaParameter.js.map +1 -0
  179. package/dist/utils/DateUtils.d.ts +97 -0
  180. package/dist/utils/DateUtils.js +171 -0
  181. package/dist/utils/DateUtils.js.map +1 -0
  182. package/dist/utils/ElementIDUtils.d.ts +72 -0
  183. package/dist/utils/ElementIDUtils.js +161 -0
  184. package/dist/utils/ElementIDUtils.js.map +1 -0
  185. package/dist/utils/JSUtils.d.ts +36 -0
  186. package/dist/utils/JSUtils.js +66 -0
  187. package/dist/utils/JSUtils.js.map +1 -0
  188. package/dist/utils/MaskFormatter.d.ts +148 -0
  189. package/dist/utils/MaskFormatter.js +356 -0
  190. package/dist/utils/MaskFormatter.js.map +1 -0
  191. package/dist/utils/NumberUtils.d.ts +127 -0
  192. package/dist/utils/NumberUtils.js +245 -0
  193. package/dist/utils/NumberUtils.js.map +1 -0
  194. package/dist/utils/ObjectUtils.d.ts +47 -0
  195. package/dist/utils/ObjectUtils.js +68 -0
  196. package/dist/utils/ObjectUtils.js.map +1 -0
  197. package/dist/utils/OnboardingUtils.d.ts +17 -0
  198. package/dist/utils/OnboardingUtils.js +41 -0
  199. package/dist/utils/OnboardingUtils.js.map +1 -0
  200. package/dist/utils/ReadyUtil.d.ts +24 -0
  201. package/dist/utils/ReadyUtil.js +41 -0
  202. package/dist/utils/ReadyUtil.js.map +1 -0
  203. package/dist/utils/StringUtils.d.ts +167 -0
  204. package/dist/utils/StringUtils.js +328 -0
  205. package/dist/utils/StringUtils.js.map +1 -0
  206. package/dist/utils/TimeFormatter.d.ts +33 -0
  207. package/dist/utils/TimeFormatter.js +98 -0
  208. package/dist/utils/TimeFormatter.js.map +1 -0
  209. package/dist/utils/UserAgentUtils/index.d.ts +15 -0
  210. package/dist/utils/UserAgentUtils/index.js +48 -0
  211. package/dist/utils/UserAgentUtils/index.js.map +1 -0
  212. package/dist/utils/UserAgentUtils/navigatorAgentList.d.ts +17 -0
  213. package/dist/utils/UserAgentUtils/navigatorAgentList.js +40 -0
  214. package/dist/utils/UserAgentUtils/navigatorAgentList.js.map +1 -0
  215. package/dist/utils/VersionUtils.d.ts +7 -0
  216. package/dist/utils/VersionUtils.js +31 -0
  217. package/dist/utils/VersionUtils.js.map +1 -0
  218. package/jest.config.ts +17 -0
  219. package/mock/http/XMLHttpRequest-mock.js +26 -0
  220. package/package.json +52 -0
  221. package/scripts/runlink.bat +1 -0
  222. package/scripts/runlink.sh +1 -0
  223. package/src/async/PromiseSync.ts +49 -0
  224. package/src/dataunit/DataUnit.ts +1835 -0
  225. package/src/dataunit/DataUnitStorage.ts +43 -0
  226. package/src/dataunit/formatting/PrettyFormatter.ts +113 -0
  227. package/src/dataunit/loading/LoadDataRequest.ts +26 -0
  228. package/src/dataunit/loading/LoadDataResponse.ts +11 -0
  229. package/src/dataunit/loading/PaginationInfo.ts +18 -0
  230. package/src/dataunit/metadata/DataType.ts +127 -0
  231. package/src/dataunit/metadata/UnitMetadata.ts +102 -0
  232. package/src/dataunit/state/HistReducer.ts +34 -0
  233. package/src/dataunit/state/StateManager.ts +142 -0
  234. package/src/dataunit/state/action/DataUnitAction.ts +67 -0
  235. package/src/dataunit/state/slice/AddedRecordsSlice.ts +48 -0
  236. package/src/dataunit/state/slice/ChangesSlice.ts +125 -0
  237. package/src/dataunit/state/slice/InvalidFieldsSlice.ts +85 -0
  238. package/src/dataunit/state/slice/LoadingControlSlice.ts +60 -0
  239. package/src/dataunit/state/slice/RecordsSlice.ts +74 -0
  240. package/src/dataunit/state/slice/RemovedRecordsSlice.ts +30 -0
  241. package/src/dataunit/state/slice/SelectionSlice.ts +193 -0
  242. package/src/dataunit/state/slice/SnapshotSlice.ts +139 -0
  243. package/src/dataunit/state/slice/UnitMetadataSlice.ts +30 -0
  244. package/src/dataunit/state/slice/WaitingChangesSlice.ts +74 -0
  245. package/src/exceptions/ErrorException.ts +25 -0
  246. package/src/exceptions/WaitingChangeException.ts +21 -0
  247. package/src/exceptions/WarningException.ts +26 -0
  248. package/src/html/HTMLBuilder.ts +8 -0
  249. package/src/http/AuthorizedServiceCaller.ts +58 -0
  250. package/src/http/HttpProvider.ts +94 -0
  251. package/src/http/RequestMetadata.ts +42 -0
  252. package/src/http/SkwHttpProvider.ts +78 -0
  253. package/src/index.ts +93 -0
  254. package/src/traking/ErrorTraking.ts +37 -0
  255. package/src/ui/FloatingManager.ts +417 -0
  256. package/src/utils/ApplicationContext.ts +42 -0
  257. package/src/utils/ArrayUtils.ts +61 -0
  258. package/src/utils/CriteriaModel.ts +205 -0
  259. package/src/utils/CriteriaParameter.ts +108 -0
  260. package/src/utils/DateUtils.ts +195 -0
  261. package/src/utils/ElementIDUtils.ts +184 -0
  262. package/src/utils/JSUtils.ts +69 -0
  263. package/src/utils/MaskFormatter.ts +407 -0
  264. package/src/utils/NumberUtils.ts +283 -0
  265. package/src/utils/ObjectUtils.ts +76 -0
  266. package/src/utils/OnboardingUtils.ts +46 -0
  267. package/src/utils/ReadyUtil.ts +45 -0
  268. package/src/utils/StringUtils.ts +359 -0
  269. package/src/utils/TimeFormatter.ts +98 -0
  270. package/src/utils/UserAgentUtils/index.ts +62 -0
  271. package/src/utils/UserAgentUtils/navigatorAgentList.ts +39 -0
  272. package/src/utils/VersionUtils.ts +37 -0
  273. package/test/http/HttpProvider.spec.ts +35 -0
  274. package/test/http/SkwHttpProvider.ts.spec.ts +34 -0
  275. package/test/util/CriteriaModel.spec.ts +232 -0
  276. package/test/util/CriteriaParameter.spec.ts +52 -0
  277. package/test/util/DataUnitStorage.spec.ts +63 -0
  278. package/test/util/ElementIDUtils.spec.ts +272 -0
  279. package/test/util/MaskFormatter.spec.ts +138 -0
  280. package/test/util/NumberUtils.spec.ts +182 -0
  281. package/test/util/StringUtils.spec.ts +51 -0
  282. package/test/util/TimeFormatter.spec.ts +26 -0
  283. package/tsconfig.json +16 -0
@@ -0,0 +1,139 @@
1
+
2
+ import { ActionReducer } from "../StateManager.js";
3
+ import StateManager from "../StateManager.js";
4
+ import { Record } from "../../DataUnit.js";
5
+ import { getRecords } from "./RecordsSlice.js";
6
+ import { getSelection } from "./SelectionSlice.js";
7
+ import { getChanges } from "./ChangesSlice.js";
8
+ import { getRemovedRecords } from "./RemovedRecordsSlice.js";
9
+ import { getAddedRecords } from "./AddedRecordsSlice.js";
10
+
11
+ class SnapshotReducerImpl implements ActionReducer{
12
+
13
+ public sliceName: string = "snapshot";
14
+
15
+ public reduce(stateManager: StateManager, currentSnapshot: Snapshot): Snapshot {
16
+ return buildSnapshot(currentSnapshot, stateManager);
17
+ }
18
+ }
19
+
20
+ export const SnapshotReducer = new SnapshotReducerImpl();
21
+
22
+ export const getSnapshot = (stateManager: StateManager): Snapshot | undefined => {
23
+ return stateManager.select(SnapshotReducer.sliceName, (state: Snapshot) => state);
24
+ }
25
+
26
+ export const getCurrentRecords = (stateManager: StateManager): Map<string, Record> => {
27
+ const snapshot = getSnapshot(stateManager);
28
+ return snapshot ? snapshot.records : new Map();
29
+ };
30
+
31
+ export const getSelectionRecordsMap = (stateManager: StateManager): Map<string, Record> => {
32
+ const snapshot = getSnapshot(stateManager);
33
+ return snapshot ? snapshot.selectionRecords : new Map();
34
+ };
35
+
36
+ export const getSelectionRecords = (stateManager: StateManager): Array<Record> | undefined => {
37
+ const snapshot = getSnapshot(stateManager);
38
+ return snapshot ? Array.from(snapshot.selectionRecords.values()) : undefined;
39
+ }
40
+
41
+ export const getModifiedRecords = (stateManager: StateManager): Array<Record> | undefined => {
42
+
43
+ const currentRecords = buildCurrentRecords(stateManager);
44
+ if(!currentRecords){
45
+ return undefined
46
+ }
47
+
48
+ const changes = getChanges(stateManager);
49
+ const added = getAddedRecords(stateManager);
50
+ if(!changes && !added){
51
+ return undefined
52
+ }
53
+
54
+ let modifiedIDs = changes ? Array.from(changes.keys()) : [];
55
+
56
+ if(added){
57
+ modifiedIDs = modifiedIDs.concat(added.map(r=>r.__record__id__));
58
+ }
59
+
60
+ return Array.from(currentRecords.values()).filter(r=>modifiedIDs.includes(r.__record__id__));
61
+ }
62
+
63
+ export const getFieldValue = (stateManager: StateManager, fieldName: string): any => {
64
+ const selection = getSelection(stateManager);
65
+ if(selection && selection.length > 0){
66
+ const currentRecords = getSelectionRecords(stateManager);
67
+ if(currentRecords){
68
+ const record = currentRecords.find(record => record.__record__id__ === selection[0]);
69
+ return record ? record[fieldName] : undefined;
70
+ }
71
+ }
72
+ return undefined;
73
+ };
74
+
75
+ export interface Snapshot{
76
+ records: Map<string, Record>;
77
+ selectionRecords: Map<string, Record>
78
+ }
79
+
80
+ function buildSnapshot(oldSnapshot: Snapshot, stateManager: StateManager): Snapshot{
81
+
82
+ let records = getRecords(stateManager) || [];
83
+ const added = getAddedRecords(stateManager);
84
+
85
+ if(added){
86
+ records = (records).concat(added);
87
+ }
88
+
89
+ const removedRecords = getRemovedRecords(stateManager);
90
+ if(removedRecords){
91
+ records = records.filter(record => !removedRecords.includes(record.__record__id__));
92
+ }
93
+
94
+ const changes = getChanges(stateManager);
95
+ const snapshotRecords: Map<string, Record> = new Map(records.map(source => [source.__record__id__, {...source, ...changes?.get(source.__record__id__)}]));
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
+
102
+ const selection: Array<string> = getSelection(stateManager);
103
+
104
+ if(selection && selection.length > 0){
105
+ selection.forEach(recordId => {
106
+ const record = snapshotRecords.has(recordId) ? snapshotRecords.get(recordId) : oldSnapshot?.records.get(recordId);
107
+ if(record){
108
+ selectionRecords.set(recordId, record);
109
+ }
110
+ });
111
+ }
112
+
113
+ Array.from(selectionRecords.keys()).forEach(key => {
114
+ if(!selection.includes(key)){
115
+ selectionRecords.delete(key);
116
+ }
117
+ });
118
+
119
+ return {
120
+ records: snapshotRecords,
121
+ selectionRecords
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;
139
+ }
@@ -0,0 +1,30 @@
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 UnitMetadataReducerImpl implements ActionReducer{
9
+
10
+ public sliceName: string = "unitMetadata";
11
+
12
+ public reduce(_stateManager:StateManager, currentState: UnitMetadata, action: StateAction): UnitMetadata {
13
+ if(action.type === Action.METADATA_LOADED){
14
+ return action.payload;
15
+ }
16
+ return currentState;
17
+ }
18
+
19
+ }
20
+
21
+ export const UnitMetadataReducer = new UnitMetadataReducerImpl();
22
+
23
+ export const getMetadata = (stateManager: StateManager): UnitMetadata => {
24
+ return stateManager.select(UnitMetadataReducer.sliceName, (state: UnitMetadata) => state);
25
+ };
26
+
27
+ export const getField = (stateManager: StateManager, fieldName: string): FieldDescriptor|undefined => {
28
+ const md: UnitMetadata = getMetadata(stateManager);
29
+ return md ? md.fields.find(fmd => fmd.name === fieldName) : undefined;
30
+ }
@@ -0,0 +1,74 @@
1
+
2
+ import { WaitingChange } from "../../DataUnit.js";
3
+ import { Action } from "../action/DataUnitAction.js";
4
+ import StateManager, { ActionReducer, StateAction } from "../StateManager.js";
5
+
6
+ class WaitingCheangesReducerImpl implements ActionReducer{
7
+
8
+ public sliceName: string = "waitingChanges";
9
+
10
+ public reduce(stateManager:StateManager, currentState: Map<string, WaitingChange>, action: StateAction): Map<string, WaitingChange>|undefined {
11
+ let newState: Map<string, WaitingChange>;
12
+ switch(action.type){
13
+
14
+ case Action.CHANGING_DATA:
15
+ newState = new Map(currentState);
16
+ Object.entries(action.payload).forEach(([key, value]) => {
17
+ newState.set(key, value as WaitingChange);
18
+ });
19
+
20
+ return newState;
21
+
22
+ case Action.WAITING_CHANGE_CANCELED:
23
+ newState = new Map(currentState);
24
+ newState.delete(action.payload.fieldName);
25
+
26
+ return newState.size === 0 ? undefined : newState;
27
+
28
+ case Action.DATA_CHANGED:
29
+ newState = new Map(currentState);
30
+ Object.entries(action.payload).forEach(([key]) => {
31
+ newState.delete(key);
32
+ });
33
+
34
+ return newState.size === 0 ? undefined : newState;
35
+
36
+ case Action.DATA_SAVED:
37
+ case Action.EDITION_CANCELED:
38
+ return undefined;
39
+ }
40
+ return currentState;
41
+ }
42
+
43
+ }
44
+
45
+ export const WaitingChangesReducer = new WaitingCheangesReducerImpl();
46
+
47
+ export const getWaitingChanges = (stateManager: StateManager): Map<string, WaitingChange>|undefined => {
48
+ return stateManager.select(WaitingChangesReducer.sliceName, (state: Map<string, WaitingChange>) => state);
49
+ }
50
+
51
+ export const isWaiting = (stateManager: StateManager, fieldName: string): boolean => {
52
+ const allWC = getWaitingChanges(stateManager);
53
+ return allWC ? allWC.has(fieldName) : false;
54
+ }
55
+
56
+ export const getBlockingWaitingChanges = (stateManager: StateManager): Map<string, WaitingChange>|undefined => {
57
+ const allWC = getWaitingChanges(stateManager);
58
+ if(allWC){
59
+ return new Map(
60
+ Array.from(allWC.entries())
61
+ .filter(entry=>entry[1].blocking)
62
+ .map(entry=>[entry[0], entry[1]])
63
+ );
64
+ }
65
+ }
66
+
67
+ export const getWaitingChangePromisses = (stateManager: StateManager): (Promise<any>|undefined)[]|undefined => {
68
+ const allWC = getWaitingChanges(stateManager);
69
+ if(allWC){
70
+ return Array.from(allWC.values())
71
+ .filter(wc=>!wc.blocking)
72
+ .map(wc=>wc.promise);
73
+ }
74
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `ErrorException`: Exceção lançada quando ocorre um erro.
3
+ */
4
+ export default class ErrorException extends Error {
5
+
6
+ /** Nome da exceção. */
7
+ public name: string;
8
+
9
+ /** Titulo do erro. */
10
+ public title: string;
11
+
12
+ /** Descrição do erro. */
13
+ public message: string;
14
+
15
+ /** Código do erro, indica o erro disparado pelo backend. */
16
+ public errorCode: string;
17
+
18
+ constructor(title: string, message: string, errorCode: string = "") {
19
+ super(message);
20
+ this.name = "";
21
+ this.title = title;
22
+ this.message = message;
23
+ this.errorCode = errorCode;
24
+ }
25
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `WaitingChangeException`: Exceção lançada quando um campo está pendente de finalizar a alteração antes de executar uma ação.
3
+ */
4
+ export default class WaitingChangeException extends Error {
5
+
6
+ /** Nome da exceção. */
7
+ public name: string;
8
+
9
+ /** Titulo do erro. */
10
+ public title: string;
11
+
12
+ /** Descrição do erro. */
13
+ public message: string;
14
+
15
+ constructor(title: string, message: string) {
16
+ super(message);
17
+ this.title = title;
18
+ this.name = "";
19
+ this.message = message;
20
+ }
21
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `WarningException`: Exceção lançada quando o "erro" vindo do backend é caracterizado como warning.
3
+ */
4
+ export default class WarningException extends Error {
5
+
6
+ /** Nome da exceção. */
7
+ public name: string;
8
+
9
+ /** Titulo do alerta. */
10
+ public title: string;
11
+
12
+ /** Descrição do alerta. */
13
+ public message: string;
14
+
15
+ /** Código do alerta, indica o alerta disparado pelo backend. */
16
+ public errorCode: string;
17
+
18
+ constructor(title: string, message: string, errorCode: string = "") {
19
+ super(message);
20
+ this.title = title;
21
+ this.name = "";
22
+ this.message = message;
23
+ this.errorCode = errorCode;
24
+
25
+ }
26
+ }
@@ -0,0 +1,8 @@
1
+ export class HTMLBuilder{
2
+ public static parseElement<ElementType extends HTMLElement>(html:string): ElementType{
3
+ const domFactory = document.createElement("div");
4
+ domFactory.style.display = "none";
5
+ domFactory.innerHTML = html;
6
+ return domFactory.children.item(0) as ElementType;
7
+ }
8
+ }
@@ -0,0 +1,58 @@
1
+ export class AuthorizedServiceCaller {
2
+
3
+ private serverURL: string = "http://192.168.1.218:8503"; //todo request deve fazer replace de ${serverURL} pelo conteúdo da variável
4
+ private unauthorizedPath: string = "/";
5
+
6
+ constructor(serverURL: string, unauthorizedPath: string) {
7
+ this.serverURL = serverURL;
8
+ this.unauthorizedPath = unauthorizedPath;
9
+
10
+ }
11
+
12
+ async requestService(request: AuthorizedRequest, callback?: Function) {
13
+
14
+ const token = localStorage.getItem('token');
15
+ const body = request?.body;
16
+ const method = request?.method;
17
+
18
+ let headers;
19
+
20
+ if (!token) {
21
+ window.location.pathname = this.unauthorizedPath;
22
+ } else {
23
+ headers = {
24
+ 'Authorization': `${token}`,
25
+ 'Content-Type': 'application/json',
26
+ 'Customer-Host': 'http://localhost:8080/sankhyaw'
27
+ }
28
+ }
29
+ const response: void | Response = await await fetch(this.serverURL,
30
+ {
31
+ method: method,
32
+ headers: headers,
33
+ body: body
34
+
35
+ })
36
+ .catch(e => {
37
+ console.log(e);
38
+ });
39
+
40
+ if (response instanceof Response && response.status === 401) {
41
+ localStorage.removeItem('token');
42
+ window.location.pathname = this.unauthorizedPath;
43
+ }
44
+
45
+ if (callback && response instanceof Response) {
46
+ callback(response.json().then());
47
+ } else {
48
+ return response;
49
+ }
50
+
51
+ }
52
+ }
53
+
54
+ export interface AuthorizedRequest {
55
+ url: string,
56
+ body: string,
57
+ method: string
58
+ }
@@ -0,0 +1,94 @@
1
+ import { RequestMetadata, Method, Header } from "./RequestMetadata.js";
2
+
3
+ /**
4
+ * Abstração do XMLHttpRequest. Este serviço é responsável por realizar as requisições
5
+ * ao backend. Todos os métodos são estáticos.
6
+ */
7
+ export class HttpProvider {
8
+
9
+ /**
10
+ * Faz uma requisição usando o método GET do HTTP para uma URL específica.
11
+ *
12
+ * @param {string} url A URL que deve ser chamada.
13
+ * @param {Array<Header>} headers [Opcional] Cabeçalhos HTTP.
14
+ * @returns {Promise<Object>} Uma promessa de que a requisição será preenchida.
15
+ */
16
+ public static get(url: string, headers?: Array<Header>): Promise<Object> {
17
+ return this.dispatch(new RequestMetadata(url, Method.GET, headers));
18
+ }
19
+
20
+ /**
21
+ * Faz uma requisição usando o método POST do HTTP para uma URL específica.
22
+ *
23
+ * @param {string} url A URL que deve ser chamada.
24
+ * @param {Object} payload Informações a serem enviadas.
25
+ * @param {Array<Header>} headers [Opcional] Cabeçalhos HTTP.
26
+ * @returns {Promise<Object>} Uma promessa de que a requisição será preenchida.
27
+ */
28
+ public static post(url: string, payload:Object, headers?: Array<Header>): Promise<any> {
29
+ return this.dispatch(new RequestMetadata(url, Method.POST, headers), payload);
30
+ }
31
+
32
+ private static dispatch(requestMetadata: RequestMetadata, payload?: Object): Promise<any> {
33
+
34
+ return new Promise<Object>((resolve, reject) => {
35
+
36
+ const request = new XMLHttpRequest();
37
+
38
+ request.timeout = requestMetadata.timeout;
39
+
40
+ request.onerror = function handleError() {
41
+ reject({
42
+ status: 404,
43
+ statusText: 'Not Found'
44
+ });
45
+ };
46
+
47
+ request.ontimeout = function handleTimeout() {
48
+ reject({
49
+ status: 408,
50
+ statusText: 'Request Timeout'
51
+ });
52
+ };
53
+
54
+ request.onreadystatechange = () => {
55
+
56
+ // While readState isn't done, there's nothing to do...
57
+ if (request.readyState != 4) {
58
+ return;
59
+ }
60
+
61
+ const status = request.status;
62
+
63
+ // The request has failed so we'll handled by onerror instead
64
+ if (status === 0) {
65
+ return;
66
+ }
67
+
68
+ const response = {
69
+ status,
70
+ statusText: request.statusText,
71
+ };
72
+
73
+ // Anything out of this range is an error, so we just send the status and statusText.
74
+ if (status >= 200 && status < 300) {
75
+ resolve({
76
+ ...response,
77
+ data: request.response,
78
+ dataAsString: request.responseText
79
+ });
80
+ } else {
81
+ reject(response);
82
+ }
83
+
84
+ };
85
+
86
+ request.open(requestMetadata.method.toString(), requestMetadata.url, true);
87
+ requestMetadata.headers.map((h: Header) => request.setRequestHeader(h.name, h.value));
88
+
89
+ if(payload != null){
90
+ request.send(JSON.stringify(payload));
91
+ }
92
+ });
93
+ }
94
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Representa as propriedades necessárias para se executar uma requisição.
3
+ */
4
+ export class RequestMetadata {
5
+
6
+ /** A URL a ser chamada */
7
+ public url: string;
8
+
9
+ /** O verbo HTTP */
10
+ public method: Method;
11
+
12
+ /** Tempo limite de espera pela resposta */
13
+ public timeout: number = 30000;
14
+
15
+ /** Headers para serem enviados na requisição */
16
+ public headers: Array<Header>;
17
+
18
+ /**
19
+ * @param {string} url A URL que deve ser chamada.
20
+ * @param {Method} method O Método da requisição (GET, PUT, POST ou DELETE).
21
+ */
22
+ public constructor(url: string, method: Method, headers?:Array<Header>) {
23
+ this.url = url;
24
+ this.method = method;
25
+ this.headers = headers || [];
26
+ }
27
+
28
+ }
29
+
30
+ /** Representa os verbos HTTP suportados */
31
+ export enum Method {
32
+ GET,
33
+ PUT,
34
+ POST,
35
+ DELETE
36
+ }
37
+
38
+ /** Headers HTTP */
39
+ export interface Header{
40
+ name: string;
41
+ value: string;
42
+ }
@@ -0,0 +1,78 @@
1
+ import { HttpProvider } from "./HttpProvider.js"
2
+ import { Header } from "./RequestMetadata.js";
3
+
4
+ export class SkwHttpProvider{
5
+ static _counter:number = 0;
6
+
7
+ static STATUS_ERROR:number = 0;
8
+ static STATUS_OK:number = 1;
9
+ static STATUS_INFO:number = 2;
10
+ static STATUS_TIMEOUT:number = 3;
11
+ static STATUS_CANCELED:number = 4;
12
+
13
+ public static callService(serviceName: string, content: Object): Promise<Object>{
14
+ return new Promise<Object>((resolve, reject) => {
15
+ let host:string = "http://192.168.1.218:8503/mge/";
16
+ let appName:string = "ListaTarefa";
17
+ let module = 'mge';
18
+ this._counter++;
19
+
20
+ if (serviceName.indexOf("@") > -1) {
21
+ let s = serviceName.split("@");
22
+ module = s[0];
23
+ serviceName = s[1];
24
+ }
25
+
26
+ let url = `${host}/${module}/service.sbr?serviceName=${serviceName}&counter=${this._counter}&application=${appName}&outputType=json&preventTransform=false`;
27
+
28
+ let requestContent = {
29
+ serviceName: serviceName,
30
+ requestBody: content
31
+ };
32
+
33
+ let headers = new Headers();
34
+
35
+ headers.append("Content-Type", "application/json")
36
+ //headers.append("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE");
37
+ //headers.append("Access-Control-Allow-Origin", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
38
+
39
+ fetch(url, {
40
+ body: JSON.stringify(requestContent),
41
+ method: 'POST',
42
+ headers: headers
43
+ })
44
+ .then( res => res.json())
45
+ .then( (data) => {
46
+ console.log(data);
47
+ });
48
+
49
+ /*HttpProvider.post(url, requestContent, headers)
50
+ .then(res => {
51
+ if (!res.hasOwnProperty('status') ||
52
+ res.status == this.STATUS_ERROR ||
53
+ res.status == this.STATUS_TIMEOUT) {
54
+
55
+ let statusMessage = res.statusMessage;
56
+
57
+ if (!statusMessage) {
58
+ statusMessage = 'Erro não identificado.'
59
+ }
60
+ //TODO: No futuro, exibir mensagens de erro. (MessageUtils.showError)
61
+ reject(new Error(statusMessage));
62
+ }else if (res.status == this.STATUS_CANCELED) {
63
+ if (res.statusMessage){
64
+ console.warn(res.statusMessage);
65
+ }
66
+ }else{
67
+ resolve(res);
68
+ }
69
+
70
+ if (res.status == this.STATUS_INFO) {
71
+ //TODO: No futuro, exibir mensagens de erro. (MessageUtils.showAlert)
72
+ console.info(res.statusMessage);
73
+ }
74
+ })
75
+ .catch((e)=>{reject(e)});*/
76
+ })
77
+ }
78
+ }