@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.
- package/LICENSE +201 -0
- package/README.md +118 -0
- package/lib/ReactDiscoveryUI.js +103 -0
- package/lib/ReactDiscoveryUI.scss +13 -0
- package/lib/assets/arrow.svg +6 -0
- package/lib/assets/blk-database.svg +48 -0
- package/lib/assets/chart.svg +1 -0
- package/lib/assets/down.png +0 -0
- package/lib/assets/down.svg +1 -0
- package/lib/assets/folder_icon.png +0 -0
- package/lib/assets/folder_icon.svg +1 -0
- package/lib/assets/ic_arrow.svg +15 -0
- package/lib/assets/loadingicon.svg +57 -0
- package/lib/assets/no_image.png +0 -0
- package/lib/assets/plus.png +0 -0
- package/lib/assets/plus.svg +1 -0
- package/lib/assets/user.svg +1 -0
- package/lib/auth/auth0-client-provider.js +37 -0
- package/lib/auth/auth0-client-provider.test.js +33 -0
- package/lib/auth/auth0-wrapper.js +155 -0
- package/lib/auth/auth0-wrapper.test.js +100 -0
- package/lib/components/auth0-login-zone/auth0-login-zone.js +147 -0
- package/lib/components/auth0-login-zone/auth0-login-zone.test.js +177 -0
- package/lib/components/auth0-login-zone/index.js +9 -0
- package/lib/components/code-editor/code-editor.css +173 -0
- package/lib/components/code-editor/code-editor.js +64 -0
- package/lib/components/code-editor/index.js +9 -0
- package/lib/components/collapsable-box/collapsable-box.js +81 -0
- package/lib/components/collapsable-box/collapsable-box.scss +39 -0
- package/lib/components/collapsable-box/collapsable-box.test.js +87 -0
- package/lib/components/collapsable-box/index.js +9 -0
- package/lib/components/data-card/data-card.js +63 -0
- package/lib/components/data-card/data-card.scss +93 -0
- package/lib/components/data-card/data-card.test.js +74 -0
- package/lib/components/data-card/index.js +9 -0
- package/lib/components/data-view/data-view.js +194 -0
- package/lib/components/data-view/data-view.scss +39 -0
- package/lib/components/data-view/data-view.test.js +155 -0
- package/lib/components/data-view/index.js +9 -0
- package/lib/components/dataset-api-doc/api-example.js +120 -0
- package/lib/components/dataset-api-doc/api-example.scss +84 -0
- package/lib/components/dataset-api-doc/api-example.test.js +88 -0
- package/lib/components/dataset-api-doc/dataset-api-doc.js +117 -0
- package/lib/components/dataset-api-doc/dataset-api-doc.scss +8 -0
- package/lib/components/dataset-api-doc/dataset-api-doc.test.js +42 -0
- package/lib/components/dataset-api-doc/index.js +9 -0
- package/lib/components/dataset-details/dataset-details.js +64 -0
- package/lib/components/dataset-details/dataset-details.scss +58 -0
- package/lib/components/dataset-details/dataset-details.test.js +38 -0
- package/lib/components/dataset-details/index.js +9 -0
- package/lib/components/dataset-dictionary/dataset-dictionary.js +127 -0
- package/lib/components/dataset-dictionary/dataset-dictionary.scss +42 -0
- package/lib/components/dataset-dictionary/dataset-dictionary.test.js +286 -0
- package/lib/components/dataset-dictionary/index.js +9 -0
- package/lib/components/dataset-list/dataset-list.js +22 -0
- package/lib/components/dataset-list/dataset-list.scss +9 -0
- package/lib/components/dataset-list/dataset-list.test.js +16 -0
- package/lib/components/dataset-list/index.js +9 -0
- package/lib/components/dataset-metadata/dataset-metadata.js +169 -0
- package/lib/components/dataset-metadata/dataset-metadata.scss +34 -0
- package/lib/components/dataset-metadata/dataset-metadata.test.js +24 -0
- package/lib/components/dataset-metadata/index.js +9 -0
- package/lib/components/dataset-preview/connector.js +26 -0
- package/lib/components/dataset-preview/dataset-preview.js +58 -0
- package/lib/components/dataset-preview/dataset-preview.scss +24 -0
- package/lib/components/dataset-preview/dataset-preview.test.js +34 -0
- package/lib/components/dataset-preview/index.js +9 -0
- package/lib/components/dataset-quality/dataset-quality.js +56 -0
- package/lib/components/dataset-quality/dataset-quality.scss +24 -0
- package/lib/components/dataset-quality/dataset-quality.test.js +34 -0
- package/lib/components/dataset-quality/index.js +9 -0
- package/lib/components/dataset-recommendations/connector.js +24 -0
- package/lib/components/dataset-recommendations/dataset-recommendations.js +47 -0
- package/lib/components/dataset-recommendations/dataset-recommendations.scss +17 -0
- package/lib/components/dataset-recommendations/dataset-recommendations.test.js +37 -0
- package/lib/components/dataset-recommendations/index.js +9 -0
- package/lib/components/detail-toggle-icon/detail-toggle-icon.js +41 -0
- package/lib/components/detail-toggle-icon/detail-toggle-icon.scss +13 -0
- package/lib/components/detail-toggle-icon/detail-toggle-icon.test.js +20 -0
- package/lib/components/detail-toggle-icon/index.js +9 -0
- package/lib/components/facet-list/facet-list.js +47 -0
- package/lib/components/facet-list/facet-list.scss +19 -0
- package/lib/components/facet-list/facet-list.test.js +94 -0
- package/lib/components/facet-list/index.js +9 -0
- package/lib/components/facet-sidebar/facet-sidebar.js +101 -0
- package/lib/components/facet-sidebar/facet-sidebar.scss +129 -0
- package/lib/components/facet-sidebar/facet-sidebar.test.js +93 -0
- package/lib/components/facet-sidebar/index.js +9 -0
- package/lib/components/generic-elements/alert-component/alert-component.js +51 -0
- package/lib/components/generic-elements/alert-component/alert-component.scss +26 -0
- package/lib/components/generic-elements/alert-component/alert-component.test.js +26 -0
- package/lib/components/generic-elements/alert-component/index.js +9 -0
- package/lib/components/generic-elements/arrow-button/arrow-button.js +30 -0
- package/lib/components/generic-elements/arrow-button/index.js +9 -0
- package/lib/components/generic-elements/auto-anchoring-popover/index.js +61 -0
- package/lib/components/generic-elements/back-button/back-button.js +14 -0
- package/lib/components/generic-elements/back-button/back-button.scss +14 -0
- package/lib/components/generic-elements/back-button/index.js +9 -0
- package/lib/components/generic-elements/call-to-action-button/call-to-action-button.js +118 -0
- package/lib/components/generic-elements/call-to-action-button/call-to-action-button.scss +19 -0
- package/lib/components/generic-elements/call-to-action-button/call-to-action-button.test.js +68 -0
- package/lib/components/generic-elements/call-to-action-button/index.js +9 -0
- package/lib/components/generic-elements/chart-icon/index.js +23 -0
- package/lib/components/generic-elements/checkbox/checkbox.js +50 -0
- package/lib/components/generic-elements/checkbox/checkbox.scss +44 -0
- package/lib/components/generic-elements/checkbox/checkbox.test.js +71 -0
- package/lib/components/generic-elements/checkbox/index.js +9 -0
- package/lib/components/generic-elements/error-component/error-component.js +21 -0
- package/lib/components/generic-elements/error-component/error-component.scss +16 -0
- package/lib/components/generic-elements/error-component/error-component.test.js +12 -0
- package/lib/components/generic-elements/error-component/index.js +9 -0
- package/lib/components/generic-elements/folder-icon/index.js +23 -0
- package/lib/components/generic-elements/generated-link/generated-link.js +25 -0
- package/lib/components/generic-elements/generated-link/index.js +13 -0
- package/lib/components/generic-elements/loading-element/index.js +9 -0
- package/lib/components/generic-elements/loading-element/loading-element.js +22 -0
- package/lib/components/generic-elements/loading-element/loading-element.scss +6 -0
- package/lib/components/generic-elements/loading-element/loading-element.test.js +11 -0
- package/lib/components/generic-elements/paginator/index.js +9 -0
- package/lib/components/generic-elements/paginator/paginator.js +84 -0
- package/lib/components/generic-elements/paginator/paginator.scss +38 -0
- package/lib/components/generic-elements/paginator/paginator.test.js +140 -0
- package/lib/components/generic-elements/plus-icon/index.js +21 -0
- package/lib/components/generic-elements/save-indicator/index.js +9 -0
- package/lib/components/generic-elements/save-indicator/save-indicator.js +39 -0
- package/lib/components/generic-elements/save-indicator/save-indicator.scss +31 -0
- package/lib/components/generic-elements/save-indicator/save-indicator.test.js +89 -0
- package/lib/components/generic-elements/search/index.js +9 -0
- package/lib/components/generic-elements/search/search.js +93 -0
- package/lib/components/generic-elements/search/search.scss +90 -0
- package/lib/components/generic-elements/search/search.test.js +41 -0
- package/lib/components/generic-elements/select/index.js +9 -0
- package/lib/components/generic-elements/select/select.js +44 -0
- package/lib/components/generic-elements/select/select.scss +22 -0
- package/lib/components/generic-elements/select/select.test.js +34 -0
- package/lib/components/generic-elements/share-link/index.js +9 -0
- package/lib/components/generic-elements/share-link/share-link.js +23 -0
- package/lib/components/generic-elements/share-link/share-link.scss +17 -0
- package/lib/components/generic-elements/share-link/share-link.test.js +28 -0
- package/lib/components/generic-elements/sql-icon/index.js +20 -0
- package/lib/components/generic-elements/tab-button/index.js +9 -0
- package/lib/components/generic-elements/tab-button/tab-button.js +25 -0
- package/lib/components/generic-elements/tab-button/tab-button.scss +27 -0
- package/lib/components/generic-elements/visualize-button/index.js +9 -0
- package/lib/components/generic-elements/visualize-button/visualize-button.js +37 -0
- package/lib/components/generic-elements/visualize-button/visualize-button.scss +14 -0
- package/lib/components/login-zone/connector.js +25 -0
- package/lib/components/login-zone/index.js +9 -0
- package/lib/components/login-zone/login-svgs-and-text.js +39 -0
- package/lib/components/login-zone/login-zone.js +21 -0
- package/lib/components/login-zone/login-zone.scss +115 -0
- package/lib/components/login-zone/login-zone.test.js +17 -0
- package/lib/components/login-zone/login.js +48 -0
- package/lib/components/login-zone/logout.js +39 -0
- package/lib/components/network-loading-element/connector.js +17 -0
- package/lib/components/network-loading-element/index.js +9 -0
- package/lib/components/network-loading-element/network-loading-element.js +23 -0
- package/lib/components/network-loading-element/network-loading-element.scss +21 -0
- package/lib/components/network-loading-element/network-loading-element.test.js +34 -0
- package/lib/components/organization/index.js +9 -0
- package/lib/components/organization/organization.js +27 -0
- package/lib/components/organization/organization.scss +32 -0
- package/lib/components/protected-route/protected-route.js +101 -0
- package/lib/components/protected-route/protected-route.scss +4 -0
- package/lib/components/protected-route/protected-route.test.js +63 -0
- package/lib/components/query-form/index.js +9 -0
- package/lib/components/query-form/query-form.js +262 -0
- package/lib/components/query-form/query-form.scss +167 -0
- package/lib/components/query-form/query-form.test.js +248 -0
- package/lib/components/recommendation-list/index.js +9 -0
- package/lib/components/recommendation-list/recommendation-list.js +72 -0
- package/lib/components/recommendation-list/recommendation-list.scss +61 -0
- package/lib/components/recommendation-list/recommendation-list.test.js +38 -0
- package/lib/components/remote-toggle/__snapshots__/remote-toggle.test.js.snap +3 -0
- package/lib/components/remote-toggle/index.js +13 -0
- package/lib/components/remote-toggle/remote-toggle.js +35 -0
- package/lib/components/remote-toggle/remote-toggle.scss +0 -0
- package/lib/components/remote-toggle/remote-toggle.test.js +10 -0
- package/lib/components/share/index.js +9 -0
- package/lib/components/share/share.js +109 -0
- package/lib/components/share/share.scss +66 -0
- package/lib/components/streaming-api-doc/index.js +9 -0
- package/lib/components/streaming-api-doc/streaming-api-doc.js +76 -0
- package/lib/components/streaming-api-doc/streaming-api-doc.scss +23 -0
- package/lib/components/streaming-api-doc/streaming-api-doc.test.js +24 -0
- package/lib/components/tooltip/index.js +9 -0
- package/lib/components/tooltip/tooltip.js +17 -0
- package/lib/components/tooltip/tooltip.scss +16 -0
- package/lib/components/tooltip/tooltip.test.js +19 -0
- package/lib/components/visualization-list-menu-item/index.js +9 -0
- package/lib/components/visualization-list-menu-item/visualization-list-menu-item.js +53 -0
- package/lib/components/visualization-list-menu-item/visualization-list-menu-item.scss +21 -0
- package/lib/components/visualization-list-menu-item/visualization-list-menu-item.test.js +42 -0
- package/lib/components/visualization-save-menu-item/index.js +9 -0
- package/lib/components/visualization-save-menu-item/visualization-save-menu-item.js +101 -0
- package/lib/components/visualization-save-menu-item/visualization-save-menu-item.scss +37 -0
- package/lib/components/visualization-save-menu-item/visualization-save-menu-item.test.js +185 -0
- package/lib/components/visualizations/geojson/connector.js +29 -0
- package/lib/components/visualizations/geojson/geojson-visualization.js +151 -0
- package/lib/components/visualizations/geojson/geojson-visualization.scss +24 -0
- package/lib/components/visualizations/geojson/geojson-visualization.test.js +238 -0
- package/lib/components/visualizations/geojson/index.js +9 -0
- package/lib/pages/apikey-view/apiKey-view.test.js +204 -0
- package/lib/pages/apikey-view/apikey-view.js +166 -0
- package/lib/pages/apikey-view/apikey-view.scss +340 -0
- package/lib/pages/apikey-view/connector.js +31 -0
- package/lib/pages/apikey-view/index.js +9 -0
- package/lib/pages/chart-view/chart-view.js +92 -0
- package/lib/pages/chart-view/chart-view.scss +35 -0
- package/lib/pages/chart-view/chart-view.test.js +206 -0
- package/lib/pages/chart-view/connector.js +30 -0
- package/lib/pages/chart-view/index.js +9 -0
- package/lib/pages/dataset-detail-view/connector.js +38 -0
- package/lib/pages/dataset-detail-view/dataset-detail-view-connector.test.js +42 -0
- package/lib/pages/dataset-detail-view/dataset-detail-view.js +99 -0
- package/lib/pages/dataset-detail-view/dataset-detail-view.scss +190 -0
- package/lib/pages/dataset-detail-view/dataset-detail-view.test.js +305 -0
- package/lib/pages/dataset-detail-view/index.js +9 -0
- package/lib/pages/dataset-list-view/connector.js +30 -0
- package/lib/pages/dataset-list-view/dataset-list-view.js +132 -0
- package/lib/pages/dataset-list-view/dataset-list-view.scss +242 -0
- package/lib/pages/dataset-list-view/dataset-list-view.test.js +162 -0
- package/lib/pages/dataset-list-view/index.js +9 -0
- package/lib/pages/dataset-view/connector.js +55 -0
- package/lib/pages/dataset-view/dataset-view-connector.test.js +78 -0
- package/lib/pages/dataset-view/dataset-view.js +175 -0
- package/lib/pages/dataset-view/dataset-view.scss +95 -0
- package/lib/pages/dataset-view/dataset-view.test.js +157 -0
- package/lib/pages/dataset-view/index.js +9 -0
- package/lib/pages/login-view/connector.js +25 -0
- package/lib/pages/login-view/index.js +9 -0
- package/lib/pages/login-view/login-view.js +83 -0
- package/lib/pages/login-view/login-view.scss +62 -0
- package/lib/pages/login-view/login-view.test.js +23 -0
- package/lib/pages/oauth-error-view/index.js +9 -0
- package/lib/pages/oauth-error-view/oauth-error-view.js +25 -0
- package/lib/pages/oauth-error-view/oauth-error-view.scss +13 -0
- package/lib/pages/oauth-error-view/oauth-error-view.test.js +13 -0
- package/lib/pages/oauth-view/connector.js +22 -0
- package/lib/pages/oauth-view/index.js +9 -0
- package/lib/pages/oauth-view/oauth-view.js +124 -0
- package/lib/pages/oauth-view/oauth-view.scss +7 -0
- package/lib/pages/oauth-view/oauth-view.test.js +195 -0
- package/lib/pages/query-view/connector.js +40 -0
- package/lib/pages/query-view/index.js +9 -0
- package/lib/pages/query-view/query-view.js +80 -0
- package/lib/pages/query-view/query-view.scss +39 -0
- package/lib/pages/query-view/query-view.test.js +104 -0
- package/lib/pages/user-profile-view/connector.js +39 -0
- package/lib/pages/user-profile-view/index.js +9 -0
- package/lib/pages/user-profile-view/user-profile-view.js +154 -0
- package/lib/pages/user-profile-view/user-profile-view.scss +81 -0
- package/lib/pages/user-profile-view/user-profile-view.test.js +129 -0
- package/lib/pages/visualization-view/connector.js +52 -0
- package/lib/pages/visualization-view/index.js +9 -0
- package/lib/pages/visualization-view/visualization-view-connector.test.js +62 -0
- package/lib/pages/visualization-view/visualization-view.js +128 -0
- package/lib/pages/visualization-view/visualization-view.scss +115 -0
- package/lib/pages/visualization-view/visualization-view.test.js +188 -0
- package/lib/routes.js +18 -0
- package/lib/search-params/search-params-manager.js +171 -0
- package/lib/search-params/search-params-manager.test.js +490 -0
- package/lib/store/actions.js +428 -0
- package/lib/store/dataset-selectors.js +47 -0
- package/lib/store/dataset-selectors.test.js +154 -0
- package/lib/store/query-selectors.js +53 -0
- package/lib/store/query-selectors.test.js +153 -0
- package/lib/store/reducers/index.js +20 -0
- package/lib/store/reducers/query-reducer.js +52 -0
- package/lib/store/reducers/query-reducer.test.js +89 -0
- package/lib/store/reducers/reducers.js +196 -0
- package/lib/store/reducers/reducers.test.js +309 -0
- package/lib/store/reducers/visualization-reducer.js +167 -0
- package/lib/store/reducers/visualization-reducer.test.js +426 -0
- package/lib/store/sagas/api-invoker.js +79 -0
- package/lib/store/sagas/api-invoker.test.js +139 -0
- package/lib/store/sagas/apiKey-saga.js +81 -0
- package/lib/store/sagas/apiKey-saga.test.js +57 -0
- package/lib/store/sagas/dataset-download-saga.js +43 -0
- package/lib/store/sagas/dataset-list-saga.js +49 -0
- package/lib/store/sagas/dataset-list-saga.test.js +72 -0
- package/lib/store/sagas/dataset-preview-saga.js +44 -0
- package/lib/store/sagas/dataset-query-saga.js +43 -0
- package/lib/store/sagas/dataset-recommendation-saga.js +40 -0
- package/lib/store/sagas/dataset-saga.js +50 -0
- package/lib/store/sagas/freestyle-query-saga.js +127 -0
- package/lib/store/sagas/freestyle-query-saga.test.js +145 -0
- package/lib/store/sagas/index.js +44 -0
- package/lib/store/sagas/login-saga.js +85 -0
- package/lib/store/sagas/login-saga.test.js +84 -0
- package/lib/store/sagas/logout-saga.js +96 -0
- package/lib/store/sagas/oauth-saga.js +78 -0
- package/lib/store/sagas/oauth-saga.test.js +51 -0
- package/lib/store/sagas/process-login-saga.js +62 -0
- package/lib/store/sagas/process-login-saga.test.js +83 -0
- package/lib/store/sagas/visualization-saga.js +371 -0
- package/lib/store/sagas/visualization-saga.test.js +388 -0
- package/lib/store/selectors.js +83 -0
- package/lib/store/visualization-selectors.js +85 -0
- package/lib/store/visualization-selectors.test.js +195 -0
- package/lib/styles/mixins.scss +117 -0
- package/lib/styles/variables.scss +41 -0
- package/lib/utils/file-type-utils.js +18 -0
- package/lib/utils/file-type-utils.test.js +29 -0
- package/lib/utils/geojson-utils.js +70 -0
- package/lib/utils/geojson-utils.test.js +129 -0
- package/lib/utils/http-clients.js +218 -0
- package/lib/utils/http-clients.test.js +88 -0
- package/lib/utils/index.js +34 -0
- package/lib/utils/modified-date-string-builder.js +29 -0
- package/lib/utils/modified-date-string-builder.test.js +93 -0
- package/lib/utils/query-string-builder.js +38 -0
- package/lib/utils/query-string-builder.test.js +33 -0
- package/lib/utils/recommendation-utils.js +12 -0
- package/lib/utils/recommendation-utils.test.js +9 -0
- package/package.json +172 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { visualizationSave, visualizationLoadFailure, visualizationSaveFailure, visualizationLoad, visualizationLoadSuccess, visualizationsLoadAll, visualizationsLoadAllSuccess, visualizationsLoadAllFailure, visualizationSaveSuccess, setQueryText, setChartInformation, executeFreestyleQuery, visualizationDelete, visualizationDeleteFailure, visualizationDeleteSuccess, retrieveDatasetReference } from '../actions'
|
|
2
|
+
import visualizationSaga, { saveVisualization, deleteVisualization, loadDatasetReferences } from './visualization-saga'
|
|
3
|
+
|
|
4
|
+
import { createStore, applyMiddleware } from 'redux'
|
|
5
|
+
import createSagaMiddleware, { runSaga } from 'redux-saga'
|
|
6
|
+
import { AuthenticatedHTTPClient } from '../../utils/http-clients'
|
|
7
|
+
|
|
8
|
+
describe('visualization-saga', () => {
|
|
9
|
+
let store
|
|
10
|
+
let sagaMiddleware
|
|
11
|
+
const reducer = (state = [], action) => {
|
|
12
|
+
return [...state, action]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
sagaMiddleware = createSagaMiddleware()
|
|
17
|
+
store = createStore(reducer, applyMiddleware(sagaMiddleware))
|
|
18
|
+
sagaMiddleware.run(visualizationSaga)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
jest.resetAllMocks()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
describe('loadVisualization', () => {
|
|
26
|
+
const id = 'hello'
|
|
27
|
+
const chart = { data: [], frames: [], layout: {} }
|
|
28
|
+
const query = 'select * from stuff'
|
|
29
|
+
const usedDatasets = ['123', '432']
|
|
30
|
+
const visualization = { id, chart, query, usedDatasets }
|
|
31
|
+
describe('successfully', () => {
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
AuthenticatedHTTPClient.get = jest.fn(() => ({ status: 200, data: visualization }))
|
|
34
|
+
store.dispatch(visualizationLoad(id))
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
it('calls the correct API endpoint', () => {
|
|
38
|
+
expect(AuthenticatedHTTPClient.get).toHaveBeenCalledWith(`/api/v1/visualization/${id}`)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('signals the visualization is available', () => {
|
|
42
|
+
expect(store.getState()).toContainEqual(visualizationLoadSuccess(visualization))
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('sets the global chart data', () => {
|
|
46
|
+
expect(store.getState()).toContainEqual(setChartInformation(visualization.chart))
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('sets the global query text', () => {
|
|
50
|
+
expect(store.getState()).toContainEqual(setQueryText(visualization.query))
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('executes the query', () => {
|
|
54
|
+
expect(store.getState()).toContainEqual(executeFreestyleQuery(visualization.query))
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
describe('dispatches side effects', () => {
|
|
59
|
+
let dispatched
|
|
60
|
+
beforeEach(async () => {
|
|
61
|
+
AuthenticatedHTTPClient.get = jest.fn(() => ({ status: 200 }))
|
|
62
|
+
dispatched = await recordSaga(loadDatasetReferences, visualizationLoadSuccess(visualization), { datasetReferences: {} })
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('sends a get reference action per dataset', () => {
|
|
66
|
+
expect(dispatched).toContainEqual(retrieveDatasetReference(usedDatasets[0]))
|
|
67
|
+
expect(dispatched).toContainEqual(retrieveDatasetReference(usedDatasets[1]))
|
|
68
|
+
})
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
describe('with a non-success status code', () => {
|
|
72
|
+
const nonSuccessStatusCode = 400
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
AuthenticatedHTTPClient.get = jest.fn(() => ({ status: nonSuccessStatusCode }))
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('signals the visualization is unavailable', () => {
|
|
78
|
+
store.dispatch(visualizationLoad(id))
|
|
79
|
+
|
|
80
|
+
expect(store.getState()).toContainEqual(visualizationLoadFailure(nonSuccessStatusCode))
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
describe('with a thrown error', () => {
|
|
85
|
+
const errorMessage = 'WRONG'
|
|
86
|
+
beforeEach(() => {
|
|
87
|
+
AuthenticatedHTTPClient.get = jest.fn(() => { throw new Error(errorMessage) })
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
it('signals the visualization is unavailable', () => {
|
|
91
|
+
store.dispatch(visualizationLoad(id))
|
|
92
|
+
|
|
93
|
+
expect(store.getState()).toContainEqual(visualizationLoadFailure(errorMessage))
|
|
94
|
+
})
|
|
95
|
+
})
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
describe('loadUserVisualizations', () => {
|
|
99
|
+
const visualizations = [{ title: 'title1', id: 'id1' }, { title: 'title2', id: 'id2' }]
|
|
100
|
+
|
|
101
|
+
describe('successfully', () => {
|
|
102
|
+
beforeEach(() => {
|
|
103
|
+
AuthenticatedHTTPClient.get = jest.fn(() => ({ status: 200, data: visualizations }))
|
|
104
|
+
store.dispatch(visualizationsLoadAll())
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('calls the correct API endpoint', () => {
|
|
108
|
+
expect(AuthenticatedHTTPClient.get).toHaveBeenCalledWith('/api/v1/visualization')
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it('signals the visualization is available', () => {
|
|
112
|
+
expect(store.getState()).toContainEqual(visualizationsLoadAllSuccess(visualizations))
|
|
113
|
+
})
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
describe('with a non-successful status code', () => {
|
|
117
|
+
beforeEach(() => {
|
|
118
|
+
AuthenticatedHTTPClient.get = jest.fn(() => ({ status: 400 }))
|
|
119
|
+
store.dispatch(visualizationsLoadAll())
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('signals the visualizations are unavailable', () => {
|
|
123
|
+
expect(store.getState()).toContainEqual(visualizationsLoadAllFailure(400))
|
|
124
|
+
})
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
describe('with a thrown error', () => {
|
|
128
|
+
const errorMessage = 'WRONG AGAIN'
|
|
129
|
+
beforeEach(() => {
|
|
130
|
+
AuthenticatedHTTPClient.get = jest.fn(() => { throw new Error(errorMessage) })
|
|
131
|
+
store.dispatch(visualizationsLoadAll())
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('signals the visualization is unavailable', () => {
|
|
135
|
+
expect(store.getState()).toContainEqual(visualizationsLoadAllFailure(errorMessage))
|
|
136
|
+
})
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
describe('saveVisualization', () => {
|
|
141
|
+
describe('without an id', () => {
|
|
142
|
+
const title = 'my first visualization'
|
|
143
|
+
const query = 'select hello from world'
|
|
144
|
+
const usedDatasets = ['123', '432']
|
|
145
|
+
const returnedVisualization = { id: 'generated id from api', title, query, usedDatasets }
|
|
146
|
+
const initialState = {
|
|
147
|
+
visualization: { chart: { data: [{ x: [1, 2, 3], xsrc: 'col1' }], layout: {}, frames: [] } },
|
|
148
|
+
queryReducer: { queryData: [{ col1: 1 }, { col1: 2 }, { col1: 3 }] }
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
describe('successfully', () => {
|
|
152
|
+
let dispatched = []
|
|
153
|
+
beforeEach(async () => {
|
|
154
|
+
AuthenticatedHTTPClient.post = jest.fn(() => ({ status: 200, data: returnedVisualization }))
|
|
155
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ title, query }), initialState)
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
it('calls api with parameters that include a dereferenced chart', () => {
|
|
159
|
+
expect(AuthenticatedHTTPClient.post).toHaveBeenCalledWith('/api/v1/visualization',
|
|
160
|
+
{
|
|
161
|
+
title: title,
|
|
162
|
+
query: query,
|
|
163
|
+
chart: { data: [{ x: null, xsrc: 'col1' }], frames: [], layout: {} }
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
it('signals the visualization is available', () => {
|
|
169
|
+
expect(dispatched).toContainEqual(visualizationSaveSuccess(returnedVisualization))
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
it('does not set the global chart data', () => {
|
|
173
|
+
expect(dispatched).not.toContainEqual(setChartInformation(returnedVisualization.chart))
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
it('does not set the global query text', () => {
|
|
177
|
+
expect(dispatched).not.toContainEqual(setQueryText(returnedVisualization.query))
|
|
178
|
+
})
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
describe('dispatches side effects', () => {
|
|
182
|
+
let dispatched = []
|
|
183
|
+
beforeEach(async () => {
|
|
184
|
+
AuthenticatedHTTPClient.get = jest.fn(() => ({ status: 200 }))
|
|
185
|
+
dispatched = await recordSaga(loadDatasetReferences, visualizationSaveSuccess(returnedVisualization), { datasetReferences: {} })
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it('sends a get reference action per dataset', () => {
|
|
189
|
+
expect(dispatched).toContainEqual(retrieveDatasetReference(usedDatasets[0]))
|
|
190
|
+
expect(dispatched).toContainEqual(retrieveDatasetReference(usedDatasets[1]))
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
describe('with a non-success status code', () => {
|
|
195
|
+
const nonSuccessStatusCode = 400
|
|
196
|
+
let dispatched = []
|
|
197
|
+
beforeEach(async () => {
|
|
198
|
+
AuthenticatedHTTPClient.post = jest.fn(() => ({ status: nonSuccessStatusCode }))
|
|
199
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ title, query }), initialState)
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
it('signals the visualization is unavailable', () => {
|
|
203
|
+
expect(dispatched).toContainEqual(visualizationSaveFailure(nonSuccessStatusCode))
|
|
204
|
+
})
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
describe('with a thrown error', () => {
|
|
208
|
+
const errorMessage = 'WRONG'
|
|
209
|
+
let dispatched = []
|
|
210
|
+
beforeEach(async () => {
|
|
211
|
+
AuthenticatedHTTPClient.post = jest.fn(() => { throw new Error(errorMessage) })
|
|
212
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ title, query }), initialState)
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
it('signals the visualization is unavailable', () => {
|
|
216
|
+
expect(dispatched).toContainEqual(visualizationSaveFailure(errorMessage))
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
describe('with an id', () => {
|
|
222
|
+
const id = 'hello'
|
|
223
|
+
const title = 'my first visualization'
|
|
224
|
+
const query = 'select hello from world'
|
|
225
|
+
const returnedVisualization = { id, title, query }
|
|
226
|
+
const initialState = {
|
|
227
|
+
visualization: { chart: { data: [{ x: [1, 2, 3], xsrc: 'col1' }], layout: {}, frames: [] } },
|
|
228
|
+
queryReducer: { queryData: [{ col1: 1 }, { col1: 2 }, { col1: 3 }] }
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
describe('successfully', () => {
|
|
232
|
+
let dispatched = []
|
|
233
|
+
beforeEach(async () => {
|
|
234
|
+
AuthenticatedHTTPClient.put = jest.fn(() => ({ status: 200, data: returnedVisualization }))
|
|
235
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ id, title, query }), initialState)
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
it('calls api with parameters that include a dereferenced chart', () => {
|
|
239
|
+
expect(AuthenticatedHTTPClient.put).toHaveBeenCalledWith(`/api/v1/visualization/${id}`,
|
|
240
|
+
{
|
|
241
|
+
id: id,
|
|
242
|
+
title: title,
|
|
243
|
+
query: query,
|
|
244
|
+
chart: { data: [{ x: null, xsrc: 'col1' }], frames: [], layout: {} }
|
|
245
|
+
}
|
|
246
|
+
)
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
it('signals the visualization is available', () => {
|
|
250
|
+
expect(dispatched).toContainEqual(visualizationSaveSuccess(returnedVisualization))
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
it('does not set the global chart data', () => {
|
|
254
|
+
expect(dispatched).not.toContainEqual(setChartInformation(returnedVisualization.chart))
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
it('does not set the global query text', () => {
|
|
258
|
+
expect(dispatched).not.toContainEqual(setQueryText(returnedVisualization.query))
|
|
259
|
+
})
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
describe('with a non-success status code', () => {
|
|
263
|
+
const nonSuccessStatusCode = 400
|
|
264
|
+
let dispatched = []
|
|
265
|
+
beforeEach(async () => {
|
|
266
|
+
AuthenticatedHTTPClient.put = jest.fn(() => ({ status: nonSuccessStatusCode }))
|
|
267
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ id, title, query }), initialState)
|
|
268
|
+
})
|
|
269
|
+
|
|
270
|
+
it('signals the visualization is unavailable', () => {
|
|
271
|
+
expect(dispatched).toContainEqual(visualizationSaveFailure(nonSuccessStatusCode))
|
|
272
|
+
})
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
describe('with a thrown error', () => {
|
|
276
|
+
const errorMessage = 'WRONG'
|
|
277
|
+
let dispatched = []
|
|
278
|
+
beforeEach(async () => {
|
|
279
|
+
AuthenticatedHTTPClient.put = jest.fn(() => { throw new Error(errorMessage) })
|
|
280
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ id, title, query }), initialState)
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
it('signals the visualization is unavailable', () => {
|
|
284
|
+
expect(dispatched).toContainEqual(visualizationSaveFailure(errorMessage))
|
|
285
|
+
})
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
describe('creating a copy', () => {
|
|
289
|
+
let dispatched = []
|
|
290
|
+
beforeEach(async () => {
|
|
291
|
+
AuthenticatedHTTPClient.post = jest.fn(() => ({ status: 200, data: returnedVisualization }))
|
|
292
|
+
dispatched = await recordSaga(saveVisualization, visualizationSave({ id, title, query, shouldCreateCopy: true }), initialState)
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
it('calls api with parameters that include a dereferenced chart', () => {
|
|
296
|
+
expect(AuthenticatedHTTPClient.post).toHaveBeenCalledWith('/api/v1/visualization',
|
|
297
|
+
{
|
|
298
|
+
title: title,
|
|
299
|
+
query: query,
|
|
300
|
+
chart: { data: [{ x: null, xsrc: 'col1' }], frames: [], layout: {} }
|
|
301
|
+
}
|
|
302
|
+
)
|
|
303
|
+
})
|
|
304
|
+
|
|
305
|
+
it('signals the visualization is available', () => {
|
|
306
|
+
expect(dispatched).toContainEqual(visualizationSaveSuccess(returnedVisualization))
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
it('does not set the global chart data', () => {
|
|
310
|
+
expect(dispatched).not.toContainEqual(setChartInformation(returnedVisualization.chart))
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
it('does not set the global query text', () => {
|
|
314
|
+
expect(dispatched).not.toContainEqual(setQueryText(returnedVisualization.query))
|
|
315
|
+
})
|
|
316
|
+
})
|
|
317
|
+
})
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
describe('deleteVisualization', () => {
|
|
321
|
+
const initialState = {}
|
|
322
|
+
|
|
323
|
+
describe('successfully', () => {
|
|
324
|
+
let dispatched = []
|
|
325
|
+
beforeEach(async () => {
|
|
326
|
+
AuthenticatedHTTPClient.delete = jest.fn(() => ({ status: 204, data: {} }))
|
|
327
|
+
dispatched = await recordSaga(deleteVisualization, visualizationDelete({ id: '3' }), initialState)
|
|
328
|
+
})
|
|
329
|
+
|
|
330
|
+
it('signals the visualization is deleted', () => {
|
|
331
|
+
expect(dispatched).toContainEqual(visualizationDeleteSuccess())
|
|
332
|
+
})
|
|
333
|
+
|
|
334
|
+
it('dispatches a load user visualization list action', () => {
|
|
335
|
+
expect(dispatched).toContainEqual(visualizationsLoadAll())
|
|
336
|
+
})
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
describe('with a non-success status code', () => {
|
|
340
|
+
const nonSuccessStatusCode = 400
|
|
341
|
+
let dispatched = []
|
|
342
|
+
beforeEach(async () => {
|
|
343
|
+
AuthenticatedHTTPClient.delete = jest.fn(() => ({ status: nonSuccessStatusCode }))
|
|
344
|
+
dispatched = await recordSaga(deleteVisualization, visualizationDelete({ id: '2' }), initialState)
|
|
345
|
+
})
|
|
346
|
+
|
|
347
|
+
it('signals the visualization deletion failed', () => {
|
|
348
|
+
expect(dispatched).toContainEqual(visualizationDeleteFailure(nonSuccessStatusCode))
|
|
349
|
+
})
|
|
350
|
+
|
|
351
|
+
it('dispatches a load user visualization list action', () => {
|
|
352
|
+
expect(dispatched).toContainEqual(visualizationsLoadAll())
|
|
353
|
+
})
|
|
354
|
+
})
|
|
355
|
+
|
|
356
|
+
describe('with a thrown error', () => {
|
|
357
|
+
const errorMessage = 'WRONG'
|
|
358
|
+
let dispatched = []
|
|
359
|
+
beforeEach(async () => {
|
|
360
|
+
AuthenticatedHTTPClient.delete = jest.fn(() => { throw new Error(errorMessage) })
|
|
361
|
+
dispatched = await recordSaga(deleteVisualization, visualizationDelete({ id: '1' }), initialState)
|
|
362
|
+
})
|
|
363
|
+
|
|
364
|
+
it('signals the visualization deletion failed', () => {
|
|
365
|
+
expect(dispatched).toContainEqual(visualizationDeleteFailure(errorMessage))
|
|
366
|
+
})
|
|
367
|
+
|
|
368
|
+
it('dispatches a load user visualization list action', () => {
|
|
369
|
+
expect(dispatched).toContainEqual(visualizationsLoadAll())
|
|
370
|
+
})
|
|
371
|
+
})
|
|
372
|
+
})
|
|
373
|
+
})
|
|
374
|
+
|
|
375
|
+
async function recordSaga (saga, initialAction, initialState) {
|
|
376
|
+
const dispatched = []
|
|
377
|
+
|
|
378
|
+
await runSaga(
|
|
379
|
+
{
|
|
380
|
+
dispatch: (action) => dispatched.push(action),
|
|
381
|
+
getState: () => (initialState)
|
|
382
|
+
},
|
|
383
|
+
saga,
|
|
384
|
+
initialAction
|
|
385
|
+
).done
|
|
386
|
+
|
|
387
|
+
return dispatched
|
|
388
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.lastLogoutAttemptFailed = exports.lastLoginAttemptFailed = exports.isSearchLoading = exports.getTotalNumberOfDatasets = exports.getSearchResults = exports.getSearchParams = exports.getSearchMetadata = exports.getPageNumber = exports.getNumberOfPages = exports.getGlobalErrorState = exports.getGlobalErrorMessage = exports.getFacetList = exports.getDownloadedDatasetError = exports.getDownloadedDataset = exports.getDatasetRecommendations = exports.getDatasetQueryCancelToken = exports.getDataSetReferences = exports.getDataSetPreview = exports.getDataSetList = exports.getDataSetError = exports.getDataSet = exports.getApiKeyState = exports.determineIfVisualizationQueryLoading = exports.determineIfLoading = void 0;
|
|
7
|
+
var getDataSetList = exports.getDataSetList = function getDataSetList(state) {
|
|
8
|
+
return state.datasetReducer.datasets;
|
|
9
|
+
};
|
|
10
|
+
var getDataSetReferences = exports.getDataSetReferences = function getDataSetReferences(state) {
|
|
11
|
+
return state.presentation.datasetReferences;
|
|
12
|
+
};
|
|
13
|
+
var getFacetList = exports.getFacetList = function getFacetList(state) {
|
|
14
|
+
return state.datasetReducer.facets;
|
|
15
|
+
};
|
|
16
|
+
var getTotalNumberOfDatasets = exports.getTotalNumberOfDatasets = function getTotalNumberOfDatasets(state) {
|
|
17
|
+
return state.datasetReducer.total;
|
|
18
|
+
};
|
|
19
|
+
var getApiKeyState = exports.getApiKeyState = function getApiKeyState(state) {
|
|
20
|
+
return state.presentation.apiKey;
|
|
21
|
+
};
|
|
22
|
+
var getDataSetError = exports.getDataSetError = function getDataSetError(state) {
|
|
23
|
+
return state.datasetReducer.datasetError;
|
|
24
|
+
};
|
|
25
|
+
var getGlobalErrorState = exports.getGlobalErrorState = function getGlobalErrorState(state) {
|
|
26
|
+
return state.presentation.isError;
|
|
27
|
+
};
|
|
28
|
+
var getGlobalErrorMessage = exports.getGlobalErrorMessage = function getGlobalErrorMessage(state) {
|
|
29
|
+
return state.presentation.errorMessage;
|
|
30
|
+
};
|
|
31
|
+
var getDataSet = exports.getDataSet = function getDataSet(state) {
|
|
32
|
+
return state.datasetReducer.dataset;
|
|
33
|
+
};
|
|
34
|
+
var getDataSetPreview = exports.getDataSetPreview = function getDataSetPreview(state, format) {
|
|
35
|
+
return state.presentation.dataset_preview[format];
|
|
36
|
+
};
|
|
37
|
+
var getDatasetRecommendations = exports.getDatasetRecommendations = function getDatasetRecommendations(state) {
|
|
38
|
+
return state.datasetReducer.recommendations;
|
|
39
|
+
};
|
|
40
|
+
var determineIfLoading = exports.determineIfLoading = function determineIfLoading(state) {
|
|
41
|
+
return state.presentation.isLoading;
|
|
42
|
+
};
|
|
43
|
+
var determineIfVisualizationQueryLoading = exports.determineIfVisualizationQueryLoading = function determineIfVisualizationQueryLoading(state) {
|
|
44
|
+
return state.queryReducer.isVisualizationQueryLoading;
|
|
45
|
+
};
|
|
46
|
+
var lastLoginAttemptFailed = exports.lastLoginAttemptFailed = function lastLoginAttemptFailed(state) {
|
|
47
|
+
return state.presentation.lastLoginAttemptFailed;
|
|
48
|
+
};
|
|
49
|
+
var lastLogoutAttemptFailed = exports.lastLogoutAttemptFailed = function lastLogoutAttemptFailed(state) {
|
|
50
|
+
return state.presentation.lastLogoutAttemptFailed;
|
|
51
|
+
};
|
|
52
|
+
var getDownloadedDataset = exports.getDownloadedDataset = function getDownloadedDataset(state) {
|
|
53
|
+
return state.datasetReducer.downloadedDataset;
|
|
54
|
+
};
|
|
55
|
+
var getDownloadedDatasetError = exports.getDownloadedDatasetError = function getDownloadedDatasetError(state) {
|
|
56
|
+
return state.datasetReducer.downloadedDatasetError;
|
|
57
|
+
};
|
|
58
|
+
var getDatasetQueryCancelToken = exports.getDatasetQueryCancelToken = function getDatasetQueryCancelToken(state) {
|
|
59
|
+
return state.queryReducer.cancelToken;
|
|
60
|
+
};
|
|
61
|
+
var getSearchParams = exports.getSearchParams = function getSearchParams(state) {
|
|
62
|
+
return state.searchReducer.searchParams;
|
|
63
|
+
};
|
|
64
|
+
var getSearchResults = exports.getSearchResults = function getSearchResults(state) {
|
|
65
|
+
return state.searchReducer.searchResults;
|
|
66
|
+
};
|
|
67
|
+
var getSearchMetadata = exports.getSearchMetadata = function getSearchMetadata(state) {
|
|
68
|
+
return state.searchReducer.searchMetadata || [];
|
|
69
|
+
};
|
|
70
|
+
var getPageNumber = exports.getPageNumber = function getPageNumber(state) {
|
|
71
|
+
return calculatePageNumber(state.searchReducer.searchParams);
|
|
72
|
+
};
|
|
73
|
+
var getNumberOfPages = exports.getNumberOfPages = function getNumberOfPages(state) {
|
|
74
|
+
return Math.ceil(state.searchReducer.searchMetadata.totalDatasets / state.searchReducer.searchMetadata.limit);
|
|
75
|
+
};
|
|
76
|
+
var isSearchLoading = exports.isSearchLoading = function isSearchLoading(state) {
|
|
77
|
+
return state.searchReducer.isRunning;
|
|
78
|
+
};
|
|
79
|
+
function calculatePageNumber(_ref) {
|
|
80
|
+
var offset = _ref.offset,
|
|
81
|
+
limit = _ref.limit;
|
|
82
|
+
return Math.ceil(offset / limit) + 1;
|
|
83
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.visualizationUsedDatasets = exports.visualizationTitle = exports.visualizationSaving = exports.visualizationSaveSuccess = exports.visualizationSaveFailure = exports.visualizationLoading = exports.visualizationLoadSuccess = exports.visualizationLoadFailure = exports.visualizationID = exports.visualizationDeleting = exports.visualizationDeleteSuccess = exports.visualizationDeleteFailure = exports.visualizationChart = exports.visualizationAllowedActions = exports.userVisualizations = exports.isVisualizationSaveable = exports.dereferencedChart = void 0;
|
|
7
|
+
var _reselect = require("reselect");
|
|
8
|
+
var _querySelectors = require("./query-selectors");
|
|
9
|
+
var _lodash = require("lodash");
|
|
10
|
+
var _lib = require("react-chart-editor/lib");
|
|
11
|
+
var visualizationID = exports.visualizationID = function visualizationID(state) {
|
|
12
|
+
return state.visualization.visualization.id;
|
|
13
|
+
};
|
|
14
|
+
var visualizationTitle = exports.visualizationTitle = function visualizationTitle(state) {
|
|
15
|
+
return state.visualization.visualization.title;
|
|
16
|
+
};
|
|
17
|
+
var visualizationUsedDatasets = exports.visualizationUsedDatasets = function visualizationUsedDatasets(state) {
|
|
18
|
+
return state.visualization.visualization.usedDatasets;
|
|
19
|
+
};
|
|
20
|
+
var visualizationLoading = exports.visualizationLoading = function visualizationLoading(state) {
|
|
21
|
+
return state.visualization.loading;
|
|
22
|
+
};
|
|
23
|
+
var visualizationLoadSuccess = exports.visualizationLoadSuccess = function visualizationLoadSuccess(state) {
|
|
24
|
+
return state.visualization.loadSuccess;
|
|
25
|
+
};
|
|
26
|
+
var visualizationLoadFailure = exports.visualizationLoadFailure = function visualizationLoadFailure(state) {
|
|
27
|
+
return state.visualization.loadFailure;
|
|
28
|
+
};
|
|
29
|
+
var visualizationSaving = exports.visualizationSaving = function visualizationSaving(state) {
|
|
30
|
+
return state.visualization.saving;
|
|
31
|
+
};
|
|
32
|
+
var visualizationSaveSuccess = exports.visualizationSaveSuccess = function visualizationSaveSuccess(state) {
|
|
33
|
+
return state.visualization.saveSuccess;
|
|
34
|
+
};
|
|
35
|
+
var visualizationSaveFailure = exports.visualizationSaveFailure = function visualizationSaveFailure(state) {
|
|
36
|
+
return state.visualization.saveFailure;
|
|
37
|
+
};
|
|
38
|
+
var visualizationDeleteFailure = exports.visualizationDeleteFailure = function visualizationDeleteFailure(state) {
|
|
39
|
+
return state.visualization.deleteFailure;
|
|
40
|
+
};
|
|
41
|
+
var visualizationDeleteSuccess = exports.visualizationDeleteSuccess = function visualizationDeleteSuccess(state) {
|
|
42
|
+
return state.visualization.deleteSuccess;
|
|
43
|
+
};
|
|
44
|
+
var visualizationDeleting = exports.visualizationDeleting = function visualizationDeleting(state) {
|
|
45
|
+
return state.visualization.deleting;
|
|
46
|
+
};
|
|
47
|
+
var visualizationChart = exports.visualizationChart = function visualizationChart(state) {
|
|
48
|
+
return state.visualization.chart;
|
|
49
|
+
};
|
|
50
|
+
var userVisualizations = exports.userVisualizations = function userVisualizations(state) {
|
|
51
|
+
return state.visualization.userVisualizations;
|
|
52
|
+
};
|
|
53
|
+
var visualizationAllowedActions = exports.visualizationAllowedActions = function visualizationAllowedActions(state) {
|
|
54
|
+
if (!state.visualization.visualization.allowedActions) {
|
|
55
|
+
return ['create'];
|
|
56
|
+
}
|
|
57
|
+
return state.visualization.visualization.allowedActions.map(function (action) {
|
|
58
|
+
return action.name;
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
var isVisualizationSaveable = exports.isVisualizationSaveable = (0, _reselect.createSelector)(_querySelectors.isQueryTextAvailable, visualizationLoading, visualizationSaving, function (queryTextAvailable, visualizationLoading, visualizationSaving) {
|
|
62
|
+
return queryTextAvailable && !(visualizationLoading || visualizationSaving);
|
|
63
|
+
});
|
|
64
|
+
var clearValues = function clearValues(dataSources) {
|
|
65
|
+
return (0, _lodash.mapValues)(dataSources, function () {
|
|
66
|
+
return [];
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
var dereferenceAndClone = function dereferenceAndClone(data, dataSources) {
|
|
70
|
+
var clonedData = (0, _lodash.cloneDeep)(data);
|
|
71
|
+
(0, _lib.dereference)(clonedData, dataSources);
|
|
72
|
+
return clonedData;
|
|
73
|
+
};
|
|
74
|
+
var dereferencedChart = exports.dereferencedChart = (0, _reselect.createSelector)(visualizationChart, _querySelectors.getVisualizationDataSources, function (visualizationChart, visualizationDataSources) {
|
|
75
|
+
var data = visualizationChart.data,
|
|
76
|
+
layout = visualizationChart.layout,
|
|
77
|
+
frames = visualizationChart.frames;
|
|
78
|
+
var clearedDataSources = clearValues(visualizationDataSources);
|
|
79
|
+
var dereferencedData = dereferenceAndClone(data, clearedDataSources);
|
|
80
|
+
return {
|
|
81
|
+
data: dereferencedData,
|
|
82
|
+
layout: layout,
|
|
83
|
+
frames: frames
|
|
84
|
+
};
|
|
85
|
+
});
|