cartodb-4.42/lib/assets/javascripts/new-dashboard/store/actions/external-visualizations.js
2024-04-06 05:25:13 +00:00

164 lines
4.9 KiB
JavaScript

import getCARTOData from 'new-dashboard/store/utils/getCARTOData';
import Filters from 'new-dashboard/core/configuration/filters';
function customStorageToVisualization (csVisualizationList, filter) {
const cartoData = getCARTOData();
const visualizationList = csVisualizationList.reduce((acum, elem) => {
let filtered = false;
for (const key in filter) {
if (elem[key] !== filter[key]) {
filtered = true;
break;
}
}
if (!filtered) {
acum.push({
id: elem.id,
name: elem.name,
display_name: null,
map_id: elem.id,
active_layer_id: null,
type: 'keplergl',
tags: [],
description: elem.description,
privacy: elem.isprivate ? 'PRIVATE' : 'LINK',
created_at: elem.lastmodified,
updated_at: elem.lastmodified,
locked: false,
source: null,
title: null,
license: null,
attributions: null,
kind: null,
external_source: {},
// eslint-disable-next-line no-undef
url: `${__KEPLERGL_BASE_URL__}/demo/map/carto?mapId=${elem.id}&owner=${cartoData.user_data.username}&privateMap=${elem.isprivate}`, // TODO: Set Kepler.gl URL depending on a env var
version: 1,
prev_id: null,
next_id: null,
parent_id: null,
transition_options: {},
active_child: null,
children: [],
synchronization: null,
uses_builder_features: false,
liked: false,
permission: {
owner: cartoData.user_data,
acl: []
},
stats: {},
auth_tokens: [],
table: {},
thumbnailDataUrl: elem.thumbnail
});
}
return acum;
}, []);
return visualizationList;
}
export function fetchVisualizations (context) {
if (context.state.customStorageInitialized) {
const parameters = {
...Filters[context.state.filterType],
page: context.state.page,
order: context.state.order,
order_direction: context.state.orderDirection,
per_page: context.state.resultsPerPage
};
context.commit('setFetchingState');
context.rootState.customStorage.getVisualizations()
.then(data => {
// Format and filter results
const filter = {};
if (parameters.privacy) {
filter.isprivate = parameters.privacy === 'private';
}
let visData = customStorageToVisualization(data, filter);
// Apply order
const { order, order_direction } = parameters;
if (order && order_direction) {
visData = visData.sort((a, b) => b[order] - a[order]);
if (order_direction === 'desc') {
visData = visData.reverse();
}
}
context.commit('setExternalMaps', visData);
context.commit('setPagination', context.state.page);
})
.catch(err => {
context.commit('setRequestError', err);
});
}
}
export function whenFetchVisualizations (context) {
return new Promise((resolve, reject) => {
let visData = [];
if (context.rootState.externalMaps.customStorageInitialized) {
return context.rootState.customStorage.getVisualizations()
.then(data => {
const filter = {};
visData = customStorageToVisualization(data, filter);
resolve(visData);
})
.catch((err) => {
context.commit('setRequestError', err);
reject(err);
});
}
resolve(visData);
});
}
export function deleteVisualizations (context, visualizationList) {
if (context.state.customStorageInitialized) {
const deletePromises = visualizationList.map(vis => context.rootState.customStorage.deleteVisualization(vis.id));
Promise.all(deletePromises)
.then(() => {
fetchVisualizations(context);
})
.catch((err) => {
context.commit('setRequestError', err);
});
}
}
export function filter (context, filter) {
context.commit('setPagination', 1);
context.commit('setFilterType', filter);
context.dispatch('fetch');
}
export function order (context, orderOptions) {
context.commit('setPagination', 1);
context.commit('setOrder', orderOptions);
context.dispatch('fetch');
}
export function resetFilters (DEFAULT_VALUES) {
return function (context) {
context.commit('setPagination', 1);
context.commit('setFilterType', 'mine');
context.commit('setResultsPerPage', 12);
context.commit('setOrder', { order: DEFAULT_VALUES.order, direction: DEFAULT_VALUES.orderDirection });
};
}
export function setResultsPerPage (context, perPage) {
context.commit('setResultsPerPage', perPage);
}
export function setURLOptions (context, options) {
context.commit('setPagination', parseInt(options.page || 1));
context.commit('setFilterType', options.filter);
context.commit('setOrder', { order: options.order, direction: options.order_direction });
context.dispatch('fetch');
}