@genesislcap/pbc-reconciliation-ui 0.0.46 → 14.339.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 (234) hide show
  1. package/.env +3 -0
  2. package/dist/dts/components/configurations-panel/configuration-datasources/configuration-datasources.d.ts.map +1 -1
  3. package/dist/dts/components/configurations-panel/configuration-datasources/configuration-datasources.template.d.ts.map +1 -1
  4. package/dist/dts/components/configurations-panel/configurations-panel.d.ts +2 -2
  5. package/dist/dts/components/configurations-panel/configurations-panel.d.ts.map +1 -1
  6. package/dist/dts/components/configurations-panel/configurations-panel.template.d.ts.map +1 -1
  7. package/dist/dts/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.d.ts.map +1 -1
  8. package/dist/dts/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.template.d.ts.map +1 -1
  9. package/dist/dts/components/data-dictionaries/columns.d.ts +2 -2
  10. package/dist/dts/components/data-dictionaries/columns.d.ts.map +1 -1
  11. package/dist/dts/components/data-dictionaries/data-dictionaries-utils.d.ts.map +1 -1
  12. package/dist/dts/components/data-dictionaries/data-dictionaries.d.ts +3 -6
  13. package/dist/dts/components/data-dictionaries/data-dictionaries.d.ts.map +1 -1
  14. package/dist/dts/components/data-dictionaries/data-dictionaries.template.d.ts +1 -1
  15. package/dist/dts/components/data-dictionaries/data-dictionaries.template.d.ts.map +1 -1
  16. package/dist/dts/components/data-dictionaries/data-dictionaries.types.d.ts +6 -0
  17. package/dist/dts/components/data-dictionaries/data-dictionaries.types.d.ts.map +1 -0
  18. package/dist/dts/components/list/list.d.ts.map +1 -1
  19. package/dist/dts/components/list/list.template.d.ts.map +1 -1
  20. package/dist/dts/components/rapid-components.d.ts.map +1 -1
  21. package/dist/dts/components/reconciliations-panel/columns.d.ts.map +1 -1
  22. package/dist/dts/components/reconciliations-panel/input-parameter/input-parameter.d.ts +3 -14
  23. package/dist/dts/components/reconciliations-panel/input-parameter/input-parameter.d.ts.map +1 -1
  24. package/dist/dts/components/reconciliations-panel/input-parameter/input-parameter.template.d.ts +1 -1
  25. package/dist/dts/components/reconciliations-panel/input-parameter/input-parameter.template.d.ts.map +1 -1
  26. package/dist/dts/components/reconciliations-panel/input-parameter/input-parameter.types.d.ts +13 -0
  27. package/dist/dts/components/reconciliations-panel/input-parameter/input-parameter.types.d.ts.map +1 -0
  28. package/dist/dts/components/reconciliations-panel/reconciliation-no-rows-overlay.d.ts +1 -1
  29. package/dist/dts/components/reconciliations-panel/reconciliation-no-rows-overlay.d.ts.map +1 -1
  30. package/dist/dts/components/reconciliations-panel/reconciliations-panel.d.ts +1 -1
  31. package/dist/dts/components/reconciliations-panel/reconciliations-panel.d.ts.map +1 -1
  32. package/dist/dts/components/reconciliations-panel/reconciliations-panel.styles.d.ts.map +1 -1
  33. package/dist/dts/components/reconciliations-panel/reconciliations-panel.template.d.ts.map +1 -1
  34. package/dist/dts/components/reconciliations-panel/reconciliations-panel.utils.d.ts +1 -1
  35. package/dist/dts/components/reconciliations-panel/reconciliations-panel.utils.d.ts.map +1 -1
  36. package/dist/dts/components/reconciliations-panel/result-details/result-details.d.ts +4 -33
  37. package/dist/dts/components/reconciliations-panel/result-details/result-details.d.ts.map +1 -1
  38. package/dist/dts/components/reconciliations-panel/result-details/result-details.template.d.ts +1 -1
  39. package/dist/dts/components/reconciliations-panel/result-details/result-details.template.d.ts.map +1 -1
  40. package/dist/dts/components/reconciliations-panel/result-details/result-details.types.d.ts +30 -0
  41. package/dist/dts/components/reconciliations-panel/result-details/result-details.types.d.ts.map +1 -0
  42. package/dist/dts/components/zero-components.d.ts.map +1 -1
  43. package/dist/dts/config/config.d.ts.map +1 -1
  44. package/dist/dts/config/configure.d.ts.map +1 -1
  45. package/dist/dts/config/templates.d.ts +2 -2
  46. package/dist/dts/config/templates.d.ts.map +1 -1
  47. package/dist/dts/main/main.d.ts +2 -2
  48. package/dist/dts/main/main.d.ts.map +1 -1
  49. package/dist/dts/main/main.styles.d.ts.map +1 -1
  50. package/dist/dts/main/main.template.d.ts +1 -1
  51. package/dist/dts/main/main.template.d.ts.map +1 -1
  52. package/dist/dts/reconciliation.types.d.ts +13 -13
  53. package/dist/dts/reconciliation.types.d.ts.map +1 -1
  54. package/dist/dts/sandbox.d.ts +2 -2
  55. package/dist/dts/sandbox.d.ts.map +1 -1
  56. package/dist/dts/services/document.service.d.ts.map +1 -1
  57. package/dist/dts/services/reconciliation-configuration.service.d.ts.map +1 -1
  58. package/dist/dts/services/reconciliation.service.d.ts.map +1 -1
  59. package/dist/dts/utils/delete-row-action-cell-renderer.d.ts.map +1 -1
  60. package/dist/dts/utils/endpoint.d.ts.map +1 -1
  61. package/dist/dts/utils/eventDetail.d.ts.map +1 -1
  62. package/dist/dts/utils/format-date.d.ts.map +1 -1
  63. package/dist/dts/utils/humanize.d.ts.map +1 -1
  64. package/dist/dts/utils/isEmpty.d.ts.map +1 -1
  65. package/dist/dts/utils/notification.d.ts.map +1 -1
  66. package/dist/esm/components/configurations-panel/configuration-datasources/configuration-datasources.js +3 -3
  67. package/dist/esm/components/configurations-panel/configuration-datasources/configuration-datasources.js.map +1 -1
  68. package/dist/esm/components/configurations-panel/configuration-datasources/configuration-datasources.styles.js +4 -4
  69. package/dist/esm/components/configurations-panel/configuration-datasources/configuration-datasources.styles.js.map +1 -1
  70. package/dist/esm/components/configurations-panel/configuration-datasources/configuration-datasources.template.js +1 -1
  71. package/dist/esm/components/configurations-panel/configuration-datasources/configuration-datasources.template.js.map +1 -1
  72. package/dist/esm/components/configurations-panel/configurations-panel.js +15 -11
  73. package/dist/esm/components/configurations-panel/configurations-panel.js.map +1 -1
  74. package/dist/esm/components/configurations-panel/configurations-panel.styles.js +346 -346
  75. package/dist/esm/components/configurations-panel/configurations-panel.styles.js.map +1 -1
  76. package/dist/esm/components/configurations-panel/configurations-panel.template.js +276 -278
  77. package/dist/esm/components/configurations-panel/configurations-panel.template.js.map +1 -1
  78. package/dist/esm/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.js +3 -3
  79. package/dist/esm/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.js.map +1 -1
  80. package/dist/esm/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.styles.js +1 -1
  81. package/dist/esm/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.template.js +1 -1
  82. package/dist/esm/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.template.js.map +1 -1
  83. package/dist/esm/components/data-dictionaries/columns.js +4 -4
  84. package/dist/esm/components/data-dictionaries/data-dictionaries-utils.js.map +1 -1
  85. package/dist/esm/components/data-dictionaries/data-dictionaries.js +7 -11
  86. package/dist/esm/components/data-dictionaries/data-dictionaries.js.map +1 -1
  87. package/dist/esm/components/data-dictionaries/data-dictionaries.styles.js +1 -1
  88. package/dist/esm/components/data-dictionaries/data-dictionaries.template.js +3 -3
  89. package/dist/esm/components/data-dictionaries/data-dictionaries.template.js.map +1 -1
  90. package/dist/esm/components/data-dictionaries/data-dictionaries.types.js +7 -0
  91. package/dist/esm/components/data-dictionaries/data-dictionaries.types.js.map +1 -0
  92. package/dist/esm/components/list/list.js +1 -1
  93. package/dist/esm/components/list/list.js.map +1 -1
  94. package/dist/esm/components/list/list.template.js.map +1 -1
  95. package/dist/esm/components/rapid-components.js +1 -2
  96. package/dist/esm/components/rapid-components.js.map +1 -1
  97. package/dist/esm/components/reconciliations-panel/columns.js +9 -15
  98. package/dist/esm/components/reconciliations-panel/columns.js.map +1 -1
  99. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.js +8 -21
  100. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.js.map +1 -1
  101. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.styles.js +7 -7
  102. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.template.js +9 -12
  103. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.template.js.map +1 -1
  104. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.types.js +16 -0
  105. package/dist/esm/components/reconciliations-panel/input-parameter/input-parameter.types.js.map +1 -0
  106. package/dist/esm/components/reconciliations-panel/reconciliations-panel.js +40 -32
  107. package/dist/esm/components/reconciliations-panel/reconciliations-panel.js.map +1 -1
  108. package/dist/esm/components/reconciliations-panel/reconciliations-panel.styles.js +300 -301
  109. package/dist/esm/components/reconciliations-panel/reconciliations-panel.styles.js.map +1 -1
  110. package/dist/esm/components/reconciliations-panel/reconciliations-panel.template.js +335 -331
  111. package/dist/esm/components/reconciliations-panel/reconciliations-panel.template.js.map +1 -1
  112. package/dist/esm/components/reconciliations-panel/reconciliations-panel.utils.js +9 -9
  113. package/dist/esm/components/reconciliations-panel/reconciliations-panel.utils.js.map +1 -1
  114. package/dist/esm/components/reconciliations-panel/result-details/result-details.js +24 -43
  115. package/dist/esm/components/reconciliations-panel/result-details/result-details.js.map +1 -1
  116. package/dist/esm/components/reconciliations-panel/result-details/result-details.template.js +7 -7
  117. package/dist/esm/components/reconciliations-panel/result-details/result-details.template.js.map +1 -1
  118. package/dist/esm/components/reconciliations-panel/result-details/result-details.types.js +17 -0
  119. package/dist/esm/components/reconciliations-panel/result-details/result-details.types.js.map +1 -0
  120. package/dist/esm/components/zero-components.js +2 -3
  121. package/dist/esm/components/zero-components.js.map +1 -1
  122. package/dist/esm/config/config.js.map +1 -1
  123. package/dist/esm/config/configure.js +1 -1
  124. package/dist/esm/config/configure.js.map +1 -1
  125. package/dist/esm/config/templates.js +1 -1
  126. package/dist/esm/main/main.js +4 -4
  127. package/dist/esm/main/main.js.map +1 -1
  128. package/dist/esm/main/main.styles.js +1 -0
  129. package/dist/esm/main/main.styles.js.map +1 -1
  130. package/dist/esm/main/main.template.js +8 -7
  131. package/dist/esm/main/main.template.js.map +1 -1
  132. package/dist/esm/sandbox.js +15 -8
  133. package/dist/esm/sandbox.js.map +1 -1
  134. package/dist/esm/services/data-dictionary.service.js +6 -6
  135. package/dist/esm/services/data-dictionary.service.js.map +1 -1
  136. package/dist/esm/services/document.service.js +3 -4
  137. package/dist/esm/services/document.service.js.map +1 -1
  138. package/dist/esm/services/reconciliation-configuration.service.js +3 -1
  139. package/dist/esm/services/reconciliation-configuration.service.js.map +1 -1
  140. package/dist/esm/services/reconciliation.service.js +8 -5
  141. package/dist/esm/services/reconciliation.service.js.map +1 -1
  142. package/dist/esm/utils/delete-row-action-cell-renderer.js +1 -3
  143. package/dist/esm/utils/delete-row-action-cell-renderer.js.map +1 -1
  144. package/dist/esm/utils/endpoint.js.map +1 -1
  145. package/dist/esm/utils/humanize.js.map +1 -1
  146. package/dist/esm/utils/icons.js +1 -1
  147. package/dist/esm/utils/isEmpty.js.map +1 -1
  148. package/dist/esm/utils/notification.js +1 -1
  149. package/dist/esm/utils/notification.js.map +1 -1
  150. package/dist/tsconfig.tsbuildinfo +1 -0
  151. package/license.txt +46 -0
  152. package/package.json +31 -30
  153. package/src/components/configurations-panel/configuration-datasources/configuration-datasources.styles.ts +72 -0
  154. package/src/components/configurations-panel/configuration-datasources/configuration-datasources.template.ts +73 -0
  155. package/src/components/configurations-panel/configuration-datasources/configuration-datasources.ts +64 -0
  156. package/src/components/configurations-panel/configurations-panel.styles.ts +363 -0
  157. package/src/components/configurations-panel/configurations-panel.template.ts +356 -0
  158. package/src/components/configurations-panel/configurations-panel.ts +387 -0
  159. package/src/components/configurations-panel/recon-rules-columns.ts +117 -0
  160. package/src/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.styles.ts +73 -0
  161. package/src/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.template.ts +122 -0
  162. package/src/components/configurations-panel/reconciliation-rule-row/reconciliation-rule-row.ts +202 -0
  163. package/src/components/data-dictionaries/columns.ts +42 -0
  164. package/src/components/data-dictionaries/data-dictionaries-utils.ts +40 -0
  165. package/src/components/data-dictionaries/data-dictionaries.styles.ts +92 -0
  166. package/src/components/data-dictionaries/data-dictionaries.template.ts +78 -0
  167. package/src/components/data-dictionaries/data-dictionaries.ts +236 -0
  168. package/src/components/data-dictionaries/data-dictionaries.types.ts +5 -0
  169. package/src/components/list/list.styles.ts +88 -0
  170. package/src/components/list/list.template.ts +36 -0
  171. package/src/components/list/list.ts +33 -0
  172. package/src/components/rapid-components.ts +69 -0
  173. package/src/components/reconciliations-panel/columns.ts +74 -0
  174. package/src/components/reconciliations-panel/input-parameter/input-parameter.styles.ts +104 -0
  175. package/src/components/reconciliations-panel/input-parameter/input-parameter.template.ts +93 -0
  176. package/src/components/reconciliations-panel/input-parameter/input-parameter.ts +131 -0
  177. package/src/components/reconciliations-panel/input-parameter/input-parameter.types.ts +14 -0
  178. package/src/components/reconciliations-panel/reconciliation-no-rows-overlay.ts +18 -0
  179. package/src/components/reconciliations-panel/reconciliations-panel.styles.ts +328 -0
  180. package/src/components/reconciliations-panel/reconciliations-panel.template.ts +432 -0
  181. package/src/components/reconciliations-panel/reconciliations-panel.ts +441 -0
  182. package/src/components/reconciliations-panel/reconciliations-panel.utils.ts +103 -0
  183. package/src/components/reconciliations-panel/result-details/result-details.styles.ts +108 -0
  184. package/src/components/reconciliations-panel/result-details/result-details.template.ts +88 -0
  185. package/src/components/reconciliations-panel/result-details/result-details.ts +200 -0
  186. package/src/components/reconciliations-panel/result-details/result-details.types.ts +30 -0
  187. package/src/components/zero-components.ts +61 -0
  188. package/src/config/config.ts +49 -0
  189. package/src/config/configure.ts +72 -0
  190. package/src/config/index.ts +2 -0
  191. package/src/config/templates.ts +80 -0
  192. package/src/globals.d.ts +7 -0
  193. package/src/index.federated.ts +1 -0
  194. package/src/index.ts +3 -0
  195. package/src/main/index.ts +3 -0
  196. package/src/main/main.styles.ts +33 -0
  197. package/src/main/main.template.ts +65 -0
  198. package/src/main/main.ts +153 -0
  199. package/src/reconciliation.types.ts +170 -0
  200. package/src/sandbox.ts +40 -0
  201. package/src/services/data-dictionary.service.ts +64 -0
  202. package/src/services/document.service.ts +72 -0
  203. package/src/services/reconciliation-configuration.service.ts +105 -0
  204. package/src/services/reconciliation.service.ts +120 -0
  205. package/src/styles/scrollbar.styles.ts +15 -0
  206. package/src/tags/index.ts +1 -0
  207. package/src/tags/tags.ts +143 -0
  208. package/src/typings.d.ts +1 -0
  209. package/src/utils/delete-row-action-cell-renderer.ts +71 -0
  210. package/src/utils/endpoint.ts +15 -0
  211. package/src/utils/eventDetail.ts +5 -0
  212. package/src/utils/format-date.ts +9 -0
  213. package/src/utils/humanize.ts +14 -0
  214. package/src/utils/icons.ts +24 -0
  215. package/src/utils/index.ts +2 -0
  216. package/src/utils/isEmpty.ts +2 -0
  217. package/src/utils/logger.ts +3 -0
  218. package/src/utils/notification.ts +35 -0
  219. package/tsconfig.json +45 -0
  220. package/Dockerfile +0 -12
  221. package/docs/images/lsp_jetbrains_one.png +0 -0
  222. package/docs/images/lsp_jetbrains_two.png +0 -0
  223. package/docs/images/lsp_vscode_one.png +0 -0
  224. package/docs/images/lsp_vscode_two.png +0 -0
  225. package/playwright.config.ts +0 -1
  226. package/test/README.md +0 -3
  227. package/test/e2e/fixture.ts +0 -25
  228. package/test/e2e/flows/001-protected.e2e.ts +0 -6
  229. package/test/e2e/index.ts +0 -2
  230. package/test/e2e/pages/index.ts +0 -1
  231. package/test/e2e/pages/protected.ts +0 -16
  232. package/test/unit/mock/services/data-dictionary-service-mock.ts +0 -15
  233. package/test/unit/mock/services/reconciliation-configuration-service-mock.ts +0 -26
  234. package/test/unit/mock/services/reconciliation-service-mock.ts +0 -11
@@ -0,0 +1,88 @@
1
+ import { html, ref, repeat, sync } from '@genesislcap/web-core';
2
+ import { buttonTag, modalTag, textAreaTag } from '../../../tags';
3
+ import { getFormattedDateTime } from '../../../utils';
4
+ import type { ResultDetails } from './result-details';
5
+ import { PropertyName } from './result-details.types';
6
+
7
+ export const ResultDetailsTemplate = html<ResultDetails>`
8
+ <${modalTag}
9
+ ${ref('modal')}
10
+ class="modal"
11
+ show-close-icon="false"
12
+ :onCloseCallback=${(x) => () => x.close()}
13
+ @click=${(x, c) => x.modalBackdropClickHandler(c.event, x.close)}
14
+ >
15
+ <div class="modal-main">
16
+ <div class="modal-top">Record Information</div>
17
+
18
+ <div class="record-information">
19
+ <div class="record-information-column">
20
+ ${repeat(
21
+ (x) => x.columns,
22
+ html`
23
+ <div class="record-information-cell record-information-data-field-name">
24
+ ${(x) => x.attributeValue[PropertyName.FIELD_NAME] ?? ' '}
25
+ </div>
26
+ `,
27
+ )}
28
+ </div>
29
+
30
+ <div class="record-information-column">
31
+ ${repeat(
32
+ (x) => x.columns,
33
+ html`
34
+ <div
35
+ class="record-information-cell ${(x, c) =>
36
+ c.parent.applyStyle(x, PropertyName.FIRST_VALUE)}"
37
+ >
38
+ ${(x) => x.attributeValue[PropertyName.FIRST_VALUE] ?? ' '}
39
+ </div>
40
+ `,
41
+ )}
42
+ </div>
43
+
44
+ <div class="record-information-column">
45
+ ${repeat(
46
+ (x) => x.columns,
47
+ html`
48
+ <div
49
+ class="record-information-cell ${(x, c) =>
50
+ c.parent.applyStyle(x, PropertyName.SECOND_VALUE)}"
51
+ >
52
+ ${(x) => x.attributeValue[PropertyName.SECOND_VALUE] ?? ' '}
53
+ </div>
54
+ `,
55
+ )}
56
+ </div>
57
+ </div>
58
+
59
+ <div class="comment-container">
60
+ <div class="modal-top">Comment</div>
61
+
62
+ <div class="record-information">
63
+ <div class="record-information-column">
64
+ <div class="record-information-cell record-information-data-field-name">Commented By </div>
65
+ </div>
66
+ <div class="record-information-column">
67
+ <div class="record-information-cell record-information-data-field-name"> ${(x) => x.commentedBy}</div>
68
+ </div>
69
+ </div>
70
+
71
+ <div class="record-information">
72
+ <div class="record-information-column">
73
+ <div class="record-information-cell record-information-data-field-name">Commented At </div>
74
+ </div>
75
+ <div class="record-information-column">
76
+ <div class="record-information-cell record-information-data-field-name"> ${(x) => (x.commentTimestamp ? getFormattedDateTime(x.commentTimestamp) : '')}</div>
77
+ </div>
78
+ </div>
79
+
80
+ <${textAreaTag} class="space-x" :value=${sync((x) => x.commentText)}></${textAreaTag}>
81
+
82
+ <div class="save-comment-button">
83
+ <${buttonTag} appearance="primary" @click="${(x) => x.saveComment()}"> Save Comment</${buttonTag}>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </${modalTag}>
88
+ `;
@@ -0,0 +1,200 @@
1
+ import { Modal } from '@genesislcap/rapid-design-system';
2
+ import { customElement, GenesisElement, observable, volatile } from '@genesislcap/web-core';
3
+ import { ReconciliationService } from '../../../services/reconciliation.service';
4
+ import { showNotificationError } from '../../../utils/notification';
5
+ import { ResultDetailsStyles } from './result-details.styles';
6
+ import { ResultDetailsTemplate } from './result-details.template';
7
+ import { AttributeType, RecordInformation, RecordInformationField } from './result-details.types';
8
+
9
+ @customElement({
10
+ name: 'result-details',
11
+ template: ResultDetailsTemplate,
12
+ styles: ResultDetailsStyles,
13
+ })
14
+ export class ResultDetails extends GenesisElement {
15
+ @ReconciliationService reconciliationService: ReconciliationService;
16
+ @observable recordInformation: RecordInformation;
17
+ @observable commentText: string;
18
+ @observable commentedBy: string;
19
+ @observable commentTimestamp: any;
20
+ @observable reconciliationRecordResultId: string;
21
+
22
+ fields: RecordInformationField[];
23
+ modal: Modal;
24
+
25
+ async open(reconciliationRecordResultId: string, datasourceConfigurations, comment) {
26
+ this.recordInformation = await this.createRecordInformation(
27
+ reconciliationRecordResultId,
28
+ datasourceConfigurations,
29
+ );
30
+ this.reconciliationRecordResultId = reconciliationRecordResultId;
31
+ this.commentedBy = comment.USER_NAME ?? '';
32
+ this.commentText = comment.TEXT ?? '';
33
+ this.commentTimestamp = comment.TIMESTAMP ?? 0;
34
+
35
+ this.modal.show();
36
+ }
37
+
38
+ close() {
39
+ this.modal.close();
40
+ }
41
+
42
+ async createRecordInformation(reconciliationRecordResultId, datasourceConfigurations) {
43
+ const reconciliationRecordPairResult =
44
+ await this.reconciliationService.getReconciliationRecordResult(reconciliationRecordResultId);
45
+
46
+ return {
47
+ datasources: {
48
+ fieldName: 'Source Name',
49
+ firstValue: datasourceConfigurations[0].NAME,
50
+ secondValue: datasourceConfigurations[1].NAME,
51
+ },
52
+ fields: this.getFields(reconciliationRecordPairResult, ['MATCHED', 'FAILED']),
53
+ primaryKeyResult: {
54
+ fieldName: 'Primary Key Result',
55
+ firstValue: reconciliationRecordPairResult.KEY_RESULT,
56
+ secondValue: reconciliationRecordPairResult.KEY_RESULT,
57
+ },
58
+ comparisonResult: {
59
+ fieldName: 'Comparison Result',
60
+ firstValue: reconciliationRecordPairResult.COMPARISON_RESULT,
61
+ secondValue: reconciliationRecordPairResult.COMPARISON_RESULT,
62
+ },
63
+ missingInDictionaryFields: this.getFields(reconciliationRecordPairResult, [
64
+ 'MISSING_IN_DICTIONARY',
65
+ ]),
66
+ noRuleConfiguredFields: this.getFields(reconciliationRecordPairResult, [
67
+ 'NO_RULE_CONFIGURED',
68
+ ]),
69
+ };
70
+ }
71
+
72
+ getFields(reconciliationRecordPairResult, resultType: string[]) {
73
+ return reconciliationRecordPairResult.FIRST_DATA_SOURCE_DATA.RULES_INFO.filter((field) =>
74
+ resultType.includes(field.RESULT),
75
+ ).map((field) => {
76
+ const secondValue = reconciliationRecordPairResult.SECOND_DATA_SOURCE_DATA.RULES_INFO.filter(
77
+ (secondField) => field.FIELD_NAME === secondField.FIELD_NAME,
78
+ )[0]?.FIELD_VALUE;
79
+
80
+ return {
81
+ fieldName: field.FIELD_NAME,
82
+ firstValue: this.isEmpty(field.FIELD_VALUE) ? ' ' : field.FIELD_VALUE,
83
+ secondValue: this.isEmpty(secondValue) ? ' ' : secondValue,
84
+ };
85
+ });
86
+ }
87
+
88
+ isEmpty(value) {
89
+ return (
90
+ // null or undefined
91
+ value == null ||
92
+ // Has length and it's zero
93
+ (value.hasOwnProperty('length') && value.trim().length === 0) ||
94
+ // Is an Object and has no keys
95
+ (value.constructor === Object && Object.keys(value.trim()).length === 0)
96
+ );
97
+ }
98
+
99
+ @volatile
100
+ get columns() {
101
+ if (!this.recordInformation) {
102
+ return [];
103
+ }
104
+
105
+ return [
106
+ this.createSingleRow(AttributeType.DATASOURCE, this.recordInformation.datasources),
107
+ ...this.createFieldsRows(AttributeType.FIELDS, this.recordInformation.fields),
108
+ this.createSingleRow(
109
+ AttributeType.PRIMARY_KEY_RESULT,
110
+ this.recordInformation.primaryKeyResult,
111
+ ),
112
+ this.createSingleRow(
113
+ AttributeType.COMPARISON_RESULT,
114
+ this.recordInformation.comparisonResult,
115
+ ),
116
+ ...this.createFieldsRows(
117
+ AttributeType.MISSING_IN_DICTIONARY_FIELDS,
118
+ this.recordInformation.missingInDictionaryFields,
119
+ ),
120
+ ...this.createFieldsRows(
121
+ AttributeType.NO_RULE_CONFIGURED_FIELDS,
122
+ this.recordInformation.noRuleConfiguredFields,
123
+ ),
124
+ ];
125
+ }
126
+
127
+ saveComment() {
128
+ if (this.commentText === null) {
129
+ return;
130
+ }
131
+ this.reconciliationService
132
+ .updateReconciliationRecordComment(this.reconciliationRecordResultId, this.commentText)
133
+ .then((response) => this.validateResponse(response));
134
+ }
135
+
136
+ async validateResponse(response) {
137
+ if (response.MESSAGE_TYPE === 'EVENT_ACK') {
138
+ this.close();
139
+ return;
140
+ }
141
+
142
+ showNotificationError(response.ERROR);
143
+ }
144
+
145
+ private createSingleRow = (attributeType: AttributeType, attributeValue) => ({
146
+ attributeType: attributeType,
147
+ attributeValue: attributeValue,
148
+ });
149
+
150
+ private createFieldsRows = (attributeType: AttributeType, fields) => {
151
+ return fields.map((field) => ({
152
+ attributeType: attributeType,
153
+ attributeValue: field,
154
+ }));
155
+ };
156
+
157
+ applyStyle(attribute, propertyName?) {
158
+ switch (attribute.attributeType) {
159
+ case AttributeType.FIELDS:
160
+ return attribute.attributeValue.firstValue !== attribute.attributeValue.secondValue
161
+ ? 'red'
162
+ : '';
163
+ case AttributeType.PRIMARY_KEY_RESULT:
164
+ return attribute.attributeValue[propertyName].toUpperCase() === 'MATCHED' ? 'green' : 'red';
165
+ case AttributeType.COMPARISON_RESULT:
166
+ switch (attribute.attributeValue[propertyName].toUpperCase()) {
167
+ case 'MATCHED':
168
+ return 'green';
169
+ case 'FAILED':
170
+ return 'red';
171
+ case 'MISSING_VALUE':
172
+ return 'amber';
173
+ }
174
+ case AttributeType.MISSING_IN_DICTIONARY_FIELDS:
175
+ case AttributeType.NO_RULE_CONFIGURED_FIELDS:
176
+ return 'amber';
177
+ default:
178
+ return '';
179
+ }
180
+ }
181
+
182
+ modalBackdropClickHandler(modal, closeEvent) {
183
+ // This prevents issues with forms
184
+ if (!modal.target.tagName.includes('-MODAL')) {
185
+ return;
186
+ }
187
+
188
+ const rect = modal.target.mainElement.getBoundingClientRect();
189
+
190
+ const clickedInModal =
191
+ rect.top <= modal.clientY &&
192
+ modal.clientY <= rect.top + rect.height &&
193
+ rect.left <= modal.clientX &&
194
+ modal.clientX <= rect.left + rect.width;
195
+
196
+ if (!clickedInModal) {
197
+ modal.target[closeEvent.name]();
198
+ }
199
+ }
200
+ }
@@ -0,0 +1,30 @@
1
+ export enum PropertyName {
2
+ FIELD_NAME = 'fieldName',
3
+ FIRST_VALUE = 'firstValue',
4
+ SECOND_VALUE = 'secondValue',
5
+ }
6
+
7
+ export type RecordInformation = {
8
+ datasources: RecordInformationField;
9
+ fields: RecordInformationField & { result?: string }[];
10
+ primaryKeyResult: RecordInformationField;
11
+ comparisonResult: RecordInformationField;
12
+ missingInDictionaryFields: RecordInformationField[];
13
+ noRuleConfiguredFields: RecordInformationField[];
14
+ };
15
+
16
+ export type RecordInformationField = {
17
+ fieldName: string;
18
+ firstValue: string;
19
+ secondValue: string;
20
+ };
21
+
22
+ export enum AttributeType {
23
+ DATASOURCE = 'datasource',
24
+ FILE = 'file',
25
+ FIELDS = 'fields',
26
+ PRIMARY_KEY_RESULT = 'primaryKeyResult',
27
+ COMPARISON_RESULT = 'comparisonResult',
28
+ MISSING_IN_DICTIONARY_FIELDS = 'missingInDictionaryFields',
29
+ NO_RULE_CONFIGURED_FIELDS = 'noRuleConfiguredFields',
30
+ }
@@ -0,0 +1,61 @@
1
+ import { foundationLayoutComponents } from '@genesislcap/foundation-layout';
2
+ import {
3
+ provideDesignSystem,
4
+ zeroIcon,
5
+ zeroBadge,
6
+ zeroButton,
7
+ zeroTextField,
8
+ zeroSelect,
9
+ zeroTabs,
10
+ zeroTab,
11
+ zeroTabPanel,
12
+ zeroProgressRing,
13
+ zeroSegmentedControl,
14
+ zeroSegmentedItem,
15
+ zeroDivider,
16
+ zeroListboxOption,
17
+ zeroNumberField,
18
+ zeroCheckbox,
19
+ zeroModal,
20
+ zeroDatePicker,
21
+ zeroTextArea,
22
+ zeroRadio,
23
+ zeroRadioGroup,
24
+ } from '@genesislcap/foundation-zero';
25
+ import { zeroGridComponents } from '@genesislcap/foundation-zero-grid-pro';
26
+
27
+ /**
28
+ * @public
29
+ */
30
+ export const registerCommonZeroComponents = async () => {
31
+ /**
32
+ * Register the components the app is using with the system.
33
+ */
34
+ provideDesignSystem().register(
35
+ /**
36
+ * Common across most routes, so batch register these lightweight components upfront.
37
+ */
38
+ zeroIcon(),
39
+ zeroBadge(),
40
+ zeroButton(),
41
+ zeroTextField(),
42
+ zeroSelect(),
43
+ zeroTab(),
44
+ zeroTabs(),
45
+ zeroTabPanel(),
46
+ zeroProgressRing(),
47
+ zeroSegmentedControl(),
48
+ zeroSegmentedItem(),
49
+ zeroDivider(),
50
+ zeroListboxOption(),
51
+ zeroNumberField(),
52
+ zeroCheckbox(),
53
+ zeroModal(),
54
+ zeroDatePicker(),
55
+ zeroTextArea(),
56
+ zeroRadio(),
57
+ zeroRadioGroup(),
58
+ zeroGridComponents,
59
+ foundationLayoutComponents,
60
+ );
61
+ };
@@ -0,0 +1,49 @@
1
+ import { DI, PartialGenesisElementDefinition } from '@genesislcap/web-core';
2
+ import { defaultTemplateOptions, TemplateOptions } from './templates';
3
+
4
+ /**
5
+ * Do not reference any ../main files here. We must avoid ../tags being referenced and therefore setup pre-configuration.
6
+ */
7
+
8
+ /**
9
+ * ReconciliationConfig DI interface.
10
+ *
11
+ * @public
12
+ */
13
+ export interface ReconciliationConfig extends PartialGenesisElementDefinition {
14
+ /**
15
+ * Template options.
16
+ *
17
+ * @remarks
18
+ * Used by host applications to assign MF template options and subcomponent tags to align with the host design system.
19
+ */
20
+ templateOptions: TemplateOptions;
21
+ /**
22
+ * Design System prefix for foundation-form
23
+ *
24
+ * @remarks
25
+ * Used by foundation-form to specify the design system used by the form elements
26
+ */
27
+ designSystemPrefix: string;
28
+ }
29
+
30
+ /**
31
+ * Default ReconciliationConfig DI implementation.
32
+ * @public
33
+ */
34
+ export const defaultReconciliationConfig: ReconciliationConfig = {
35
+ name: 'foundation-reconciliation',
36
+ templateOptions: defaultTemplateOptions,
37
+ designSystemPrefix: 'rapid',
38
+ };
39
+
40
+ /**
41
+ * ReconciliationConfig DI key.
42
+ *
43
+ * @internal
44
+ * @privateRemarks
45
+ * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.
46
+ */
47
+ export const ReconciliationConfig = DI.createInterface<ReconciliationConfig>((x) =>
48
+ x.instance(defaultReconciliationConfig),
49
+ );
@@ -0,0 +1,72 @@
1
+ import { DI, GenesisElement, Registration } from '@genesislcap/web-core';
2
+ import { ReconciliationConfig, defaultReconciliationConfig } from './config';
3
+
4
+ /**
5
+ * @remarks
6
+ * Configure the alert micro frontend for host app integration.
7
+ *
8
+ * @example Providing template options to align to your host application.
9
+ * ```ts
10
+ * const { configure } = await import('@genesislcap/pbc-reconciliation-ui/config');
11
+ * return configure({
12
+ * name: 'rapid-reconciliation',
13
+ * templateOptions: {
14
+ * icon: 'rapid-icon',
15
+ * button: 'rapid-button',
16
+ * textField: 'rapid-text-field',
17
+ * select: 'rapid-select',
18
+ * tabs: 'rapid-tab',
19
+ * tab: 'rapid-tab',
20
+ * tabPanel: 'rapid-tab-panel',
21
+ * segmentedControl: 'rapid-segmented-control',
22
+ * segmentedItem: 'rapid-segmented-item',
23
+ * grid: 'rapid-grid-pro',
24
+ * },
25
+ * designSystemPrefix: 'rapid',
26
+ * });
27
+ * },
28
+ * ```
29
+ *
30
+ * This is just an example, as there is a `RapidReconciliation` which you can import and use.
31
+ *
32
+ * @param config - A partial ReconciliationConfig.
33
+ * @public
34
+ */
35
+ export async function configure(config: Partial<ReconciliationConfig>) {
36
+ /**
37
+ * Merge the configs
38
+ */
39
+ const value: ReconciliationConfig = {
40
+ ...defaultReconciliationConfig,
41
+ ...config,
42
+ };
43
+ if (config.templateOptions) {
44
+ value.templateOptions = {
45
+ ...defaultReconciliationConfig.templateOptions,
46
+ ...config.templateOptions,
47
+ };
48
+ }
49
+ /**
50
+ * Register a new ReconciliationConfig
51
+ */
52
+ DI.getOrCreateDOMContainer().register(
53
+ Registration.instance<ReconciliationConfig>(ReconciliationConfig, value),
54
+ );
55
+ /**
56
+ * Lazily reference and define the micro frontend element post config setting.
57
+ */
58
+ const {
59
+ FoundationReconciliation,
60
+ FoundationReconciliationStyles,
61
+ FoundationReconciliationTemplate,
62
+ } = await import('../main');
63
+ const { name, attributes, shadowOptions, elementOptions } = value;
64
+ return GenesisElement.define(FoundationReconciliation, {
65
+ name,
66
+ template: FoundationReconciliationTemplate,
67
+ styles: FoundationReconciliationStyles,
68
+ attributes,
69
+ shadowOptions,
70
+ elementOptions,
71
+ });
72
+ }
@@ -0,0 +1,2 @@
1
+ export * from './config';
2
+ export * from './configure';
@@ -0,0 +1,80 @@
1
+ import { SyntheticViewTemplate, TemplateElementDependency } from '@genesislcap/web-core';
2
+
3
+ /**
4
+ * TemplateComponents.
5
+ * @public
6
+ */
7
+ export type TemplateComponents = {
8
+ badge: TemplateElementDependency;
9
+ button: TemplateElementDependency;
10
+ divider: TemplateElementDependency;
11
+ grid: TemplateElementDependency;
12
+ icon: TemplateElementDependency;
13
+ option: TemplateElementDependency;
14
+ progress: TemplateElementDependency;
15
+ progressRing: TemplateElementDependency;
16
+ textField: TemplateElementDependency;
17
+ select: TemplateElementDependency;
18
+ segmentedControl: TemplateElementDependency;
19
+ segmentedItem: TemplateElementDependency;
20
+ tabs: TemplateElementDependency;
21
+ tab: TemplateElementDependency;
22
+ tabPanel: TemplateElementDependency;
23
+ numberField: TemplateElementDependency;
24
+ checkbox: TemplateElementDependency;
25
+ switch: TemplateElementDependency;
26
+ modal: TemplateElementDependency;
27
+ dialog: TemplateElementDependency;
28
+ toast: TemplateElementDependency;
29
+ datePicker: TemplateElementDependency;
30
+ textArea: TemplateElementDependency;
31
+ radio: TemplateElementDependency;
32
+ radioGroup: TemplateElementDependency;
33
+ };
34
+
35
+ /**
36
+ * TemplateOptions.
37
+ * @public
38
+ */
39
+ export type TemplateOptions = Partial<TemplateComponents> & {
40
+ /**
41
+ * @remarks
42
+ * Just for reference that template options may be more than tags.
43
+ * @internal
44
+ */
45
+ somePartial?: string | SyntheticViewTemplate;
46
+ };
47
+
48
+ /**
49
+ * defaultTemplateOptions.
50
+ * @remarks
51
+ * The default template options this MF has been created with.
52
+ * @public
53
+ */
54
+ export const defaultTemplateOptions: TemplateOptions = {
55
+ button: 'rapid-button',
56
+ divider: 'rapid-divider',
57
+ grid: 'rapid-grid-pro',
58
+ icon: 'rapid-icon',
59
+ badge: 'rapid-badge',
60
+ option: 'rapid-option',
61
+ progressRing: 'rapid-progress-ring',
62
+ progress: 'rapid-progress',
63
+ select: 'rapid-select',
64
+ segmentedControl: 'rapid-segmented-control',
65
+ segmentedItem: 'rapid-segmented-item',
66
+ switch: 'rapid-switch',
67
+ tab: 'rapid-tab',
68
+ tabPanel: 'rapid-tab-panel',
69
+ numberField: 'rapid-number-field',
70
+ checkbox: 'rapid-checkbox',
71
+ tabs: 'rapid-tabs',
72
+ textField: 'rapid-text-field',
73
+ modal: 'rapid-modal',
74
+ dialog: 'rapid-dialog',
75
+ toast: 'rapid-toast',
76
+ datePicker: 'rapid-date-picker',
77
+ textArea: 'rapid-text-area',
78
+ radio: 'rapid-radio',
79
+ radioGroup: 'rapid-radio-group',
80
+ };
@@ -0,0 +1,7 @@
1
+ declare global {
2
+ const GENX_SANDBOX_API_HOST: string;
3
+ const GENX_SANDBOX_DEFAULT_USER: string;
4
+ const GENX_SANDBOX_DEFAULT_PASSWORD: string;
5
+ }
6
+
7
+ export {};
@@ -0,0 +1 @@
1
+ import('./index');
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './main';
3
+ export * from './sandbox';
@@ -0,0 +1,3 @@
1
+ export * from './main.template';
2
+ export * from './main.styles';
3
+ export * from './main';
@@ -0,0 +1,33 @@
1
+ import { css } from '@genesislcap/web-core';
2
+ import { tabPanelTag, tabsTag } from '../tags';
3
+
4
+ /**
5
+ * @public
6
+ */
7
+ export const FoundationReconciliationStyles = css`
8
+ ${tabsTag},
9
+ ${tabPanelTag} {
10
+ height: 100%;
11
+
12
+ --base-height-multiplier: 10;
13
+ }
14
+
15
+ ${tabsTag} {
16
+ display: flex;
17
+ flex-direction: column;
18
+ width: 100%;
19
+ }
20
+
21
+ ${tabsTag}::part(tablist) {
22
+ place-self: flex-start;
23
+ border-bottom: none;
24
+ }
25
+
26
+ ${tabsTag}::part(tabpanel) {
27
+ display: flex;
28
+ flex-direction: column;
29
+ flex: 1;
30
+ min-height: 0;
31
+ border-top: calc(var(--stroke-width) * 1px) solid var(--neutral-stroke-divider-rest);
32
+ }
33
+ `;