From c879976c560d739fa018d23637b7c118dee5ba8d Mon Sep 17 00:00:00 2001 From: payacom <59262811+payacom@users.noreply.github.com> Date: Fri, 14 Aug 2026 21:31:11 +0330 Subject: [PATCH] reels --- public/images/icons/back-arrow.svg | 3 + public/images/icons/discount-badge.svg | 12 + .../(auth)/(login)/change-passowrd/page.tsx | 2 +- .../(login)/forget-password-otp/page.tsx | 2 +- .../(auth)/(login)/forget-password/page.tsx | 2 +- src/app/(auth)/(login)/login-2fa/page.tsx | 2 +- .../(login)/login-with-username/page.tsx | 2 +- src/app/(auth)/(login)/login/page.tsx | 6 +- src/app/(auth)/(login)/verify-otp/page.tsx | 2 +- .../(auth)/(register)/register-otp/page.tsx | 2 +- src/app/(auth)/(register)/register/page.tsx | 6 +- src/app/(auth)/verify/location/page.tsx | 459 ++- .../academy/[id]/[title]/CourseClient.tsx | 6 +- .../[academyId]/AcademyProfileClient.tsx | 4 +- .../[id]/[title]/ProjectDetailClient.tsx | 2 + src/app/(projects)/projects/new/[id]/page.tsx | 2 + .../projects/payment/failed/page.tsx | 2 + .../projects/payment/success/page.tsx | 2 + .../(projects)/projects/specialists/page.tsx | 10 +- src/app/about-us/page.tsx | 3 +- src/app/billboards/new/[id]/page.tsx | 2 + src/app/billboards/payment/failed/page.tsx | 2 + src/app/billboards/payment/success/page.tsx | 2 + src/app/global-error.tsx | 2 +- src/app/loading.tsx | 2 +- src/app/new-post/page.tsx | 87 +- src/app/settings/academy/Dashboard/page.tsx | 6 +- src/app/settings/academy/course/page.tsx | 2 +- src/app/settings/academy/my-courses/page.tsx | 6 +- .../settings/academy/storeProfile/page.tsx | 2 + src/app/settings/academy/wallet/page.tsx | 4 +- src/app/settings/booking/new/name/page.tsx | 4 + src/app/settings/booking/new/preview/page.tsx | 4 + .../settings/booking/new/schedule/page.tsx | 4 + .../settings/booking/new/services/page.tsx | 4 + src/app/settings/booking/page.tsx | 65 +- src/app/settings/chats/nearby/page.tsx | 12 +- .../settings/chats/rooms/[roomId]/page.tsx | 42 +- src/app/settings/chats/rooms/page.tsx | 12 +- .../chats/shop/[shopId]/[buyerId]/page.tsx | 15 +- src/app/settings/edit/Authentication/page.tsx | 7 +- src/app/settings/edit/License/page.tsx | 5 +- src/app/settings/edit/analytics/page.tsx | 2 +- .../edit/analytics/posts/[postId]/page.tsx | 38 + .../settings/edit/analytics/region/page.tsx | 8 +- src/app/settings/edit/avatar/page.tsx | 7 +- src/app/settings/edit/bio/page.tsx | 7 +- src/app/settings/edit/colors/page.tsx | 5 +- .../settings/edit/cooperation-type/page.tsx | 7 +- src/app/settings/edit/expertise/page.tsx | 7 +- src/app/settings/edit/location/page.tsx | 496 ++- src/app/settings/edit/password/page.tsx | 6 +- .../settings/edit/public-relations/page.tsx | 7 +- src/app/settings/edit/services/page.tsx | 7 +- src/app/settings/edit/shaba/page.tsx | 7 +- src/app/settings/edit/sizes/page.tsx | 7 +- src/app/settings/edit/username/page.tsx | 6 +- .../my-billboards/[id]/[title]/page.tsx | 2 + .../my-billboards/profile/[id]/page.tsx | 11 +- src/app/settings/profile/ProfileClient.tsx | 2 +- src/app/settings/profile/language/page.tsx | 129 + .../settings/profile/user-settings/page.tsx | 8 + src/app/settings/shop/page.tsx | 66 +- src/app/shops/[shopId]/page.tsx | 5 +- .../[shopId]/products/[listingId]/page.tsx | 11 +- .../[shopId]/products/new/category/page.tsx | 4 + .../[shopId]/products/new/images/page.tsx | 4 + .../shops/[shopId]/products/new/name/page.tsx | 4 + .../[shopId]/products/new/variants/page.tsx | 9 +- .../[listingId]/ListingDetailClient.tsx | 13 +- src/app/shops/new/contact/page.tsx | 4 + src/app/shops/new/location/page.tsx | 171 +- src/app/shops/new/logo/page.tsx | 4 + src/app/shops/new/name/page.tsx | 4 + src/app/shops/new/shipping/page.tsx | 4 + src/app/shops/payment/failed/page.tsx | 2 + src/app/shops/payment/success/page.tsx | 2 + src/app/shops/product/[catalogId]/page.tsx | 9 + .../profile/[shopId]/ShopProfileClient.tsx | 4 + src/components/academy/CommentsModal.tsx | 2 +- .../academy/CourseCommentsContent.tsx | 7 +- src/components/academy/MainModelCard.tsx | 18 +- src/components/auth/AuthLanguageToggle.tsx | 57 +- src/components/auth/AuthPageLayout.tsx | 2 +- src/components/auth/OtherLanguagesModal.tsx | 110 + .../billboards/AdvertisingProfileContent.tsx | 2 + .../billboards/BillboardDetailContent.tsx | 2 + .../billboards/BillboardPage/FilterModal.tsx | 6 +- .../BillboardCommentsModal.tsx | 119 +- .../billboards/NewBillboard/MultiStepForm.tsx | 4 + .../billboards/NewBillboard/Step1.tsx | 30 +- .../NewBillboard/step1/LocationSelector.tsx | 94 +- .../NewBillboard/submitBillboard.ts | 2 + src/components/chat/ChatMessageCard.tsx | 59 +- src/components/chat/CreateChatRoomModal.tsx | 13 +- src/components/course/CourseList.tsx | 13 +- src/components/course/CourseManager.tsx | 2 + src/components/explore/ExploreReelsView.tsx | 6 + src/components/main/Services/ServiceItem.tsx | 5 +- src/components/models/FilterModal.tsx | 6 +- .../models/MainModelCard/CommentsModal.tsx | 2 +- .../models/MainModelCard/MainModelCard.tsx | 2 +- .../models/ModelPage/MainModelCardPost.tsx | 4 +- src/components/models/ModelPage/ModelHead.tsx | 16 +- src/components/posts/PostCommentsContent.tsx | 7 +- src/components/posts/PostFeedView.tsx | 25 +- src/components/posts/ReelsPostCard.tsx | 54 + src/components/projects/NewProject/Step2.tsx | 34 +- src/components/projects/NewProject/Step4.tsx | 1 + .../NewProject/step1/LocationSelector.tsx | 92 +- .../Workroom/ProjectRequestsAction.tsx | 2 + src/components/settings/EditPageHeader.tsx | 25 + .../settings/LanguageSettingRow.tsx | 54 +- src/components/settings/PageTitle.tsx | 65 +- src/components/settings/SettingsClient.tsx | 2 +- .../settings/offers/CommentModal.tsx | 2 +- src/components/shops/ShopCartTab.tsx | 17 +- src/components/shops/ShopFavoritesTab.tsx | 9 + .../shops/ShopProductCommentsModal.tsx | 78 +- src/components/shops/ShopProductGrid.tsx | 34 +- src/components/shops/ShopProductListRow.tsx | 6 + src/components/shops/ShopReelsView.tsx | 28 +- .../shops/orders/SalesHistoryFilterModal.tsx | 27 +- src/components/ui/BackButton.tsx | 107 + src/components/ui/CommentsSkeleton.tsx | 18 + .../ui/CountryProvinceCitySelect.tsx | 7 +- src/components/ui/DiscountBadge.tsx | 61 + src/contexts/BillboardFormContext.tsx | 2 + src/contexts/LanguageProvider.tsx | 9 +- src/contexts/ProjectFormContext.tsx | 2 + src/data/geo/countries.json | 184 +- src/hooks/useDefaultCountryId.ts | 9 + src/lib/e2ee/dm.ts | 34 +- src/lib/e2ee/room.ts | 29 +- src/lib/i18n/registry.ts | 13 +- src/lib/i18n/resources.ts | 6 + src/lib/shopDiscount.ts | 28 + src/locales/ar/common.json | 2802 +++++++++++++++++ src/locales/ar/seo.json | 208 ++ src/locales/az/common.json | 1967 ++++++++++++ src/locales/az/seo.json | 208 ++ src/locales/de/common.json | 1248 ++++++++ src/locales/de/seo.json | 113 + src/locales/el/common.json | 1253 ++++++++ src/locales/el/seo.json | 248 ++ src/locales/en/common.json | 43 +- src/locales/es/common.json | 1248 ++++++++ src/locales/es/seo.json | 113 + src/locales/fa/common.json | 43 +- src/locales/fr/common.json | 1248 ++++++++ src/locales/fr/seo.json | 113 + src/locales/hu/common.json | 1253 ++++++++ src/locales/hu/seo.json | 248 ++ src/locales/hy/common.json | 1242 ++++++++ src/locales/hy/seo.json | 208 ++ src/locales/it/common.json | 1253 ++++++++ src/locales/it/seo.json | 113 + src/locales/ku/common.json | 1238 ++++++++ src/locales/ku/seo.json | 208 ++ src/locales/nl/common.json | 1253 ++++++++ src/locales/nl/seo.json | 248 ++ src/locales/pl/common.json | 1248 ++++++++ src/locales/pl/seo.json | 113 + src/locales/ps/common.json | 1240 ++++++++ src/locales/ps/seo.json | 208 ++ src/locales/ro/common.json | 1253 ++++++++ src/locales/ro/seo.json | 248 ++ src/locales/ru/common.json | 1243 ++++++++ src/locales/ru/seo.json | 208 ++ src/locales/tr/common.json | 1239 ++++++++ src/locales/tr/seo.json | 208 ++ src/locales/uk/common.json | 1248 ++++++++ src/locales/uk/seo.json | 113 + src/locales/uz/common.json | 1241 ++++++++ src/locales/uz/seo.json | 208 ++ src/types/types.ts | 9 + 176 files changed, 30270 insertions(+), 1441 deletions(-) create mode 100644 public/images/icons/back-arrow.svg create mode 100644 public/images/icons/discount-badge.svg create mode 100644 src/app/settings/profile/language/page.tsx create mode 100644 src/components/auth/OtherLanguagesModal.tsx create mode 100644 src/components/settings/EditPageHeader.tsx create mode 100644 src/components/ui/BackButton.tsx create mode 100644 src/components/ui/CommentsSkeleton.tsx create mode 100644 src/components/ui/DiscountBadge.tsx create mode 100644 src/hooks/useDefaultCountryId.ts create mode 100644 src/lib/shopDiscount.ts create mode 100644 src/locales/ar/common.json create mode 100644 src/locales/ar/seo.json create mode 100644 src/locales/az/common.json create mode 100644 src/locales/az/seo.json create mode 100644 src/locales/de/common.json create mode 100644 src/locales/de/seo.json create mode 100644 src/locales/el/common.json create mode 100644 src/locales/el/seo.json create mode 100644 src/locales/es/common.json create mode 100644 src/locales/es/seo.json create mode 100644 src/locales/fr/common.json create mode 100644 src/locales/fr/seo.json create mode 100644 src/locales/hu/common.json create mode 100644 src/locales/hu/seo.json create mode 100644 src/locales/hy/common.json create mode 100644 src/locales/hy/seo.json create mode 100644 src/locales/it/common.json create mode 100644 src/locales/it/seo.json create mode 100644 src/locales/ku/common.json create mode 100644 src/locales/ku/seo.json create mode 100644 src/locales/nl/common.json create mode 100644 src/locales/nl/seo.json create mode 100644 src/locales/pl/common.json create mode 100644 src/locales/pl/seo.json create mode 100644 src/locales/ps/common.json create mode 100644 src/locales/ps/seo.json create mode 100644 src/locales/ro/common.json create mode 100644 src/locales/ro/seo.json create mode 100644 src/locales/ru/common.json create mode 100644 src/locales/ru/seo.json create mode 100644 src/locales/tr/common.json create mode 100644 src/locales/tr/seo.json create mode 100644 src/locales/uk/common.json create mode 100644 src/locales/uk/seo.json create mode 100644 src/locales/uz/common.json create mode 100644 src/locales/uz/seo.json diff --git a/public/images/icons/back-arrow.svg b/public/images/icons/back-arrow.svg new file mode 100644 index 0000000..63e382c --- /dev/null +++ b/public/images/icons/back-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/icons/discount-badge.svg b/public/images/icons/discount-badge.svg new file mode 100644 index 0000000..dd2f752 --- /dev/null +++ b/public/images/icons/discount-badge.svg @@ -0,0 +1,12 @@ + + + + + diff --git a/src/app/(auth)/(login)/change-passowrd/page.tsx b/src/app/(auth)/(login)/change-passowrd/page.tsx index 3659ddf..23d2e0b 100644 --- a/src/app/(auth)/(login)/change-passowrd/page.tsx +++ b/src/app/(auth)/(login)/change-passowrd/page.tsx @@ -100,7 +100,7 @@ function ChangePassword() { return ( -
+

{isEmailReset diff --git a/src/app/(auth)/(login)/forget-password-otp/page.tsx b/src/app/(auth)/(login)/forget-password-otp/page.tsx index 1d03e76..d9dfb56 100644 --- a/src/app/(auth)/(login)/forget-password-otp/page.tsx +++ b/src/app/(auth)/(login)/forget-password-otp/page.tsx @@ -74,7 +74,7 @@ function ForgetPasswordOtp() { return ( -

+
-
+

{t("auth.forgetPasswordDesc")} diff --git a/src/app/(auth)/(login)/login-2fa/page.tsx b/src/app/(auth)/(login)/login-2fa/page.tsx index da138e5..80a01cc 100644 --- a/src/app/(auth)/(login)/login-2fa/page.tsx +++ b/src/app/(auth)/(login)/login-2fa/page.tsx @@ -58,7 +58,7 @@ export default function LoginTwoFactorPage() { return ( -

+

{t("auth.twoFactorHint")} diff --git a/src/app/(auth)/(login)/login-with-username/page.tsx b/src/app/(auth)/(login)/login-with-username/page.tsx index ef0a26b..1bfe64e 100644 --- a/src/app/(auth)/(login)/login-with-username/page.tsx +++ b/src/app/(auth)/(login)/login-with-username/page.tsx @@ -95,7 +95,7 @@ function LoginWithUsername() { return ( -

+
-
+
- + {/* */} {t("auth.loginWithUsername")} diff --git a/src/app/(auth)/(login)/verify-otp/page.tsx b/src/app/(auth)/(login)/verify-otp/page.tsx index 2cb8bc8..d22dfc3 100644 --- a/src/app/(auth)/(login)/verify-otp/page.tsx +++ b/src/app/(auth)/(login)/verify-otp/page.tsx @@ -79,7 +79,7 @@ function VerifyOtp() { return ( -
+
-
+
-
+
- + {/* */} {t("auth.haveAccount")}{" "} diff --git a/src/app/(auth)/verify/location/page.tsx b/src/app/(auth)/verify/location/page.tsx index 0c2f79a..7f4d900 100644 --- a/src/app/(auth)/verify/location/page.tsx +++ b/src/app/(auth)/verify/location/page.tsx @@ -1,261 +1,198 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -"use client"; - -import AuthPageLayout, { - AuthFormFooter, - AuthPageContent, -} from "@/components/auth/AuthPageLayout"; -import React, { useEffect, useMemo, useState } from "react"; -import useAxios from "@/hooks/useAxios"; -import { useFormik } from "formik"; -import * as yup from "yup"; -import { useRouter } from "next/navigation"; -import AuthNextButton from "@/components/auth/AuthNextButton"; -import toast from "react-hot-toast"; -import AuthUserDetails from "@/components/auth/AuthUserDetails"; -import SelectBox from "@/components/elements/SelectBox"; -import { ICity, IProvince } from "@/types/types"; -import Map, { GeolocateControl, Marker } from "react-map-gl"; -import "mapbox-gl/dist/mapbox-gl.css"; -import Image from "next/image"; -import { useTranslation } from "react-i18next"; -import LocalePageShell from "@/components/i18n/LocalePageShell"; - -function LocationPage() { - const { t } = useTranslation("common"); - const router = useRouter(); - const { request, loading } = useAxios(); - - const [isCheckedOne, setIsCheckedOne] = useState(false); - const [allStates, setAllStates] = useState(null); - const [cities, setCities] = useState(null); - const [selectedLocation, setSelectedLocation] = useState<{ - lat: number; - lng: number; - } | null>(null); - - const schema = useMemo( - () => - yup.object().shape({ - markerCoordinate: yup.mixed().required(t("auth.locationRequired")), - address: yup.string().required(t("auth.addressRequired")), - cityId: yup.string().required(t("auth.cityRequired")), - stateId: yup.string().required(t("auth.provinceRequired")), - }), - [t] - ); - - const fetchStates = async () => { - try { - const response = await request<{ provinces: IProvince[] }>( - "GET", - "/provinces" - ); - setAllStates(response?.provinces || null); - } catch (err) { - console.log(err); - } - }; - - const fetchCities = async (provinceId: string) => { - try { - const response = await request<{ cities: ICity[] }>( - "GET", - `/cities/${provinceId}` - ); - setCities(response?.cities || []); - } catch (err) { - console.log(err); - } - }; - - useEffect(() => { - fetchStates(); - }, []); - - const toggleCheckBox = () => { - setIsCheckedOne(!isCheckedOne); - }; - - const mobile = - typeof window !== "undefined" ? localStorage.getItem("mobile") : null; - - const formik = useFormik({ - initialValues: { - markerCoordinate: [], - address: "", - cityId: "", - stateId: "", - }, - validationSchema: schema, - onSubmit: async (values, { setSubmitting }) => { - try { - await request("POST", "/verify/address", { - mobile: mobile, - address: values.address, - province_id: values.stateId, - city_id: values.cityId, - lat: values.markerCoordinate[1], - lng: values.markerCoordinate[0], - show_location: isCheckedOne, - }); - router.push("/verify/national-cart"); - } catch (err: any) { - toast.error(err?.response?.data?.message || t("auth.unknownError")); - } finally { - setSubmitting(false); - } - }, - }); - - const handleProvinceChange = (e: React.ChangeEvent) => { - const selectedProvinceId = e.target.value; - formik.setFieldValue("stateId", selectedProvinceId); - fetchCities(selectedProvinceId); - }; - - const handleMapClick = (event: any) => { - const { lngLat } = event; - setSelectedLocation({ - lat: lngLat.lat, - lng: lngLat.lng, - }); - formik.setFieldValue("markerCoordinate", [lngLat.lng, lngLat.lat]); - }; - - return ( - - -
- - {t("auth.locationTitle")} -
- -
- - - {t("auth.locationActivityHint")} - - -
- - - {allStates?.map((item: IProvince) => ( - - ))} - - {formik.touched.stateId && formik.errors.stateId && ( - - {formik.errors.stateId} - - )} - - formik.setFieldValue("cityId", e.target.value)} - > - - {cities?.map((city: ICity) => ( - - ))} - - {formik.touched.cityId && formik.errors.cityId && ( - - {formik.errors.cityId} - - )} - -