111 lines
2.8 KiB
Vue
111 lines
2.8 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';
|
||
|
|
||
|
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>
|