Files
hossein-por-shop/frontend/pages/profile/addresses.vue
T
2025-05-11 20:11:09 +03:30

81 lines
2.1 KiB
Vue

<script setup lang="ts">
// imports
import useGetAllAddress from "~/composables/api/account/useGetAllAddress";
// meta
useSeoMeta({
title : "پنل کاربری آدرس ها"
});
definePageMeta({
middleware: "check-is-logged-in",
layout: "profile",
});
// state
const selectedAddress = ref<Address | null>();
const modalIsShow = ref(false);
// queries
const { data: addresses, isLoading: addressesIsLoading } = useGetAllAddress();
// methods
const handleSelectAddress = (address: Address) => {
selectedAddress.value = { ...address };
};
</script>
<template>
<div class="w-full flex flex-col gap-5">
<ProfilePageTitle title="آدرس های شما" icon="bi:map" />
<ProfileSection title="همه">
<template #button>
<AddressModal
:address="undefined"
v-model:is-show="modalIsShow"
/>
</template>
<ul
v-if="addressesIsLoading"
class="w-full grid grid-cols-1 lg:grid-cols-2 gap-5"
>
<Skeleton
v-for="i in 6"
:key="i"
class="w-full !h-[10rem] !rounded-xl"
/>
</ul>
<div v-else class="w-full h-max">
<div v-if="!addresses?.length" class="flex flex-grow w-full">
<Placeholder
title="آدرسی یافت نشد :("
icon="bi:map"
class="!py-[4rem] !border-none"
/>
</div>
<ul v-else class="w-full grid grid-cols-1 lg:grid-cols-2 gap-5">
<AddressItem
v-for="(address, index) in addresses"
:key="index"
:address="address"
@select="handleSelectAddress"
:selectable="false"
:isSelected="address.id == selectedAddress?.id"
/>
</ul>
</div>
</ProfileSection>
</div>
</template>
<style scoped></style>