File "ExchangeRateProviderSetting.vue"
Full Path: /home/pulsehostuk9/public_html/invoicer.pulsehost.co.uk/resources/scripts/admin/views/modules/ExchangeRateProviderSetting.vue
File size: 5.22 KB
MIME-type: text/html
Charset: utf-8
<template>
<ExchangeRateProviderModal />
<BaseCard>
<div slot="header" class="flex flex-wrap justify-between lg:flex-nowrap">
<div>
<h6 class="text-lg font-medium text-left">
{{ $t('settings.menu_title.exchange_rate') }}
</h6>
<p
class="mt-2 text-sm leading-snug text-left text-gray-500"
style="max-width: 680px"
>
{{ $t('settings.exchange_rate.providers_description') }}
</p>
</div>
<div class="mt-4 lg:mt-0 lg:ml-2">
<BaseButton
variant="primary-outline"
size="lg"
@click="addExchangeRate"
>
<template #left="slotProps">
<PlusIcon :class="slotProps.class" />
</template>
{{ $t('settings.exchange_rate.new_driver') }}
</BaseButton>
</div>
</div>
<BaseTable ref="table" class="mt-16" :data="fetchData" :columns="drivers">
<template #cell-driver="{ row }">
<span class="capitalize">{{ row.data.driver.replace('_', ' ') }}</span>
</template>
<template #cell-active="{ row }">
<BaseBadge
:bg-color="
utils.getBadgeStatusColor(row.data.active ? 'YES' : 'NO').bgColor
"
:color="
utils.getBadgeStatusColor(row.data.active ? 'YES' : 'NO').color
"
>
{{ row.data.active ? 'YES' : 'NO' }}
</BaseBadge>
</template>
<template #cell-actions="{ row }">
<BaseDropdown>
<template #activator>
<div class="inline-block">
<DotsHorizontalIcon class="w-5 text-gray-500" />
</div>
</template>
<BaseDropdownItem @click="editExchangeRate(row.data.id)">
<PencilIcon class="h-5 mr-3 text-gray-600" />
{{ $t('general.edit') }}
</BaseDropdownItem>
<BaseDropdownItem @click="removeExchangeRate(row.data.id)">
<TrashIcon class="h-5 mr-3 text-gray-600" />
{{ $t('general.delete') }}
</BaseDropdownItem>
</BaseDropdown>
</template>
</BaseTable>
</BaseCard>
</template>
<script setup>
import { useExchangeRateStore } from '@/scripts/admin/stores/exchange-rate'
import { useCompanyStore } from '@/scripts/admin/stores/company'
import { useModalStore } from '@/scripts/stores/modal'
import { useDialogStore } from '@/scripts/stores/dialog'
import { SaveIcon } from '@heroicons/vue/outline'
import { ref, computed, inject, reactive } from 'vue'
import ExchangeRateProviderModal from '@/scripts/admin/components/modal-components/ExchangeRateProviderModal.vue'
import { useI18n } from 'vue-i18n'
import {
PlusIcon,
DotsHorizontalIcon,
PencilIcon,
TrashIcon,
} from '@heroicons/vue/outline'
import BaseTable from '@/scripts/components/base/base-table/BaseTable.vue'
// store
const { tm, t } = useI18n()
const companyStore = useCompanyStore()
const exchangeRateStore = useExchangeRateStore()
const modalStore = useModalStore()
const dialogStore = useDialogStore()
//created
// local state
let table = ref('')
const utils = inject('utils')
const drivers = computed(() => {
return [
{
key: 'driver',
label: t('settings.exchange_rate.driver'),
thClass: 'extra',
tdClass: 'font-medium text-gray-900',
},
{
key: 'key',
label: t('settings.exchange_rate.key'),
thClass: 'extra',
tdClass: 'font-medium text-gray-900',
},
{
key: 'active',
label: t('settings.exchange_rate.active'),
thClass: 'extra',
tdClass: 'font-medium text-gray-900',
},
{
key: 'actions',
label: '',
tdClass: 'text-right text-sm font-medium',
sortable: false,
},
]
})
async function fetchData({ page, sort }) {
let data = reactive({
orderByField: sort.fieldName || 'created_at',
orderBy: sort.order || 'desc',
page,
})
let response = await exchangeRateStore.fetchProviders(data)
return {
data: response.data.data,
pagination: {
totalPages: response.data.meta.last_page,
currentPage: page,
totalCount: response.data.meta.total,
limit: 5,
},
}
}
async function updateRate() {
await exchangeRateStore.updateExchangeRate(
exchangeRateStore.currentExchangeRate.rate
)
}
function addExchangeRate() {
modalStore.openModal({
title: t('settings.exchange_rate.new_driver'),
componentName: 'ExchangeRateProviderModal',
size: 'md',
refreshData: table.value && table.value.refresh,
})
}
function editExchangeRate(data) {
exchangeRateStore.fetchProvider(data)
modalStore.openModal({
title: t('settings.exchange_rate.edit_driver'),
componentName: 'ExchangeRateProviderModal',
size: 'md',
data: data,
refreshData: table.value && table.value.refresh,
})
}
function removeExchangeRate(id) {
dialogStore
.openDialog({
title: t('general.are_you_sure'),
message: t('settings.exchange_rate.exchange_rate_confirm_delete'),
yesLabel: t('general.ok'),
noLabel: t('general.cancel'),
variant: 'danger',
hideNoButton: false,
size: 'lg',
})
.then(async (res) => {
if (res) {
await exchangeRateStore.deleteExchangeRate(id)
table.value && table.value.refresh()
}
})
}
</script>