schon/storefront/app/composables/user/useUserBaseData.ts
Alexandr SaVBaD Waltz 048da0e251 feat(addresses): add address management feature with UI and logic integration
Introduced address management functionality, including address creation, deletion, and display with full localization support. Integrated GraphQL queries, mutations, and reusable composables for backend communication.

- Added `addresses.vue` to profile for managing user addresses.
- Implemented `useAddressCreate`, `useAddressDelete`, and `useAddressAutocomplete` composables.
- Created reusable components: `forms/address.vue` and `cards/address.vue`.
- Updated `navigation.vue` to include addresses in profile navigation.
- Enhanced localization files for address-related translations.

This improves user experience by enabling comprehensive address management in the profile section. No breaking changes.
2026-03-09 20:32:36 +03:00

52 lines
1.4 KiB
TypeScript

import { orderStatuses } from '@appConstants';
import { useOrderSync } from '@composables/orders';
import { useWishlistSync } from '@composables/wishlist';
import { getUserBaseData } from '@graphql/queries/combined/userBaseData';
import type { IUserBaseDataResponse } from '@types';
export function useUserBaseData() {
const wishlistStore = useWishlistStore();
const cartStore = useCartStore();
const promocodeStore = usePromocodeStore();
const addressesStore = useAddressesStore();
const { syncWishlist } = useWishlistSync();
const { syncOrder } = useOrderSync();
async function loadUserBaseData(userEmail: string) {
const { document, variables } = getUserBaseData({
userEmail,
status: orderStatuses.PENDING,
});
const { mutate, error } = useMutation<IUserBaseDataResponse>(document);
const result = await mutate(variables);
if (error.value) {
console.error('useUserBaseData error:', error.value);
}
const data = result?.data;
if (data?.wishlists.edges) {
wishlistStore.setWishlist(data.wishlists.edges[0].node);
await syncWishlist();
}
if (data?.orders.edges) {
cartStore.setCurrentOrders(data.orders.edges[0].node);
await syncOrder();
}
if (data?.promocodes.edges) {
promocodeStore.setPromocodes(data.promocodes.edges);
}
if (data?.addresses.edges) {
addressesStore.setAddresses(data.addresses.edges);
}
}
return {
loadUserBaseData
};
}