mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-13 00:38:06 +00:00
114 lines
2.7 KiB
Vue
114 lines
2.7 KiB
Vue
<template>
|
|
<Context ref="context">
|
|
<ul class="context__menu">
|
|
<li>
|
|
<a
|
|
ref="updateFieldContextLink"
|
|
class="grid-view__description-options"
|
|
@click="
|
|
$refs.updateFieldContext.toggle(
|
|
$refs.updateFieldContextLink,
|
|
'bottom',
|
|
'left',
|
|
0
|
|
)
|
|
"
|
|
>
|
|
<i class="context__menu-icon fas fa-fw fa-pen"></i>
|
|
{{ $t('fieldContext.editField') }}
|
|
</a>
|
|
<UpdateFieldContext
|
|
ref="updateFieldContext"
|
|
:table="table"
|
|
:field="field"
|
|
@update="$emit('update', $event)"
|
|
@updated="$refs.context.hide()"
|
|
></UpdateFieldContext>
|
|
</li>
|
|
<slot></slot>
|
|
<li v-if="!field.primary">
|
|
<a
|
|
:class="{ 'context__menu-item--loading': deleteLoading }"
|
|
@click="deleteField()"
|
|
>
|
|
<i class="context__menu-icon fas fa-fw fa-trash"></i>
|
|
{{ $t('fieldContext.deleteField') }}
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</Context>
|
|
</template>
|
|
|
|
<script>
|
|
import context from '@baserow/modules/core/mixins/context'
|
|
import UpdateFieldContext from '@baserow/modules/database/components/field/UpdateFieldContext'
|
|
import { notifyIf } from '@baserow/modules/core/utils/error'
|
|
|
|
export default {
|
|
name: 'FieldContext',
|
|
components: {
|
|
UpdateFieldContext,
|
|
},
|
|
mixins: [context],
|
|
props: {
|
|
table: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
field: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
deleteLoading: false,
|
|
}
|
|
},
|
|
methods: {
|
|
async deleteField() {
|
|
this.deleteLoading = true
|
|
const { field } = this
|
|
|
|
try {
|
|
const { data } = await this.$store.dispatch('field/deleteCall', field)
|
|
this.$emit('delete')
|
|
await this.$store.dispatch('field/forceDelete', field)
|
|
await this.$store.dispatch('field/forceUpdateFields', {
|
|
fields: data.related_fields,
|
|
})
|
|
await this.$store.dispatch('notification/restore', {
|
|
trash_item_type: 'field',
|
|
trash_item_id: field.id,
|
|
})
|
|
} catch (error) {
|
|
if (error.response && error.response.status === 404) {
|
|
this.$emit('delete')
|
|
await this.$store.dispatch('field/forceDelete', field)
|
|
} else {
|
|
notifyIf(error, 'field')
|
|
}
|
|
}
|
|
this.hide()
|
|
this.deleteLoading = false
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<i18n>
|
|
{
|
|
"en": {
|
|
"fieldContext":{
|
|
"editField": "Edit field",
|
|
"deleteField": "Delete field"
|
|
}
|
|
},
|
|
"fr": {
|
|
"fieldContext":{
|
|
"editField": "Modifier la colonne",
|
|
"deleteField": "Supprimer la colonne"
|
|
}
|
|
}
|
|
}
|
|
</i18n>
|