@finos/legend-extension-dsl-data-quality 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/lib/components/DSL_DataQuality_ClassElementDriver.d.ts +46 -0
  4. package/lib/components/DSL_DataQuality_ClassElementDriver.d.ts.map +1 -0
  5. package/lib/components/DSL_DataQuality_ClassElementDriver.js +116 -0
  6. package/lib/components/DSL_DataQuality_ClassElementDriver.js.map +1 -0
  7. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.d.ts +30 -0
  8. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.d.ts.map +1 -0
  9. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.js +161 -0
  10. package/lib/components/DSL_DataQuality_LegendStudioApplicationPlugin.js.map +1 -0
  11. package/lib/components/DSL_DataQuality_LegendStudioPlugin_Extension.d.ts +25 -0
  12. package/lib/components/DSL_DataQuality_LegendStudioPlugin_Extension.d.ts.map +1 -0
  13. package/lib/components/DSL_DataQuality_LegendStudioPlugin_Extension.js +2 -0
  14. package/lib/components/DSL_DataQuality_LegendStudioPlugin_Extension.js.map +1 -0
  15. package/lib/components/DSL_DataQuality_ServiceElementDriver.d.ts +27 -0
  16. package/lib/components/DSL_DataQuality_ServiceElementDriver.d.ts.map +1 -0
  17. package/lib/components/DSL_DataQuality_ServiceElementDriver.js +41 -0
  18. package/lib/components/DSL_DataQuality_ServiceElementDriver.js.map +1 -0
  19. package/lib/components/DSL_NewDataQualityClassValidationElement.d.ts +19 -0
  20. package/lib/components/DSL_NewDataQualityClassValidationElement.d.ts.map +1 -0
  21. package/lib/components/DSL_NewDataQualityClassValidationElement.js +64 -0
  22. package/lib/components/DSL_NewDataQualityClassValidationElement.js.map +1 -0
  23. package/lib/components/DSL_NewDataQualityServiceValidationElement.d.ts +19 -0
  24. package/lib/components/DSL_NewDataQualityServiceValidationElement.d.ts.map +1 -0
  25. package/lib/components/DSL_NewDataQualityServiceValidationElement.js +41 -0
  26. package/lib/components/DSL_NewDataQualityServiceValidationElement.js.map +1 -0
  27. package/lib/components/DataQualityClassValidationEditor.d.ts +19 -0
  28. package/lib/components/DataQualityClassValidationEditor.d.ts.map +1 -0
  29. package/lib/components/DataQualityClassValidationEditor.js +29 -0
  30. package/lib/components/DataQualityClassValidationEditor.js.map +1 -0
  31. package/lib/components/DataQualityConstraintsSelection.d.ts +39 -0
  32. package/lib/components/DataQualityConstraintsSelection.d.ts.map +1 -0
  33. package/lib/components/DataQualityConstraintsSelection.js +133 -0
  34. package/lib/components/DataQualityConstraintsSelection.js.map +1 -0
  35. package/lib/components/DataQualityDataSpaceBuilder.d.ts +22 -0
  36. package/lib/components/DataQualityDataSpaceBuilder.d.ts.map +1 -0
  37. package/lib/components/DataQualityDataSpaceBuilder.js +101 -0
  38. package/lib/components/DataQualityDataSpaceBuilder.js.map +1 -0
  39. package/lib/components/DataQualityExplorerPanel.d.ts +29 -0
  40. package/lib/components/DataQualityExplorerPanel.d.ts.map +1 -0
  41. package/lib/components/DataQualityExplorerPanel.js +185 -0
  42. package/lib/components/DataQualityExplorerPanel.js.map +1 -0
  43. package/lib/components/DataQualityFilterPanel.d.ts +24 -0
  44. package/lib/components/DataQualityFilterPanel.d.ts.map +1 -0
  45. package/lib/components/DataQualityFilterPanel.js +32 -0
  46. package/lib/components/DataQualityFilterPanel.js.map +1 -0
  47. package/lib/components/DataQualityMappingAndRuntimeBuilder.d.ts +22 -0
  48. package/lib/components/DataQualityMappingAndRuntimeBuilder.d.ts.map +1 -0
  49. package/lib/components/DataQualityMappingAndRuntimeBuilder.js +98 -0
  50. package/lib/components/DataQualityMappingAndRuntimeBuilder.js.map +1 -0
  51. package/lib/components/DataQualityResultPanel.d.ts +22 -0
  52. package/lib/components/DataQualityResultPanel.d.ts.map +1 -0
  53. package/lib/components/DataQualityResultPanel.js +110 -0
  54. package/lib/components/DataQualityResultPanel.js.map +1 -0
  55. package/lib/components/DataQualityResultValues.d.ts +24 -0
  56. package/lib/components/DataQualityResultValues.d.ts.map +1 -0
  57. package/lib/components/DataQualityResultValues.js +31 -0
  58. package/lib/components/DataQualityResultValues.js.map +1 -0
  59. package/lib/components/DataQualityServiceValidationEditor.d.ts +19 -0
  60. package/lib/components/DataQualityServiceValidationEditor.d.ts.map +1 -0
  61. package/lib/components/DataQualityServiceValidationEditor.js +29 -0
  62. package/lib/components/DataQualityServiceValidationEditor.js.map +1 -0
  63. package/lib/components/DataQualitySideBar.d.ts +40 -0
  64. package/lib/components/DataQualitySideBar.d.ts.map +1 -0
  65. package/lib/components/DataQualitySideBar.js +78 -0
  66. package/lib/components/DataQualitySideBar.js.map +1 -0
  67. package/lib/components/DataQualityStructuralValidationsPanel.d.ts +22 -0
  68. package/lib/components/DataQualityStructuralValidationsPanel.d.ts.map +1 -0
  69. package/lib/components/DataQualityStructuralValidationsPanel.js +50 -0
  70. package/lib/components/DataQualityStructuralValidationsPanel.js.map +1 -0
  71. package/lib/components/DataQualityTabs.d.ts +22 -0
  72. package/lib/components/DataQualityTabs.d.ts.map +1 -0
  73. package/lib/components/DataQualityTabs.js +58 -0
  74. package/lib/components/DataQualityTabs.js.map +1 -0
  75. package/lib/components/DataQualityValidationEditor.d.ts +23 -0
  76. package/lib/components/DataQualityValidationEditor.d.ts.map +1 -0
  77. package/lib/components/DataQualityValidationEditor.js +24 -0
  78. package/lib/components/DataQualityValidationEditor.js.map +1 -0
  79. package/lib/components/constants/DataQualityConstants.d.ts +24 -0
  80. package/lib/components/constants/DataQualityConstants.d.ts.map +1 -0
  81. package/lib/components/constants/DataQualityConstants.js +25 -0
  82. package/lib/components/constants/DataQualityConstants.js.map +1 -0
  83. package/lib/components/index.d.ts +19 -0
  84. package/lib/components/index.d.ts.map +1 -0
  85. package/lib/components/index.js +19 -0
  86. package/lib/components/index.js.map +1 -0
  87. package/lib/components/states/ConstraintState.d.ts +30 -0
  88. package/lib/components/states/ConstraintState.d.ts.map +1 -0
  89. package/lib/components/states/ConstraintState.js +55 -0
  90. package/lib/components/states/ConstraintState.js.map +1 -0
  91. package/lib/components/states/DataQualityClassValidationState.d.ts +43 -0
  92. package/lib/components/states/DataQualityClassValidationState.d.ts.map +1 -0
  93. package/lib/components/states/DataQualityClassValidationState.js +162 -0
  94. package/lib/components/states/DataQualityClassValidationState.js.map +1 -0
  95. package/lib/components/states/DataQualityGraphFetchTreeState.d.ts +34 -0
  96. package/lib/components/states/DataQualityGraphFetchTreeState.d.ts.map +1 -0
  97. package/lib/components/states/DataQualityGraphFetchTreeState.js +70 -0
  98. package/lib/components/states/DataQualityGraphFetchTreeState.js.map +1 -0
  99. package/lib/components/states/DataQualityQueryBuilderState.d.ts +19 -0
  100. package/lib/components/states/DataQualityQueryBuilderState.d.ts.map +1 -0
  101. package/lib/components/states/DataQualityQueryBuilderState.js +19 -0
  102. package/lib/components/states/DataQualityQueryBuilderState.js.map +1 -0
  103. package/lib/components/states/DataQualityResultState.d.ts +44 -0
  104. package/lib/components/states/DataQualityResultState.d.ts.map +1 -0
  105. package/lib/components/states/DataQualityResultState.js +154 -0
  106. package/lib/components/states/DataQualityResultState.js.map +1 -0
  107. package/lib/components/states/DataQualityServiceValidationState.d.ts +25 -0
  108. package/lib/components/states/DataQualityServiceValidationState.d.ts.map +1 -0
  109. package/lib/components/states/DataQualityServiceValidationState.js +33 -0
  110. package/lib/components/states/DataQualityServiceValidationState.js.map +1 -0
  111. package/lib/components/states/DataQualityState.d.ts +67 -0
  112. package/lib/components/states/DataQualityState.d.ts.map +1 -0
  113. package/lib/components/states/DataQualityState.js +204 -0
  114. package/lib/components/states/DataQualityState.js.map +1 -0
  115. package/lib/components/utils/DataQualityGraphFetchTreeUtil.d.ts +51 -0
  116. package/lib/components/utils/DataQualityGraphFetchTreeUtil.d.ts.map +1 -0
  117. package/lib/components/utils/DataQualityGraphFetchTreeUtil.js +321 -0
  118. package/lib/components/utils/DataQualityGraphFetchTreeUtil.js.map +1 -0
  119. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.d.ts +29 -0
  120. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.d.ts.map +1 -0
  121. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.js +30 -0
  122. package/lib/graph/metamodel/DSL_DataQuality_HashUtils.js.map +1 -0
  123. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.d.ts +22 -0
  124. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.d.ts.map +1 -0
  125. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.js +31 -0
  126. package/lib/graph/metamodel/DSL_DataQuality_PureGraphPlugin.js.map +1 -0
  127. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.d.ts +26 -0
  128. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.d.ts.map +1 -0
  129. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.js +44 -0
  130. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.js.map +1 -0
  131. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts +47 -0
  132. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.d.ts.map +1 -0
  133. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js +75 -0
  134. package/lib/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.js.map +1 -0
  135. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.d.ts +20 -0
  136. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.d.ts.map +1 -0
  137. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.js +20 -0
  138. package/lib/graph-manager/DSL_DataQuality_GraphManagerHelper.js.map +1 -0
  139. package/lib/graph-manager/DSL_DataQuality_GraphManagerPreset.d.ts +20 -0
  140. package/lib/graph-manager/DSL_DataQuality_GraphManagerPreset.d.ts.map +1 -0
  141. package/lib/graph-manager/DSL_DataQuality_GraphManagerPreset.js +30 -0
  142. package/lib/graph-manager/DSL_DataQuality_GraphManagerPreset.js.map +1 -0
  143. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts +26 -0
  144. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.d.ts.map +1 -0
  145. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js +57 -0
  146. package/lib/graph-manager/DSL_DataQuality_GraphModifierHelper.js.map +1 -0
  147. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.d.ts +7 -0
  148. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.d.ts.map +1 -0
  149. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.js +42 -0
  150. package/lib/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.js.map +1 -0
  151. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts +24 -0
  152. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.d.ts.map +1 -0
  153. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js +98 -0
  154. package/lib/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.js.map +1 -0
  155. package/lib/graph-manager/index.d.ts +19 -0
  156. package/lib/graph-manager/index.d.ts.map +1 -0
  157. package/lib/graph-manager/index.js +19 -0
  158. package/lib/graph-manager/index.js.map +1 -0
  159. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.d.ts +27 -0
  160. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.d.ts.map +1 -0
  161. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.js +21 -0
  162. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.js.map +1 -0
  163. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.d.ts +25 -0
  164. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.d.ts.map +1 -0
  165. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.js +140 -0
  166. package/lib/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.js.map +1 -0
  167. package/lib/graph-manager/protocol/pure/DSL_DataQuality_buildGraphManagerExtension.d.ts +18 -0
  168. package/lib/graph-manager/protocol/pure/DSL_DataQuality_buildGraphManagerExtension.d.ts.map +1 -0
  169. package/lib/graph-manager/protocol/pure/DSL_DataQuality_buildGraphManagerExtension.js +20 -0
  170. package/lib/graph-manager/protocol/pure/DSL_DataQuality_buildGraphManagerExtension.js.map +1 -0
  171. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.d.ts +41 -0
  172. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.d.ts.map +1 -0
  173. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.js +95 -0
  174. package/lib/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.js.map +1 -0
  175. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.d.ts +46 -0
  176. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.d.ts.map +1 -0
  177. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.js +76 -0
  178. package/lib/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.js.map +1 -0
  179. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityPropertyGraphFetchTree.d.ts +22 -0
  180. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityPropertyGraphFetchTree.d.ts.map +1 -0
  181. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityPropertyGraphFetchTree.js +32 -0
  182. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityPropertyGraphFetchTree.js.map +1 -0
  183. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityRootGraphFetchTree.d.ts +22 -0
  184. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityRootGraphFetchTree.d.ts.map +1 -0
  185. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityRootGraphFetchTree.js +31 -0
  186. package/lib/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityRootGraphFetchTree.js.map +1 -0
  187. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationBuilderHelper.d.ts +24 -0
  188. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationBuilderHelper.d.ts.map +1 -0
  189. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationBuilderHelper.js +92 -0
  190. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationBuilderHelper.js.map +1 -0
  191. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationSerializer.d.ts +20 -0
  192. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationSerializer.d.ts.map +1 -0
  193. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationSerializer.js +56 -0
  194. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationSerializer.js.map +1 -0
  195. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationTransformer.d.ts +22 -0
  196. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationTransformer.d.ts.map +1 -0
  197. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationTransformer.js +70 -0
  198. package/lib/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationTransformer.js.map +1 -0
  199. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts +29 -0
  200. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.d.ts.map +1 -0
  201. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js +80 -0
  202. package/lib/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.js.map +1 -0
  203. package/lib/index.css +17 -0
  204. package/lib/index.css.map +1 -0
  205. package/lib/package.json +87 -0
  206. package/package.json +87 -0
  207. package/src/components/DSL_DataQuality_ClassElementDriver.tsx +175 -0
  208. package/src/components/DSL_DataQuality_LegendStudioApplicationPlugin.tsx +220 -0
  209. package/src/components/DSL_DataQuality_LegendStudioPlugin_Extension.ts +39 -0
  210. package/src/components/DSL_DataQuality_ServiceElementDriver.tsx +57 -0
  211. package/src/components/DSL_NewDataQualityClassValidationElement.tsx +156 -0
  212. package/src/components/DSL_NewDataQualityServiceValidationElement.tsx +74 -0
  213. package/src/components/DataQualityClassValidationEditor.tsx +49 -0
  214. package/src/components/DataQualityConstraintsSelection.tsx +376 -0
  215. package/src/components/DataQualityDataSpaceBuilder.tsx +274 -0
  216. package/src/components/DataQualityExplorerPanel.tsx +584 -0
  217. package/src/components/DataQualityFilterPanel.tsx +50 -0
  218. package/src/components/DataQualityMappingAndRuntimeBuilder.tsx +224 -0
  219. package/src/components/DataQualityResultPanel.tsx +335 -0
  220. package/src/components/DataQualityResultValues.tsx +61 -0
  221. package/src/components/DataQualityServiceValidationEditor.tsx +49 -0
  222. package/src/components/DataQualitySideBar.tsx +216 -0
  223. package/src/components/DataQualityStructuralValidationsPanel.tsx +105 -0
  224. package/src/components/DataQualityTabs.tsx +104 -0
  225. package/src/components/DataQualityValidationEditor.tsx +52 -0
  226. package/src/components/constants/DataQualityConstants.ts +24 -0
  227. package/src/components/index.ts +19 -0
  228. package/src/components/states/ConstraintState.ts +70 -0
  229. package/src/components/states/DataQualityClassValidationState.ts +308 -0
  230. package/src/components/states/DataQualityGraphFetchTreeState.ts +125 -0
  231. package/src/components/states/DataQualityQueryBuilderState.ts +19 -0
  232. package/src/components/states/DataQualityResultState.ts +217 -0
  233. package/src/components/states/DataQualityServiceValidationState.ts +56 -0
  234. package/src/components/states/DataQualityState.ts +354 -0
  235. package/src/components/utils/DataQualityGraphFetchTreeUtil.ts +592 -0
  236. package/src/graph/metamodel/DSL_DataQuality_HashUtils.ts +29 -0
  237. package/src/graph/metamodel/DSL_DataQuality_PureGraphPlugin.ts +36 -0
  238. package/src/graph/metamodel/pure/packageableElements/data-quality/DataQualityGraphFetchTree.ts +55 -0
  239. package/src/graph/metamodel/pure/packageableElements/data-quality/DataQualityValidationConfiguration.ts +107 -0
  240. package/src/graph-manager/DSL_DataQuality_GraphManagerHelper.ts +46 -0
  241. package/src/graph-manager/DSL_DataQuality_GraphManagerPreset.ts +31 -0
  242. package/src/graph-manager/DSL_DataQuality_GraphModifierHelper.ts +113 -0
  243. package/src/graph-manager/DSL_DataQuality_PureGraphManagerPlugin.ts +59 -0
  244. package/src/graph-manager/action/changeDetection/DSL_DataQuality_ObserverHelper.ts +153 -0
  245. package/src/graph-manager/index.ts +19 -0
  246. package/src/graph-manager/protocol/pure/DSL_DataQuality_PureGraphManagerExtension.ts +59 -0
  247. package/src/graph-manager/protocol/pure/DSL_DataQuality_PureProtocolProcessorPlugin.ts +283 -0
  248. package/src/graph-manager/protocol/pure/DSL_DataQuality_buildGraphManagerExtension.ts +27 -0
  249. package/src/graph-manager/protocol/pure/v1/V1_DSL_Data_Quality_PureGraphManagerExtension.ts +246 -0
  250. package/src/graph-manager/protocol/pure/v1/V1_DataQualityConstraintsConfiguration.ts +103 -0
  251. package/src/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityPropertyGraphFetchTree.ts +37 -0
  252. package/src/graph-manager/protocol/pure/v1/model/graphFetch/V1_DataQualityRootGraphFetchTree.ts +36 -0
  253. package/src/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationBuilderHelper.ts +241 -0
  254. package/src/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationSerializer.ts +113 -0
  255. package/src/graph-manager/protocol/pure/v1/transformation/V1_ValueSpecificationTransformer.ts +139 -0
  256. package/src/graph-manager/protocol/pure/v1/transformation/pureProtocol/V1_DSL_DataQuality_ProtocolHelper.ts +186 -0
  257. package/style/_data-quality-validation-builder.scss +1660 -0
  258. package/style/index.scss +67 -0
  259. package/tsconfig.json +137 -0
  260. package/tsconfig.package.json +9 -0
@@ -0,0 +1,584 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { useEffect, useState } from 'react';
18
+ import { observer } from 'mobx-react-lite';
19
+ import { useDrag } from 'react-dnd';
20
+ import { useApplicationStore } from '@finos/legend-application';
21
+ import { guaranteeNonNullable, prettyCONSTName } from '@finos/legend-shared';
22
+ import type { DataQualityState } from './states/DataQualityState.js';
23
+ import { flowResult } from 'mobx';
24
+ import { DATA_QUALITY_VALIDATION_TEST_ID } from './constants/DataQualityConstants.js';
25
+ import {
26
+ type QueryBuilderExplorerTreeDragSource,
27
+ type QueryBuilderExplorerTreeNodeData,
28
+ QUERY_BUILDER_EXPLORER_TREE_DND_TYPE,
29
+ QueryBuilderExplorerTreePropertyNodeData,
30
+ QueryBuilderExplorerTreeRootNodeData,
31
+ QueryBuilderExplorerTreeSubTypeNodeData,
32
+ checkForDeprecatedNode,
33
+ getQueryBuilderPropertyNodeData,
34
+ getQueryBuilderSubTypeNodeData,
35
+ QueryBuilderPropertyInfoTooltip,
36
+ QueryBuilderRootClassInfoTooltip,
37
+ QueryBuilderSubclassInfoTooltip,
38
+ renderPropertyTypeIcon,
39
+ getQueryBuilderExplorerTreeNodeSortRank,
40
+ } from '@finos/legend-query-builder';
41
+ import {
42
+ type TreeNodeContainerProps,
43
+ type TreeNodeViewProps,
44
+ CheckIcon,
45
+ ChevronDownIcon,
46
+ ChevronRightIcon,
47
+ clsx,
48
+ CompressIcon,
49
+ InfoCircleIcon,
50
+ MenuContentItemIcon,
51
+ MenuContentItemLabel,
52
+ MoreVerticalIcon,
53
+ PanelHeaderActions,
54
+ BlankPanelContent,
55
+ DragPreviewLayer,
56
+ MenuContent,
57
+ MenuContentItem,
58
+ PanelHeader,
59
+ PanelHeaderActionItem,
60
+ PanelLoadingIndicator,
61
+ PURE_ClassIcon,
62
+ TreeView,
63
+ useDragPreviewLayer,
64
+ ControlledDropdownMenu,
65
+ } from '@finos/legend-art';
66
+ import {
67
+ Class,
68
+ DerivedProperty,
69
+ Enumeration,
70
+ PrimitiveType,
71
+ TYPE_CAST_TOKEN,
72
+ getAllClassDerivedProperties,
73
+ getAllClassProperties,
74
+ } from '@finos/legend-graph';
75
+
76
+ export const QueryBuilderExplorerTreeNodeContainer = observer(
77
+ (
78
+ props: TreeNodeContainerProps<
79
+ QueryBuilderExplorerTreeNodeData,
80
+ {
81
+ dataQualityState: DataQualityState;
82
+ }
83
+ >,
84
+ ) => {
85
+ const { node, level, stepPaddingInRem, onNodeSelect, innerProps } = props;
86
+ const { dataQualityState } = innerProps;
87
+ const { dataQualityQueryBuilderState } = dataQualityState;
88
+ const [isSelectedFromContextMenu] = useState(false);
89
+ const explorerState = dataQualityQueryBuilderState.explorerState;
90
+ const [, dragConnector, dragPreviewConnector] = useDrag<{
91
+ node?: QueryBuilderExplorerTreeNodeData;
92
+ }>(
93
+ () => ({
94
+ type:
95
+ node.type instanceof Enumeration
96
+ ? QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY
97
+ : node.type instanceof Class
98
+ ? QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.CLASS_PROPERTY
99
+ : QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
100
+ item: () =>
101
+ node instanceof QueryBuilderExplorerTreeSubTypeNodeData
102
+ ? {}
103
+ : { node },
104
+ }),
105
+ [node],
106
+ );
107
+ useDragPreviewLayer(dragPreviewConnector);
108
+
109
+ const isExpandable = Boolean(node.childrenIds.length);
110
+ const isDerivedProperty =
111
+ node instanceof QueryBuilderExplorerTreePropertyNodeData &&
112
+ node.property instanceof DerivedProperty;
113
+ const isMultiple =
114
+ (node instanceof QueryBuilderExplorerTreePropertyNodeData &&
115
+ (node.property.multiplicity.upperBound === undefined ||
116
+ node.property.multiplicity.upperBound > 1)) ||
117
+ (node instanceof QueryBuilderExplorerTreeSubTypeNodeData &&
118
+ (node.multiplicity.upperBound === undefined ||
119
+ node.multiplicity.upperBound > 1));
120
+ const allowPreview =
121
+ node.mappingData.mapped &&
122
+ node instanceof QueryBuilderExplorerTreePropertyNodeData &&
123
+ node.type instanceof PrimitiveType &&
124
+ !node.isPartOfDerivedPropertyBranch;
125
+ const nodeExpandIcon = isExpandable ? (
126
+ node.isOpen ? (
127
+ <ChevronDownIcon />
128
+ ) : (
129
+ <ChevronRightIcon />
130
+ )
131
+ ) : (
132
+ <div />
133
+ );
134
+ const propertyName = explorerState.humanizePropertyName
135
+ ? node instanceof QueryBuilderExplorerTreeSubTypeNodeData
136
+ ? TYPE_CAST_TOKEN + prettyCONSTName(node.label)
137
+ : prettyCONSTName(node.label)
138
+ : node instanceof QueryBuilderExplorerTreeSubTypeNodeData
139
+ ? TYPE_CAST_TOKEN + node.label
140
+ : node.label;
141
+ const selectNode = (): void => onNodeSelect?.(node);
142
+
143
+ if (
144
+ !node.mappingData.mapped &&
145
+ // NOTE: we always want to show at least the root node
146
+ !(node instanceof QueryBuilderExplorerTreeRootNodeData) &&
147
+ !explorerState.showUnmappedProperties
148
+ ) {
149
+ return null;
150
+ }
151
+ return (
152
+ <div
153
+ className={clsx(
154
+ 'data-quality-tree-view__node__container data-quality-validation-explorer-tree__node__container',
155
+ {
156
+ 'data-quality-validation-explorer-tree__node__container--selected-from-context-menu':
157
+ isSelectedFromContextMenu,
158
+ 'data-quality-validation-explorer-tree__node__container--unmapped':
159
+ !node.mappingData.mapped,
160
+ 'data-quality-validation-explorer-tree__node__container--selected':
161
+ node.isSelected,
162
+ },
163
+ )}
164
+ title={
165
+ !node.mappingData.mapped
166
+ ? node instanceof QueryBuilderExplorerTreeRootNodeData
167
+ ? 'Root class is not mapped'
168
+ : 'Property is not mapped'
169
+ : undefined
170
+ }
171
+ onClick={selectNode}
172
+ ref={node.mappingData.mapped ? dragConnector : undefined}
173
+ style={{
174
+ paddingLeft: `${(level - 1) * (stepPaddingInRem ?? 1) + 0.5}rem`,
175
+ display: 'flex',
176
+ }}
177
+ >
178
+ {node instanceof QueryBuilderExplorerTreeRootNodeData && (
179
+ <>
180
+ <div className="data-quality-tree-view__node__icon data-quality-validation-explorer-tree__node__icon">
181
+ <div className="data-quality-validation-explorer-tree__expand-icon">
182
+ {nodeExpandIcon}
183
+ </div>
184
+ <div className="data-quality-validation-explorer-tree__type-icon">
185
+ <PURE_ClassIcon />
186
+ </div>
187
+ </div>
188
+ <div className="data-quality-tree-view__node__label data-quality-validation-explorer-tree__node__label data-quality-validation-explorer-tree__node__label--with-action">
189
+ {node.label}
190
+ </div>
191
+ <div className="data-quality-validation-explorer-tree__node__actions">
192
+ <QueryBuilderRootClassInfoTooltip
193
+ _class={guaranteeNonNullable(
194
+ dataQualityQueryBuilderState.class,
195
+ )}
196
+ >
197
+ <div
198
+ className="data-quality-validation-explorer-tree__node__action data-quality-validation-explorer-tree__node__info"
199
+ data-testid={
200
+ DATA_QUALITY_VALIDATION_TEST_ID.DATA_QUALITY_VALIDATION_TOOLTIP_ICON
201
+ }
202
+ >
203
+ <InfoCircleIcon />
204
+ </div>
205
+ </QueryBuilderRootClassInfoTooltip>
206
+ </div>
207
+ </>
208
+ )}
209
+ {(node instanceof QueryBuilderExplorerTreePropertyNodeData ||
210
+ node instanceof QueryBuilderExplorerTreeSubTypeNodeData) && (
211
+ <>
212
+ <div
213
+ className="data-quality-tree-view__node__icon data-quality-validation-explorer-tree__node__icon"
214
+ ref={node.elementRef}
215
+ >
216
+ <div className="data-quality-validation-explorer-tree__expand-icon">
217
+ {nodeExpandIcon}
218
+ </div>
219
+ <div className="data-quality-validation-explorer-tree__type-icon">
220
+ {renderPropertyTypeIcon(node.type)}
221
+ </div>
222
+ </div>
223
+ <div
224
+ className={clsx(
225
+ 'data-quality-tree-view__node__label data-quality-validation-explorer-tree__node__label data-quality-validation-explorer-tree__node__label--with-action',
226
+ {
227
+ 'data-quality-validation-explorer-tree__node__label--with-preview':
228
+ allowPreview,
229
+ },
230
+ {
231
+ 'data-quality-validation-explorer-tree__node__label--highlight':
232
+ node.isHighlighting,
233
+ },
234
+ )}
235
+ onAnimationEnd={() => node.setIsHighlighting(false)}
236
+ >
237
+ <div
238
+ className={clsx(
239
+ 'data-quality-validation-explorer-tree__node__label--property__name',
240
+ {
241
+ 'data-quality-validation-explorer-tree__node__label--deprecated':
242
+ checkForDeprecatedNode(
243
+ node,
244
+ explorerState.queryBuilderState.graphManagerState.graph,
245
+ explorerState.nonNullableTreeData,
246
+ ),
247
+ },
248
+ )}
249
+ >
250
+ {propertyName}
251
+ </div>
252
+ {isDerivedProperty && (
253
+ <div
254
+ className="data-quality-validation-explorer-tree__node__label__derived-property"
255
+ title="Property is derived and may require user to specify parameter values"
256
+ >
257
+ (...)
258
+ </div>
259
+ )}
260
+ {isMultiple && (
261
+ <div
262
+ className="data-quality-validation-explorer-tree__node__label__multiple"
263
+ title="Multiple values of this property can cause row explosion"
264
+ >
265
+ *
266
+ </div>
267
+ )}
268
+ </div>
269
+ <div className="data-quality-validation-explorer-tree__node__actions">
270
+ {node instanceof QueryBuilderExplorerTreePropertyNodeData && (
271
+ <QueryBuilderPropertyInfoTooltip
272
+ title={propertyName}
273
+ property={node.property}
274
+ path={node.id}
275
+ isMapped={node.mappingData.mapped}
276
+ type={node.type}
277
+ >
278
+ <div
279
+ className="data-quality-validation-explorer-tree__node__action data-quality-validation-explorer-tree__node__info"
280
+ data-testid={
281
+ DATA_QUALITY_VALIDATION_TEST_ID.DATA_QUALITY_VALIDATION_TOOLTIP_ICON
282
+ }
283
+ >
284
+ <InfoCircleIcon />
285
+ </div>
286
+ </QueryBuilderPropertyInfoTooltip>
287
+ )}
288
+ {node instanceof QueryBuilderExplorerTreeSubTypeNodeData && (
289
+ <QueryBuilderSubclassInfoTooltip
290
+ subclass={node.subclass}
291
+ path={node.id}
292
+ isMapped={node.mappingData.mapped}
293
+ multiplicity={node.multiplicity}
294
+ >
295
+ <div
296
+ className="data-quality-validation-explorer-tree__node__action data-quality-validation-explorer-tree__node__info"
297
+ data-testid={
298
+ DATA_QUALITY_VALIDATION_TEST_ID.DATA_QUALITY_VALIDATION_TOOLTIP_ICON
299
+ }
300
+ >
301
+ <InfoCircleIcon />
302
+ </div>
303
+ </QueryBuilderSubclassInfoTooltip>
304
+ )}
305
+ </div>
306
+ </>
307
+ )}
308
+ </div>
309
+ );
310
+ },
311
+ );
312
+
313
+ const QueryBuilderExplorerTreeNodeView = observer(
314
+ (
315
+ props: TreeNodeViewProps<
316
+ QueryBuilderExplorerTreeNodeData,
317
+ {
318
+ dataQualityState: DataQualityState;
319
+ }
320
+ >,
321
+ ) => {
322
+ const {
323
+ node,
324
+ level,
325
+ onNodeSelect,
326
+ getChildNodes,
327
+ stepPaddingInRem,
328
+ innerProps,
329
+ } = props;
330
+ const { dataQualityState } = innerProps;
331
+ const { dataQualityQueryBuilderState } = dataQualityState;
332
+ if (
333
+ !node.mappingData.mapped &&
334
+ // NOTE: we always want to show at least the root node
335
+ !(node instanceof QueryBuilderExplorerTreeRootNodeData) &&
336
+ !dataQualityQueryBuilderState.explorerState.showUnmappedProperties
337
+ ) {
338
+ return null;
339
+ }
340
+ return (
341
+ <div className="data-quality-tree-view__node__block">
342
+ <QueryBuilderExplorerTreeNodeContainer
343
+ node={node}
344
+ level={level + 1}
345
+ stepPaddingInRem={stepPaddingInRem}
346
+ onNodeSelect={onNodeSelect}
347
+ innerProps={innerProps}
348
+ />
349
+ {node.isOpen &&
350
+ getChildNodes(node).map((childNode) => (
351
+ <QueryBuilderExplorerTreeNodeView
352
+ key={childNode.id}
353
+ node={childNode}
354
+ level={level + 1}
355
+ onNodeSelect={onNodeSelect}
356
+ getChildNodes={getChildNodes}
357
+ innerProps={innerProps}
358
+ />
359
+ ))}
360
+ </div>
361
+ );
362
+ },
363
+ );
364
+
365
+ const QueryBuilderExplorerTree = observer(
366
+ (props: { dataQualityState: DataQualityState }) => {
367
+ const { dataQualityState } = props;
368
+ const { dataQualityQueryBuilderState } = dataQualityState;
369
+ const explorerState = dataQualityQueryBuilderState.explorerState;
370
+ const treeData = explorerState.nonNullableTreeData;
371
+ const onNodeSelect = (node: QueryBuilderExplorerTreeNodeData): void => {
372
+ if (node.childrenIds.length) {
373
+ node.isOpen = !node.isOpen;
374
+ if (
375
+ node.isOpen &&
376
+ node instanceof QueryBuilderExplorerTreePropertyNodeData &&
377
+ node.type instanceof Class
378
+ ) {
379
+ getAllClassProperties(node.type)
380
+ .concat(getAllClassDerivedProperties(node.type))
381
+ .forEach((property) => {
382
+ const propertyTreeNodeData = getQueryBuilderPropertyNodeData(
383
+ property,
384
+ node,
385
+ guaranteeNonNullable(
386
+ explorerState.mappingModelCoverageAnalysisResult,
387
+ ),
388
+ );
389
+ if (propertyTreeNodeData) {
390
+ treeData.nodes.set(
391
+ propertyTreeNodeData.id,
392
+ propertyTreeNodeData,
393
+ );
394
+ }
395
+ });
396
+ node.type._subclasses.forEach((subclass) => {
397
+ const subTypeTreeNodeData = getQueryBuilderSubTypeNodeData(
398
+ subclass,
399
+ node,
400
+ guaranteeNonNullable(
401
+ explorerState.mappingModelCoverageAnalysisResult,
402
+ ),
403
+ );
404
+ treeData.nodes.set(subTypeTreeNodeData.id, subTypeTreeNodeData);
405
+ });
406
+ }
407
+ }
408
+ explorerState.refreshTree();
409
+ };
410
+ const getChildNodes = (
411
+ node: QueryBuilderExplorerTreeNodeData,
412
+ ): QueryBuilderExplorerTreeNodeData[] => {
413
+ const dataToReturn = node.childrenIds
414
+ .map((id) => treeData.nodes.get(id))
415
+ .filter(
416
+ (
417
+ childNode,
418
+ ): childNode is
419
+ | QueryBuilderExplorerTreePropertyNodeData
420
+ | QueryBuilderExplorerTreeSubTypeNodeData =>
421
+ childNode instanceof QueryBuilderExplorerTreeSubTypeNodeData ||
422
+ childNode instanceof QueryBuilderExplorerTreePropertyNodeData,
423
+ )
424
+ // simple properties come first
425
+ .sort((a, b) => a.label.localeCompare(b.label))
426
+ .sort(
427
+ (a, b) =>
428
+ getQueryBuilderExplorerTreeNodeSortRank(b) -
429
+ getQueryBuilderExplorerTreeNodeSortRank(a),
430
+ );
431
+ return dataToReturn;
432
+ };
433
+
434
+ return (
435
+ <TreeView
436
+ components={{
437
+ TreeNodeContainer: QueryBuilderExplorerTreeNodeContainer,
438
+ TreeNodeView: QueryBuilderExplorerTreeNodeView,
439
+ }}
440
+ className="data-quality-validation-explorer-tree__root"
441
+ treeData={treeData}
442
+ onNodeSelect={onNodeSelect}
443
+ getChildNodes={getChildNodes}
444
+ innerProps={{
445
+ dataQualityState,
446
+ }}
447
+ />
448
+ );
449
+ },
450
+ );
451
+ export const DataQualityExplorerPanel = observer(
452
+ (props: { dataQualityState: DataQualityState }) => {
453
+ const { dataQualityState } = props;
454
+ const { dataQualityQueryBuilderState } = dataQualityState;
455
+ const explorerState = dataQualityQueryBuilderState.explorerState;
456
+ const applicationStore = useApplicationStore();
457
+ const collapseTree = (): void => {
458
+ if (explorerState.treeData) {
459
+ Array.from(explorerState.treeData.nodes.values()).forEach((node) => {
460
+ node.isOpen = false;
461
+ });
462
+ explorerState.refreshTree();
463
+ }
464
+ };
465
+ const toggleShowUnmappedProperties = (): void =>
466
+ explorerState.setShowUnmappedProperties(
467
+ !explorerState.showUnmappedProperties,
468
+ );
469
+ const toggleHumanizePropertyName = (): void =>
470
+ explorerState.setHumanizePropertyName(
471
+ !explorerState.humanizePropertyName,
472
+ );
473
+ const toggleHighlightUsedProperties = (): void =>
474
+ explorerState.setHighlightUsedProperties(
475
+ !explorerState.highlightUsedProperties,
476
+ );
477
+
478
+ useEffect(() => {
479
+ flowResult(explorerState.analyzeMappingModelCoverage()).catch((error) => {
480
+ applicationStore.alertUnhandledError(error);
481
+ });
482
+ }, [
483
+ applicationStore,
484
+ explorerState,
485
+ dataQualityQueryBuilderState.executionContextState.mapping,
486
+ ]);
487
+ return (
488
+ <div
489
+ data-testid={
490
+ DATA_QUALITY_VALIDATION_TEST_ID.DATA_QUALITY_VALIDATION_EXPLORER
491
+ }
492
+ className={clsx('panel data-quality-validation__explorer', {
493
+ backdrop__element: applicationStore.layoutService.showBackdrop,
494
+ })}
495
+ >
496
+ <PanelHeader title="explorer">
497
+ <PanelHeaderActions>
498
+ <PanelHeaderActionItem onClick={collapseTree} title="Collapse Tree">
499
+ <CompressIcon />
500
+ </PanelHeaderActionItem>
501
+ <ControlledDropdownMenu
502
+ className="panel__header__action"
503
+ title="Show Options Menu..."
504
+ content={
505
+ <MenuContent>
506
+ <MenuContentItem onClick={toggleShowUnmappedProperties}>
507
+ <MenuContentItemIcon>
508
+ {explorerState.showUnmappedProperties ? (
509
+ <CheckIcon />
510
+ ) : null}
511
+ </MenuContentItemIcon>
512
+ <MenuContentItemLabel>
513
+ Show Unmapped Properties
514
+ </MenuContentItemLabel>
515
+ </MenuContentItem>
516
+ <MenuContentItem onClick={toggleHumanizePropertyName}>
517
+ <MenuContentItemIcon>
518
+ {explorerState.humanizePropertyName ? (
519
+ <CheckIcon />
520
+ ) : null}
521
+ </MenuContentItemIcon>
522
+ <MenuContentItemLabel>
523
+ Humanize Property Name
524
+ </MenuContentItemLabel>
525
+ </MenuContentItem>
526
+ <MenuContentItem onClick={toggleHighlightUsedProperties}>
527
+ <MenuContentItemIcon>
528
+ {explorerState.highlightUsedProperties ? (
529
+ <CheckIcon />
530
+ ) : null}
531
+ </MenuContentItemIcon>
532
+ <MenuContentItemLabel>
533
+ Highlight already used properties
534
+ </MenuContentItemLabel>
535
+ </MenuContentItem>
536
+ </MenuContent>
537
+ }
538
+ menuProps={{
539
+ anchorOrigin: { vertical: 'bottom', horizontal: 'left' },
540
+ transformOrigin: { vertical: 'top', horizontal: 'left' },
541
+ elevation: 7,
542
+ }}
543
+ >
544
+ <MoreVerticalIcon className="data-quality-validation__icon__more-options" />
545
+ </ControlledDropdownMenu>
546
+ </PanelHeaderActions>
547
+ </PanelHeader>
548
+
549
+ <div className="panel__content data-quality-validation-explorer-tree__content">
550
+ <PanelLoadingIndicator
551
+ isLoading={
552
+ explorerState.mappingModelCoverageAnalysisState.isInProgress
553
+ }
554
+ />
555
+ <DragPreviewLayer
556
+ labelGetter={(item: QueryBuilderExplorerTreeDragSource): string =>
557
+ explorerState.humanizePropertyName
558
+ ? prettyCONSTName(item.node.label)
559
+ : item.node.label
560
+ }
561
+ types={Object.values(QUERY_BUILDER_EXPLORER_TREE_DND_TYPE)}
562
+ />
563
+ {explorerState.mappingModelCoverageAnalysisState.isInProgress ? (
564
+ <BlankPanelContent>
565
+ {explorerState.mappingModelCoverageAnalysisState.message}
566
+ </BlankPanelContent>
567
+ ) : (
568
+ <>
569
+ {!explorerState.treeData && (
570
+ <BlankPanelContent>
571
+ Specify the class, mapping, and runtime to start building
572
+ query
573
+ </BlankPanelContent>
574
+ )}
575
+ {explorerState.treeData && (
576
+ <QueryBuilderExplorerTree dataQualityState={dataQualityState} />
577
+ )}
578
+ </>
579
+ )}
580
+ </div>
581
+ </div>
582
+ );
583
+ },
584
+ );
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { observer } from 'mobx-react-lite';
18
+ import type { DataQualityState } from './states/DataQualityState.js';
19
+ import {
20
+ type QueryBuilderFilterState,
21
+ QueryBuilderFilterPanel,
22
+ } from '@finos/legend-query-builder';
23
+ import { useEffect } from 'react';
24
+ import { reaction } from 'mobx';
25
+
26
+ export const DataQualityFilterPanel = observer(
27
+ (props: {
28
+ dataQualityState: DataQualityState;
29
+ filterState: QueryBuilderFilterState;
30
+ }) => {
31
+ const { dataQualityState } = props;
32
+ const { dataQualityQueryBuilderState } = dataQualityState;
33
+
34
+ useEffect(() => {
35
+ const disposer = reaction(
36
+ () => dataQualityQueryBuilderState.filterState.hashCode,
37
+ () => {
38
+ dataQualityState.updateFilterElement();
39
+ },
40
+ );
41
+ return () => disposer();
42
+ }, [dataQualityState, dataQualityQueryBuilderState.filterState.hashCode]);
43
+
44
+ return (
45
+ <QueryBuilderFilterPanel
46
+ queryBuilderState={dataQualityQueryBuilderState}
47
+ />
48
+ );
49
+ },
50
+ );