| <template> |
| <span> |
| <b-link |
| v-if="value === 'export'" |
| class="align-bottom btn-icon-only py-0 btn-link" |
| :download="download" |
| :href="href" |
| :title="title" |
| > |
| <slot name="icon"> |
| {{ $t('global.action.export') }} |
| </slot> |
| <span v-if="btnIconOnly" class="sr-only">{{ title }}</span> |
| </b-link> |
| <b-link |
| v-else-if=" |
| value === 'download' && downloadInNewTab && downloadLocation !== '' |
| " |
| class="align-bottom btn-icon-only py-0 btn-link" |
| target="_blank" |
| :href="downloadLocation" |
| :title="title" |
| > |
| <slot name="icon" /> |
| <span class="sr-only"> |
| {{ $t('global.action.download') }} |
| </span> |
| </b-link> |
| <b-link |
| v-else-if="value === 'download' && downloadLocation !== ''" |
| class="align-bottom btn-icon-only py-0 btn-link" |
| :download="exportName" |
| :href="downloadLocation" |
| :title="title" |
| > |
| <slot name="icon" /> |
| <span class="sr-only"> |
| {{ $t('global.action.download') }} |
| </span> |
| </b-link> |
| <b-button |
| v-else-if="showButton" |
| variant="link" |
| :class="{ 'btn-icon-only': btnIconOnly }" |
| :disabled="!enabled" |
| :title="btnIconOnly ? title : !title" |
| @click="$emit('click-table-action', value)" |
| > |
| <slot name="icon"> |
| {{ title }} |
| </slot> |
| <span v-if="btnIconOnly" class="sr-only">{{ title }}</span> |
| </b-button> |
| </span> |
| </template> |
| |
| <script> |
| import { omit } from 'lodash'; |
| |
| export default { |
| name: 'TableRowAction', |
| props: { |
| value: { |
| type: String, |
| required: true, |
| }, |
| enabled: { |
| type: Boolean, |
| default: true, |
| }, |
| title: { |
| type: String, |
| default: null, |
| }, |
| rowData: { |
| type: Object, |
| default: () => {}, |
| }, |
| exportName: { |
| type: String, |
| default: 'export', |
| }, |
| downloadLocation: { |
| type: String, |
| default: '', |
| }, |
| btnIconOnly: { |
| type: Boolean, |
| default: true, |
| }, |
| downloadInNewTab: { |
| type: Boolean, |
| default: false, |
| }, |
| showButton: { |
| type: Boolean, |
| default: true, |
| }, |
| }, |
| computed: { |
| dataForExport() { |
| return JSON.stringify(omit(this.rowData, 'actions')); |
| }, |
| download() { |
| return `${this.exportName}.json`; |
| }, |
| href() { |
| return `data:text/json;charset=utf-8,${this.dataForExport}`; |
| }, |
| }, |
| }; |
| </script> |