mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-24 05:03:02 +00:00
118 lines
2.9 KiB
Vue
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>
|