Initial commit
This commit is contained in:
@@ -0,0 +1,213 @@
|
||||
import toObject from 'new-dashboard/utils/to-object';
|
||||
import * as VisualizationActions from '../../actions/visualizations';
|
||||
|
||||
const search = {
|
||||
namespaced: true,
|
||||
state: {
|
||||
searchTerm: '',
|
||||
tag: '',
|
||||
resultsPerPage: 6,
|
||||
maps: {
|
||||
isFetching: false,
|
||||
isErrored: false,
|
||||
results: {},
|
||||
error: {},
|
||||
page: 1,
|
||||
numPages: 1,
|
||||
numResults: 0
|
||||
},
|
||||
datasets: {
|
||||
isFetching: false,
|
||||
isErrored: false,
|
||||
results: {},
|
||||
error: {},
|
||||
page: 1,
|
||||
numPages: 1,
|
||||
numResults: 0
|
||||
},
|
||||
tags: {
|
||||
isFetching: false,
|
||||
isErrored: false,
|
||||
results: [],
|
||||
error: {},
|
||||
page: 1,
|
||||
numPages: 1,
|
||||
numResults: 0
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
requestParameters (state) {
|
||||
const parameters = {
|
||||
per_page: state.resultsPerPage,
|
||||
shared: 'yes',
|
||||
exclude_shared: false
|
||||
};
|
||||
|
||||
if (state.searchTerm) {
|
||||
parameters.q = state.searchTerm;
|
||||
}
|
||||
|
||||
if (state.tag) {
|
||||
parameters.tags = state.tag;
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
updatePage (state, { section, page }) {
|
||||
state[section].page = page;
|
||||
},
|
||||
updateSearchTerm (state, { query, tag }) {
|
||||
state.searchTerm = query;
|
||||
state.tag = tag;
|
||||
},
|
||||
setFetchingState (state, section) {
|
||||
state[section].isFetching = true;
|
||||
},
|
||||
setRequestError (state, { requestType, error }) {
|
||||
state[requestType].error = error;
|
||||
},
|
||||
setMaps (state, maps) {
|
||||
state.maps.results = toObject(maps.visualizations, 'id');
|
||||
state.maps.numResults = maps.total_entries;
|
||||
state.maps.numPages = Math.ceil(maps.total_entries / state.resultsPerPage);
|
||||
|
||||
state.maps.isFetching = false;
|
||||
},
|
||||
setDatasets (state, datasets) {
|
||||
state.datasets.results = toObject(datasets.visualizations, 'id');
|
||||
state.datasets.numResults = datasets.total_entries;
|
||||
state.datasets.numPages = Math.ceil(datasets.total_entries / state.resultsPerPage);
|
||||
|
||||
state.datasets.isFetching = false;
|
||||
},
|
||||
setTags (state, tags) {
|
||||
state.tags.results = tags.result;
|
||||
state.tags.numResults = tags.total;
|
||||
state.tags.numPages = Math.ceil(tags.total / state.resultsPerPage);
|
||||
|
||||
state.tags.isFetching = false;
|
||||
},
|
||||
updateNumberLikes () {
|
||||
// NOOP. This method avoids action not finding mutation.
|
||||
},
|
||||
updateVisualization (state, { visualizationId, visualizationAttributes }) {
|
||||
const visualization = state.maps.results[visualizationId] || state.datasets.results[visualizationId];
|
||||
|
||||
if (visualization) {
|
||||
Object.assign(visualization, visualizationAttributes);
|
||||
}
|
||||
},
|
||||
resetState (state) {
|
||||
state.searchTerm = '';
|
||||
state.tag = '';
|
||||
|
||||
state.maps = {
|
||||
isFetching: false,
|
||||
isErrored: false,
|
||||
results: {},
|
||||
error: {},
|
||||
page: 1,
|
||||
numPages: 1,
|
||||
numResults: 0
|
||||
};
|
||||
|
||||
state.datasets = {
|
||||
isFetching: false,
|
||||
isErrored: false,
|
||||
results: {},
|
||||
error: {},
|
||||
page: 1,
|
||||
numPages: 1,
|
||||
numResults: 0
|
||||
};
|
||||
|
||||
state.tags = {
|
||||
isFetching: false,
|
||||
isErrored: false,
|
||||
results: [],
|
||||
error: {},
|
||||
page: 1,
|
||||
numPages: 1,
|
||||
numResults: 0
|
||||
};
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
deleteLike: VisualizationActions.deleteLike,
|
||||
like: VisualizationActions.like,
|
||||
doSearch (context, searchParameters) {
|
||||
context.commit('updateSearchTerm', searchParameters);
|
||||
context.commit('setFetchingState', 'maps');
|
||||
context.commit('setFetchingState', 'datasets');
|
||||
|
||||
context.dispatch('fetchMaps', context.getters.requestParameters);
|
||||
context.dispatch('fetchDatasets', context.getters.requestParameters);
|
||||
|
||||
if (searchParameters.query) {
|
||||
context.dispatch('fetchTags', context.getters.requestParameters);
|
||||
context.commit('setFetchingState', 'tags');
|
||||
}
|
||||
},
|
||||
changeSectionPage (context, pageOptions) {
|
||||
context.commit('setFetchingState', pageOptions.section);
|
||||
|
||||
const sectionCapitalized = pageOptions.section[0].toUpperCase() + pageOptions.section.substr(1);
|
||||
context.commit('updatePage', pageOptions);
|
||||
|
||||
context.dispatch(`fetch${sectionCapitalized}`, context.getters.requestParameters);
|
||||
},
|
||||
fetchMaps (context, parameters) {
|
||||
context.rootState.client.getVisualization('',
|
||||
{ ...parameters,
|
||||
type: 'derived',
|
||||
page: context.state.maps.page },
|
||||
function (error, _, data) {
|
||||
if (error) {
|
||||
return context.commit('setRequestError', { requestType: 'maps', error });
|
||||
}
|
||||
|
||||
context.commit('setMaps', data);
|
||||
}
|
||||
);
|
||||
},
|
||||
fetchDatasets (context, parameters) {
|
||||
context.rootState.client.getVisualization('',
|
||||
{ ...parameters,
|
||||
type: 'table',
|
||||
page: context.state.datasets.page,
|
||||
with_dependent_visualizations: 10
|
||||
},
|
||||
function (error, _, data) {
|
||||
if (error) {
|
||||
return context.commit('setRequestError', { requestType: 'datasets', error });
|
||||
}
|
||||
|
||||
context.commit('setDatasets', data);
|
||||
}
|
||||
);
|
||||
},
|
||||
fetchTags (context, parameters) {
|
||||
context.rootState.client.getTags(
|
||||
{ ...parameters,
|
||||
types: 'table,derived',
|
||||
page: context.state.tags.page,
|
||||
include_shared: true
|
||||
},
|
||||
function (error, _, data) {
|
||||
if (error) {
|
||||
return context.commit('setRequestError', { requestType: 'tags', error });
|
||||
}
|
||||
|
||||
context.commit('setTags', data);
|
||||
}
|
||||
);
|
||||
},
|
||||
resetState (context) {
|
||||
context.commit('resetState');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default search;
|
||||
Reference in New Issue
Block a user