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;
+});
@@ -74,42 +94,49 @@ onMounted(() => getCountries());
-
getCountries());
:options="countriesOptions"
@update:model-value="data.provinceFk = null"
data-cy="addressFormCountry"
+ required
/>
-
+
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();
});
+ (addresses = data)"
+ />
{
openConfirmationModal(
null,
t('confirmDeleteAddress'),
- () => removeAddress(address.id)
+ () => removeAddress(address)
)
"
>
diff --git a/src/pages/Cms/HomeView.vue b/src/pages/Cms/HomeView.vue
index 442dfbc9..7dff6165 100644
--- a/src/pages/Cms/HomeView.vue
+++ b/src/pages/Cms/HomeView.vue
@@ -1,16 +1,15 @@