1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-24 05:03:02 +00:00
bramw_baserow/web-frontend/modules/database/components/view/grid/GridViewHideContext.vue
2021-02-04 15:21:18 +00:00

118 lines
2.9 KiB
Vue

<template>
<Context ref="context" class="hidings">
<div>
<ul class="context__menu">
<li v-for="field in fields" :key="field.id" class="hidings__item">
<SwitchInput
:value="!isHidden(field.id)"
@input="updateFieldOptionsOfField(field, { hidden: !$event })"
>
<i
class="fas fa-fw switch__icon"
:class="'fa-' + field._.type.iconClass"
></i>
<span>{{ field.name }}</span>
</SwitchInput>
</li>
</ul>
</div>
<div class="hidings__footer">
<button
class="button button--ghost hidings__footer-button"
@click="!noneSelected && updateAllFieldOptions({ hidden: true })"
>
Hide all
</button>
<button
class="button button--ghost"
@click="!allSelected && updateAllFieldOptions({ hidden: false })"
>
Show all
</button>
</div>
</Context>
</template>
<script>
import { mapGetters } from 'vuex'
import context from '@baserow/modules/core/mixins/context'
import { notifyIf } from '@baserow/modules/core/utils/error'
import { clone } from '@baserow/modules/core/utils/object'
export default {
name: 'ViewHideContext',
mixins: [context],
props: {
fields: {
type: Array,
required: true,
},
view: {
type: Object,
required: true,
},
},
computed: {
noneSelected() {
for (const i in this.fields) {
if (!this.isHidden(this.fields[i].id)) {
return false
}
}
return true
},
allSelected() {
for (const i in this.fields) {
if (this.isHidden(this.fields[i].id)) {
return false
}
}
return true
},
...mapGetters({
fieldOptions: 'view/grid/getAllFieldOptions',
}),
},
methods: {
async updateAllFieldOptions(values) {
const newFieldOptions = {}
const oldFieldOptions = clone(this.fieldOptions)
this.fields.forEach((field) => {
if (!field.primary) {
newFieldOptions[field.id] = values
}
})
try {
await this.$store.dispatch('view/grid/updateAllFieldOptions', {
gridId: this.view.id,
newFieldOptions,
oldFieldOptions,
})
} catch (error) {
notifyIf(error, 'view')
}
},
async updateFieldOptionsOfField(field, values) {
try {
await this.$store.dispatch('view/grid/updateFieldOptionsOfField', {
gridId: this.view.id,
field,
values,
oldValues: { hidden: this.fieldOptions[field.id].hidden },
})
} catch (error) {
notifyIf(error, 'view')
}
},
isHidden(fieldId) {
const exists = Object.prototype.hasOwnProperty.call(
this.fieldOptions,
fieldId
)
return exists ? this.fieldOptions[fieldId].hidden : false
},
},
}
</script>