cartodb-4.42/lib/assets/javascripts/new-dashboard/components/BulkActions/DatasetBulkActions.vue
2024-04-06 05:25:13 +00:00

238 lines
7.3 KiB
Vue

<template>
<BulkActions :actions="actions[actionMode]" v-on="getEventListeners()"></BulkActions>
</template>
<script>
import { mapGetters } from 'vuex';
import BulkActions from 'new-dashboard/components/BulkActions/BulkActions';
import * as DialogActions from 'new-dashboard/core/dialog-actions';
import * as Table from 'new-dashboard/core/models/table';
import * as Visualization from 'new-dashboard/core/models/visualization';
export default {
name: 'DatasetBulkActions',
inject: ['backboneViews'],
components: {
BulkActions
},
props: {
areAllDatasetsSelected: {
type: Boolean,
default: false
},
selectedDatasets: {
type: Array,
required: true
}
},
computed: {
...mapGetters({
isOutOfDatasetsQuota: 'user/isOutOfDatasetsQuota',
isOutOfPublicMapsQuota: 'user/isOutOfPublicMapsQuota',
isOutOfPrivateMapsQuota: 'user/isOutOfPrivateMapsQuota'
}),
actions () {
return {
single: [
{
name: this.$t('BulkActions.datasets.selectAll'),
event: 'selectAll',
shouldBeHidden: this.areAllMapsSelected
},
{
name: this.$t('BulkActions.datasets.createMap'),
event: 'createMap',
shouldBeHidden: this.isAnyLocked,
shouldBeDisabled: this.isOutOfPrivateMapsQuota
},
{
name: this.$t('BulkActions.datasets.changePrivacy'),
event: 'changePrivacy',
shouldBeHidden: this.isAnyShared || this.isAnyLocked
},
{
name: this.$t('BulkActions.datasets.duplicate'),
event: 'duplicateDataset',
shouldBeDisabled: this.isOutOfDatasetsQuota
},
{
name: this.$t('BulkActions.datasets.lock'),
event: 'lockDataset',
shouldBeDisabled: this.isAnyShared && !this.areAllLocked,
shouldBeHidden: this.isDOSubscription || this.isAnyLocked
},
{
name: this.$t('BulkActions.datasets.unlock'),
event: 'unlockDataset',
shouldBeDisabled: this.isAnyShared && this.areAllLocked,
shouldBeHidden: this.isDOSubscription || !this.areAllLocked
},
{
name: this.$t('BulkActions.datasets.delete'),
event: 'deleteDataset',
isDestructive: true,
shouldBeDisabled: this.isAnyShared && !this.isAnyLocked,
shouldBeHidden: this.isDOSubscription || this.isAnyLocked
}
],
multiple: [
{
name: this.$t('BulkActions.datasets.selectAll'),
event: 'selectAll',
shouldBeHidden: this.areAllDatasetsSelected
},
{
name: this.$t('BulkActions.datasets.deselectAll'),
event: 'deselectAll'
},
{
name: this.$t('BulkActions.datasets.createMap'),
event: 'createMap',
shouldBeHidden: this.isAnyLocked
},
{
name: this.$t('BulkActions.datasets.lock'),
event: 'lockDatasets',
shouldBeDisabled: this.isAnyShared && !this.areAllLocked,
shouldBeHidden: this.isDOSubscription || this.isAnyLocked
},
{
name: this.$t('BulkActions.datasets.unlock'),
event: 'unlockDatasets',
shouldBeDisabled: this.isAnyShared && this.areAllLocked,
shouldBeHidden: this.isDOSubscription || !this.areAllLocked
},
{
name: this.$t('BulkActions.datasets.delete'),
event: 'deleteDatasets',
isDestructive: true,
shouldBeDisabled: this.isAnyShared && !this.isAnyLocked,
shouldBeHidden: this.isDOSubscription || this.isAnyLocked
}
]
};
},
actionMode () {
return this.selectedDatasets.length > 1 ? 'multiple' : 'single';
},
isAnyShared () {
return this.selectedDatasets.some(dataset => Visualization.isSharedWithMe(dataset, this.$cartoModels));
},
isAnyLocked () {
return this.selectedDatasets.some(dataset => dataset.locked);
},
areAllLocked () {
return this.selectedDatasets.every(dataset => dataset.locked);
},
isDOSubscription () {
return this.selectedDatasets.some(dataset => {
const subscription = dataset.subscription;
return subscription && subscription.provider === 'do-v2';
});
}
},
methods: {
getActionHandlers () {
return {
deselectAll: () => {
this.deselectAll();
},
fetchList: () => {
this.$store.dispatch('datasets/fetch');
},
updateVisualization: (model) => {
this.$store.dispatch('datasets/updateVisualization', { visualizationId: model.get('id'), visualizationAttributes: model.attributes });
}
};
},
getEventListeners () {
const events = this.actions[this.actionMode].map(action => action.event);
return events.reduce(
(eventListeners, action) => {
eventListeners[action] = this[action].bind(this);
return eventListeners;
}, {}
);
},
showModal (componentDefinition, componentPropsData) {
this.$modal.show(
componentDefinition,
componentPropsData,
{ width: '100%', height: '100%' }
);
},
selectAll () {
this.$emit('selectAll');
},
deselectAll () {
this.$emit('deselectAll');
},
createMap () {
DialogActions.createMap.apply(this, [
this.selectedDatasets,
this.backboneViews.backgroundPollingView.getBackgroundPollingView(),
this.backboneViews.mamufasImportView.getView()
]);
},
changePrivacy () {
DialogActions.changePrivacy.apply(this, [this.selectedDatasets[0], this.getActionHandlers()]);
},
duplicateDataset () {
const selectedDataset = this.selectedDatasets[0];
const bgPollingView = this.backboneViews.backgroundPollingView.getBackgroundPollingView();
bgPollingView._addDataset({
type: 'duplication',
table_name: `${Table.getUnqualifiedName(selectedDataset.name)}_copy`,
value: selectedDataset.table.name,
create_vis: false
});
this.deselectAll();
},
unlockDataset () {
DialogActions.changeLockState.apply(this, [
this.selectedDatasets[0],
'datasets',
this.getActionHandlers()
]);
},
lockDataset () {
DialogActions.changeLockState.apply(this, [
this.selectedDatasets[0],
'datasets',
this.getActionHandlers()
]);
},
deleteDataset () {
DialogActions.deleteVisualization.apply(this, [
this.selectedDatasets[0],
'datasets',
this.getActionHandlers()
]);
},
unlockDatasets () {
DialogActions.changeVisualizationsLockState.apply(this, [
this.selectedDatasets,
'datasets',
this.getActionHandlers()
]);
},
lockDatasets () {
DialogActions.changeVisualizationsLockState.apply(this, [
this.selectedDatasets,
'datasets',
this.getActionHandlers()
]);
},
deleteDatasets () {
DialogActions.deleteVisualizations.apply(this, [
this.selectedDatasets,
'datasets',
this.getActionHandlers()
]);
}
}
};
</script>