@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,218 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AuthenticatedHTTPClient = void 0;
7
+ var _axios = _interopRequireDefault(require("axios"));
8
+ var _auth0ClientProvider = _interopRequireDefault(require("../auth/auth0-client-provider"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ 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); }
11
+ function _regeneratorRuntime() { "use strict"; var r = _regenerator(), e = r.m(_regeneratorRuntime), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { throw: 1, return: 2, break: 3, continue: 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, catch: function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield(r, e); }, AsyncIterator: _regeneratorAsyncIterator, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen : _regeneratorAsync)(a(r), e, t, o, u); }, keys: _regeneratorKeys, values: _regeneratorValues }; })(); }
12
+ function _regeneratorValues(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof(e) + " is not iterable"); }
13
+ function _regeneratorKeys(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
14
+ function _regeneratorAsync(n, e, r, t, o) { var a = _regeneratorAsyncGen(n, e, r, t, o); return a.next().then(function (n) { return n.done ? n.value : a.next(); }); }
15
+ function _regeneratorAsyncGen(r, e, t, o, n) { return new _regeneratorAsyncIterator(_regenerator().w(r, e, t, o), n || Promise); }
16
+ function _regeneratorAsyncIterator(t, e) { function n(r, o, i, f) { try { var c = t[r](o), u = c.value; return u instanceof _OverloadYield ? e.resolve(u.v).then(function (t) { n("next", t, i, f); }, function (t) { n("throw", t, i, f); }) : e.resolve(u).then(function (t) { c.value = t, i(c); }, function (t) { return n("throw", t, i, f); }); } catch (t) { f(t); } } var r; this.next || (_regeneratorDefine2(_regeneratorAsyncIterator.prototype), _regeneratorDefine2(_regeneratorAsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () { return this; })), _regeneratorDefine2(this, "_invoke", function (t, o, i) { function f() { return new e(function (e, r) { n(t, i, e, r); }); } return r = r ? r.then(f, f) : f(); }, !0); }
17
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
18
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
19
+ function _OverloadYield(e, d) { this.v = e, this.k = d; }
20
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
21
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
22
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
23
+ 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); } }
24
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
25
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
26
+ 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); }
27
+ var AuthenticatedHTTPClient = exports.AuthenticatedHTTPClient = /*#__PURE__*/function () {
28
+ function AuthenticatedHTTPClient() {
29
+ _classCallCheck(this, AuthenticatedHTTPClient);
30
+ }
31
+ return _createClass(AuthenticatedHTTPClient, null, [{
32
+ key: "cancelTokenSource",
33
+ value: function cancelTokenSource() {
34
+ return _axios.default.CancelToken.source();
35
+ }
36
+ }, {
37
+ key: "initializeClient",
38
+ value: function () {
39
+ var _initializeClient = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
40
+ var config, authClient, isAuthenticated, token;
41
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
42
+ while (1) switch (_context.prev = _context.next) {
43
+ case 0:
44
+ config = {
45
+ baseURL: window.DISC_API_URL,
46
+ headers: {},
47
+ validateStatus: false
48
+ };
49
+ _context.next = 3;
50
+ return _auth0ClientProvider.default.get();
51
+ case 3:
52
+ authClient = _context.sent;
53
+ _context.next = 6;
54
+ return authClient.isAuthenticated();
55
+ case 6:
56
+ isAuthenticated = _context.sent;
57
+ if (!isAuthenticated) {
58
+ _context.next = 13;
59
+ break;
60
+ }
61
+ _context.next = 10;
62
+ return authClient.getTokenSilently();
63
+ case 10:
64
+ token = _context.sent;
65
+ config.headers = Object.assign({}, config.headers, {
66
+ Authorization: "Bearer ".concat(token)
67
+ });
68
+ config.withCredentials = true;
69
+ case 13:
70
+ return _context.abrupt("return", _axios.default.create(config));
71
+ case 14:
72
+ case "end":
73
+ return _context.stop();
74
+ }
75
+ }, _callee);
76
+ }));
77
+ function initializeClient() {
78
+ return _initializeClient.apply(this, arguments);
79
+ }
80
+ return initializeClient;
81
+ }()
82
+ }, {
83
+ key: "get",
84
+ value: function () {
85
+ var _get = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(url) {
86
+ var config,
87
+ axiosClient,
88
+ _args2 = arguments;
89
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
90
+ while (1) switch (_context2.prev = _context2.next) {
91
+ case 0:
92
+ config = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
93
+ _context2.next = 3;
94
+ return AuthenticatedHTTPClient.initializeClient();
95
+ case 3:
96
+ axiosClient = _context2.sent;
97
+ return _context2.abrupt("return", axiosClient.get(url, config));
98
+ case 5:
99
+ case "end":
100
+ return _context2.stop();
101
+ }
102
+ }, _callee2);
103
+ }));
104
+ function get(_x) {
105
+ return _get.apply(this, arguments);
106
+ }
107
+ return get;
108
+ }()
109
+ }, {
110
+ key: "post",
111
+ value: function () {
112
+ var _post = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(url, body) {
113
+ var config,
114
+ axiosClient,
115
+ _args3 = arguments;
116
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
117
+ while (1) switch (_context3.prev = _context3.next) {
118
+ case 0:
119
+ config = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : {};
120
+ _context3.next = 3;
121
+ return AuthenticatedHTTPClient.initializeClient();
122
+ case 3:
123
+ axiosClient = _context3.sent;
124
+ return _context3.abrupt("return", axiosClient.post(url, body, config));
125
+ case 5:
126
+ case "end":
127
+ return _context3.stop();
128
+ }
129
+ }, _callee3);
130
+ }));
131
+ function post(_x2, _x3) {
132
+ return _post.apply(this, arguments);
133
+ }
134
+ return post;
135
+ }()
136
+ }, {
137
+ key: "put",
138
+ value: function () {
139
+ var _put = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(url, body) {
140
+ var config,
141
+ axiosClient,
142
+ _args4 = arguments;
143
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
144
+ while (1) switch (_context4.prev = _context4.next) {
145
+ case 0:
146
+ config = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {};
147
+ _context4.next = 3;
148
+ return AuthenticatedHTTPClient.initializeClient();
149
+ case 3:
150
+ axiosClient = _context4.sent;
151
+ return _context4.abrupt("return", axiosClient.put(url, body, config));
152
+ case 5:
153
+ case "end":
154
+ return _context4.stop();
155
+ }
156
+ }, _callee4);
157
+ }));
158
+ function put(_x4, _x5) {
159
+ return _put.apply(this, arguments);
160
+ }
161
+ return put;
162
+ }()
163
+ }, {
164
+ key: "patch",
165
+ value: function () {
166
+ var _patch = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(url, body) {
167
+ var config,
168
+ axiosClient,
169
+ _args5 = arguments;
170
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
171
+ while (1) switch (_context5.prev = _context5.next) {
172
+ case 0:
173
+ config = _args5.length > 2 && _args5[2] !== undefined ? _args5[2] : {};
174
+ _context5.next = 3;
175
+ return AuthenticatedHTTPClient.initializeClient();
176
+ case 3:
177
+ axiosClient = _context5.sent;
178
+ return _context5.abrupt("return", axiosClient.patch(url, body, config));
179
+ case 5:
180
+ case "end":
181
+ return _context5.stop();
182
+ }
183
+ }, _callee5);
184
+ }));
185
+ function patch(_x6, _x7) {
186
+ return _patch.apply(this, arguments);
187
+ }
188
+ return patch;
189
+ }()
190
+ }, {
191
+ key: "delete",
192
+ value: function () {
193
+ var _delete2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(url, body) {
194
+ var config,
195
+ axiosClient,
196
+ _args6 = arguments;
197
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
198
+ while (1) switch (_context6.prev = _context6.next) {
199
+ case 0:
200
+ config = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : {};
201
+ _context6.next = 3;
202
+ return AuthenticatedHTTPClient.initializeClient();
203
+ case 3:
204
+ axiosClient = _context6.sent;
205
+ return _context6.abrupt("return", axiosClient.delete(url, body, config));
206
+ case 5:
207
+ case "end":
208
+ return _context6.stop();
209
+ }
210
+ }, _callee6);
211
+ }));
212
+ function _delete(_x8, _x9) {
213
+ return _delete2.apply(this, arguments);
214
+ }
215
+ return _delete;
216
+ }()
217
+ }]);
218
+ }();
@@ -0,0 +1,88 @@
1
+ import { AuthenticatedHTTPClient } from './http-clients'
2
+ import Auth0Client from '../auth/auth0-client-provider'
3
+ import mockAxios from 'axios'
4
+
5
+ describe('http-clients', () => {
6
+ const url = '/api/v1/dog'
7
+
8
+ describe('AuthenticatedHTTPClient', () => {
9
+ const token = 'token'
10
+ const fakeAuth0Client = {
11
+ isAuthenticated: () => Promise.resolve(false),
12
+ getTokenSilently: () => Promise.resolve(token)
13
+ }
14
+ beforeEach(() => {
15
+ Auth0Client.get = jest.fn(() => Promise.resolve(fakeAuth0Client))
16
+ })
17
+
18
+ describe('.get', () => {
19
+ it('given a custom config, it passes it along to axios', async () => {
20
+ const config = { myCustomConfig: true }
21
+
22
+ await AuthenticatedHTTPClient.get(url, config)
23
+
24
+ expect(mockAxios.get).toHaveBeenCalledWith(url, config)
25
+ })
26
+ it('given no custom config, it defaults the config passed to axios', async () => {
27
+ await AuthenticatedHTTPClient.get(url)
28
+
29
+ expect(mockAxios.get).toHaveBeenCalledWith(url, {})
30
+ })
31
+ })
32
+
33
+ describe('.post', () => {
34
+ const body = { stuff: true }
35
+ it('given a custom config, it passes it along to axios', async () => {
36
+ const config = { myCustomConfig: true }
37
+
38
+ await AuthenticatedHTTPClient.post(url, body, config)
39
+
40
+ expect(mockAxios.post).toHaveBeenCalledWith(url, body, config)
41
+ })
42
+ it('given no custom config, it defaults the config passed to axios', async () => {
43
+ await AuthenticatedHTTPClient.post(url, body)
44
+
45
+ expect(mockAxios.post).toHaveBeenCalledWith(url, body, {})
46
+ })
47
+ })
48
+
49
+ describe('.initializeClient', () => {
50
+ let client
51
+
52
+ describe('isAuthenticated is true', () => {
53
+ beforeEach(async () => {
54
+ fakeAuth0Client.isAuthenticated = () => Promise.resolve(true)
55
+ client = await AuthenticatedHTTPClient.initializeClient()
56
+ })
57
+
58
+ it('defaults the base url to the value in global config', () => {
59
+ expect(client.defaults.baseURL).not.toBe(undefined)
60
+ expect(client.defaults.baseURL).toBe(window.DISC_API_URL)
61
+ })
62
+
63
+ it('sets the client to send cross-domain auth headers, etc.', () => {
64
+ expect(client.defaults.withCredentials).toBeTruthy()
65
+ })
66
+
67
+ it('sends an auth header', () => {
68
+ expect(client.defaults.headers.Authorization).toBe(`Bearer ${token}`)
69
+ })
70
+ })
71
+
72
+ describe('isAuthenticated is false', () => {
73
+ beforeEach(async () => {
74
+ fakeAuth0Client.isAuthenticated = () => Promise.resolve(false)
75
+ client = await AuthenticatedHTTPClient.initializeClient()
76
+ })
77
+
78
+ it('sets the client to send cross-domain auth headers, etc.', () => {
79
+ expect(client.defaults.withCredentials).toBeFalsy()
80
+ })
81
+
82
+ it('sends an auth header', () => {
83
+ expect(client.defaults.headers.Authorization).toBe(undefined)
84
+ })
85
+ })
86
+ })
87
+ })
88
+ })
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "GeoJsonUtils", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _geojsonUtils.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ModifiedDateStringBuilder", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _modifiedDateStringBuilder.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "QueryStringBuilder", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _queryStringBuilder.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "RecommendationUtils", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _recommendationUtils.default;
28
+ }
29
+ });
30
+ var _queryStringBuilder = _interopRequireDefault(require("./query-string-builder"));
31
+ var _geojsonUtils = _interopRequireDefault(require("./geojson-utils"));
32
+ var _modifiedDateStringBuilder = _interopRequireDefault(require("./modified-date-string-builder"));
33
+ var _recommendationUtils = _interopRequireDefault(require("./recommendation-utils"));
34
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _luxon = require("luxon");
8
+ var NO_DATE_MESSAGE = 'Date not provided';
9
+ var createDateString = function createDateString(dataset) {
10
+ switch (dataset.sourceType) {
11
+ case 'remote':
12
+ return 'Updates to remote datasets are not tracked';
13
+ case 'ingest':
14
+ return buildDate(dataset.modified, _luxon.DateTime.DATE_MED) + ' (Last updated by provider)';
15
+ case 'stream':
16
+ return buildDate(dataset.lastUpdatedDate, _luxon.DateTime.DATE_MED) + ' (Last Ingested)';
17
+ default:
18
+ return NO_DATE_MESSAGE;
19
+ }
20
+ };
21
+ var buildDate = function buildDate(date, format) {
22
+ if (!date) return NO_DATE_MESSAGE;
23
+ return _luxon.DateTime.fromISO(date, {
24
+ zone: 'utc'
25
+ }).endOf("day").setZone('local').toLocaleString(format);
26
+ };
27
+ var _default = exports.default = {
28
+ createDateString: createDateString
29
+ };
@@ -0,0 +1,93 @@
1
+ import { ModifiedDateStringBuilder } from './'
2
+
3
+ describe('create date string', () => {
4
+ it('returns explanation for remote datasets', () => {
5
+ const dataset = {
6
+ sourceType: 'remote',
7
+ modified: '123',
8
+ lastUpdatedDate: '456'
9
+ }
10
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
11
+
12
+ expect(result).toEqual('Updates to remote datasets are not tracked')
13
+ })
14
+
15
+ it('returns explanation for ingest datasets with null date value', () => {
16
+ const dataset = {
17
+ sourceType: 'ingest',
18
+ modified: null,
19
+ lastUpdatedDate: 'yesterday'
20
+ }
21
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
22
+
23
+ expect(result).toEqual('Date not provided (Last updated by provider)')
24
+ })
25
+
26
+ it('returns explanation for ingest datasets with empty date value', () => {
27
+ const dataset = {
28
+ sourceType: 'ingest',
29
+ modified: '',
30
+ lastUpdatedDate: 'yesterday'
31
+ }
32
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
33
+
34
+ expect(result).toEqual('Date not provided (Last updated by provider)')
35
+ })
36
+
37
+ it('returns explanation for streaming datasets with empty date value', () => {
38
+ const dataset = {
39
+ sourceType: 'stream',
40
+ modified: 'tomorrow',
41
+ lastUpdatedDate: null
42
+ }
43
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
44
+
45
+ expect(result).toEqual('Date not provided (Last Ingested)')
46
+ })
47
+
48
+ it('returns modified date as DATE (Last ingested) for streaming datasets', () => {
49
+ const dataset = {
50
+ sourceType: 'stream',
51
+ modified: 'tomorrow',
52
+ lastUpdatedDate: '2019-09-06T20:06:59.367752Z'
53
+ }
54
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
55
+
56
+ expect(result).toEqual('Sep 6, 2019 (Last Ingested)')
57
+ })
58
+
59
+ it('returns modified date as DATE (Last updated by provider) for ingest datasets', () => {
60
+ const dataset = {
61
+ sourceType: 'ingest',
62
+ modified: '2019-08-06T20:06:59.367752Z',
63
+ lastUpdatedDate: 'never'
64
+ }
65
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
66
+
67
+ expect(result).toEqual('Aug 6, 2019 (Last updated by provider)')
68
+ })
69
+
70
+ it('return update not provided message for fallthrough', () => {
71
+ const dataset = {
72
+ sourceType: 'no good',
73
+ modified: '2019-08-06T20:06:59.367752Z',
74
+ lastUpdatedDate: 'never'
75
+ }
76
+
77
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
78
+
79
+ expect(result).toEqual('Date not provided')
80
+ })
81
+
82
+ it('returns invalid date message when date parsing fails', () => {
83
+ const dataset = {
84
+ sourceType: 'ingest',
85
+ modified: '2019-08-06TImNotADateHAHA20:06:59.367752Z',
86
+ lastUpdatedDate: 'never'
87
+ }
88
+
89
+ const result = ModifiedDateStringBuilder.createDateString(dataset)
90
+
91
+ expect(result).toEqual('Invalid DateTime (Last updated by provider)')
92
+ })
93
+ })
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _qs = _interopRequireDefault(require("qs"));
8
+ var _lodash = _interopRequireDefault(require("lodash"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ 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); }
11
+ 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; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
13
+ 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); }
14
+ var createTagFilterQueryString = function createTagFilterQueryString(tags) {
15
+ return createFilterQueryString('tags', tags);
16
+ };
17
+ var createOrganizationFilterQueryString = function createOrganizationFilterQueryString(organization) {
18
+ return createFilterQueryString('organization', organization);
19
+ };
20
+ var createFilterQueryString = function createFilterQueryString(attributeName, attributeValue) {
21
+ return createQueryString(_defineProperty({}, attributeName, _lodash.default.castArray(attributeValue)));
22
+ };
23
+ function createQueryString(facets, searchCriteria, sort, apiAccessible) {
24
+ return _qs.default.stringify({
25
+ q: searchCriteria,
26
+ sort: sort,
27
+ facets: facets,
28
+ apiAccessible: apiAccessible
29
+ }, {
30
+ arrayFormat: 'brackets'
31
+ });
32
+ }
33
+ var _default = exports.default = {
34
+ createTagFilterQueryString: createTagFilterQueryString,
35
+ createOrganizationFilterQueryString: createOrganizationFilterQueryString,
36
+ createFilterQueryString: createFilterQueryString,
37
+ createQueryString: createQueryString
38
+ };
@@ -0,0 +1,33 @@
1
+ import { QueryStringBuilder } from './'
2
+
3
+ describe('query string builder', () => {
4
+ describe('createQueryString', () => {
5
+ test.each(
6
+ [
7
+ ['sort=name_desc&facets%5Btags%5D%5B%5D=stuff&facets%5Btags%5D%5B%5D=things&apiAccessible=false',
8
+ { tags: ['stuff', 'things'] }, undefined, 'name_desc', false
9
+ ],
10
+ ['sort=last_mod&facets%5Borganization%5D%5B%5D=Slime%20Jime&apiAccessible=true',
11
+ { organization: ['Slime Jime'] }, undefined, 'last_mod', true
12
+ ],
13
+ ['q=GREG&sort=last_mod&facets%5Borganization%5D%5B%5D=Slime%20Jime&facets%5Btags%5D%5B%5D=stuff&apiAccessible=true',
14
+ { organization: ['Slime Jime'], tags: ['stuff'] }, 'GREG', 'last_mod', true
15
+ ]
16
+ ]
17
+ )('properly encodes facets=%s, search=%s, sort=%s to a URL of %s', (expected, facets, searchCriteria, sort, apiAccessible) => {
18
+ expect(QueryStringBuilder.createQueryString(facets, searchCriteria, sort, apiAccessible)).toBe(expected)
19
+ })
20
+ })
21
+
22
+ test('createTagFilterQueryString properly encodes a single filter value in a list', () => {
23
+ expect(QueryStringBuilder.createTagFilterQueryString('stuff')).toBe('facets%5Btags%5D%5B%5D=stuff')
24
+ })
25
+
26
+ test('createTagFilterQueryString properly encodes multiple values in a list', () => {
27
+ expect(QueryStringBuilder.createTagFilterQueryString(['stuff', 'things'])).toBe('facets%5Btags%5D%5B%5D=stuff&facets%5Btags%5D%5B%5D=things')
28
+ })
29
+
30
+ test('createOrganizationFilterQueryString properly encodes a single value as string', () => {
31
+ expect(QueryStringBuilder.createOrganizationFilterQueryString('Slime Jime')).toBe('facets%5Borganization%5D%5B%5D=Slime%20Jime')
32
+ })
33
+ })
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var getDatasetUrl = function getDatasetUrl(recommendation) {
8
+ return "/dataset/".concat(recommendation.orgName, "/").concat(recommendation.dataName);
9
+ };
10
+ var _default = exports.default = {
11
+ getDatasetUrl: getDatasetUrl
12
+ };
@@ -0,0 +1,9 @@
1
+ import { RecommendationUtils } from './'
2
+ import { recommendations } from '../../test-helpers/recommendations'
3
+
4
+ describe('recommendation utils', () => {
5
+ test('return url to dataset details page', () => {
6
+ const expectedUrl = '/dataset/hello/world'
7
+ expect(RecommendationUtils.getDatasetUrl(recommendations[0])).toEqual(expectedUrl)
8
+ })
9
+ })