@urbanos/react-discovery-ui 2.1.43

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 (316) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -0
  3. package/lib/ReactDiscoveryUI.js +103 -0
  4. package/lib/ReactDiscoveryUI.scss +13 -0
  5. package/lib/assets/arrow.svg +6 -0
  6. package/lib/assets/blk-database.svg +48 -0
  7. package/lib/assets/chart.svg +1 -0
  8. package/lib/assets/down.png +0 -0
  9. package/lib/assets/down.svg +1 -0
  10. package/lib/assets/folder_icon.png +0 -0
  11. package/lib/assets/folder_icon.svg +1 -0
  12. package/lib/assets/ic_arrow.svg +15 -0
  13. package/lib/assets/loadingicon.svg +57 -0
  14. package/lib/assets/no_image.png +0 -0
  15. package/lib/assets/plus.png +0 -0
  16. package/lib/assets/plus.svg +1 -0
  17. package/lib/assets/user.svg +1 -0
  18. package/lib/auth/auth0-client-provider.js +37 -0
  19. package/lib/auth/auth0-client-provider.test.js +33 -0
  20. package/lib/auth/auth0-wrapper.js +155 -0
  21. package/lib/auth/auth0-wrapper.test.js +100 -0
  22. package/lib/components/auth0-login-zone/auth0-login-zone.js +147 -0
  23. package/lib/components/auth0-login-zone/auth0-login-zone.test.js +177 -0
  24. package/lib/components/auth0-login-zone/index.js +9 -0
  25. package/lib/components/code-editor/code-editor.css +173 -0
  26. package/lib/components/code-editor/code-editor.js +64 -0
  27. package/lib/components/code-editor/index.js +9 -0
  28. package/lib/components/collapsable-box/collapsable-box.js +81 -0
  29. package/lib/components/collapsable-box/collapsable-box.scss +39 -0
  30. package/lib/components/collapsable-box/collapsable-box.test.js +87 -0
  31. package/lib/components/collapsable-box/index.js +9 -0
  32. package/lib/components/data-card/data-card.js +63 -0
  33. package/lib/components/data-card/data-card.scss +93 -0
  34. package/lib/components/data-card/data-card.test.js +74 -0
  35. package/lib/components/data-card/index.js +9 -0
  36. package/lib/components/data-view/data-view.js +194 -0
  37. package/lib/components/data-view/data-view.scss +39 -0
  38. package/lib/components/data-view/data-view.test.js +155 -0
  39. package/lib/components/data-view/index.js +9 -0
  40. package/lib/components/dataset-api-doc/api-example.js +120 -0
  41. package/lib/components/dataset-api-doc/api-example.scss +84 -0
  42. package/lib/components/dataset-api-doc/api-example.test.js +88 -0
  43. package/lib/components/dataset-api-doc/dataset-api-doc.js +117 -0
  44. package/lib/components/dataset-api-doc/dataset-api-doc.scss +8 -0
  45. package/lib/components/dataset-api-doc/dataset-api-doc.test.js +42 -0
  46. package/lib/components/dataset-api-doc/index.js +9 -0
  47. package/lib/components/dataset-details/dataset-details.js +64 -0
  48. package/lib/components/dataset-details/dataset-details.scss +58 -0
  49. package/lib/components/dataset-details/dataset-details.test.js +38 -0
  50. package/lib/components/dataset-details/index.js +9 -0
  51. package/lib/components/dataset-dictionary/dataset-dictionary.js +127 -0
  52. package/lib/components/dataset-dictionary/dataset-dictionary.scss +42 -0
  53. package/lib/components/dataset-dictionary/dataset-dictionary.test.js +286 -0
  54. package/lib/components/dataset-dictionary/index.js +9 -0
  55. package/lib/components/dataset-list/dataset-list.js +22 -0
  56. package/lib/components/dataset-list/dataset-list.scss +9 -0
  57. package/lib/components/dataset-list/dataset-list.test.js +16 -0
  58. package/lib/components/dataset-list/index.js +9 -0
  59. package/lib/components/dataset-metadata/dataset-metadata.js +169 -0
  60. package/lib/components/dataset-metadata/dataset-metadata.scss +34 -0
  61. package/lib/components/dataset-metadata/dataset-metadata.test.js +24 -0
  62. package/lib/components/dataset-metadata/index.js +9 -0
  63. package/lib/components/dataset-preview/connector.js +26 -0
  64. package/lib/components/dataset-preview/dataset-preview.js +58 -0
  65. package/lib/components/dataset-preview/dataset-preview.scss +24 -0
  66. package/lib/components/dataset-preview/dataset-preview.test.js +34 -0
  67. package/lib/components/dataset-preview/index.js +9 -0
  68. package/lib/components/dataset-quality/dataset-quality.js +56 -0
  69. package/lib/components/dataset-quality/dataset-quality.scss +24 -0
  70. package/lib/components/dataset-quality/dataset-quality.test.js +34 -0
  71. package/lib/components/dataset-quality/index.js +9 -0
  72. package/lib/components/dataset-recommendations/connector.js +24 -0
  73. package/lib/components/dataset-recommendations/dataset-recommendations.js +47 -0
  74. package/lib/components/dataset-recommendations/dataset-recommendations.scss +17 -0
  75. package/lib/components/dataset-recommendations/dataset-recommendations.test.js +37 -0
  76. package/lib/components/dataset-recommendations/index.js +9 -0
  77. package/lib/components/detail-toggle-icon/detail-toggle-icon.js +41 -0
  78. package/lib/components/detail-toggle-icon/detail-toggle-icon.scss +13 -0
  79. package/lib/components/detail-toggle-icon/detail-toggle-icon.test.js +20 -0
  80. package/lib/components/detail-toggle-icon/index.js +9 -0
  81. package/lib/components/facet-list/facet-list.js +47 -0
  82. package/lib/components/facet-list/facet-list.scss +19 -0
  83. package/lib/components/facet-list/facet-list.test.js +94 -0
  84. package/lib/components/facet-list/index.js +9 -0
  85. package/lib/components/facet-sidebar/facet-sidebar.js +101 -0
  86. package/lib/components/facet-sidebar/facet-sidebar.scss +129 -0
  87. package/lib/components/facet-sidebar/facet-sidebar.test.js +93 -0
  88. package/lib/components/facet-sidebar/index.js +9 -0
  89. package/lib/components/generic-elements/alert-component/alert-component.js +51 -0
  90. package/lib/components/generic-elements/alert-component/alert-component.scss +26 -0
  91. package/lib/components/generic-elements/alert-component/alert-component.test.js +26 -0
  92. package/lib/components/generic-elements/alert-component/index.js +9 -0
  93. package/lib/components/generic-elements/arrow-button/arrow-button.js +30 -0
  94. package/lib/components/generic-elements/arrow-button/index.js +9 -0
  95. package/lib/components/generic-elements/auto-anchoring-popover/index.js +61 -0
  96. package/lib/components/generic-elements/back-button/back-button.js +14 -0
  97. package/lib/components/generic-elements/back-button/back-button.scss +14 -0
  98. package/lib/components/generic-elements/back-button/index.js +9 -0
  99. package/lib/components/generic-elements/call-to-action-button/call-to-action-button.js +118 -0
  100. package/lib/components/generic-elements/call-to-action-button/call-to-action-button.scss +19 -0
  101. package/lib/components/generic-elements/call-to-action-button/call-to-action-button.test.js +68 -0
  102. package/lib/components/generic-elements/call-to-action-button/index.js +9 -0
  103. package/lib/components/generic-elements/chart-icon/index.js +23 -0
  104. package/lib/components/generic-elements/checkbox/checkbox.js +50 -0
  105. package/lib/components/generic-elements/checkbox/checkbox.scss +44 -0
  106. package/lib/components/generic-elements/checkbox/checkbox.test.js +71 -0
  107. package/lib/components/generic-elements/checkbox/index.js +9 -0
  108. package/lib/components/generic-elements/error-component/error-component.js +21 -0
  109. package/lib/components/generic-elements/error-component/error-component.scss +16 -0
  110. package/lib/components/generic-elements/error-component/error-component.test.js +12 -0
  111. package/lib/components/generic-elements/error-component/index.js +9 -0
  112. package/lib/components/generic-elements/folder-icon/index.js +23 -0
  113. package/lib/components/generic-elements/generated-link/generated-link.js +25 -0
  114. package/lib/components/generic-elements/generated-link/index.js +13 -0
  115. package/lib/components/generic-elements/loading-element/index.js +9 -0
  116. package/lib/components/generic-elements/loading-element/loading-element.js +22 -0
  117. package/lib/components/generic-elements/loading-element/loading-element.scss +6 -0
  118. package/lib/components/generic-elements/loading-element/loading-element.test.js +11 -0
  119. package/lib/components/generic-elements/paginator/index.js +9 -0
  120. package/lib/components/generic-elements/paginator/paginator.js +84 -0
  121. package/lib/components/generic-elements/paginator/paginator.scss +38 -0
  122. package/lib/components/generic-elements/paginator/paginator.test.js +140 -0
  123. package/lib/components/generic-elements/plus-icon/index.js +21 -0
  124. package/lib/components/generic-elements/save-indicator/index.js +9 -0
  125. package/lib/components/generic-elements/save-indicator/save-indicator.js +39 -0
  126. package/lib/components/generic-elements/save-indicator/save-indicator.scss +31 -0
  127. package/lib/components/generic-elements/save-indicator/save-indicator.test.js +89 -0
  128. package/lib/components/generic-elements/search/index.js +9 -0
  129. package/lib/components/generic-elements/search/search.js +93 -0
  130. package/lib/components/generic-elements/search/search.scss +90 -0
  131. package/lib/components/generic-elements/search/search.test.js +41 -0
  132. package/lib/components/generic-elements/select/index.js +9 -0
  133. package/lib/components/generic-elements/select/select.js +44 -0
  134. package/lib/components/generic-elements/select/select.scss +22 -0
  135. package/lib/components/generic-elements/select/select.test.js +34 -0
  136. package/lib/components/generic-elements/share-link/index.js +9 -0
  137. package/lib/components/generic-elements/share-link/share-link.js +23 -0
  138. package/lib/components/generic-elements/share-link/share-link.scss +17 -0
  139. package/lib/components/generic-elements/share-link/share-link.test.js +28 -0
  140. package/lib/components/generic-elements/sql-icon/index.js +20 -0
  141. package/lib/components/generic-elements/tab-button/index.js +9 -0
  142. package/lib/components/generic-elements/tab-button/tab-button.js +25 -0
  143. package/lib/components/generic-elements/tab-button/tab-button.scss +27 -0
  144. package/lib/components/generic-elements/visualize-button/index.js +9 -0
  145. package/lib/components/generic-elements/visualize-button/visualize-button.js +37 -0
  146. package/lib/components/generic-elements/visualize-button/visualize-button.scss +14 -0
  147. package/lib/components/login-zone/connector.js +25 -0
  148. package/lib/components/login-zone/index.js +9 -0
  149. package/lib/components/login-zone/login-svgs-and-text.js +39 -0
  150. package/lib/components/login-zone/login-zone.js +21 -0
  151. package/lib/components/login-zone/login-zone.scss +115 -0
  152. package/lib/components/login-zone/login-zone.test.js +17 -0
  153. package/lib/components/login-zone/login.js +48 -0
  154. package/lib/components/login-zone/logout.js +39 -0
  155. package/lib/components/network-loading-element/connector.js +17 -0
  156. package/lib/components/network-loading-element/index.js +9 -0
  157. package/lib/components/network-loading-element/network-loading-element.js +23 -0
  158. package/lib/components/network-loading-element/network-loading-element.scss +21 -0
  159. package/lib/components/network-loading-element/network-loading-element.test.js +34 -0
  160. package/lib/components/organization/index.js +9 -0
  161. package/lib/components/organization/organization.js +27 -0
  162. package/lib/components/organization/organization.scss +32 -0
  163. package/lib/components/protected-route/protected-route.js +101 -0
  164. package/lib/components/protected-route/protected-route.scss +4 -0
  165. package/lib/components/protected-route/protected-route.test.js +63 -0
  166. package/lib/components/query-form/index.js +9 -0
  167. package/lib/components/query-form/query-form.js +262 -0
  168. package/lib/components/query-form/query-form.scss +167 -0
  169. package/lib/components/query-form/query-form.test.js +248 -0
  170. package/lib/components/recommendation-list/index.js +9 -0
  171. package/lib/components/recommendation-list/recommendation-list.js +72 -0
  172. package/lib/components/recommendation-list/recommendation-list.scss +61 -0
  173. package/lib/components/recommendation-list/recommendation-list.test.js +38 -0
  174. package/lib/components/remote-toggle/__snapshots__/remote-toggle.test.js.snap +3 -0
  175. package/lib/components/remote-toggle/index.js +13 -0
  176. package/lib/components/remote-toggle/remote-toggle.js +35 -0
  177. package/lib/components/remote-toggle/remote-toggle.scss +0 -0
  178. package/lib/components/remote-toggle/remote-toggle.test.js +10 -0
  179. package/lib/components/share/index.js +9 -0
  180. package/lib/components/share/share.js +109 -0
  181. package/lib/components/share/share.scss +66 -0
  182. package/lib/components/streaming-api-doc/index.js +9 -0
  183. package/lib/components/streaming-api-doc/streaming-api-doc.js +76 -0
  184. package/lib/components/streaming-api-doc/streaming-api-doc.scss +23 -0
  185. package/lib/components/streaming-api-doc/streaming-api-doc.test.js +24 -0
  186. package/lib/components/tooltip/index.js +9 -0
  187. package/lib/components/tooltip/tooltip.js +17 -0
  188. package/lib/components/tooltip/tooltip.scss +16 -0
  189. package/lib/components/tooltip/tooltip.test.js +19 -0
  190. package/lib/components/visualization-list-menu-item/index.js +9 -0
  191. package/lib/components/visualization-list-menu-item/visualization-list-menu-item.js +53 -0
  192. package/lib/components/visualization-list-menu-item/visualization-list-menu-item.scss +21 -0
  193. package/lib/components/visualization-list-menu-item/visualization-list-menu-item.test.js +42 -0
  194. package/lib/components/visualization-save-menu-item/index.js +9 -0
  195. package/lib/components/visualization-save-menu-item/visualization-save-menu-item.js +101 -0
  196. package/lib/components/visualization-save-menu-item/visualization-save-menu-item.scss +37 -0
  197. package/lib/components/visualization-save-menu-item/visualization-save-menu-item.test.js +185 -0
  198. package/lib/components/visualizations/geojson/connector.js +29 -0
  199. package/lib/components/visualizations/geojson/geojson-visualization.js +151 -0
  200. package/lib/components/visualizations/geojson/geojson-visualization.scss +24 -0
  201. package/lib/components/visualizations/geojson/geojson-visualization.test.js +238 -0
  202. package/lib/components/visualizations/geojson/index.js +9 -0
  203. package/lib/pages/apikey-view/apiKey-view.test.js +204 -0
  204. package/lib/pages/apikey-view/apikey-view.js +166 -0
  205. package/lib/pages/apikey-view/apikey-view.scss +340 -0
  206. package/lib/pages/apikey-view/connector.js +31 -0
  207. package/lib/pages/apikey-view/index.js +9 -0
  208. package/lib/pages/chart-view/chart-view.js +92 -0
  209. package/lib/pages/chart-view/chart-view.scss +35 -0
  210. package/lib/pages/chart-view/chart-view.test.js +206 -0
  211. package/lib/pages/chart-view/connector.js +30 -0
  212. package/lib/pages/chart-view/index.js +9 -0
  213. package/lib/pages/dataset-detail-view/connector.js +38 -0
  214. package/lib/pages/dataset-detail-view/dataset-detail-view-connector.test.js +42 -0
  215. package/lib/pages/dataset-detail-view/dataset-detail-view.js +99 -0
  216. package/lib/pages/dataset-detail-view/dataset-detail-view.scss +190 -0
  217. package/lib/pages/dataset-detail-view/dataset-detail-view.test.js +305 -0
  218. package/lib/pages/dataset-detail-view/index.js +9 -0
  219. package/lib/pages/dataset-list-view/connector.js +30 -0
  220. package/lib/pages/dataset-list-view/dataset-list-view.js +132 -0
  221. package/lib/pages/dataset-list-view/dataset-list-view.scss +242 -0
  222. package/lib/pages/dataset-list-view/dataset-list-view.test.js +162 -0
  223. package/lib/pages/dataset-list-view/index.js +9 -0
  224. package/lib/pages/dataset-view/connector.js +55 -0
  225. package/lib/pages/dataset-view/dataset-view-connector.test.js +78 -0
  226. package/lib/pages/dataset-view/dataset-view.js +175 -0
  227. package/lib/pages/dataset-view/dataset-view.scss +95 -0
  228. package/lib/pages/dataset-view/dataset-view.test.js +157 -0
  229. package/lib/pages/dataset-view/index.js +9 -0
  230. package/lib/pages/login-view/connector.js +25 -0
  231. package/lib/pages/login-view/index.js +9 -0
  232. package/lib/pages/login-view/login-view.js +83 -0
  233. package/lib/pages/login-view/login-view.scss +62 -0
  234. package/lib/pages/login-view/login-view.test.js +23 -0
  235. package/lib/pages/oauth-error-view/index.js +9 -0
  236. package/lib/pages/oauth-error-view/oauth-error-view.js +25 -0
  237. package/lib/pages/oauth-error-view/oauth-error-view.scss +13 -0
  238. package/lib/pages/oauth-error-view/oauth-error-view.test.js +13 -0
  239. package/lib/pages/oauth-view/connector.js +22 -0
  240. package/lib/pages/oauth-view/index.js +9 -0
  241. package/lib/pages/oauth-view/oauth-view.js +124 -0
  242. package/lib/pages/oauth-view/oauth-view.scss +7 -0
  243. package/lib/pages/oauth-view/oauth-view.test.js +195 -0
  244. package/lib/pages/query-view/connector.js +40 -0
  245. package/lib/pages/query-view/index.js +9 -0
  246. package/lib/pages/query-view/query-view.js +80 -0
  247. package/lib/pages/query-view/query-view.scss +39 -0
  248. package/lib/pages/query-view/query-view.test.js +104 -0
  249. package/lib/pages/user-profile-view/connector.js +39 -0
  250. package/lib/pages/user-profile-view/index.js +9 -0
  251. package/lib/pages/user-profile-view/user-profile-view.js +154 -0
  252. package/lib/pages/user-profile-view/user-profile-view.scss +81 -0
  253. package/lib/pages/user-profile-view/user-profile-view.test.js +129 -0
  254. package/lib/pages/visualization-view/connector.js +52 -0
  255. package/lib/pages/visualization-view/index.js +9 -0
  256. package/lib/pages/visualization-view/visualization-view-connector.test.js +62 -0
  257. package/lib/pages/visualization-view/visualization-view.js +128 -0
  258. package/lib/pages/visualization-view/visualization-view.scss +115 -0
  259. package/lib/pages/visualization-view/visualization-view.test.js +188 -0
  260. package/lib/routes.js +18 -0
  261. package/lib/search-params/search-params-manager.js +171 -0
  262. package/lib/search-params/search-params-manager.test.js +490 -0
  263. package/lib/store/actions.js +428 -0
  264. package/lib/store/dataset-selectors.js +47 -0
  265. package/lib/store/dataset-selectors.test.js +154 -0
  266. package/lib/store/query-selectors.js +53 -0
  267. package/lib/store/query-selectors.test.js +153 -0
  268. package/lib/store/reducers/index.js +20 -0
  269. package/lib/store/reducers/query-reducer.js +52 -0
  270. package/lib/store/reducers/query-reducer.test.js +89 -0
  271. package/lib/store/reducers/reducers.js +196 -0
  272. package/lib/store/reducers/reducers.test.js +309 -0
  273. package/lib/store/reducers/visualization-reducer.js +167 -0
  274. package/lib/store/reducers/visualization-reducer.test.js +426 -0
  275. package/lib/store/sagas/api-invoker.js +79 -0
  276. package/lib/store/sagas/api-invoker.test.js +139 -0
  277. package/lib/store/sagas/apiKey-saga.js +81 -0
  278. package/lib/store/sagas/apiKey-saga.test.js +57 -0
  279. package/lib/store/sagas/dataset-download-saga.js +43 -0
  280. package/lib/store/sagas/dataset-list-saga.js +49 -0
  281. package/lib/store/sagas/dataset-list-saga.test.js +72 -0
  282. package/lib/store/sagas/dataset-preview-saga.js +44 -0
  283. package/lib/store/sagas/dataset-query-saga.js +43 -0
  284. package/lib/store/sagas/dataset-recommendation-saga.js +40 -0
  285. package/lib/store/sagas/dataset-saga.js +50 -0
  286. package/lib/store/sagas/freestyle-query-saga.js +127 -0
  287. package/lib/store/sagas/freestyle-query-saga.test.js +145 -0
  288. package/lib/store/sagas/index.js +44 -0
  289. package/lib/store/sagas/login-saga.js +85 -0
  290. package/lib/store/sagas/login-saga.test.js +84 -0
  291. package/lib/store/sagas/logout-saga.js +96 -0
  292. package/lib/store/sagas/oauth-saga.js +78 -0
  293. package/lib/store/sagas/oauth-saga.test.js +51 -0
  294. package/lib/store/sagas/process-login-saga.js +62 -0
  295. package/lib/store/sagas/process-login-saga.test.js +83 -0
  296. package/lib/store/sagas/visualization-saga.js +371 -0
  297. package/lib/store/sagas/visualization-saga.test.js +388 -0
  298. package/lib/store/selectors.js +83 -0
  299. package/lib/store/visualization-selectors.js +85 -0
  300. package/lib/store/visualization-selectors.test.js +195 -0
  301. package/lib/styles/mixins.scss +117 -0
  302. package/lib/styles/variables.scss +41 -0
  303. package/lib/utils/file-type-utils.js +18 -0
  304. package/lib/utils/file-type-utils.test.js +29 -0
  305. package/lib/utils/geojson-utils.js +70 -0
  306. package/lib/utils/geojson-utils.test.js +129 -0
  307. package/lib/utils/http-clients.js +218 -0
  308. package/lib/utils/http-clients.test.js +88 -0
  309. package/lib/utils/index.js +34 -0
  310. package/lib/utils/modified-date-string-builder.js +29 -0
  311. package/lib/utils/modified-date-string-builder.test.js +93 -0
  312. package/lib/utils/query-string-builder.js +38 -0
  313. package/lib/utils/query-string-builder.test.js +33 -0
  314. package/lib/utils/recommendation-utils.js +12 -0
  315. package/lib/utils/recommendation-utils.test.js +9 -0
  316. package/package.json +172 -0
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactTabs = require("react-tabs");
10
+ var _reactRouter = require("react-router");
11
+ require("./visualization-view.scss");
12
+ var _chartIcon = _interopRequireDefault(require("../../components/generic-elements/chart-icon"));
13
+ var _sqlIcon = _interopRequireDefault(require("../../components/generic-elements/sql-icon"));
14
+ var _errorComponent = _interopRequireDefault(require("../../components/generic-elements/error-component"));
15
+ var _visualizationSaveMenuItem = _interopRequireDefault(require("../../components/visualization-save-menu-item"));
16
+ var _chartView = _interopRequireDefault(require("../chart-view"));
17
+ var _queryView = _interopRequireDefault(require("../query-view"));
18
+ var _routes = _interopRequireDefault(require("../../routes"));
19
+ var _visualizationListMenuItem = _interopRequireDefault(require("../../components/visualization-list-menu-item"));
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
23
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
24
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
26
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
27
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
28
+ var VisualizationView = function VisualizationView(props) {
29
+ var reset = props.reset,
30
+ load = props.load,
31
+ save = props.save,
32
+ idFromState = props.id,
33
+ query = props.query,
34
+ title = props.title,
35
+ allowedActions = props.allowedActions,
36
+ isLoadFailure = props.isLoadFailure,
37
+ isSaveSuccess = props.isSaveSuccess,
38
+ isSaveFailure = props.isSaveFailure,
39
+ isSaveable = props.isSaveable,
40
+ idFromUrl = props.match.params.id,
41
+ history = props.history,
42
+ isAuthenticated = props.auth.isAuthenticated;
43
+ var linkUrl = idFromState && (0, _reactRouter.generatePath)(_routes.default.visualizationView, {
44
+ id: idFromState
45
+ });
46
+ var _useState = (0, _react.useState)(title || ''),
47
+ _useState2 = _slicedToArray(_useState, 2),
48
+ localTitle = _useState2[0],
49
+ setLocalTitle = _useState2[1];
50
+ var _useState3 = (0, _react.useState)(0),
51
+ _useState4 = _slicedToArray(_useState3, 2),
52
+ index = _useState4[0],
53
+ setIndex = _useState4[1];
54
+ _react.default.useEffect(function () {
55
+ return function cleanup() {
56
+ reset();
57
+ };
58
+ }, []);
59
+ _react.default.useEffect(function () {
60
+ if (idFromUrl && idFromUrl !== idFromState) load(idFromUrl);
61
+ }, [idFromUrl]);
62
+ _react.default.useEffect(function () {
63
+ if (idFromState && idFromUrl !== idFromState) history.push(linkUrl);
64
+ }, [idFromState]);
65
+ _react.default.useEffect(function () {
66
+ setLocalTitle(title);
67
+ }, [title]);
68
+ var handleTitleChange = function handleTitleChange(event) {
69
+ if (event.target.value !== localTitle) {
70
+ setLocalTitle(event.target.value);
71
+ }
72
+ };
73
+ var handleSaveOrUpdate = function handleSaveOrUpdate(_ref) {
74
+ var shouldCreateCopy = _ref.shouldCreateCopy;
75
+ save({
76
+ id: idFromState,
77
+ title: localTitle,
78
+ query: query,
79
+ shouldCreateCopy: shouldCreateCopy
80
+ });
81
+ };
82
+ var isVisualizationEnabled = function isVisualizationEnabled() {
83
+ return window.DISABLE_VISUALIZATIONS === 'false';
84
+ };
85
+ if (isLoadFailure) {
86
+ return /*#__PURE__*/_react.default.createElement("visualization-view", null, /*#__PURE__*/_react.default.createElement(_errorComponent.default, {
87
+ errorText: "We were unable to load the requested visualization"
88
+ }));
89
+ }
90
+ return /*#__PURE__*/_react.default.createElement("visualization-view", null, /*#__PURE__*/_react.default.createElement(_reactTabs.Tabs, {
91
+ selectedIndex: index,
92
+ onSelect: function onSelect(tabIndex) {
93
+ return setIndex(tabIndex);
94
+ }
95
+ }, /*#__PURE__*/_react.default.createElement(_reactTabs.TabList, {
96
+ className: "header"
97
+ }, /*#__PURE__*/_react.default.createElement("span", {
98
+ className: "tab-area"
99
+ }, /*#__PURE__*/_react.default.createElement(_reactTabs.Tab, {
100
+ className: "header-item tab",
101
+ selectedClassName: "selected"
102
+ }, "Write SQL ", /*#__PURE__*/_react.default.createElement(_sqlIcon.default, {
103
+ className: "sql-icon"
104
+ })), isVisualizationEnabled() && /*#__PURE__*/_react.default.createElement(_reactTabs.Tab, {
105
+ className: "header-item tab",
106
+ selectedClassName: "selected"
107
+ }, "Visualize ", /*#__PURE__*/_react.default.createElement(_chartIcon.default, {
108
+ className: "chart-icon"
109
+ }))), /*#__PURE__*/_react.default.createElement("span", {
110
+ className: "action-area"
111
+ }, /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_visualizationListMenuItem.default, {
112
+ isAuthenticated: isAuthenticated
113
+ }), /*#__PURE__*/_react.default.createElement(_visualizationSaveMenuItem.default, {
114
+ isSaveable: isSaveable,
115
+ handleTitleChange: handleTitleChange,
116
+ handleSaveOrUpdate: handleSaveOrUpdate,
117
+ linkUrl: linkUrl,
118
+ isSaveFailure: isSaveFailure,
119
+ isSaveSuccess: isSaveSuccess,
120
+ title: localTitle,
121
+ allowedActions: allowedActions,
122
+ isAuthenticated: isAuthenticated
123
+ })))), /*#__PURE__*/_react.default.createElement(_reactTabs.TabPanel, null, /*#__PURE__*/_react.default.createElement(_queryView.default, null)), /*#__PURE__*/_react.default.createElement(_reactTabs.TabPanel, {
124
+ className: "visualization",
125
+ selectedClassName: "visualization--selected"
126
+ }, /*#__PURE__*/_react.default.createElement(_chartView.default, null))));
127
+ };
128
+ var _default = exports.default = VisualizationView;
@@ -0,0 +1,115 @@
1
+ @import "../../styles/mixins.scss";
2
+ @import "../../styles/variables.scss";
3
+
4
+ visualization-view {
5
+ .header {
6
+ border-bottom: 0;
7
+ box-shadow: 0px 1px 3px $light-grey;
8
+ margin: 0;
9
+ padding: 0;
10
+ display: flex;
11
+ justify-content: space-between;
12
+ }
13
+
14
+ .tab-area,
15
+ .action-area {
16
+ display: flex;
17
+ align-items: center;
18
+ }
19
+
20
+ .link-disabled {
21
+ pointer-events: none;
22
+ }
23
+
24
+ .new-visualization-form {
25
+ margin: 0.5rem;
26
+ }
27
+
28
+ .header-item {
29
+ display: block;
30
+ border: 0;
31
+ position: relative;
32
+ list-style: initial;
33
+ cursor: pointer;
34
+ color: $dark-grey;
35
+ }
36
+
37
+ .tab {
38
+ padding: 12px 24px;
39
+
40
+ &:hover {
41
+ color: $almost-black;
42
+
43
+ .sql-icon {
44
+ padding-left: 5px;
45
+ fill: $almost-black;
46
+ }
47
+
48
+ .chart-icon {
49
+ path {
50
+ fill: $almost-black;
51
+ }
52
+ }
53
+ }
54
+
55
+ &.selected {
56
+ background: transparent;
57
+ border-bottom: 5px solid;
58
+ border-color: $light-blue;
59
+ color: $almost-black;
60
+
61
+ .sql-icon {
62
+ padding-left: 5px;
63
+ fill: $almost-black;
64
+ }
65
+
66
+
67
+ .chart-icon {
68
+ path {
69
+ fill: $almost-black;
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ .chart-icon {
76
+ padding-left: 5px;
77
+ path {
78
+ fill: $medium-grey;
79
+ }
80
+ }
81
+
82
+ .sql-icon {
83
+ padding-left: 5px;
84
+ fill: $medium-grey;
85
+ }
86
+
87
+ .loading-spinner {
88
+ @include default-loading-icon();
89
+ }
90
+ }
91
+
92
+ /* popover that needs to be tightly coupled */
93
+
94
+ visualization-view {
95
+ position: relative;
96
+
97
+ .popover-root {
98
+ z-index: 900 !important;
99
+ }
100
+
101
+ .visualization {
102
+ height: 85vh;
103
+ width: 100vw;
104
+ display: none;
105
+ }
106
+
107
+ .visualization--selected {
108
+ display: flex;
109
+ }
110
+ @media only screen and (max-width: 600px) {
111
+ .header {
112
+ display:none;
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,188 @@
1
+ import { shallow } from 'enzyme'
2
+ import { Tab, Tabs, TabPanel } from 'react-tabs'
3
+
4
+ import VisualizationView from './visualization-view'
5
+ import QueryView from '../query-view'
6
+ import ChartView from '../chart-view'
7
+ import ErrorComponent from '../../components/generic-elements/error-component'
8
+ import VisualizationSaveMenuItem from '../../components/visualization-save-menu-item'
9
+ import VisualizationListMenuItem from '../../components/visualization-list-menu-item'
10
+ import ChartIcon from '../../components/generic-elements/chart-icon'
11
+
12
+ const runUseEffect = () => {
13
+ const useEffect = jest.spyOn(React, 'useEffect')
14
+ useEffect.mockImplementationOnce(f => f())
15
+ useEffect.mockImplementationOnce(f => f())
16
+ useEffect.mockImplementationOnce(f => f())
17
+ useEffect.mockImplementationOnce(f => f())
18
+ }
19
+
20
+ describe('visualization view', () => {
21
+ let subject, resetHandler, loadHandler
22
+
23
+ const id = '123456'
24
+
25
+ beforeEach(() => {
26
+ resetHandler = jest.fn()
27
+ loadHandler = jest.fn()
28
+ })
29
+
30
+ describe('when visualization id is not provided in the URL', () => {
31
+ beforeEach(() => {
32
+ resetHandler.mockImplementation(() => true)
33
+ runUseEffect()
34
+ subject = createSubject({ match: { params: {} }, reset: resetHandler, load: loadHandler })
35
+ })
36
+
37
+ it('does not call the load function', () => {
38
+ expect(loadHandler).not.toHaveBeenCalled()
39
+ })
40
+
41
+ it('lands on the query view page', () => {
42
+ expect(subject.find(Tabs).props().selectedIndex).toEqual(0)
43
+ })
44
+ })
45
+
46
+ describe('when visualization id from state is provided', () => {
47
+ it('pushes a path with the new id into history', () => {
48
+ const history = { push: jest.fn() }
49
+
50
+ runUseEffect()
51
+ subject = createSubject({ history, id })
52
+
53
+ expect(history.push).toHaveBeenCalledWith(`/visualization/${id}`)
54
+ })
55
+ })
56
+
57
+ describe('when visualization id is provided in the URL and nothing else', () => {
58
+ beforeEach(() => {
59
+ runUseEffect()
60
+ subject = createSubject({ match: { params: { id } }, reset: resetHandler, load: loadHandler })
61
+ })
62
+
63
+ it('calls the load function', () => {
64
+ expect(loadHandler).toHaveBeenCalledWith(id)
65
+ })
66
+ })
67
+
68
+ describe('when visualization id from URL matches visualization id from state', () => {
69
+ let history
70
+ beforeEach(() => {
71
+ runUseEffect()
72
+ history = { push: jest.fn() }
73
+ subject = createSubject({ history, match: { params: { id } }, load: loadHandler, id })
74
+ })
75
+
76
+ it('does not call the load function', () => {
77
+ expect(loadHandler).not.toHaveBeenCalled()
78
+ })
79
+
80
+ it('does not push the id onto the URL', () => {
81
+ expect(history.push).not.toHaveBeenCalled()
82
+ })
83
+ })
84
+
85
+ describe('when visualization is loaded with no errors', () => {
86
+ beforeEach(() => {
87
+ window.DISABLE_VISUALIZATIONS = 'false'
88
+ subject = createSubject()
89
+ })
90
+
91
+ it('has two tabs', () => {
92
+ expect(subject.find(Tab).length).toEqual(2)
93
+ })
94
+
95
+ it('has two tab panels', () => {
96
+ expect(subject.find(TabPanel).length).toEqual(2)
97
+ })
98
+
99
+ it('has a chart view component', () => {
100
+ expect(subject.find(ChartView).length).toEqual(1)
101
+ })
102
+
103
+ it('does not instruct the chart view to auto execute the query', () => {
104
+ expect(subject.find(ChartView).props().shouldAutoExecuteQuery).toBeFalsy()
105
+ })
106
+
107
+ it('has a query view component', () => {
108
+ expect(subject.find(QueryView).length).toEqual(1)
109
+ })
110
+
111
+ it('does not instruct the query view to auto execute the query', () => {
112
+ expect(subject.find(QueryView).props().shouldAutoExecuteQuery).toBeFalsy()
113
+ })
114
+ })
115
+
116
+ describe('when visualization has failed to load', () => {
117
+ beforeEach(() => {
118
+ subject = createSubject({ isLoadFailure: true })
119
+ })
120
+
121
+ it('shows an error element', () => {
122
+ expect(subject.find(ErrorComponent)).toHaveLength(1)
123
+ })
124
+
125
+ it('does not have a visualization view component', () => {
126
+ expect(subject.find(ChartView).length).toEqual(0)
127
+ })
128
+
129
+ it('does not have a query view component', () => {
130
+ expect(subject.find(QueryView).length).toEqual(0)
131
+ })
132
+ })
133
+
134
+ describe('visualization view has save and user page icon in the tabs header', () => {
135
+ beforeEach(() => {
136
+ subject = createSubject({ auth: { isAuthenticated: true } })
137
+ })
138
+
139
+ it('displays the save icon in the header with expected props', () => {
140
+ expect(subject.find(VisualizationSaveMenuItem)).toHaveLength(1)
141
+ expect(subject.find(VisualizationSaveMenuItem).props().isAuthenticated).toBe(true)
142
+ })
143
+
144
+ it('displays the user page icon in the header with expected props', () => {
145
+ expect(subject.find(VisualizationListMenuItem)).toHaveLength(1)
146
+ expect(subject.find(VisualizationListMenuItem).props().isAuthenticated).toBe(true)
147
+ })
148
+ })
149
+
150
+ describe('when disable visualizations env flag is enabled', () => {
151
+ beforeEach(() => {
152
+ window.DISABLE_VISUALIZATIONS = 'true'
153
+ subject = createSubject()
154
+ })
155
+
156
+ afterEach(() => {
157
+ window.DISABLE_VISUALIZATIONS = 'false'
158
+ })
159
+
160
+ it('Does not display a visualization tab', () => {
161
+ expect(subject.find(ChartIcon).length).toEqual(0)
162
+ })
163
+ })
164
+ })
165
+
166
+ const createSubject = (props = {}) => {
167
+ const defaultProps = {
168
+ reset: jest.fn(),
169
+ load: jest.fn(),
170
+ save: jest.fn(),
171
+ update: jest.fn(),
172
+ id: undefined,
173
+ query: undefined,
174
+ title: undefined,
175
+ isLoadFailure: false,
176
+ isSaving: false,
177
+ isSaveSuccess: false,
178
+ isSaveFailure: false,
179
+ isSaveable: false,
180
+ match: { params: {} },
181
+ history: { push: jest.fn() },
182
+ chart: {},
183
+ auth: { isAuthenticated: false }
184
+ }
185
+ const propsWithDefaults = Object.assign({}, defaultProps, props)
186
+
187
+ return shallow(<VisualizationView {...propsWithDefaults} />)
188
+ }
package/lib/routes.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _default = exports.default = {
8
+ root: '/',
9
+ datasetView: '/dataset/:organizationName/:datasetName',
10
+ datasetVisualizationView: '/dataset/:organizationName/:datasetName/visualization',
11
+ visualizationView: '/visualization/:id?',
12
+ userProfile: '/user',
13
+ apiKey: '/apiKey',
14
+ healthCheck: '/healthcheck',
15
+ login: '/login',
16
+ oauth: '/oauth',
17
+ oauthError: '/oauth/error'
18
+ };
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaults = exports.default = exports.SearchParamsManager = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactRedux = require("react-redux");
9
+ var _qs = _interopRequireDefault(require("qs"));
10
+ var _lodash = _interopRequireDefault(require("lodash"));
11
+ var _actions = require("../store/actions.js");
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
16
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
17
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
18
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
19
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
20
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
22
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23
+ var defaults = exports.defaults = {
24
+ apiAccessible: true,
25
+ sortOrder: 'start',
26
+ page: 1,
27
+ searchText: '',
28
+ facets: {}
29
+ };
30
+ var SearchParamsManager = exports.SearchParamsManager = /*#__PURE__*/function () {
31
+ function SearchParamsManager(history) {
32
+ _classCallCheck(this, SearchParamsManager);
33
+ this.pushHistory = history.push;
34
+ this.params = _qs.default.parse(history.location.search, {
35
+ ignoreQueryPrefix: true
36
+ });
37
+ this.getParam = this.getParam.bind(this);
38
+ this.getParams = this.getParams.bind(this);
39
+ this.toggleApiAccessible = this.toggleApiAccessible.bind(this);
40
+ this.toggleFacet = this.toggleFacet.bind(this);
41
+ this.updateSearchText = this.updateSearchText.bind(this);
42
+ this.updateSortOrder = this.updateSortOrder.bind(this);
43
+ this.updatePage = this.updatePage.bind(this);
44
+ this.updateParams = this.updateParams.bind(this);
45
+ this.apiAccessible = this.getParam('apiAccessible') !== 'false';
46
+ this.sortOrder = this.getParam('sort') || defaults.sortOrder;
47
+ this.page = Number.parseInt(this.getParam('page')) || defaults.page;
48
+ this.searchText = this.getParam('q') || defaults.searchText;
49
+ this.facets = this.getParam('facets') || defaults.facets;
50
+ }
51
+ return _createClass(SearchParamsManager, [{
52
+ key: "getParam",
53
+ value: function getParam(name) {
54
+ return this.params[name];
55
+ }
56
+ }, {
57
+ key: "getParams",
58
+ value: function getParams() {
59
+ return {
60
+ apiAccessible: this.apiAccessible,
61
+ page: this.page,
62
+ facets: this.facets,
63
+ searchText: this.searchText,
64
+ sortOrder: this.sortOrder
65
+ };
66
+ }
67
+ }, {
68
+ key: "toggleApiAccessible",
69
+ value: function toggleApiAccessible() {
70
+ var updatedApiAccessibleFlag = !this.apiAccessible;
71
+ this.updateParams({
72
+ apiAccessible: updatedApiAccessibleFlag,
73
+ page: 1
74
+ });
75
+ }
76
+ }, {
77
+ key: "toggleFacet",
78
+ value: function toggleFacet(name, value) {
79
+ var facetValues = this.facets[name];
80
+ var updatedFacets = Object.assign({}, this.facets, _defineProperty({}, name, _lodash.default.xor(facetValues, [value])));
81
+ this.updateParams({
82
+ facets: updatedFacets,
83
+ page: 1
84
+ });
85
+ }
86
+ }, {
87
+ key: "updateSortOrder",
88
+ value: function updateSortOrder(sort) {
89
+ this.updateParams({
90
+ sort: sort
91
+ });
92
+ }
93
+ }, {
94
+ key: "updateSearchText",
95
+ value: function updateSearchText(searchText) {
96
+ var sort = this.sortOrder === 'start' ? 'relevance' : this.sortOrder;
97
+ this.updateParams({
98
+ q: searchText,
99
+ page: 1,
100
+ sort: sort
101
+ });
102
+ }
103
+ }, {
104
+ key: "updatePage",
105
+ value: function updatePage(page) {
106
+ this.updateParams({
107
+ page: page
108
+ });
109
+ }
110
+ }, {
111
+ key: "updateParams",
112
+ value: function updateParams(params) {
113
+ this.cacheFocusedElement();
114
+ var updatedSearch = Object.assign({}, this.params, params);
115
+ var updatedSearchEncoded = _qs.default.stringify(updatedSearch, {
116
+ arrayFormat: 'brackets',
117
+ addQueryPrefix: false
118
+ });
119
+ this.pushHistory({
120
+ search: updatedSearchEncoded
121
+ });
122
+ }
123
+ }, {
124
+ key: "cacheFocusedElement",
125
+ value: function cacheFocusedElement() {
126
+ var focusedElement = document.activeElement;
127
+ var focusedID = null;
128
+ if (focusedElement !== null && focusedElement !== document.body) {
129
+ focusedID = focusedElement.id;
130
+ }
131
+ sessionStorage.setItem("cachedFocusedElement", focusedID);
132
+ }
133
+ }]);
134
+ }();
135
+ SearchParamsManager.propTypes = {
136
+ apiAccessible: _propTypes.default.bool.isRequired,
137
+ sortOrder: _propTypes.default.string.isRequired,
138
+ page: _propTypes.default.number.isRequired,
139
+ searchText: _propTypes.default.string.isRequired,
140
+ facets: _propTypes.default.object.isRequired,
141
+ toggleApiAccessible: _propTypes.default.func.isRequired,
142
+ updateSortOrder: _propTypes.default.func.isRequired,
143
+ updateSearchText: _propTypes.default.func.isRequired,
144
+ updatePage: _propTypes.default.func.isRequired
145
+ };
146
+ var withSearchParamsManager = exports.default = function withSearchParamsManager(WrappedComponent) {
147
+ var SearchParamsWrapper = function SearchParamsWrapper(props) {
148
+ var history = props.history;
149
+ var dispatch = (0, _reactRedux.useDispatch)();
150
+ var searchParamsManager = new SearchParamsManager(history);
151
+ var dispatchDatasetSearch = function dispatchDatasetSearch() {
152
+ try {
153
+ var cachedElementID = sessionStorage.getItem("cachedFocusedElement");
154
+ sessionStorage.removeItem("cachedFocusedElement");
155
+ var cachedElement = document.getElementById(cachedElementID);
156
+ cachedElement.focus();
157
+ } catch (e) {}
158
+ var updatedParams = searchParamsManager.getParams();
159
+ dispatch((0, _actions.datasetSearch)(updatedParams));
160
+ };
161
+ (0, _react.useEffect)(dispatchDatasetSearch, [history.location.search]);
162
+ return /*#__PURE__*/_react.default.createElement(WrappedComponent, _extends({
163
+ searchParamsManager: searchParamsManager
164
+ }, props));
165
+ };
166
+ return SearchParamsWrapper;
167
+ };
168
+ withSearchParamsManager.propTypes = {
169
+ history: _propTypes.default.object.isRequired,
170
+ disptch: _propTypes.default.func.isRequired
171
+ };