diff --git a/src/app/about-us/page.tsx b/src/app/about-us/page.tsx index 7c9b7b0..05448f3 100644 --- a/src/app/about-us/page.tsx +++ b/src/app/about-us/page.tsx @@ -1,13 +1,13 @@ "use client"; +import { useEffect, useState } from "react"; import Container from "@/components/elements/Container"; import RoundedDiv from "@/components/elements/RoundedDiv"; import EditPageHeader from "@/components/settings/EditPageHeader"; import Link from "next/link"; import { useTranslation } from "react-i18next"; import { isAndroidDevice } from "@/lib/pwa/install"; -import { buildStorageUrl } from "@/components/main/BaseUrl"; -import { ANDROID_APP_VERSION } from "@/lib/pwaConfig"; +import { buildStorageUrl, getApiBaseUrl } from "@/components/main/BaseUrl"; // عین PwaInstallPrompt.tsx: مسیر مستقیمِ فایل APK که بک‌اند بدون روتِ جدید سرو می‌کنه const ANDROID_APK_URL = buildStorageUrl("/downloads/modstagram.apk"); @@ -16,6 +16,21 @@ function AboutUs() { const { t } = useTranslation("common"); // فقط اندروید — طبق خواسته‌ی صریح کاربر توی iOS این دکمه نمایش داده نشه const isAndroid = isAndroidDevice(); + // قبلاً ANDROID_APP_VERSION توی pwaConfig.ts هاردکد بود و باید با هر ریلیزِ اندروید + // دستی آپدیت می‌شد (که یادمون می‌رفت و اینجا نسخه‌ی قدیمی می‌موند). حالا همون + // GET /version که پنل ادمین (Version.jsx) مقداردهی می‌کنه رو مستقیم می‌خونه — دقیقاً + // همون منبعِ واحدی که AppUpdateGate.tsx توی اندروید هم برای چک نسخه ازش استفاده می‌کنه + const [androidVersion, setAndroidVersion] = useState(null); + useEffect(() => { + fetch(`${getApiBaseUrl()}/version`) + .then((res) => (res.ok ? res.json() : null)) + .then((data: { version?: string } | null) => { + if (data?.version) setAndroidVersion(data.version); + }) + .catch(() => { + /* اگه چک نسخه شکست بخوره، همون خطِ نسخه نمایش داده نمی‌شه — چیزِ دیگه‌ای رو نمی‌شکنه */ + }); + }, []); return ( @@ -46,9 +61,9 @@ function AboutUs() { ) : null} - {isAndroid ? ( + {isAndroid && androidVersion ? ( - {t("aboutPage.appVersion", { version: ANDROID_APP_VERSION })} + {t("aboutPage.appVersion", { version: androidVersion })} ) : null} diff --git a/src/app/settings/chats/find-partner/page.tsx b/src/app/settings/chats/find-partner/page.tsx index bc74b1f..ae5e50a 100644 --- a/src/app/settings/chats/find-partner/page.tsx +++ b/src/app/settings/chats/find-partner/page.tsx @@ -104,7 +104,7 @@ function filtersToParams(filters: PartnerFilters): Record { put("values", joinFilterValues(filters.values)); put("relationship_view", filters.relationshipView); put("geo_preference", filters.geoPreference); - put("children_status", filters.childrenStatus); + put("children_status", joinFilterValues(filters.childrenStatus)); put("smoking_status", filters.smokingStatus); if (filters.geo.countryId) params.country = String(filters.geo.countryId); if (filters.geo.provinceId) params.province = String(filters.geo.provinceId); diff --git a/src/app/settings/edit/gender/page.tsx b/src/app/settings/edit/gender/page.tsx index 655cd54..d4384c7 100644 --- a/src/app/settings/edit/gender/page.tsx +++ b/src/app/settings/edit/gender/page.tsx @@ -32,9 +32,7 @@ function EditGenderPage() { return; } try { - const mobile = - typeof window !== "undefined" ? localStorage.getItem("mobile") : null; - await request("POST", "/verify/gender", { mobile, gender }); + await request("PATCH", "/verify/gender", { gender }); toast.success(t("settings.edit.personalDetails.saveSuccess")); router.push("/settings/edit/personal-details"); } catch (err: any) { diff --git a/src/app/settings/edit/personal-details/page.tsx b/src/app/settings/edit/personal-details/page.tsx index 4835391..3f8c62b 100644 --- a/src/app/settings/edit/personal-details/page.tsx +++ b/src/app/settings/edit/personal-details/page.tsx @@ -28,14 +28,9 @@ import { buildGeoPreferenceOptions, buildChildrenStatusOptions, buildSmokingStatusOptions, - RELATIONSHIP_GOAL_MAX, - PERSONALITY_TRAITS_MAX, - LIFESTYLE_MAX, - INTERESTS_MAX, - VALUES_MAX, + buildPersonalStyleOptions, type RelationshipView, type GeoPreference, - type ChildrenStatus, type SmokingStatus, } from "@/lib/personalDetailsFieldOptions"; @@ -48,7 +43,6 @@ type MaritalStatus = | null; type ResidenceType = "owner" | "tenant" | null; type VehicleType = "none" | "car" | "motorcycle" | null; -type PersonalStyle = "formal" | "sporty" | null; type IncomeRange = | "under_40m" | "40m_50m" @@ -115,10 +109,9 @@ function PersonalDetailsPage() { const [residenceArea, setResidenceArea] = useState(""); const [vehicleType, setVehicleType] = useState(null); const [vehicleDetails, setVehicleDetails] = useState(""); - const [personalStyle, setPersonalStyle] = useState(null); + const [personalStyle, setPersonalStyle] = useState(""); const [job, setJob] = useState(""); const [incomeRange, setIncomeRange] = useState(null); - const [moralTraits, setMoralTraits] = useState(""); const [relationshipGoal, setRelationshipGoal] = useState([]); const [personalityTraits, setPersonalityTraits] = useState([]); @@ -127,11 +120,12 @@ function PersonalDetailsPage() { const [values, setValues] = useState([]); const [relationshipView, setRelationshipView] = useState(""); const [geoPreference, setGeoPreference] = useState(""); - const [childrenStatus, setChildrenStatus] = useState(""); + const [childrenStatus, setChildrenStatus] = useState([]); const [smokingStatus, setSmokingStatus] = useState(""); const maritalStatusNewOptions = buildMaritalStatusNewOptions(t); const incomeRangeOptions = buildIncomeRangeOptions(t); + const personalStyleOptions = buildPersonalStyleOptions(t); const relationshipGoalOptions = buildRelationshipGoalOptions(t); const personalityTraitsOptions = buildPersonalityTraitsOptions(t); const lifestyleOptions = buildLifestyleOptions(t); @@ -151,10 +145,9 @@ function PersonalDetailsPage() { setResidenceArea(user.residence_area ?? ""); setVehicleType(user.vehicle_type ?? null); setVehicleDetails(user.vehicle_details ?? ""); - setPersonalStyle(user.personal_style ?? null); + setPersonalStyle(user.personal_style ?? ""); setJob(user.job ?? ""); setIncomeRange(user.income_range ?? null); - setMoralTraits(user.moral_traits ?? ""); setRelationshipGoal(user.relationship_goal ?? []); setPersonalityTraits(user.personality_traits ?? []); setLifestyle(user.lifestyle ?? []); @@ -162,7 +155,7 @@ function PersonalDetailsPage() { setValues(user.values ?? []); setRelationshipView(user.relationship_view ?? ""); setGeoPreference(user.geo_preference ?? ""); - setChildrenStatus(user.children_status ?? ""); + setChildrenStatus(user.children_status ?? []); setSmokingStatus(user.smoking_status ?? ""); }, [user]); @@ -174,10 +167,9 @@ function PersonalDetailsPage() { residence_area: residenceArea || null, vehicle_type: vehicleType, vehicle_details: vehicleType && vehicleType !== "none" ? vehicleDetails || null : null, - personal_style: personalStyle, + personal_style: personalStyle || null, job: job || null, income_range: incomeRange, - moral_traits: moralTraits || null, relationship_goal: relationshipGoal.length ? relationshipGoal : null, personality_traits: personalityTraits.length ? personalityTraits : null, lifestyle: lifestyle.length ? lifestyle : null, @@ -185,7 +177,7 @@ function PersonalDetailsPage() { values: values.length ? values : null, relationship_view: relationshipView || null, geo_preference: geoPreference || null, - children_status: childrenStatus || null, + children_status: childrenStatus.length ? childrenStatus : null, smoking_status: smokingStatus || null, }); toast.success(t("settings.edit.personalDetails.saveSuccess")); @@ -245,27 +237,17 @@ function PersonalDetailsPage() { {/* نوع سکونت */} -
-

- {t("settings.edit.personalDetails.residenceType")} -

-
- - -
-
+ setResidenceType((v || null) as ResidenceType)} + className="mx-auto" + /> {/* محل سکونت */}
@@ -282,32 +264,18 @@ function PersonalDetailsPage() { {/* وسیله نقلیه */}
-

- {t("settings.edit.personalDetails.vehicleType")} -

-
- - - -
+ setVehicleType((v || null) as VehicleType)} + className="mx-auto" + /> {vehicleType && vehicleType !== "none" && ( {/* استایل */} -
-

- {t("settings.edit.personalDetails.personalStyle")} -

-
- - -
-
+ {/* شغل */}
@@ -365,21 +320,6 @@ function PersonalDetailsPage() { className="mx-auto" /> - {/* خصوصیات اخلاقی */} -
-

- {t("settings.edit.personalDetails.moralTraits")} -

-