cartodb-4.42/lib/assets/javascripts/new-dashboard/components/BulkActions/ExternalMapBulkActions.vue

111 lines
2.8 KiB
Vue
Raw Normal View History

2024-04-06 13:25:13 +08:00
<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';
export default {
name: 'ExternalMapBulkActions',
components: {
BulkActions
},
props: {
areAllMapsSelected: {
type: Boolean,
default: false
},
selectedMaps: {
type: Array,
required: true
}
},
computed: {
...mapGetters({
isOutOfPublicMapsQuota: 'user/isOutOfPublicMapsQuota'
}),
actions () {
return {
single: [
{
name: this.$t('BulkActions.maps.selectAll'),
event: 'selectAll',
shouldBeHidden: this.areAllMapsSelected
},
{
name: this.$t('BulkActions.maps.delete'),
event: 'deleteMaps',
isDestructive: true
}
],
multiple: [
{
name: this.$t('BulkActions.maps.selectAll'),
event: 'selectAll',
shouldBeHidden: this.areAllMapsSelected
},
{
name: this.$t('BulkActions.maps.deselectAll'),
event: 'deselectAll'
},
{
name: this.$t('BulkActions.maps.delete'),
event: 'deleteMaps',
isDestructive: true
}
]
};
},
actionMode () {
return this.selectedMaps.length > 1 ? 'multiple' : 'single';
},
isSelectedMapPrivate () {
return this.selectedMaps.some(map => ['PRIVATE'].includes(map.privacy));
}
},
methods: {
getActionHandlers () {
return {
deselectAll: () => {
this.deselectAll();
},
fetchList: () => {
this.$store.dispatch('maps/fetch');
},
updateVisualization: (model) => {
this.$store.dispatch('maps/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');
},
deleteMaps () {
DialogActions.deleteExternalVisualizations.apply(this, [this.selectedMaps]);
}
}
};
</script>