diff --git a/src/components/common/FetchData.vue b/src/components/common/FetchData.vue new file mode 100644 index 00000000..26ec77a4 --- /dev/null +++ b/src/components/common/FetchData.vue @@ -0,0 +1,66 @@ + + diff --git a/src/pages/Account/AddressDetails.vue b/src/pages/Account/AddressDetails.vue index 9e4210d7..d60684ad 100644 --- a/src/pages/Account/AddressDetails.vue +++ b/src/pages/Account/AddressDetails.vue @@ -5,32 +5,26 @@ import { useRouter, useRoute } from 'vue-router'; import VnInput from 'src/components/common/VnInput.vue'; import VnSelect from 'src/components/common/VnSelect.vue'; -import VnForm from 'src/components/common/VnForm.vue'; +import FormModel from 'src/components/common/FormModel.vue'; +import { useUserStore } from 'stores/user'; import { useAppStore } from 'stores/app'; import { storeToRefs } from 'pinia'; const router = useRouter(); const route = useRoute(); const { t } = useI18n(); -const jApi = inject('jApi'); +const api = inject('api'); const appStore = useAppStore(); +const userStore = useUserStore(); const { isHeaderMounted } = storeToRefs(appStore); const vnFormRef = ref(null); const countriesOptions = ref([]); const provincesOptions = ref([]); -const pks = { id: route.params.id }; const isEditMode = route.params.id !== '0'; -const fetchAddressDataSql = { - query: ` - SELECT a.id, a.street, a.nickname, a.city, a.postalCode, a.provinceFk, p.countryFk - FROM myAddress a - LEFT JOIN vn.province p ON p.id = a.provinceFk - WHERE a.id = #address - `, - params: { address: route.params.id } -}; +const editAddressData = ref(null); +const showForm = ref(false); watch( () => vnFormRef?.value?.formData?.countryFk, @@ -40,23 +34,49 @@ watch( const goBack = () => router.push({ name: 'addressesList' }); const getCountries = async () => { - countriesOptions.value = await jApi.query( - `SELECT id, name FROM vn.country - ORDER BY name` - ); + const filter = { fields: ['id', 'name'], order: 'name' }; + const { data } = await api.get('Countries', { + params: { filter: JSON.stringify(filter) } + }); + countriesOptions.value = data; }; const getProvinces = async countryFk => { if (!countryFk) return; - provincesOptions.value = await jApi.query( - `SELECT id, name FROM vn.province - WHERE countryFk = #id - ORDER BY name`, - { id: countryFk } - ); + + const filter = { + where: { countryFk }, + fields: ['id', 'name'], + order: 'name' + }; + const { data } = await api.get('Provinces', { + params: { filter: JSON.stringify(filter) } + }); + provincesOptions.value = data; }; -onMounted(() => getCountries()); +const getAddressDetails = async () => { + const { data } = await api.get(`Addresses/${route.params.id}`); + if (!data) return; + + const { nickname, street, city, postalCode, province, provinceFk } = data; + editAddressData.value = { + nickname, + street, + city, + postalCode, + countryFk: province?.countryFk, + provinceFk + }; +}; + +onMounted(async () => { + if (isEditMode) { + await getAddressDetails(); + } + getCountries(); + showForm.value = true; +}); diff --git a/src/pages/Account/AddressList.vue b/src/pages/Account/AddressList.vue index a603715c..9939c926 100644 --- a/src/pages/Account/AddressList.vue +++ b/src/pages/Account/AddressList.vue @@ -5,19 +5,24 @@ import { useRouter } from 'vue-router'; import CardList from 'src/components/ui/CardList.vue'; import VnList from 'src/components/ui/VnList.vue'; +import FetchData from 'src/components/common/FetchData.vue'; import useNotify from 'src/composables/useNotify.js'; import { useVnConfirm } from 'src/composables/useVnConfirm.js'; import { useAppStore } from 'stores/app'; import { storeToRefs } from 'pinia'; +import { useUserStore } from 'stores/user'; const router = useRouter(); const jApi = inject('jApi'); +const api = inject('api'); const { notify } = useNotify(); const { t } = useI18n(); const { openConfirmationModal } = useVnConfirm(); const appStore = useAppStore(); +const userStore = useUserStore(); const { isHeaderMounted } = storeToRefs(appStore); +const fetchAddressesRef = ref(null); const addresses = ref([]); const defaultAddress = ref(null); @@ -38,19 +43,6 @@ const getDefaultAddress = async () => { } }; -const getActiveAddresses = async () => { - try { - addresses.value = await jApi.query( - `SELECT a.id, a.nickname, p.name province, a.postalCode, a.city, a.street, a.isActive - FROM myAddress a - LEFT JOIN vn.province p ON p.id = a.provinceFk - WHERE a.isActive` - ); - } catch (error) { - console.error('Error getting active addresses:', error); - } -}; - const changeDefaultAddress = async () => { if (!clientId.value) return; await jApi.execQuery( @@ -65,32 +57,46 @@ const changeDefaultAddress = async () => { notify(t('defaultAddressModified'), 'positive'); }; -const removeAddress = async id => { +async function removeAddress(address) { try { - await jApi.execQuery( - `START TRANSACTION; - UPDATE hedera.myAddress SET isActive = FALSE - WHERE ((id = #id)); - SELECT isActive FROM hedera.myAddress WHERE ((id = #id)); - COMMIT`, + await api.patch( + `/Clients/${userStore?.user?.id}/updateAddress/${address.id}`, { - id + ...address, + isActive: false } ); - getActiveAddresses(); + fetchAddressesRef.value.fetch(); notify(t('dataSaved'), 'positive'); } catch (error) { console.error('Error removing address:', error); } -}; +} onMounted(async () => { getDefaultAddress(); - getActiveAddresses(); });