diff --git a/src/pages/reward-page/reward-address-list-page.tsx b/src/pages/reward-page/reward-address-list-page.tsx index 5bc455e..aa1620c 100644 --- a/src/pages/reward-page/reward-address-list-page.tsx +++ b/src/pages/reward-page/reward-address-list-page.tsx @@ -10,10 +10,11 @@ import { deleteRewardAddress, getRewardAddressList, } from '../../apis/reward'; +import { useRewardPurchaseStore } from '../../store/rewardPurchaseStore'; export default function RewardAddressListPage() { const navigate = useNavigate(); - const [selectedAddressId, setSelectedAddressId] = useState(null); + const { selectedShippingAddressId, setSelectedShippingAddressId } = useRewardPurchaseStore(); const [deleteAddressId, setDeleteAddressId] = useState(null); const { data: addressList, @@ -26,7 +27,7 @@ export default function RewardAddressListPage() { const shippingAddresses = addressList ?? []; const effectiveSelectedAddressId = - selectedAddressId ?? + selectedShippingAddressId ?? shippingAddresses.find(({ isDefault }) => isDefault)?.shippingAddressId ?? shippingAddresses[0]?.shippingAddressId ?? null; @@ -36,9 +37,9 @@ export default function RewardAddressListPage() { const deleteAddressMutation = useMutation({ mutationFn: deleteRewardAddress, onSuccess: (_, deletedAddressId) => { - setSelectedAddressId((currentAddressId) => - currentAddressId === deletedAddressId ? null : currentAddressId, - ); + if (selectedShippingAddressId === deletedAddressId) { + setSelectedShippingAddressId(null); + }; queryClient.invalidateQueries({ queryKey: ['rewardAddressList'] }); }, onError: () => { @@ -87,7 +88,7 @@ export default function RewardAddressListPage() { key={shippingAddress.shippingAddressId} shippingAddressListResponse={shippingAddress} isSelected={effectiveSelectedAddressId === shippingAddress.shippingAddressId} - onSelect={() => setSelectedAddressId(shippingAddress.shippingAddressId)} + onSelect={() => setSelectedShippingAddressId(shippingAddress.shippingAddressId)} onEdit={() => navigate(`/reward/address-detail/${shippingAddress.shippingAddressId}/edit`)} onDelete={() => setDeleteAddressId(shippingAddress.shippingAddressId)} /> diff --git a/src/pages/reward-page/reward-purchase-page.tsx b/src/pages/reward-page/reward-purchase-page.tsx index 36d39de..9bcf366 100644 --- a/src/pages/reward-page/reward-purchase-page.tsx +++ b/src/pages/reward-page/reward-purchase-page.tsx @@ -17,6 +17,7 @@ import { import LoadingSpinner from '../../components/common/LoadingSpinner'; import FailInfo from '../../components/common/FailInfo'; import Modal from '../../components/common/Modal'; +import { useRewardPurchaseStore } from '../../store/rewardPurchaseStore'; interface PurchaseSectionProps { product: RewardProductDetail; @@ -91,6 +92,7 @@ function GifticonPurchaseSection({ } export default function RewardCheckoutPage() { + const { selectedShippingAddressId} = useRewardPurchaseStore(); const [receiverName, setReceiverName] = useState(''); const [receiverPhone, setReceiverPhone] = useState(''); const [isInsufficientPointModalOpen, setIsInsufficientPointModalOpen] = @@ -131,7 +133,9 @@ export default function RewardCheckoutPage() { enabled: isPartnerProduct, }); const selectedShippingAddress = - addressList?.find(({ isDefault }) => isDefault) ?? addressList?.[0] ?? null; + addressList?.find( + ({ shippingAddressId }) => shippingAddressId === selectedShippingAddressId, + ) ?? addressList?.find(({ isDefault }) => isDefault) ?? addressList?.[0] ?? null; const { mutate: purchaseReward, isPending: isPurchasing, diff --git a/src/store/rewardPurchaseStore.ts b/src/store/rewardPurchaseStore.ts new file mode 100644 index 0000000..ffb76a9 --- /dev/null +++ b/src/store/rewardPurchaseStore.ts @@ -0,0 +1,11 @@ +import {create} from "zustand"; + +interface RewardPurchaseState { + selectedShippingAddressId: number | null; + setSelectedShippingAddressId: (id: number | null) => void; +} + +export const useRewardPurchaseStore = create((set) => ({ + selectedShippingAddressId: null, + setSelectedShippingAddressId: (id) => set({selectedShippingAddressId: id}), +})); \ No newline at end of file