remove province and city
Build and Deploy Docker Images / build_and_deploy (push) Has been cancelled

This commit is contained in:
hamid zarghami
2026-06-23 14:12:02 +03:30
parent cee1f98972
commit 037e94d7ac
9 changed files with 189 additions and 223 deletions
@@ -14,7 +14,7 @@ import useToggle from '@/hooks/helpers/useToggle';
import { AddressSelectionModal } from './AddressSelectionModal'; import { AddressSelectionModal } from './AddressSelectionModal';
const formatAddress = (address: Address) => { const formatAddress = (address: Address) => {
return `${address.address}، ${address.city}، ${address.province}`; return address.address;
}; };
export const AddressSection = () => { export const AddressSection = () => {
@@ -9,7 +9,7 @@ import { ef } from '@/lib/helpers/utfNumbers';
import { Edit2 } from 'iconsax-react'; import { Edit2 } from 'iconsax-react';
const formatAddress = (address: Address) => { const formatAddress = (address: Address) => {
return `${address.address}، ${address.city}، ${address.province}`; return address.address;
}; };
interface AddressSelectionModalProps { interface AddressSelectionModalProps {
@@ -196,8 +196,6 @@ export interface OrderAddress {
user: OrderUser; user: OrderUser;
title: string; title: string;
address: string; address: string;
city: string;
province: string;
postalCode: string; postalCode: string;
latitude: number; latitude: number;
longitude: number; longitude: number;
@@ -439,12 +437,10 @@ export interface OrderDetailCarAddress {
} }
export interface OrderDetailUserAddress { export interface OrderDetailUserAddress {
city: string;
phone: string; phone: string;
address: string; address: string;
fullName: string; fullName: string;
latitude: number; latitude: number;
province: string;
longitude: number; longitude: number;
postalCode: string; postalCode: string;
} }
@@ -79,12 +79,10 @@ export interface HistoryOrderDeliveryMethod {
} }
export interface HistoryOrderUserAddress { export interface HistoryOrderUserAddress {
city: string;
phone: string; phone: string;
address: string; address: string;
fullName: string; fullName: string;
latitude: number; latitude: number;
province: string;
longitude: number; longitude: number;
postalCode: string; postalCode: string;
} }
@@ -97,8 +95,6 @@ export interface HistoryOrderAddress {
user: string; user: string;
title: string; title: string;
address: string; address: string;
city: string;
province: string;
postalCode: string; postalCode: string;
latitude: number; latitude: number;
longitude: number; longitude: number;
@@ -1,7 +1,7 @@
import InputField from '@/components/input/InputField'; import InputField from "@/components/input/InputField";
import { NominatimReverseGeocodingResponse } from '../../types/Types'; import { useEffect } from "react";
import { useGetProfile } from '../../../hooks/userProfileData'; import { useGetProfile } from "../../../hooks/userProfileData";
import { useEffect } from 'react'; import { NominatimReverseGeocodingResponse } from "../../types/Types";
interface AddressFormProps { interface AddressFormProps {
formData: { formData: {
@@ -12,79 +12,69 @@ interface AddressFormProps {
isDefault: boolean; isDefault: boolean;
}; };
selectedAddress: NominatimReverseGeocodingResponse | null; selectedAddress: NominatimReverseGeocodingResponse | null;
onFormDataChange: (data: Partial<AddressFormProps['formData']>) => void; onFormDataChange: (data: Partial<AddressFormProps["formData"]>) => void;
} }
export const AddressForm = ({ export const AddressForm = ({ formData, selectedAddress, onFormDataChange }: AddressFormProps) => {
formData, const { data: profileData } = useGetProfile();
selectedAddress,
onFormDataChange,
}: AddressFormProps) => {
const { data: profileData } = useGetProfile()
useEffect(() => { useEffect(() => {
if (profileData?.data?.phone && !formData.phone) { if (profileData?.data?.phone && !formData.phone) {
onFormDataChange({ phone: '0' + profileData.data.phone }); onFormDataChange({ phone: "0" + profileData.data.phone });
} }
}, [profileData?.data?.phone, formData.phone, onFormDataChange]); }, [profileData?.data?.phone, formData.phone, onFormDataChange]);
return ( return (
<div className='px-4'> <div className="px-4">
<InputField <InputField
htmlFor={'addressTitle'} htmlFor={"addressTitle"}
labelText={'عنوان آدرس'} labelText={"عنوان آدرس"}
placeholder='مثال: منزل، محل کار ...' placeholder="مثال: منزل، محل کار ..."
className='bg-inherit' className="bg-inherit"
inputClassName='text-xs!' inputClassName="text-xs!"
value={formData.title} value={formData.title}
onChange={(e) => onFormDataChange({ title: e.target.value })} onChange={(e) => onFormDataChange({ title: e.target.value })}
/> />
<InputField <InputField
htmlFor={'addressDetails'} htmlFor={"addressDetails"}
labelText={'جزئیات آدرس'} labelText={"جزئیات آدرس"}
placeholder='میدان باغ ملی، مجتمع آسمان، واحد 12، پلاک 1234567890' placeholder="میدان باغ ملی، مجتمع آسمان، واحد 12، پلاک 1234567890"
className='bg-inherit mt-8' className="bg-inherit mt-8"
value={formData.addressDetails} value={formData.addressDetails}
onChange={(e) => onFormDataChange({ addressDetails: e.target.value })} onChange={(e) => onFormDataChange({ addressDetails: e.target.value })}
inputClassName='text-xs!' inputClassName="text-xs!"
/> />
<InputField <InputField
htmlFor={'phone'} htmlFor={"phone"}
labelText={'شماره تلفن'} labelText={"شماره تلفن"}
placeholder='09123456789' placeholder="09123456789"
className='bg-inherit mt-8' className="bg-inherit mt-8"
value={formData.phone} value={formData.phone}
onChange={(e) => onFormDataChange({ phone: e.target.value })} onChange={(e) => onFormDataChange({ phone: e.target.value })}
inputClassName='text-xs!' inputClassName="text-xs!"
/> />
<InputField <InputField
htmlFor={'postalCode'} htmlFor={"postalCode"}
labelText={'کد پستی'} labelText={"کد پستی"}
placeholder={selectedAddress?.address?.postcode || '1234567890'} placeholder={selectedAddress?.address?.postcode || "1234567890"}
className='bg-inherit mt-8' className="bg-inherit mt-8"
value={formData.postalCode || selectedAddress?.address?.postcode || ''} value={formData.postalCode || selectedAddress?.address?.postcode || ""}
onChange={(e) => onFormDataChange({ postalCode: e.target.value })} onChange={(e) => onFormDataChange({ postalCode: e.target.value })}
inputClassName='text-xs!' inputClassName="text-xs!"
/> />
<div className='inline-flex justify-between items-center w-full mt-8'> <div className="inline-flex justify-between items-center w-full mt-8">
<label <label htmlFor={"isDefault"} className="text-sm2 px-2 py-0.5 mt-0.5 cursor-pointer">
htmlFor={'isDefault'}
className='text-sm2 px-2 py-0.5 mt-0.5 cursor-pointer'
>
تنظیم به عنوان آدرس پیشفرض تنظیم به عنوان آدرس پیشفرض
</label> </label>
<input <input
name={'isDefault'} name={"isDefault"}
id={'isDefault'} id={"isDefault"}
className='h-4.5 w-4.5 checked:accent-primary cursor-pointer' className="h-4.5 w-4.5 checked:accent-primary cursor-pointer"
onChange={(e) => onFormDataChange({ isDefault: e.target.checked })} onChange={(e) => onFormDataChange({ isDefault: e.target.checked })}
type='checkbox' type="checkbox"
checked={formData.isDefault} checked={formData.isDefault}
/> />
</div> </div>
</div> </div>
); );
}; };
@@ -1,8 +1,8 @@
import { useState, useEffect } from 'react'; import { toast } from "@/components/Toast";
import { useRouter, useSearchParams } from 'next/navigation'; import { useRouter, useSearchParams } from "next/navigation";
import { useCreateAddress, useUpdateAddress } from '../../hooks/useAddressData'; import { useEffect, useState } from "react";
import { toast } from '@/components/Toast'; import { useCreateAddress, useUpdateAddress } from "../../hooks/useAddressData";
import { CreateAddressType, UpdateAddressType, NominatimReverseGeocodingResponse, Address } from '../../types/Types'; import { Address, CreateAddressType, NominatimReverseGeocodingResponse, UpdateAddressType } from "../../types/Types";
interface UseAddressFormProps { interface UseAddressFormProps {
selectedPosition: [number, number] | null; selectedPosition: [number, number] | null;
@@ -13,36 +13,29 @@ interface UseAddressFormProps {
addressData?: Address | null; addressData?: Address | null;
} }
export const useAddressForm = ({ export const useAddressForm = ({ selectedPosition, selectedAddress, fallbackPosition = [0, 0], initialPhone = "", editMode = false, addressData = null }: UseAddressFormProps) => {
selectedPosition,
selectedAddress,
fallbackPosition = [0, 0],
initialPhone = '',
editMode = false,
addressData = null,
}: UseAddressFormProps) => {
const router = useRouter(); const router = useRouter();
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const redirect = searchParams.get('redirect'); const redirect = searchParams.get("redirect");
const { mutate: createAddress, isPending: isCreating } = useCreateAddress(); const { mutate: createAddress, isPending: isCreating } = useCreateAddress();
const { mutate: updateAddress, isPending: isUpdating } = useUpdateAddress(); const { mutate: updateAddress, isPending: isUpdating } = useUpdateAddress();
const isPending = isCreating || isUpdating; const isPending = isCreating || isUpdating;
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
title: '', title: "",
addressDetails: '', addressDetails: "",
phone: initialPhone, phone: initialPhone,
postalCode: '', postalCode: "",
isDefault: false, isDefault: false,
}); });
useEffect(() => { useEffect(() => {
if (editMode && addressData) { if (editMode && addressData) {
setFormData({ setFormData({
title: addressData.title || '', title: addressData.title || "",
addressDetails: addressData.address || '', addressDetails: addressData.address || "",
phone: addressData.phone || initialPhone, phone: addressData.phone || initialPhone,
postalCode: addressData.postalCode || '', postalCode: addressData.postalCode || "",
isDefault: addressData.isDefault || false, isDefault: addressData.isDefault || false,
}); });
} }
@@ -58,26 +51,24 @@ export const useAddressForm = ({
const positionToUse: [number, number] = selectedPosition || fallbackPosition || [0, 0]; const positionToUse: [number, number] = selectedPosition || fallbackPosition || [0, 0];
if (!formData.title.trim()) { if (!formData.title.trim()) {
toast('لطفا عنوان آدرس را وارد کنید', 'error'); toast("لطفا عنوان آدرس را وارد کنید", "error");
return; return;
} }
if (!formData.addressDetails.trim()) { if (!formData.addressDetails.trim()) {
toast('لطفا جزئیات آدرس را وارد کنید', 'error'); toast("لطفا جزئیات آدرس را وارد کنید", "error");
return; return;
} }
if (!formData.phone.trim()) { if (!formData.phone.trim()) {
toast('لطفا شماره تلفن را وارد کنید', 'error'); toast("لطفا شماره تلفن را وارد کنید", "error");
return; return;
} }
const baseAddressData = { const baseAddressData = {
title: formData.title, title: formData.title,
address: formData.addressDetails, address: formData.addressDetails,
city: selectedAddress?.address?.city || selectedAddress?.address?.district || addressData?.city || '', postalCode: formData.postalCode || selectedAddress?.address?.postcode || addressData?.postalCode || "",
province: selectedAddress?.address?.province || selectedAddress?.address?.state || addressData?.province || '',
postalCode: formData.postalCode || selectedAddress?.address?.postcode || addressData?.postalCode || '',
latitude: positionToUse[0], latitude: positionToUse[0],
longitude: positionToUse[1], longitude: positionToUse[1],
phone: formData.phone, phone: formData.phone,
@@ -92,7 +83,7 @@ export const useAddressForm = ({
updateAddress(updateData, { updateAddress(updateData, {
onSuccess: () => { onSuccess: () => {
toast('آدرس با موفقیت به‌روزرسانی شد', 'success'); toast("آدرس با موفقیت به‌روزرسانی شد", "success");
if (redirect) { if (redirect) {
router.replace(redirect); router.replace(redirect);
} else { } else {
@@ -100,8 +91,8 @@ export const useAddressForm = ({
} }
}, },
onError: (error) => { onError: (error) => {
const errorMessage = error instanceof Error ? error.message : 'خطا در به‌روزرسانی آدرس'; const errorMessage = error instanceof Error ? error.message : "خطا در به‌روزرسانی آدرس";
toast(errorMessage, 'error'); toast(errorMessage, "error");
}, },
}); });
} else { } else {
@@ -109,7 +100,7 @@ export const useAddressForm = ({
createAddress(createData, { createAddress(createData, {
onSuccess: () => { onSuccess: () => {
toast('آدرس با موفقیت ثبت شد', 'success'); toast("آدرس با موفقیت ثبت شد", "success");
if (redirect) { if (redirect) {
router.replace(redirect); router.replace(redirect);
} else { } else {
@@ -117,8 +108,8 @@ export const useAddressForm = ({
} }
}, },
onError: (error) => { onError: (error) => {
const errorMessage = error instanceof Error ? error.message : 'خطا در ثبت آدرس'; const errorMessage = error instanceof Error ? error.message : "خطا در ثبت آدرس";
toast(errorMessage, 'error'); toast(errorMessage, "error");
}, },
}); });
} }
@@ -131,4 +122,3 @@ export const useAddressForm = ({
submitAddress, submitAddress,
}; };
}; };
@@ -1,7 +1,7 @@
import { Address, NominatimReverseGeocodingResponse } from '../../types/Types'; import { Address, NominatimReverseGeocodingResponse } from '../../types/Types';
export const formatAddress = (address: Address): string => { export const formatAddress = (address: Address): string => {
return `${address.address}، ${address.city}، ${address.province}`; return address.address;
}; };
export const formatSelectedAddress = (selectedAddress: NominatimReverseGeocodingResponse | null): string => { export const formatSelectedAddress = (selectedAddress: NominatimReverseGeocodingResponse | null): string => {
@@ -11,8 +11,6 @@ export const formatSelectedAddress = (selectedAddress: NominatimReverseGeocoding
try { try {
return [ return [
selectedAddress.address.state ?? selectedAddress.address.province,
selectedAddress.address.city,
selectedAddress.address.neighbourhood, selectedAddress.address.neighbourhood,
!selectedAddress.address.road.startsWith('میدان') && !selectedAddress.address.road.startsWith('میدان') &&
!selectedAddress.address.road.startsWith('بلوار') && !selectedAddress.address.road.startsWith('بلوار') &&
@@ -70,7 +70,7 @@ function UserAddressesPage({ }: Props) {
}; };
const formatAddress = (address: Address) => { const formatAddress = (address: Address) => {
return `${address.address}، ${address.city}، ${address.province}`; return address.address;
}; };
const getEditHref = (addressId: string) => { const getEditHref = (addressId: string) => {
@@ -9,8 +9,6 @@ export interface Address {
user: string; user: string;
title: string; title: string;
address: string; address: string;
city: string;
province: string;
postalCode: string; postalCode: string;
latitude: number; latitude: number;
longitude: number; longitude: number;
@@ -25,8 +23,6 @@ export type AddressResponse = BaseResponse<Address>;
export type CreateAddressType = { export type CreateAddressType = {
title: string; title: string;
address: string; address: string;
city: string;
province: string;
postalCode: string; postalCode: string;
latitude: number; latitude: number;
longitude: number; longitude: number;