|
|
@@ -0,0 +1,109 @@
|
|
|
+<template>
|
|
|
+ <q-dialog ref="dialogRef" @hide="onDialogHide">
|
|
|
+ <q-card class="q-dialog-plugin" style="width: 700px; max-width: 90vw">
|
|
|
+ <DefaultDialogHeader :title="title" @close="onDialogCancel" />
|
|
|
+ <q-form ref="formRef" @submit="onOKClick">
|
|
|
+ <q-card-section class="row q-col-gutter-sm">
|
|
|
+ <ProviderSelect
|
|
|
+ v-model="selectedProvider"
|
|
|
+ :label="$t('client_provider_blocks.provider')"
|
|
|
+ :rules="[inputRules.required]"
|
|
|
+ :error="!!serverErrors?.provider_id"
|
|
|
+ :error-message="serverErrors?.provider_id"
|
|
|
+ :initial-id="block ? block.provider_id : null"
|
|
|
+ :exclude-ids="excludedProviderIds"
|
|
|
+ class="col-12"
|
|
|
+ @update:model-value="($event) => atualizaForm($event)"
|
|
|
+ />
|
|
|
+ </q-card-section>
|
|
|
+
|
|
|
+ <q-card-actions align="right">
|
|
|
+ <q-btn
|
|
|
+ flat
|
|
|
+ :label="$t('common.actions.cancel')"
|
|
|
+ color="negative"
|
|
|
+ @click="onDialogCancel"
|
|
|
+ />
|
|
|
+ <q-btn
|
|
|
+ type="submit"
|
|
|
+ :label="$t('common.actions.save')"
|
|
|
+ :loading="loading"
|
|
|
+ :disable="!hasUpdatedFields"
|
|
|
+ color="primary"
|
|
|
+ />
|
|
|
+ </q-card-actions>
|
|
|
+ </q-form>
|
|
|
+ </q-card>
|
|
|
+ </q-dialog>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref, onMounted } from 'vue'
|
|
|
+import { useDialogPluginComponent } from 'quasar'
|
|
|
+import { useFormUpdateTracker } from 'src/composables/useFormUpdateTracker'
|
|
|
+import { useSubmitHandler } from 'src/composables/useSubmitHandler'
|
|
|
+import { createClientProviderBlock, getBlockedProviderIds } from 'src/api/clientProviderBlock'
|
|
|
+import DefaultDialogHeader from 'src/components/defaults/DefaultDialogHeader.vue'
|
|
|
+import ProviderSelect from 'src/components/provider/ProviderSelect.vue'
|
|
|
+import { useInputRules } from 'src/composables/useInputRules'
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ block: {
|
|
|
+ type: Object,
|
|
|
+ default: null
|
|
|
+ },
|
|
|
+ clientId: {
|
|
|
+ type: Number,
|
|
|
+ required: true
|
|
|
+ },
|
|
|
+ title: {
|
|
|
+ type: Function,
|
|
|
+ default: () => ''
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+defineEmits([...useDialogPluginComponent.emits])
|
|
|
+const { dialogRef, onDialogHide, onDialogOK, onDialogCancel } = useDialogPluginComponent()
|
|
|
+const { inputRules } = useInputRules()
|
|
|
+const formRef = ref(null)
|
|
|
+const selectedProvider = ref(null)
|
|
|
+const excludedProviderIds = ref([])
|
|
|
+
|
|
|
+const { form, hasUpdatedFields } = useFormUpdateTracker({
|
|
|
+ client_id: props.clientId,
|
|
|
+ provider_id: props.block ? props.block.provider_id : null
|
|
|
+})
|
|
|
+
|
|
|
+const {
|
|
|
+ loading,
|
|
|
+ serverErrors,
|
|
|
+ execute: submitForm,
|
|
|
+} = useSubmitHandler({
|
|
|
+ onSuccess: () => onDialogOK(true),
|
|
|
+ formRef: formRef,
|
|
|
+})
|
|
|
+
|
|
|
+const onOKClick = async () => {
|
|
|
+ if (selectedProvider.value?.value) {
|
|
|
+ form.provider_id = selectedProvider.value.value
|
|
|
+ }
|
|
|
+
|
|
|
+ await submitForm(() => createClientProviderBlock({ ...form }))
|
|
|
+}
|
|
|
+
|
|
|
+const atualizaForm = (provider) => {
|
|
|
+ form.provider_id = provider.value
|
|
|
+ serverErrors.provider_id = null
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(async () => {
|
|
|
+ try {
|
|
|
+ const blockedIds = await getBlockedProviderIds(props.clientId)
|
|
|
+ excludedProviderIds.value = props.block
|
|
|
+ ? blockedIds.filter(id => id !== props.block.provider_id)
|
|
|
+ : blockedIds
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error loading blocked provider ids:', error)
|
|
|
+ }
|
|
|
+})
|
|
|
+</script>
|