amir hosein gorji 3 years ago
commit 8c9ec9bbb2
  1. 338
      dictionary.js
  2. BIN
      dictionary.js.zip
  3. 4
      package.json
  4. 10
      src/App.css
  5. 42
      src/AppRouter.js
  6. 24
      src/QRScan/LastQr/index.js
  7. 3
      src/Redux/proxy.js
  8. 4
      src/Redux/reducers/activation.js
  9. 34
      src/Redux/reducers/book.js
  10. 2
      src/Redux/reducers/comment.js
  11. 43
      src/Redux/reducers/public.js
  12. 2
      src/Redux/reducers/transport.js
  13. 4
      src/Redux/reducers/user.js
  14. 4
      src/Redux/reducers/userFactor.js
  15. 2
      src/Redux/reducers/userProduct.js
  16. 26
      src/views/AR/Item/index.js
  17. 42
      src/views/About/index.js
  18. 4
      src/views/Activation/index.js
  19. 6
      src/views/Auth/Login/Cellphone/index.js
  20. 2
      src/views/Auth/Login/Code/index.js
  21. 12
      src/views/Auth/Profile/Birthdate/index.js
  22. 4
      src/views/Auth/Profile/Document/index.js
  23. 2
      src/views/Auth/Profile/Upload/index.js
  24. 116
      src/views/Auth/Profile/index.js
  25. 4
      src/views/Auth/Splash/index.js
  26. 4
      src/views/Callback/Status/index.js
  27. 34
      src/views/Cart/Table/index.js
  28. 4
      src/views/ChatList/Search/index.js
  29. 2
      src/views/ChatRoom/Body/Input/index.js
  30. 14
      src/views/ChatRoom/Body/Message/Comment/index.js
  31. 2
      src/views/ChatRoom/Body/Message/Inline/index.js
  32. 2
      src/views/ChatRoom/Body/Message/MultiSelect/index.js
  33. 14
      src/views/ChatRoom/Body/Message/Normal/index.js
  34. 12
      src/views/ChatRoom/Body/index.js
  35. 18
      src/views/ChatRoom/Info/index.js
  36. 32
      src/views/Checkout/Table/index.js
  37. 24
      src/views/Checkout/index.js
  38. 12
      src/views/Contact/index.js
  39. 26
      src/views/Download/Item/index.js
  40. 2
      src/views/Download/index.js
  41. 4
      src/views/Faq/index.js
  42. 24
      src/views/Home/Footer/index.js
  43. 2
      src/views/Home/HomeHeader/index.js
  44. 2
      src/views/Home/HomeScroll/index.js
  45. 2
      src/views/Home/HomeSearch/Select/index.js
  46. 8
      src/views/Home/HomeSearch/index.js
  47. 10
      src/views/Home/HomeSlider/Blog/index.js
  48. 8
      src/views/Home/HomeSlider/index.js
  49. 2
      src/views/Home/HomeStatic/Vitrin/index.js
  50. 4
      src/views/Home/HomeStatic/index.js
  51. 6
      src/views/Home/Membership/index.js
  52. 14
      src/views/Home/Navbar/Laptop/index.js
  53. 64
      src/views/Home/Navbar/Mobile/NavbarDrawer/NavbarDrawer.js
  54. 16
      src/views/Home/Navbar/Mobile/index.js
  55. 26
      src/views/MyBooks/index.js
  56. 4
      src/views/MyBooks_old/index.js
  57. 144
      src/views/NewProfile/index.js
  58. 28
      src/views/Orders/index.js
  59. 4
      src/views/Product/AddToCart/index.js
  60. 2
      src/views/Product/Comment/index.js
  61. 4
      src/views/Product/Gallery/Modal/index.js
  62. 4
      src/views/Product/Gallery/index.js
  63. 2
      src/views/Product/MaterialModal/index.js
  64. 44
      src/views/Product/index.js
  65. 4
      src/views/Products/Filters/index.js
  66. 30
      src/views/Products/Product/index.js
  67. 6
      src/views/Products/Select/index.js
  68. 8
      src/views/Products/index.js
  69. 10
      src/views/QR/SubjectsDropdown/index.js
  70. 26
      src/views/QR/index.js
  71. 24
      src/views/QRScan/LastQr/index.js
  72. 8
      src/views/QRScan/Modal/index.js
  73. 2
      src/views/Sample/index.js
  74. 4
      src/views/Support/Upload/index.js
  75. 36
      src/views/Support/index.js
  76. 2
      yarn.lock

@ -0,0 +1,338 @@
const items = [
"کیفیت آموزش را بالا میبریم",
"شایستگی در ایجاد فهم علمی در موضوع هدف و در موضوعات وابسته به آن",
"شایستگی در ایجاد زمینه ی معرفتی- ارزشی موثر برای محتواهای آموزشی",
"جذابیت کلید بهبود یادگیری",
"بکارگیری عوامل متنوع سازگار با ارزشها برای علاقمندی دانش آموز و معلم به استفاده از محتوای دانوین",
"سازگار با نظام آ.پ : بطوریکه بتواند در مدارس فعلی مورد استفاده قرار گرفته و با نظام رسمی فعلی در تضاد نباشد",
"در راستای نیل به سند تحول : تلاش برای نزدیکی گام به گام به آرمانها و اهداف سند تحول",
"مزیت رقابتی دانوین",
"بکارگیری بروز ترین تکنولوژی های تولید و مدیریت محتوای آموزشی-تربیتی (مانند واقعیت افزوده)",
"دارای رویکرد آموزش سرگرم کننده ",
"بستر تعاملی و اشتراک گذاری فیلم و محتوای آموزشی",
"رویکرد معرفتی-ارزشی",
"ویدئو های منحصر بفرد",
"متن گفتگو محور ، روایی ، قابل فهم ،جذاب و سرگرم کننده",
"فعال سازی کتاب الکترونیک",
"کد فعال سازی در اختیار شما قرار گرفته است را در قسمت زیر وارد وارد تا کتاب الکترونیک آن فعالسازی شود",
"ثبت کد فعال سازی",
"برای خدمات هوشمند کتاب کد فعال سازی را اینجا وارد نمایید",
"برای استفاده از این بخش باید یک کتاب را فعالسازی کرده باشید",
"فعالسازی کتاب",
"پیش دبستان",
"اول",
"دوم",
"سوم",
"چهارم",
"پنجم",
"ششم",
"هفتم",
"هشتم",
"نهم",
"دهم",
"یازدهم",
"دوازدهم",
"صفحه اصلی",
"واقعیت افزوده",
"در حال بارگیری اطلاعات از سرور",
"حساب کاربری",
"لطفا مشخصات خود را به صورت کامل نمایید.",
"نام",
"نام خانوادگی",
"نام کاربری",
"دختر",
"پسر",
"کد ملی/اتباع",
"معلم",
"دانش آموز",
"عنوان",
"پایه تحصیلی",
"رشته تحصیلی",
"استان",
"شهرستان",
"نام مدرسه",
"محل تدریس",
"کد پستی",
"آدرس محل سکونت",
"ریاضی",
"تجربی",
"انسانی",
"فنی حرفهای",
"کاردانش",
"معارف",
"ذخیره",
"روز",
"ماه",
"سال",
"تاریخ تولد",
"گواهی تدریس خود را آپلود کنید.",
"گواهی تدریس ثبت شده و درحال بررسی می باشد",
"کاربر",
"پرچم",
"شرایط استفاده و حریم خصوصی",
"به دانوین خوش اومدی برای عضویت و ادامه شماره موبایلت رو وارد کن و روی گزینه ثبت بزن",
"ادامه",
"ارسال مجدد کد فعال سازی",
"بازگشت به مرحله قبل و اصلاح شماره",
"یک کد تائیدیه به شماره",
"ارسال شد",
"آن را در قسمت زیر وارد کنید.",
"ثبت",
"زمان باقیمانده تا انقضای کد:",
"وبلاگ",
"مطالعه کامل",
"سبد خرید",
"روشهای ارسال",
"جمع کل",
"تومان",
"با توجه به شرایط یکی از دو گزینه زیر را انتخاب کنید",
"پرداخت",
"عملیات خرید شما با موفقیت انجام شد.",
"عملیات با موفقیت انجام نشد!",
"هیچ محصولی در سبد خرید شما وجود ندارد",
"فروشگاه",
"پرداخت شما با خطا مواجه شد ، لطفا مجدد تلاش نمایید",
"سبد پیش خرید",
"با توجه به شرایط یکی از دو گزینه زیر را انتخاب کنید",
"شرایط استفاده از دانوین و حریم خصوصی را مطالعه کرده ام",
"شرایط مرجوع کردن کالا در دانوین",
"کد تخفیف",
"اگر کد تخفیفی دارید آن را در کادر زیر وارد نمائید",
"ثبت کد",
"کد تخفیف برای شما ثبت شده است",
"مالیات بر ارزش افزوده",
"محصولات",
"قیمت",
"تعداد",
"مبلغ کل",
"محصول",
"نسخه",
"الکترونیکی",
"چاپی",
"پایه",
"کد فعالسازی محتوای الکترونیک",
"حذف",
"قیمت هر واحد",
"همراه با:",
"قیمت هر عدد",
"برای شروع روی یک چت کلیک کن",
"جستجو",
"علی",
"ارسال",
"کنسل",
"یک پیام بنویسید...",
"ثبت شد",
"ثبت",
"پسند",
"تبادل نظر",
"پاسخ",
"باز ارسال",
"ویرایش",
"حذف",
"ویرایش در",
"خلاقیت",
"پروفایل",
"حساب کاربری",
"خروج",
"استاد علوم طبیعی پایه دوازدهم",
"کارشناس ارشد علوم و فنون از دانشگاه تهران",
"محسن محمدی",
"2 دقیقه پیش آنلاین بوده",
"لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنام",
"عکس کاربر",
"مشخصات تحصیلی",
"نام کاربری",
"روشن",
"خاموش",
"رسانه,فیلم,عکس",
"مسدود سازی مخاطب",
"رسانه",
"ویدیو",
"صوت",
"لینک",
"فایل",
"هیچ محصولی در سبد خرید شما وجود ندارد",
"پرداخت شما با خطا مواجه شد ، لطفا مجدد تلاش نمایید",
"جزئیات صورتحساب",
"مشخصات تحویل گیرنده",
"نام و نام خانوادگی",
"شماره تماس",
"توضیحات",
"روشهای ارسال",
"جمع کل",
"صورتحساب",
"با توجه به شرایط یکی از دو گزینه زیر را انتخاب کنید",
"اگر کد تخفیفی دارید آن را در کادر زیر وارد نمائید",
"ثبت کد",
"کد تخفیف",
"مبلغ سبد خرید",
"هزینه ارسال",
"میزان تخفیف",
"مالیات بر ارزش افزوده",
"عدد",
"آدرس",
"تماس",
"خانه",
"برای استفاده از بخش واقعیت افزوده می بایست افزونه آن را نصب نمایید",
"دریافت افزونه",
"دریافت افزونه واقعیت افزوده",
"سلام چطوری میتونم کمکتون کنم؟",
"دنبال چه چیزی برات باشیم؟",
"جستجو",
"لذت یادگیری را با",
"تجربه کنید",
"دریافت اپلیکیشن اختصاصی دانوین",
"به راحتی از همین جا دانلود کنید...",
"ما در دانوین با هدف ایجاد زیرساخت تعاملی و آموزشی با تولید محتوایی جذاب بصورت کتاب قصد داریم تغییراتی بنیادین در نظام آموزش و پرورش کشور ایجاد کنیم.",
"آدرس: تهران، میدان فردوسی، خیابان موسوی، پلاک ۳۰",
"خانه",
"لینک های کاربردی",
"تمامی حقوق این وبسایت متعلق به دانوین می باشد. 1400",
"لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه",
"خانه",
"دسترسی سریع",
"سوالات متداول",
"درباره ما",
"تماس با ما",
"موارد بیشتر",
"فلش",
"ناموجود",
"جستجو در عناوین کتاب ...",
"نام یک کتاب را جستجو کنید",
"علمی تخیلی",
"سیاسی",
"تاریخی",
"ورزشی",
"مطالعه کامل در",
"دقیقه",
"تاریخ انتشار",
"ادامه مطلب",
"عکس",
"عکس محصول",
"دانوینی",
"شو",
"مشخصات خودت رو وارد کنید و امتیاز هدیه بگیرید",
"شماره تماس",
"لوگو",
"دانلود",
"ویرایش مشخصات",
"پیگری سفارشات",
"کتاب های من",
"خروج",
"ورود یا ثبتنام",
"پشتیبانی",
"بازگشت",
"منو",
"ورود یا ثبتنام",
"کتابهای من",
"واقعیت افزوده",
"بارکد خوان",
"به زودی این بخش فعال می شود",
"دانوینیها",
"ویرایش مشخصات",
"بروز رسانی",
"خروج",
"امتیاز",
"اضافه کردن کاربر",
"ادامه مطلب",
"فعال سازی شده",
"تاریخ فعالسازی:",
"کد فعالسازی:",
"اسکن بارکد",
"برای استفاده از این بخش باید یک کتاب فعال خریداری کرده باشید",
"لطفا مشخصات خود را به صورت کامل نمایید.",
"کد ملی",
"شهر/روستا",
"افزودن کاربر جدید",
"سفارشات من",
"شناسه سفارش",
"پرداخت نشده",
"در حال پردازش",
"ارسال شد",
"لغو شد",
"شناسه پرداخت",
"مبلغ",
"تخفیف",
"سفارشی برای نماش وجود ندارد",
"جهت ادامه فرآیند خرید وارد حساب خود شوید",
"افزودن به سبد خرید",
"توضیحات محصول خالیست",
"نظرات خریداران",
"ارسال نظر",
"از اینکه با نظرات خود ما را در ارتقای کیفیت محصولاتمان یاری کنید ، سپاسگزاریم",
"نسخه الکترونیک",
"نسخه چاپی",
"برای این کتاب نمونهای درج نشده است.",
"مطالعه نمونه کتاب",
"معرفی کتاب",
"این کتاب شامل چه مواردی است؟",
"نظرات خریداران",
"مشاهده نمونه کتاب",
"شرایط استفاده از دانوین و حریم خصوصی را مطالعه کرده ام",
"شرایط مرجوع کردن کالا در دانوین",
"کاربر میهمان",
"پاسخ مدیریت سایت",
"کامنت خود را وارد کرده و دکمه ثبت را بزنید.",
"متن پیام",
"انصراف",
"ابتدا یک محصول به سبد خریدتان اضافه کنید.",
"دسته بندی موضوعی",
"پایه تحصیلی",
"فیلترهای اعمال شده",
"محصولی با این مشخصات یافت نشد",
"عکس مجصول",
"پایه",
"نام کتاب",
"مرتب سازی",
"مرتب سازی بر اساس",
"شما در حال مطالعه",
"هستید",
"صفحه",
"محتوایی برای این صفحه در دسترس نیست.!",
"نمایش تمامی محتواها",
"محتویات کتاب",
"فایل",
"برای دانلود این فایل روی اینجا کلیک کن",
"مشاهده فهرست موضوعی کتاب",
"سخنی با خوانندگان",
"مقدمه",
"آتشفشانها و اقیانوسها",
"نحوه جدایی صفحات کره",
"نکته",
"لطفا دوربین خود را روی کدی که در اختیار شما قرار گرفته قرار دهید تا اسکن دوربین انجام شود",
"دوربین عقب",
"دوربین جلو",
"آخرین مشاهدات",
"اسکن کد QR موفقیت آمیز بود.",
"لطفا شماره صفحه را وارد نمایید",
"تایید",
"زیست دهم",
"علوم چهارم",
"نمونه ای برای این محصول درج نشده است",
"قبل",
"بعد",
"واحد محتوایی",
"واحد فنی",
"واحد فروش",
"واحد مورد نظر",
"برای ارتباط با دنیای شگفت انگیز دانوین از فرم زیر استفاده کنید و پس از انتخاب دپارتمان مد نظر پیام خود را ارسال کنید.",
"نام و نام خانوادگی",
"شماره تماس",
"موضوع",
"متن",
"تصویر بارگزاری شد",
"در صورت نیاز تصویر مرتبط را انتخاب کنید.",
"فایل ثبت شد",
"کتاب شما با موفقیت فعال گردید.",
"جدیدترین",
"محبوب ترین",
"گران ترین",
"ثبت درخواست با موفقیت انجام شد",
"کتابهای دانوین",
"روش ارسال با موفقیت تغییر یافت!",
"کد به شماره شما ارسال گردید.",
"به دانوین خوش آمدید.",
"درخواست شما با موفقیت انجام شد.",
];
module.exports = items;

Binary file not shown.

@ -54,7 +54,6 @@
"jest-resolve": "26.6.0", "jest-resolve": "26.6.0",
"jest-watch-typeahead": "0.6.1", "jest-watch-typeahead": "0.6.1",
"mapir-react-component": "^1.8.1", "mapir-react-component": "^1.8.1",
"material-ui-audio-player": "https://github.com/RezaAshrafi77/material-ui-audio-player.git",
"material-ui-player": "^0.2.2", "material-ui-player": "^0.2.2",
"mini-css-extract-plugin": "0.11.3", "mini-css-extract-plugin": "0.11.3",
"modern-react-qr-reader": "^1.0.12", "modern-react-qr-reader": "^1.0.12",
@ -106,7 +105,8 @@
"webpack": "4.44.2", "webpack": "4.44.2",
"webpack-dev-server": "3.11.1", "webpack-dev-server": "3.11.1",
"webpack-manifest-plugin": "2.2.0", "webpack-manifest-plugin": "2.2.0",
"workbox-webpack-plugin": "5.1.4" "workbox-webpack-plugin": "5.1.4",
"material-ui-audio-player": "https://github.com/RezaAshrafi77/material-ui-audio-player.git"
}, },
"scripts": { "scripts": {
"start": "node scripts/start.js ", "start": "node scripts/start.js ",

@ -1,8 +1,16 @@
* { * {
box-sizing: border-box !important; box-sizing: border-box !important;
direction: rtl;
font-family: numeralLight; font-family: numeralLight;
} }
.ltr {
direction: ltr;
}
.rtl {
direction: rtl;
}
#root { #root {
height: 100vh; height: 100vh;
max-width: 100vw !important; max-width: 100vw !important;

@ -91,6 +91,7 @@ class AppRouter extends Component {
); );
return ( return (
<div className={`flex-1 ${this.props.config?.direction}`}>
<Router> <Router>
<Switch> <Switch>
{home} {home}
@ -146,8 +147,7 @@ class AppRouter extends Component {
)} )}
</Route> </Route>
<Route exact path={"/support"}> <Route exact path={"/support"}>
<Support /> {mobile ? (
{/* {mobile ? (
status ? ( status ? (
<Support /> <Support />
) : ( ) : (
@ -159,7 +159,7 @@ class AppRouter extends Component {
) )
) : ( ) : (
<Support /> <Support />
)} */} )}
</Route> </Route>
<Route exact path={"/products/digital/:id"}> <Route exact path={"/products/digital/:id"}>
<Product page="digital" /> <Product page="digital" />
@ -178,30 +178,48 @@ class AppRouter extends Component {
}} }}
/> />
) : ( ) : (
<Auth /> <NewProfile />
)} )}
</Route> </Route>
<Route exact path={"/profile"}> <Route exact path={"/support"}>
{mobile ? ( <Support />
{/* {mobile ? (
status ? ( status ? (
<Auth page={"profile"} /> <Support />
) : ( ) : (
<Redirect <Redirect
to={{ to={{
pathname: "/", pathname: "/auth",
}} }}
/> />
) )
) : status ? (
<Auth page={"profile"} />
) : ( ) : (
<Support />
)} */}
</Route>
<Route exact path={"/products/digital/:id"}>
<Product page="digital" />
</Route>
<Route exact path={"/products/physical/:id"}>
<Product page="physical" />
</Route>
<Route exact path={"/qr"}>
<QR />
</Route>
<Route exact path={"/auth"}>
{proxy.status() ? (
<Redirect <Redirect
to={{ to={{
pathname: "/auth", pathname: "/",
}} }}
/> />
) : (
<Auth />
)} )}
</Route> </Route>
<Route exact path={"/profile"}>
{mobile ? status ? <Auth page={"profile"} /> : null : null}
</Route>
<Route exact path={"/qr-scan"}> <Route exact path={"/qr-scan"}>
{mobile ? ( {mobile ? (
status ? ( status ? (
@ -366,6 +384,7 @@ class AppRouter extends Component {
</Route> </Route>
</Switch> </Switch>
</Router> </Router>
</div>
); );
} }
} }
@ -374,6 +393,7 @@ export default connect(
(state) => ({ (state) => ({
profile: state.user.status, profile: state.user.status,
userProductList: state.userProduct.list, userProductList: state.userProduct.list,
config: state.publicApi.config,
// status: state.user.status, // status: state.user.status,
}), }),
{ getProfile: user.getProfile, getUserProductList: userProduct.list } { getProfile: user.getProfile, getUserProductList: userProduct.list }

@ -4,18 +4,18 @@ import { Link } from "react-router-dom";
import "./index.scss"; import "./index.scss";
const grades = [ const grades = [
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
export default function LastQR(props) { export default function LastQR(props) {

@ -9,7 +9,8 @@ const Axios = axios.create({
withCredentials: true, withCredentials: true,
validateStatus: null, validateStatus: null,
baseURL: baseUrl, baseURL: baseUrl,
//headers: access ? { Authorization: `Bearer ${access}` } : {},
headers: { lang: window.lang },
}); });
class Proxy { class Proxy {
get = async (url, params, opt = {}, data) => get = async (url, params, opt = {}, data) =>

@ -14,10 +14,10 @@ export default function activation(state = initialState, action) {
case "activation/update": case "activation/update":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "activation/updateStatus": case "activation/updateStatus":
toast.success("کتاب شما با موفقیت فعال گردید."); toast.success(window.t("کتاب شما با موفقیت فعال گردید."));
return { ...state, loading: false, error: null, updateStatus: true }; return { ...state, loading: false, error: null, updateStatus: true };
case "activation/add": case "activation/add":
toast.success("کتاب شما با موفقیت فعال گردید."); toast.success(window.t("کتاب شما با موفقیت فعال گردید."));
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "activation/delete": case "activation/delete":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };

@ -9,23 +9,23 @@ const initialState = {
filterResult: [], filterResult: [],
subjects: [], subjects: [],
levels: [], levels: [],
sortFilters: ["مرتب سازی", "محبوب ترین", "جدیدترین"], sortFilters: [window.t("مرتب سازی"), window.t("محبوب ترین"), window.t("جدیدترین")],
}; };
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
export default function book(state = initialState, action) { export default function book(state = initialState, action) {
let { type, data } = action; let { type, data } = action;
@ -35,14 +35,14 @@ export default function book(state = initialState, action) {
(item, index) => item.name (item, index) => item.name
); );
if (window.innerWidth < 1000) { if (window.innerWidth < 1000) {
itemsSubject.unshift("نام کتاب"); itemsSubject.unshift(window.t("نام کتاب"));
} }
let itemsLevel = (Array.isArray(data) ? data : []) let itemsLevel = (Array.isArray(data) ? data : [])
.map((item) => item.gradeId * 1) .map((item) => item.gradeId * 1)
.sort((a, b) => a - b) .sort((a, b) => a - b)
.map((e) => grades[e]); .map((e) => grades[e]);
if (window.innerWidth < 1000) { if (window.innerWidth < 1000) {
itemsLevel.unshift("پایه تحصیلی"); itemsLevel.unshift(window.t(window.t("پایه تحصیلی")));
} }
return { return {
...state, ...state,
@ -103,7 +103,7 @@ export default function book(state = initialState, action) {
? bySubjectFilter.filter((item1) => item1.name.indexOf(search) !== -1) ? bySubjectFilter.filter((item1) => item1.name.indexOf(search) !== -1)
: bySubjectFilter; : bySubjectFilter;
if (sort === "گران ترین") { if (sort === window.t("گران ترین")) {
finalSort = bySearchFilter.sort((item1, item2) => { finalSort = bySearchFilter.sort((item1, item2) => {
return item1.product[0].price - item2.product[0].price; return item1.product[0].price - item2.product[0].price;
}); });

@ -14,7 +14,7 @@ export default function comment(state = initialState, action) {
case "comment/update": case "comment/update":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "comment/add": case "comment/add":
toast.success("ثبت درخواست با موفقیت انجام شد"); toast.success(window.t("ثبت درخواست با موفقیت انجام شد"));
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "comment/delete": case "comment/delete":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };

@ -13,32 +13,37 @@ const initialState = {
blog: null, blog: null,
province: [], province: [],
city: [], city: [],
config: {
direction: "ltr",
},
}; };
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
export default function publicApi(state = initialState, action) { export default function publicApi(state = initialState, action) {
let { type, data } = action; let { type, data } = action;
switch (type) { switch (type) {
case "public/direction":
return { ...state, config: { [data.name]: data.value } };
case "public/homePage": case "public/homePage":
let itemsLevel; let itemsLevel;
// if (window.innerWidth > 1000) { // if (window.innerWidth > 1000) {
const jadidTarin = data?.filter( const jadidTarin = data?.filter(
(item) => item.title === "کتابهای دانوین" (item) => item.title === window.t("کتابهای دانوین")
); );
itemsLevel = itemsLevel =
jadidTarin && jadidTarin[0] && jadidTarin[0].data jadidTarin && jadidTarin[0] && jadidTarin[0].data
@ -47,7 +52,7 @@ export default function publicApi(state = initialState, action) {
.sort((a, b) => a - b) .sort((a, b) => a - b)
.map((e) => grades[e]) .map((e) => grades[e])
: []; : [];
itemsLevel.unshift("پایه تحصیلی"); itemsLevel.unshift(window.t(window.t("پایه تحصیلی")));
// } // }
return { return {
@ -64,7 +69,7 @@ export default function publicApi(state = initialState, action) {
case "public/filter": case "public/filter":
const realList = const realList =
state.newProducts.length === 0 state.newProducts.length === 0
? state.homeData.filter((item) => item.title === "کتابهای دانوین")[0] ? state.homeData.filter((item) => item.title === window.t("کتابهای دانوین"))[0]
.data .data
: state.newProducts; : state.newProducts;
if (state.newProducts.length === 0) { if (state.newProducts.length === 0) {
@ -83,7 +88,7 @@ export default function publicApi(state = initialState, action) {
loading: false, loading: false,
error: null, error: null,
homeData: state.homeData.map((item) => homeData: state.homeData.map((item) =>
item.title === "کتابهای دانوین" item.title === window.t("کتابهای دانوین")
? { ...item, data: state.newProducts } ? { ...item, data: state.newProducts }
: { ...item } : { ...item }
), ),
@ -119,7 +124,7 @@ export default function publicApi(state = initialState, action) {
const bySearchFilter = search const bySearchFilter = search
? byLevelFilter.filter((item1) => item1.name.indexOf(search) !== -1) ? byLevelFilter.filter((item1) => item1.name.indexOf(search) !== -1)
: byLevelFilter; : byLevelFilter;
// if (sort === "گران ترین") { // if (sort === window.t("گران ترین")) {
// finalSort = bySearchFilter.sort((item1, item2) => { // finalSort = bySearchFilter.sort((item1, item2) => {
// return item1.product[0].price - item2.product[0].price; // return item1.product[0].price - item2.product[0].price;
// }); // });
@ -132,7 +137,7 @@ export default function publicApi(state = initialState, action) {
loading: false, loading: false,
error: null, error: null,
homeData: state.homeData.map((item) => homeData: state.homeData.map((item) =>
item.title === "کتابهای دانوین" item.title === window.t("کتابهای دانوین")
? { ...item, data: bySearchFilter } ? { ...item, data: bySearchFilter }
: { ...item } : { ...item }
), ),

@ -17,7 +17,7 @@ export default function transport(state = initialState, action) {
case "transport/add": case "transport/add":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "transport/setTransport": case "transport/setTransport":
toast.success("روش ارسال با موفقیت تغییر یافت!"); toast.success(window.t("روش ارسال با موفقیت تغییر یافت!"));
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "transport/delete": case "transport/delete":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };

@ -17,11 +17,11 @@ export default function user(state = initialState, action) {
case "user/register": case "user/register":
case "user/switchRole": case "user/switchRole":
case "public/sendOTP": case "public/sendOTP":
toast.success("کد به شماره شما ارسال گردید."); toast.success(window.t("کد به شماره شما ارسال گردید."));
return { ...state, loading: false, status: data.profile, error: null }; return { ...state, loading: false, status: data.profile, error: null };
case "user/otp/login": case "user/otp/login":
// window.location = "https://dnvn.ir/?" + Math.random(); // window.location = "https://dnvn.ir/?" + Math.random();
toast.success("به دانوین خوش آمدید."); toast.success(window.t("به دانوین خوش آمدید."));
return { return {
...state, ...state,

@ -17,10 +17,10 @@ export default function userFactor(state = initialState, action) {
case "userFactor/info": case "userFactor/info":
return { ...state, loading: false, info: data, error: null }; return { ...state, loading: false, info: data, error: null };
case "userFactor/update": case "userFactor/update":
toast.success("درخواست شما با موفقیت انجام شد."); toast.success(window.t("درخواست شما با موفقیت انجام شد."));
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "userFactor/add": case "userFactor/add":
toast.success("درخواست شما با موفقیت انجام شد."); toast.success(window.t("درخواست شما با موفقیت انجام شد."));
return { ...state, loading: false, error: null, sum: data.payPrice }; return { ...state, loading: false, error: null, sum: data.payPrice };
case "userFactor/deleteUserOffCode": case "userFactor/deleteUserOffCode":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };

@ -37,7 +37,7 @@ export default function userProduct(state = initialState, action) {
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "userProduct/add": case "userProduct/add":
if (window.location.pathname.indexOf("products") !== -1) { if (window.location.pathname.indexOf("products") !== -1) {
toast.success("درخواست شما با موفقیت انجام شد."); toast.success(window.t("درخواست شما با موفقیت انجام شد."));
} }
return { ...state, loading: false, error: null, sum: data.payPrice }; return { ...state, loading: false, error: null, sum: data.payPrice };
case "userProduct/delete": case "userProduct/delete":

@ -1,19 +1,19 @@
import React, { Component } from "react"; import React, { Component } from "react";
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
export default class Item extends Component { export default class Item extends Component {
render() { render() {

@ -28,7 +28,7 @@ const fontSize = {
export default class About extends Component { export default class About extends Component {
state = { state = {
first: { first: {
title: "درباره ما", title: window.t("درباره ما"),
text: "ما در دانوین با هدف ایجاد زیرساخت تعاملی و آموزشی با تولید محتوایی جذاب بصورت کتاب با کمک پلتفرم دانوین، قصد تغییراتی بنیادین در نظام آموزش و پرورش کشور داریم. دانوین پلتفرمی شامل کتاب، محتوای الکترونیکی، رویه های آموزشی، پشتیبانی علمی و نرم افزار ارائه خدمات با رویکرد مخاطب محور است.", text: "ما در دانوین با هدف ایجاد زیرساخت تعاملی و آموزشی با تولید محتوایی جذاب بصورت کتاب با کمک پلتفرم دانوین، قصد تغییراتی بنیادین در نظام آموزش و پرورش کشور داریم. دانوین پلتفرمی شامل کتاب، محتوای الکترونیکی، رویه های آموزشی، پشتیبانی علمی و نرم افزار ارائه خدمات با رویکرد مخاطب محور است.",
}, },
fury: { fury: {
@ -37,29 +37,29 @@ export default class About extends Component {
}, },
keywords: { keywords: {
title: "کیفیت آموزش را بالا میبریم", title: window.t("کیفیت آموزش را بالا میبریم"),
list: [ list: [
"شایستگی در ایجاد فهم علمی در موضوع هدف و در موضوعات وابسته به آن", window.t("شایستگی در ایجاد فهم علمی در موضوع هدف و در موضوعات وابسته به آن"),
"شایستگی در ایجاد زمینه ی معرفتی- ارزشی موثر برای محتواهای آموزشی", window.t("شایستگی در ایجاد زمینه ی معرفتی- ارزشی موثر برای محتواهای آموزشی"),
], ],
}, },
keywords2: { keywords2: {
title: "جذابیت کلید بهبود یادگیری", title: window.t("جذابیت کلید بهبود یادگیری"),
list: [ list: [
"بکارگیری عوامل متنوع سازگار با ارزشها برای علاقمندی دانش آموز و معلم به استفاده از محتوای دانوین", window.t("بکارگیری عوامل متنوع سازگار با ارزشها برای علاقمندی دانش آموز و معلم به استفاده از محتوای دانوین"),
"سازگار با نظام آ.پ : بطوریکه بتواند در مدارس فعلی مورد استفاده قرار گرفته و با نظام رسمی فعلی در تضاد نباشد", window.t("سازگار با نظام آ.پ : بطوریکه بتواند در مدارس فعلی مورد استفاده قرار گرفته و با نظام رسمی فعلی در تضاد نباشد"),
"در راستای نیل به سند تحول : تلاش برای نزدیکی گام به گام به آرمانها و اهداف سند تحول", window.t("در راستای نیل به سند تحول : تلاش برای نزدیکی گام به گام به آرمانها و اهداف سند تحول"),
], ],
}, },
advantages: { advantages: {
title: " مزیت رقابتی دانوین", title: " مزیت رقابتی دانوین",
list: [ list: [
"بکارگیری بروز ترین تکنولوژی های تولید و مدیریت محتوای آموزشی-تربیتی (مانند واقعیت افزوده)", window.t("بکارگیری بروز ترین تکنولوژی های تولید و مدیریت محتوای آموزشی-تربیتی (مانند واقعیت افزوده)"),
"دارای رویکرد آموزش سرگرم کننده ", window.t("دارای رویکرد آموزش سرگرم کننده "),
"بستر تعاملی و اشتراک گذاری فیلم و محتوای آموزشی", window.t("بستر تعاملی و اشتراک گذاری فیلم و محتوای آموزشی"),
"رویکرد معرفتی-ارزشی", window.t("رویکرد معرفتی-ارزشی"),
"ویدئو های منحصر بفرد", window.t("ویدئو های منحصر بفرد"),
"متن گفتگو محور ، روایی ، قابل فهم ،جذاب و سرگرم کننده", window.t("متن گفتگو محور ، روایی ، قابل فهم ،جذاب و سرگرم کننده"),
], ],
}, },
}; };
@ -138,19 +138,15 @@ export default class About extends Component {
</div> </div>
</div> </div>
<div className="about__fury--left d-flex align-items-center"> <div className="about__fury--left d-flex align-items-center">
<img <img className="about__fury--left__1" src={aboutLg} />
className="about__fury--left__1"
src={aboutLg}
alt="عکس"
/>
{/* {this.props.absoluteImages.map((item, i) => ( {/* {this.props.absoluteImages.map((item, i) => (
<img src={item.imageUrl} className={item.class} alt="عکس" /> <img src={item.imageUrl} className={item.class} />
))} */} ))} */}
</div> </div>
</div> </div>
<div className="about__advantages d-flex"> <div className="about__advantages d-flex">
<div className="about__advantages--right d-flex"> <div className="about__advantages--right d-flex">
<img src={pic} alt={"عکس"} /> <img src={pic} />
</div> </div>
<div className="about__advantages--left"> <div className="about__advantages--left">
<h1 style={{ fontSize: fontSize.desktop.h1 }}> <h1 style={{ fontSize: fontSize.desktop.h1 }}>
@ -201,7 +197,7 @@ export default class About extends Component {
</div> </div>
<div className="mobile-about__images d-flex"> <div className="mobile-about__images d-flex">
{this.props.absoluteImages.map((item, i) => ( {this.props.absoluteImages.map((item, i) => (
<img src={item.imageUrl} className={item.class} alt="عکس" /> <img src={item.imageUrl} className={item.class} />
))} ))}
</div> </div>
<div className="mobile-about__keys align-self-end"> <div className="mobile-about__keys align-self-end">
@ -219,7 +215,7 @@ export default class About extends Component {
</ul> </ul>
</div> </div>
<div className="mobile-about__video d-flex"> <div className="mobile-about__video d-flex">
<img src={pic} alt={"عکس"} /> <img src={pic} />
</div> </div>
<div className="mobile-about__advantages d-flex flex-column"> <div className="mobile-about__advantages d-flex flex-column">
<div> <div>

@ -44,7 +44,7 @@ class Activation extends Component {
<div className="activation d-flex flex-column align-items-center"> <div className="activation d-flex flex-column align-items-center">
<Navbar /> <Navbar />
<header className="activation__header d-flex flex-column align-items-center"> <header className="activation__header d-flex flex-column align-items-center">
<img src={analytics} alt="فعال سازی کتاب" /> <img src={analytics} />
<h1 style={{ fontSize: fontSize.desktop.h1 }}> <h1 style={{ fontSize: fontSize.desktop.h1 }}>
فعال سازی کتاب الکترونیک فعال سازی کتاب الکترونیک
</h1> </h1>
@ -100,7 +100,7 @@ class Activation extends Component {
<Navbar /> <Navbar />
<header className="mobile-activation__header d-flex flex-column align-items-center"> <header className="mobile-activation__header d-flex flex-column align-items-center">
<img src={analytics} alt="فعال سازی کتاب" /> <img src={analytics} />
<h1 style={{ fontSize: fontSize.mobile.h1 }}> <h1 style={{ fontSize: fontSize.mobile.h1 }}>
فعال سازی کتاب الکترونیک فعال سازی کتاب الکترونیک
</h1> </h1>

@ -48,7 +48,7 @@ export default class Cellphone extends Component {
} }
> >
<span style={{ fontSize: fontSize.desktop.span }}>09</span> <span style={{ fontSize: fontSize.desktop.span }}>09</span>
<img src={iran} alt="پرچم" /> <img src={iran} alt=window.t("پرچم") />
<input <input
style={{ fontSize: fontSize.desktop.span }} style={{ fontSize: fontSize.desktop.span }}
id="cellphone" id="cellphone"
@ -93,7 +93,7 @@ export default class Cellphone extends Component {
<div style={{ width: "48%", height: "100%", opacity: 0 }}> <div style={{ width: "48%", height: "100%", opacity: 0 }}>
<img <img
src={pic} src={pic}
alt="عکس" alt=window.t("عکس")
style={{ width: "100%", height: "100%" }} style={{ width: "100%", height: "100%" }}
/> />
</div> </div>
@ -119,7 +119,7 @@ export default class Cellphone extends Component {
} }
> >
<span style={{ fontSize: fontSize.mobile.span }}>09</span> <span style={{ fontSize: fontSize.mobile.span }}>09</span>
<img src={iran} alt="پرچم" /> <img src={iran} alt=window.t("پرچم") />
<input <input
id="cellphone" id="cellphone"
type="text" type="text"

@ -208,7 +208,7 @@ export default class Code extends Component {
<div style={{ width: "48%", height: "100%" }} className="d-flex"> <div style={{ width: "48%", height: "100%" }} className="d-flex">
{/* <img {/* <img
src={pic} src={pic}
alt="عکس" alt=window.t("عکس")
style={{ width: "100%", height: "100%" }} style={{ width: "100%", height: "100%" }}
/> */} /> */}
</div> </div>

@ -31,7 +31,7 @@ export default function Birthdate(props) {
<Input <Input
variant="standard" variant="standard"
name="day" name="day"
placeholder="روز" placeholder=window.t("روز")
maxLength={2} maxLength={2}
onInput={onInput.dayHandler} onInput={onInput.dayHandler}
parent={{ onChange }} parent={{ onChange }}
@ -41,7 +41,7 @@ export default function Birthdate(props) {
<Input <Input
variant="standard" variant="standard"
name="month" name="month"
placeholder="ماه" placeholder=window.t("ماه")
maxLength={2} maxLength={2}
onInput={onInput.monthHandler} onInput={onInput.monthHandler}
parent={{ onChange }} parent={{ onChange }}
@ -51,7 +51,7 @@ export default function Birthdate(props) {
<Input <Input
variant="standard" variant="standard"
name="year" name="year"
placeholder="سال" placeholder=window.t("سال")
maxLength={4} maxLength={4}
onInput={onInput.yearHandler} onInput={onInput.yearHandler}
parent={{ onChange }} parent={{ onChange }}
@ -67,7 +67,7 @@ export default function Birthdate(props) {
<Input <Input
variant="standard" variant="standard"
name="day" name="day"
placeholder="روز" placeholder=window.t("روز")
maxLength={2} maxLength={2}
onInput={onInput.dayHandler} onInput={onInput.dayHandler}
parent={{ onChange }} parent={{ onChange }}
@ -77,7 +77,7 @@ export default function Birthdate(props) {
<Input <Input
variant="standard" variant="standard"
name="month" name="month"
placeholder="ماه" placeholder=window.t("ماه")
maxLength={2} maxLength={2}
onInput={onInput.monthHandler} onInput={onInput.monthHandler}
parent={{ onChange }} parent={{ onChange }}
@ -87,7 +87,7 @@ export default function Birthdate(props) {
<Input <Input
variant="standard" variant="standard"
name="year" name="year"
placeholder="سال" placeholder=window.t("سال")
maxLength={4} maxLength={4}
onInput={onInput.yearHandler} onInput={onInput.yearHandler}
parent={{ onChange }} parent={{ onChange }}

@ -51,7 +51,7 @@ export default function Document(props) {
}} }}
> >
{parent.state[name].name || {parent.state[name].name ||
"گواهی تدریس ثبت شده و درحال بررسی می باشد"} window.t("گواهی تدریس ثبت شده و درحال بررسی می باشد")}
</span> </span>
</> </>
)} )}
@ -100,7 +100,7 @@ export default function Document(props) {
}} }}
> >
{parent.state[name].name || {parent.state[name].name ||
"گواهی تدریس ثبت شده و درحال بررسی می باشد"} window.t("گواهی تدریس ثبت شده و درحال بررسی می باشد")}
</span> </span>
</> </>
)} )}

@ -53,7 +53,7 @@ export default function Upload(props) {
? URL.createObjectURL(parent.state.file) ? URL.createObjectURL(parent.state.file)
: window.baseURL + "file/" + parent.state.file : window.baseURL + "file/" + parent.state.file
} }
alt={"کاربر"} alt={window.t("کاربر")}
/> />
)} )}
<input <input

@ -163,19 +163,19 @@ class Profile extends Component {
render() { render() {
if (this.props.setDone) return <Navigate path="/" />; if (this.props.setDone) return <Navigate path="/" />;
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
const { profile } = this.props; const { profile } = this.props;
return ( return (
@ -199,7 +199,7 @@ class Profile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="firstName" name="firstName"
label="نام" label=window.t("نام")
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
@ -209,7 +209,7 @@ class Profile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="lastName" name="lastName"
label="نام خانوادگی" label=window.t("نام خانوادگی")
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
@ -219,7 +219,7 @@ class Profile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="username" name="username"
label="نام کاربری" label=window.t(window.t("نام کاربری"))
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
align="left" align="left"
@ -229,7 +229,7 @@ class Profile extends Component {
<div className="mb-2"> <div className="mb-2">
<Gender <Gender
options={["دختر", "پسر"]} options={[window.t("دختر"), window.t("پسر")]}
parent={this} parent={this}
name="gender" name="gender"
selectedOption={this.state.gender} selectedOption={this.state.gender}
@ -238,7 +238,7 @@ class Profile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="nationalId" name="nationalId"
label="کد ملی/اتباع" label=window.t("کد ملی/اتباع")
parent={this} parent={this}
align="left" align="left"
maxLength={13} maxLength={13}
@ -261,9 +261,9 @@ class Profile extends Component {
<div className="mb-2" style={{ minWidth: "100%" }}> <div className="mb-2" style={{ minWidth: "100%" }}>
<Gender <Gender
parent={this} parent={this}
options={["معلم", "دانش آموز"]} options={[window.t("معلم"), window.t("دانش آموز")]}
name="status" name="status"
label={"عنوان"} label={window.t("عنوان")}
selectedOption={this.state.status} selectedOption={this.state.status}
/> />
</div> </div>
@ -273,7 +273,7 @@ class Profile extends Component {
parent={this} parent={this}
options={grades} options={grades}
name="gradeIds" name="gradeIds"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
selectedOptions={this.state.gradeIds} selectedOptions={this.state.gradeIds}
/> />
</div> </div>
@ -284,27 +284,27 @@ class Profile extends Component {
parent={this} parent={this}
options={grades} options={grades}
name="gradeIds" name="gradeIds"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
selectedOptions={this.state.gradeIds} selectedOptions={this.state.gradeIds}
/> />
</div> </div>
) : null} ) : null}
{this.state.status === "دانش آموز" && {this.state.status === window.t("دانش آموز") &&
this.state.gradeIds > 9 ? ( this.state.gradeIds > 9 ? (
<div className="mb-2"> <div className="mb-2">
<Select <Select
parent={this} parent={this}
options={[ options={[
"ریاضی", window.t("ریاضی"),
"تجربی", window.t("تجربی"),
"انسانی", window.t("انسانی"),
"فنی حرفهای", window.t("فنی حرفهای"),
"کاردانش", window.t("کاردانش"),
"معارف", window.t("معارف"),
]} ]}
name="field" name="field"
label={"رشته تحصیلی"} label={window.t("رشته تحصیلی")}
selectedOptions={this.state.gradeIds} selectedOptions={this.state.gradeIds}
/> />
</div> </div>
@ -314,7 +314,7 @@ class Profile extends Component {
parent={this} parent={this}
options={this.props.provinceList} options={this.props.provinceList}
name="provinceId" name="provinceId"
label={"استان"} label={window.t("استان")}
selectedOptions={this.state.provinceId} selectedOptions={this.state.provinceId}
/> />
</div> </div>
@ -323,7 +323,7 @@ class Profile extends Component {
parent={this} parent={this}
options={this.props.cityList} options={this.props.cityList}
name="cityId" name="cityId"
label={"شهرستان"} label={window.t("شهرستان")}
selectedOptions={this.state.cityId} selectedOptions={this.state.cityId}
/> />
</div> </div>
@ -332,7 +332,7 @@ class Profile extends Component {
parent={this} parent={this}
options={["chaharbagh", "mahalat"]} options={["chaharbagh", "mahalat"]}
name="zoneId" name="zoneId"
label={"شهر/روستا"} label={window.t("شهر/روستا")}
/> />
</div> */} </div> */}
{this.state.status === 1 ? ( {this.state.status === 1 ? (
@ -340,7 +340,7 @@ class Profile extends Component {
<Input <Input
parent={this} parent={this}
name="schools" name="schools"
label={"نام مدرسه"} label={window.t("نام مدرسه")}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
/> />
@ -351,7 +351,7 @@ class Profile extends Component {
<Input <Input
parent={this} parent={this}
name="schools" name="schools"
label={"محل تدریس"} label={window.t("محل تدریس")}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
/> />
@ -364,7 +364,7 @@ class Profile extends Component {
<Input <Input
parent={this} parent={this}
name="postalCode" name="postalCode"
label={"کد پستی"} label={window.t("کد پستی")}
align="left" align="left"
maxLength={10} maxLength={10}
inputMode="numeric" inputMode="numeric"
@ -375,7 +375,7 @@ class Profile extends Component {
<div className="mb-2"> <div className="mb-2">
<TextArea <TextArea
parent={this} parent={this}
label={"آدرس محل سکونت"} label={window.t("آدرس محل سکونت")}
name="address" name="address"
defaultValue={profile} defaultValue={profile}
/> />
@ -418,7 +418,7 @@ class Profile extends Component {
<Input <Input
name="firstName" name="firstName"
label="نام" label=window.t("نام")
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
@ -426,7 +426,7 @@ class Profile extends Component {
/> />
<Input <Input
name="lastName" name="lastName"
label="نام خانوادگی" label=window.t("نام خانوادگی")
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
@ -434,14 +434,14 @@ class Profile extends Component {
/> />
<Input <Input
name="username" name="username"
label="نام کاربری" label=window.t(window.t("نام کاربری"))
parent={this} parent={this}
align="left" align="left"
defaultValue={profile} defaultValue={profile}
onInput={onInput.englishAndNumberWithoutSpace} onInput={onInput.englishAndNumberWithoutSpace}
/> />
<Gender <Gender
options={["دختر", "پسر"]} options={[window.t("دختر"), window.t("پسر")]}
parent={this} parent={this}
name="gender" name="gender"
selectedOption={this.state.gender} selectedOption={this.state.gender}
@ -463,7 +463,7 @@ class Profile extends Component {
/> />
<Gender <Gender
parent={this} parent={this}
options={["معلم", "دانش آموز"]} options={[window.t("معلم"), window.t("دانش آموز")]}
name="status" name="status"
selectedOption={this.state.status} selectedOption={this.state.status}
/> />
@ -472,7 +472,7 @@ class Profile extends Component {
parent={this} parent={this}
options={grades} options={grades}
name="gradeIds" name="gradeIds"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
selectedOptions={this.state.gradeIds} selectedOptions={this.state.gradeIds}
/> />
) : null} ) : null}
@ -481,7 +481,7 @@ class Profile extends Component {
parent={this} parent={this}
options={grades} options={grades}
name="gradeIds" name="gradeIds"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
selectedOptions={this.state.gradeIds} selectedOptions={this.state.gradeIds}
/> />
) : null} ) : null}
@ -489,15 +489,15 @@ class Profile extends Component {
<Select <Select
parent={this} parent={this}
options={[ options={[
"ریاضی", window.t("ریاضی"),
"تجربی", window.t("تجربی"),
"انسانی", window.t("انسانی"),
"فنی حرفهای", window.t("فنی حرفهای"),
"کاردانش", window.t("کاردانش"),
"معارف", window.t("معارف"),
]} ]}
name="field" name="field"
label={"رشته تحصیلی"} label={window.t("رشته تحصیلی")}
selectedOptions={this.state.gradeIds} selectedOptions={this.state.gradeIds}
/> />
) : null} ) : null}
@ -506,27 +506,27 @@ class Profile extends Component {
parent={this} parent={this}
options={this.props.provinceList} options={this.props.provinceList}
name="provinceId" name="provinceId"
label={"استان"} label={window.t("استان")}
selectedOptions={this.state.provinceId} selectedOptions={this.state.provinceId}
/> />
<Select <Select
parent={this} parent={this}
options={this.props.cityList} options={this.props.cityList}
name="cityId" name="cityId"
label={"شهرستان"} label={window.t("شهرستان")}
selectedOptions={this.state.cityId} selectedOptions={this.state.cityId}
/> />
{/* <Select {/* <Select
parent={this} parent={this}
options={["chaharbagh", "mahalat"]} options={["chaharbagh", "mahalat"]}
name="zoneId" name="zoneId"
label={"شهر/روستا"} label={window.t("شهر/روستا")}
/> */} /> */}
{this.state.status === 1 ? ( {this.state.status === 1 ? (
<Input <Input
parent={this} parent={this}
name="schools" name="schools"
label={"نام مدرسه"} label={window.t("نام مدرسه")}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
/> />
@ -535,7 +535,7 @@ class Profile extends Component {
<Input <Input
parent={this} parent={this}
name="schools" name="schools"
label={"محل تدریس"} label={window.t("محل تدریس")}
defaultValue={profile} defaultValue={profile}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
/> />
@ -546,7 +546,7 @@ class Profile extends Component {
<Input <Input
parent={this} parent={this}
name="postalCode" name="postalCode"
label={"کد پستی"} label={window.t("کد پستی")}
align="left" align="left"
maxLength={10} maxLength={10}
inputMode="numeric" inputMode="numeric"
@ -555,7 +555,7 @@ class Profile extends Component {
/> />
<TextArea <TextArea
parent={this} parent={this}
label={"آدرس محل سکونت"} label={window.t("آدرس محل سکونت")}
name="address" name="address"
defaultValue={profile} defaultValue={profile}
/> />

@ -9,14 +9,14 @@ export default function Splash(props) {
<> <>
{window.innerWidth > 1000 ? ( {window.innerWidth > 1000 ? (
<div className="splash d-flex flex-column justify-content-center align-items-center"> <div className="splash d-flex flex-column justify-content-center align-items-center">
<img src={logo} alt="لوگو" /> <img src={logo} alt=window.t("لوگو") />
<ProgressBar interval={600} offset={10} /> <ProgressBar interval={600} offset={10} />
<span className="splash__span">در حال بارگیری اطلاعات از سرور</span> <span className="splash__span">در حال بارگیری اطلاعات از سرور</span>
</div> </div>
) : null} ) : null}
{window.innerWidth < 1000 ? ( {window.innerWidth < 1000 ? (
<div className="mobile-splash d-flex flex-column justify-content-center align-items-center"> <div className="mobile-splash d-flex flex-column justify-content-center align-items-center">
<img src={logo} alt="لوگو" /> <img src={logo} alt=window.t("لوگو") />
<ProgressBar interval={600} offset={10} /> <ProgressBar interval={600} offset={10} />
<span className="mobile-splash__span">در حال بارگیری اطلاعات از سرور</span> <span className="mobile-splash__span">در حال بارگیری اطلاعات از سرور</span>
</div> </div>

@ -12,8 +12,8 @@ export default function Status(props) {
const textHandler = () => { const textHandler = () => {
return props.status return props.status
? "عملیات خرید شما با موفقیت انجام شد." ? window.t("عملیات خرید شما با موفقیت انجام شد.")
: "عملیات با موفقیت انجام نشد!"; : window.t("عملیات با موفقیت انجام نشد!");
}; };
return ( return (
<> <>

@ -17,19 +17,19 @@ const useStyles = makeStyles({
table: {}, table: {},
}); });
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
const maxMobileSize = 550; const maxMobileSize = 550;
const maxDesktopSize = 1250; const maxDesktopSize = 1250;
@ -196,7 +196,7 @@ const Item = (props) => {
<div className="mobile-cart-table-product__info d-flex flex-column p-1"> <div className="mobile-cart-table-product__info d-flex flex-column p-1">
<strong style={{ fontSize: fontSize.mobile.info.strong }}> <strong style={{ fontSize: fontSize.mobile.info.strong }}>
{`نسخه ${ {`نسخه ${
+data.product.productType === 1 ? "الکترونیکی" : "چاپی" +data.product.productType === 1 ? window.t("الکترونیکی") : window.t("چاپی")
} ${data.product.book.name} `} } ${data.product.book.name} `}
</strong> </strong>
<p style={{ fontSize: 12 }}> <p style={{ fontSize: 12 }}>
@ -204,7 +204,7 @@ const Item = (props) => {
</p> </p>
<span style={{ fontSize: 10 }}> <span style={{ fontSize: 10 }}>
همراه با: همراه با:
{data.product.book.items || "کد فعالسازی محتوای الکترونیک"} {data.product.book.items || window.t("کد فعالسازی محتوای الکترونیک")}
</span> </span>
{route !== "callback" ? ( {route !== "callback" ? (
<div className="mobile-cart-table-product__info--delete d-flex align-items-center align-self-end"> <div className="mobile-cart-table-product__info--delete d-flex align-items-center align-self-end">
@ -319,7 +319,7 @@ const Item = (props) => {
<div className="d-flex flex-column justify-content-center"> <div className="d-flex flex-column justify-content-center">
<strong style={{ fontSize: fontSize.desktop.info.strong }}> <strong style={{ fontSize: fontSize.desktop.info.strong }}>
{`نسخه ${ {`نسخه ${
+data.product?.productType === 1 ? "الکترونیکی" : "چاپی" +data.product?.productType === 1 ? window.t("الکترونیکی") : window.t("چاپی")
} ${data.product?.book?.name} `} } ${data.product?.book?.name} `}
</strong> </strong>
<p style={{ fontSize: fontSize?.desktop?.info.p }}> <p style={{ fontSize: fontSize?.desktop?.info.p }}>
@ -327,7 +327,7 @@ const Item = (props) => {
</p> </p>
<span style={{ fontSize: fontSize.desktop.info.span }}> <span style={{ fontSize: fontSize.desktop.info.span }}>
همراه با: همراه با:
{data.product?.book?.items || "کد فعالسازی محتوای الکترونیک"} {data.product?.book?.items || window.t("کد فعالسازی محتوای الکترونیک")}
</span> </span>
</div> </div>
</div> </div>

@ -17,9 +17,9 @@ export default function Search(props) {
<input <input
type="search" type="search"
style={{ fontSize: fontSize.desktop.input }} style={{ fontSize: fontSize.desktop.input }}
placeholder="جستجو" placeholder=window.t(window.t("جستجو"))
/> />
<img src={navbarSearch} alt="جستجو" /> <img src={navbarSearch} alt=window.t(window.t("جستجو")) />
</div> </div>
); );
} }

@ -145,7 +145,7 @@ export default class ChatInputs extends Component {
id="standard-textarea" id="standard-textarea"
label="" label=""
value={message} value={message}
placeholder="یک پیام بنویسید..." placeholder=window.t("یک پیام بنویسید...")
rowsMax={4} rowsMax={4}
onChange={(e) => typeText("text", e.target.value)} onChange={(e) => typeText("text", e.target.value)}
multiline multiline

@ -11,15 +11,15 @@ import ForwardIcon from "@material-ui/icons/Forward";
import DeleteIcon from "@material-ui/icons/Delete"; import DeleteIcon from "@material-ui/icons/Delete";
import ScheduleIcon from "@material-ui/icons/Schedule"; import ScheduleIcon from "@material-ui/icons/Schedule";
const menu = [ const menu = [
{ text: "پسند", icon: FavoriteIcon, onClick: () => {} }, { text: window.t("پسند"), icon: FavoriteIcon, onClick: () => {} },
{ text: "تبادل نظر", icon: TextsmsIcon, onClick: () => {} }, { text: window.t("تبادل نظر"), icon: TextsmsIcon, onClick: () => {} },
{ text: "پاسخ", icon: ReplyIcon, onClick: () => {} }, { text: window.t("پاسخ"), icon: ReplyIcon, onClick: () => {} },
{ text: "باز ارسال", icon: ForwardIcon, onClick: () => {} }, { text: window.t("باز ارسال"), icon: ForwardIcon, onClick: () => {} },
]; ];
const selfMenu = [ const selfMenu = [
{ text: "باز ارسال", icon: ForwardIcon, onClick: () => {} }, { text: window.t("باز ارسال"), icon: ForwardIcon, onClick: () => {} },
{ text: "ویرایش", icon: EditIcon, onClick: () => {} }, { text: window.t("ویرایش"), icon: EditIcon, onClick: () => {} },
{ text: "حذف", icon: DeleteIcon, onClick: () => {} }, { text: window.t(window.t("حذف")), icon: DeleteIcon, onClick: () => {} },
]; ];
export default class Comment extends Component { export default class Comment extends Component {
state = { messageMenu: null }; state = { messageMenu: null };

@ -8,7 +8,7 @@ export default class Message2D extends Component {
click(id) { click(id) {
if (this.props.isActive) { if (this.props.isActive) {
this.setState({ value: id }); this.setState({ value: id });
toast.success("ثبت شد"); toast.success(window.t("ثبت شد"));
this.props.action(); this.props.action();
} }
} }

@ -33,7 +33,7 @@ export default class RadioMessage extends Component {
{isActive && ( {isActive && (
<button <button
className="message-2d__submit" className="message-2d__submit"
onClick={() => toast.success("ثبت شد")} onClick={() => toast.success(window.t("ثبت شد"))}
> >
ثبت ثبت
<ArrowRightAltIcon <ArrowRightAltIcon

@ -19,15 +19,15 @@ import TextsmsIcon from "@material-ui/icons/Textsms";
import ScheduleIcon from "@material-ui/icons/Schedule"; import ScheduleIcon from "@material-ui/icons/Schedule";
const file = (fileId) => `${window.baseURL}/file/download/${fileId}`; const file = (fileId) => `${window.baseURL}/file/download/${fileId}`;
const menu = [ const menu = [
{ text: "پسند", icon: FavoriteIcon, onClick: () => {} }, { text: window.t("پسند"), icon: FavoriteIcon, onClick: () => {} },
{ text: "تبادل نظر", icon: TextsmsIcon, onClick: () => {} }, { text: window.t("تبادل نظر"), icon: TextsmsIcon, onClick: () => {} },
{ text: "پاسخ", icon: ReplyIcon, onClick: () => {} }, { text: window.t("پاسخ"), icon: ReplyIcon, onClick: () => {} },
{ text: "باز ارسال", icon: ForwardIcon, onClick: () => {} }, { text: window.t("باز ارسال"), icon: ForwardIcon, onClick: () => {} },
]; ];
const selfMenu = [ const selfMenu = [
{ text: "باز ارسال", icon: ForwardIcon, onClick: () => {} }, { text: window.t("باز ارسال"), icon: ForwardIcon, onClick: () => {} },
{ text: "ویرایش", icon: EditIcon, onClick: () => {} }, { text: window.t("ویرایش"), icon: EditIcon, onClick: () => {} },
{ text: "حذف", icon: DeleteIcon, onClick: () => {} }, { text: window.t(window.t("حذف")), icon: DeleteIcon, onClick: () => {} },
]; ];
export default class NormalMessage extends Component { export default class NormalMessage extends Component {
state = { messageMenu: null }; state = { messageMenu: null };

@ -171,7 +171,7 @@ class List extends Component {
createdAt: now.toString(), createdAt: now.toString(),
user: { user: {
id: "u1", id: "u1",
name: "علی", name: window.t("علی"),
}, },
}, },
], ],
@ -202,7 +202,7 @@ class List extends Component {
music: null, music: null,
user: { user: {
id: "u1", id: "u1",
name: "علی", name: window.t("علی"),
}, },
}, },
], ],
@ -234,7 +234,7 @@ class List extends Component {
music: null, music: null,
user: { user: {
id: "u1", id: "u1",
name: "علی", name: window.t("علی"),
}, },
}, },
], ],
@ -263,7 +263,7 @@ class List extends Component {
music: null, music: null,
user: { user: {
id: "u1", id: "u1",
name: "علی", name: window.t("علی"),
}, },
}, },
], ],
@ -292,7 +292,7 @@ class List extends Component {
music: music, music: music,
user: { user: {
id: "u1", id: "u1",
name: "علی", name: window.t("علی"),
}, },
}, },
], ],
@ -322,7 +322,7 @@ class List extends Component {
music: null, music: null,
user: { user: {
id: "u1", id: "u1",
name: "علی", name: window.t("علی"),
}, },
}, },
], ],

@ -75,12 +75,12 @@ export default class ChatInfo extends Component {
], ],
username: "MohammadReza", username: "MohammadReza",
educationalInfo: [ educationalInfo: [
"استاد علوم طبیعی پایه دوازدهم", window.t("استاد علوم طبیعی پایه دوازدهم"),
"کارشناس ارشد علوم و فنون از دانشگاه تهران", window.t("کارشناس ارشد علوم و فنون از دانشگاه تهران"),
], ],
name: "محسن محمدی", name: window.t("محسن محمدی"),
lastAct: "2 دقیقه پیش آنلاین بوده", lastAct: window.t("2 دقیقه پیش آنلاین بوده"),
bio: "لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنام", bio: window.t("لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنام"),
}, },
}; };
} }
@ -136,7 +136,7 @@ export default class ChatInfo extends Component {
<img <img
className="desktop-contact-info__body--profileImage" className="desktop-contact-info__body--profileImage"
src={user.profileImages[0].src} src={user.profileImages[0].src}
alt="عکس کاربر" alt=window.t("عکس کاربر")
/> />
<h1 style={{ fontSize: fontSize.desktop.h1 }}>{user.name}</h1> <h1 style={{ fontSize: fontSize.desktop.h1 }}>{user.name}</h1>
<div className="desktop-contact-info__body--bio d-flex flex-column"> <div className="desktop-contact-info__body--bio d-flex flex-column">
@ -173,7 +173,7 @@ export default class ChatInfo extends Component {
<div> <div>
<h3 style={{ fontSize: fontSize.desktop.h3 }}>اعلانات</h3> <h3 style={{ fontSize: fontSize.desktop.h3 }}>اعلانات</h3>
<span style={{ fontSize: fontSize.desktop.span }}> <span style={{ fontSize: fontSize.desktop.span }}>
{alarms ? "روشن " : "خاموش"} {alarms ? "روشن " : window.t("خاموش")}
</span> </span>
</div> </div>
<AntSwitch <AntSwitch
@ -243,7 +243,7 @@ export default class ChatInfo extends Component {
<img <img
className="desktop-contact-info__body--profileImage" className="desktop-contact-info__body--profileImage"
src={user.profileImages[0].src} src={user.profileImages[0].src}
alt="عکس کاربر" alt=window.t("عکس کاربر")
/> />
<h1 style={{ fontSize: fontSize.mobile.h1 }}>{user.name}</h1> <h1 style={{ fontSize: fontSize.mobile.h1 }}>{user.name}</h1>
<div className="desktop-contact-info__body--bio d-flex flex-column"> <div className="desktop-contact-info__body--bio d-flex flex-column">
@ -280,7 +280,7 @@ export default class ChatInfo extends Component {
<div> <div>
<h3 style={{ fontSize: fontSize.mobile.h3 }}>اعلانات</h3> <h3 style={{ fontSize: fontSize.mobile.h3 }}>اعلانات</h3>
<span style={{ fontSize: fontSize.mobile.span }}> <span style={{ fontSize: fontSize.mobile.span }}>
{alarms ? "روشن " : "خاموش"} {alarms ? "روشن " : window.t("خاموش")}
</span> </span>
</div> </div>
<AntSwitch <AntSwitch

@ -16,19 +16,19 @@ const useStyles = makeStyles({
table: {}, table: {},
}); });
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
const maxMobileSize = 550; const maxMobileSize = 550;
const maxDesktopSize = 1250; const maxDesktopSize = 1250;
@ -158,7 +158,7 @@ const Item = (props) => {
<div className="mobile-cart-table-product__info d-flex flex-column p-1"> <div className="mobile-cart-table-product__info d-flex flex-column p-1">
<strong style={{ fontSize: fontSize.mobile.info.strong }}> <strong style={{ fontSize: fontSize.mobile.info.strong }}>
{`نسخه ${ {`نسخه ${
+data.product.productType === 1 ? "الکترونیکی" : "چاپی" +data.product.productType === 1 ? window.t("الکترونیکی") : window.t("چاپی")
} ${data.product.book.name} `} } ${data.product.book.name} `}
</strong> </strong>
<p style={{ fontSize: 12 }}> <p style={{ fontSize: 12 }}>
@ -166,7 +166,7 @@ const Item = (props) => {
</p> </p>
<span style={{ fontSize: 10 }}> <span style={{ fontSize: 10 }}>
همراه با: همراه با:
{data.product.book.items || "کد فعالسازی محتوای الکترونیک"} {data.product.book.items || window.t("کد فعالسازی محتوای الکترونیک")}
</span> </span>
</div> </div>
</div> </div>
@ -210,7 +210,7 @@ const Item = (props) => {
<span style={{ fontSize: 12 }}> <span style={{ fontSize: 12 }}>
{" "} {" "}
{`نسخه ${ {`نسخه ${
+data.product.productType === 1 ? "الکترونیکی" : "چاپی" +data.product.productType === 1 ? window.t("الکترونیکی") : window.t("چاپی")
}`} }`}
</span> </span>

@ -193,7 +193,7 @@ class Cart extends Component {
<div class="checkout__forms--right"> <div class="checkout__forms--right">
<Input <Input
name="recieverName" name="recieverName"
label={"نام و نام خانوادگی"} label={window.t("نام و نام خانوادگی")}
parent={this} parent={this}
defaultValue={factorInfo.recieverName} defaultValue={factorInfo.recieverName}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
@ -203,14 +203,14 @@ class Cart extends Component {
parent={this} parent={this}
options={this.props.provinceList} options={this.props.provinceList}
name="provinceId" name="provinceId"
label={"استان"} label={window.t("استان")}
selectedOptions={provinceId} selectedOptions={provinceId}
required required
/> />
<Input <Input
parent={this} parent={this}
name="recieverPostalCode" name="recieverPostalCode"
label={"کد پستی"} label={window.t("کد پستی")}
align="left" align="left"
maxLength={10} maxLength={10}
inputMode="numeric" inputMode="numeric"
@ -230,7 +230,7 @@ class Cart extends Component {
</div> </div>
<div class="checkout__forms--left"> <div class="checkout__forms--left">
<Input <Input
label={"شماره تماس"} label={window.t(window.t(window.t("شماره تماس")))}
name={"recieverPhone"} name={"recieverPhone"}
parent={this} parent={this}
defaultValue={factorInfo.recieverPhone} defaultValue={factorInfo.recieverPhone}
@ -241,7 +241,7 @@ class Cart extends Component {
parent={this} parent={this}
options={this.props.cityList} options={this.props.cityList}
name="cityId" name="cityId"
label={"شهرستان"} label={window.t("شهرستان")}
selectedOptions={cityId} selectedOptions={cityId}
required required
/> />
@ -249,7 +249,7 @@ class Cart extends Component {
<div style={{ height: "60px" }}> </div> <div style={{ height: "60px" }}> </div>
<TextArea <TextArea
parent={this} parent={this}
label={"توضیحات"} label={window.t("توضیحات")}
name="description" name="description"
defaultValue={factorInfo.description} defaultValue={factorInfo.description}
/> />
@ -369,14 +369,14 @@ class Cart extends Component {
<div class="checkout__forms--right2"> <div class="checkout__forms--right2">
<Input <Input
name="recieverName" name="recieverName"
label={"نام و نام خانوادگی"} label={window.t("نام و نام خانوادگی")}
parent={this} parent={this}
defaultValue={factorInfo.recieverName} defaultValue={factorInfo.recieverName}
onInput={onInput.persianOnly} onInput={onInput.persianOnly}
required required
/> />
<Input <Input
label={"شماره تماس"} label={window.t(window.t(window.t("شماره تماس")))}
name={"recieverPhone"} name={"recieverPhone"}
parent={this} parent={this}
defaultValue={factorInfo.recieverPhone} defaultValue={factorInfo.recieverPhone}
@ -386,7 +386,7 @@ class Cart extends Component {
parent={this} parent={this}
options={this.props.provinceList} options={this.props.provinceList}
name="provinceId" name="provinceId"
label={"استان"} label={window.t("استان")}
selectedOptions={provinceId} selectedOptions={provinceId}
required required
/> />
@ -394,14 +394,14 @@ class Cart extends Component {
parent={this} parent={this}
options={this.props.cityList} options={this.props.cityList}
name="cityId" name="cityId"
label={"شهرستان"} label={window.t("شهرستان")}
selectedOptions={cityId} selectedOptions={cityId}
required required
/> />
<Input <Input
parent={this} parent={this}
name="recieverPostalCode" name="recieverPostalCode"
label={"کد پستی"} label={window.t("کد پستی")}
align="left" align="left"
maxLength={10} maxLength={10}
inputMode="numeric" inputMode="numeric"
@ -421,7 +421,7 @@ class Cart extends Component {
<TextArea <TextArea
parent={this} parent={this}
label={"توضیحات"} label={window.t("توضیحات")}
name="description" name="description"
defaultValue={factorInfo.description} defaultValue={factorInfo.description}
/> />

@ -58,7 +58,7 @@ class Contact extends Component {
</div> </div>
<div className="contact__forms--left d-flex flex-column"> <div className="contact__forms--left d-flex flex-column">
<div className="contact__location d-flex align-items-center"> <div className="contact__location d-flex align-items-center">
<img src={location} alt="آدرس" className="m-1" /> <img src={location} alt=window.t("آدرس") className="m-1" />
<p style={{ fontSize: fontSize.desktop.p }}> <p style={{ fontSize: fontSize.desktop.p }}>
{contactData?.address || ""} {contactData?.address || ""}
</p> </p>
@ -71,13 +71,13 @@ class Contact extends Component {
<span style={{ fontSize: fontSize.desktop.span }}> <span style={{ fontSize: fontSize.desktop.span }}>
{contactData?.cellphone || ""} {contactData?.cellphone || ""}
</span> </span>
<img src={contact} alt="تماس" className="m-1" /> <img src={contact} alt=window.t("تماس") className="m-1" />
</div> </div>
<div className="d-flex align-items-center"> <div className="d-flex align-items-center">
<span style={{ fontSize: fontSize.desktop.span }}> <span style={{ fontSize: fontSize.desktop.span }}>
{contactData?.email || ""} {contactData?.email || ""}
</span> </span>
<img src={home} alt="خانه" className="m-1" /> <img src={home} alt=window.t(window.t(window.t("خانه"))) className="m-1" />
</div> </div>
</div> </div>
<div className="contact__map d-flex align-items-center mt-3"> <div className="contact__map d-flex align-items-center mt-3">
@ -106,7 +106,7 @@ class Contact extends Component {
<Support /> <Support />
<div className="mobile-contact__address d-flex flex-column"> <div className="mobile-contact__address d-flex flex-column">
<div className="mobile-contact__address--location d-flex align-items-center"> <div className="mobile-contact__address--location d-flex align-items-center">
<img src={location} alt="آدرس" className="m-1" /> <img src={location} alt=window.t("آدرس") className="m-1" />
<p style={{ fontSize: fontSize.mobile.p }}> <p style={{ fontSize: fontSize.mobile.p }}>
{contactData?.address || ""}{" "} {contactData?.address || ""}{" "}
</p> </p>
@ -119,13 +119,13 @@ class Contact extends Component {
<span style={{ fontSize: fontSize.mobile.span }}> <span style={{ fontSize: fontSize.mobile.span }}>
{contactData?.cellphone || ""}{" "} {contactData?.cellphone || ""}{" "}
</span> </span>
<img src={contact} alt="تماس" className="m-1" /> <img src={contact} alt=window.t("تماس") className="m-1" />
</div> </div>
<div className="d-flex align-items-center"> <div className="d-flex align-items-center">
<span style={{ fontSize: fontSize.mobile.span }}> <span style={{ fontSize: fontSize.mobile.span }}>
{contactData?.email || ""} {contactData?.email || ""}
</span> </span>
<img src={home} alt="خانه" className="m-1" /> <img src={home} alt=window.t(window.t(window.t("خانه"))) className="m-1" />
</div> </div>
</div> </div>
<div className="mobile-contact__address--map d-flex align-items-center mt-3"> <div className="mobile-contact__address--map d-flex align-items-center mt-3">

@ -16,19 +16,19 @@ const fontSize = {
}, },
}; };
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
export default class Item extends Component { export default class Item extends Component {
render() { render() {

@ -45,7 +45,7 @@ class AR extends Component {
> >
<img <img
src="https://dnvn.ir/api/v1/file/1851" src="https://dnvn.ir/api/v1/file/1851"
alt="واقعیت افزوده" alt=window.t(window.t("واقعیت افزوده"))
width="150" width="150"
/> />
</div> </div>

@ -99,7 +99,7 @@ class Faq extends Component {
<div className="faq__header--search d-flex align-items-center"> <div className="faq__header--search d-flex align-items-center">
<input <input
type="search" type="search"
placeholder="دنبال چه چیزی برات باشیم؟" placeholder=window.t("دنبال چه چیزی برات باشیم؟")
onChange={(e) => this.handleSearch(e.target.value)} onChange={(e) => this.handleSearch(e.target.value)}
/> />
<button <button
@ -150,7 +150,7 @@ class Faq extends Component {
</h1> </h1>
<input <input
type="search" type="search"
placeholder="دنبال چه چیزی برات باشیم؟" placeholder=window.t("دنبال چه چیزی برات باشیم؟")
onChange={(e) => this.handleSearch(e.target.value)} onChange={(e) => this.handleSearch(e.target.value)}
/> />
<button type="submit">جستجو</button> <button type="submit">جستجو</button>

@ -22,7 +22,7 @@ export default class Footer extends Component {
آموزش و پرورش کشور ایجاد کنیم. آموزش و پرورش کشور ایجاد کنیم.
</p> </p>
<div className="footer__location d-flex align-items-center mt-2"> <div className="footer__location d-flex align-items-center mt-2">
<img src={location} alt="آدرس" className="m-1" /> <img src={location} alt=window.t("آدرس") className="m-1" />
<p>آدرس: تهران، میدان فردوسی، خیابان موسوی، پلاک ۳۰</p> <p>آدرس: تهران، میدان فردوسی، خیابان موسوی، پلاک ۳۰</p>
</div> </div>
<div <div
@ -40,7 +40,7 @@ export default class Footer extends Component {
58795 58795
</a> </a>
<img src={contact} alt="تماس" className="m-1" /> <img src={contact} alt=window.t("تماس") className="m-1" />
</div> </div>
{/* <div {/* <div
className="d-flex align-items-center" className="d-flex align-items-center"
@ -54,11 +54,11 @@ export default class Footer extends Component {
> >
021-88814673 021-88814673
</a> </a>
<img src={contact} alt="تماس" className="m-1" /> <img src={contact} alt=window.t("تماس") className="m-1" />
</div> */} </div> */}
<div className="d-flex align-items-center"> <div className="d-flex align-items-center">
<span>Info@Danovin.ir</span> <span>Info@Danovin.ir</span>
<img src={home} alt="خانه" className="m-1" /> <img src={home} alt=window.t(window.t(window.t("خانه"))) className="m-1" />
</div> </div>
</div> </div>
</div> </div>
@ -103,7 +103,7 @@ export default class Footer extends Component {
کاربردی می باشد، کتابهای زیادی در شصت و سه{" "} کاربردی می باشد، کتابهای زیادی در شصت و سه{" "}
</p> </p>
<div className="mobile-footer__location d-flex align-items-center mt-2"> <div className="mobile-footer__location d-flex align-items-center mt-2">
<img src={location} alt="آدرس" className="m-1" /> <img src={location} alt=window.t("آدرس") className="m-1" />
<p> <p>
تهران خیابان انقلاب اسلامی بن بست سروش پلاک 2 طبقه چهار تهران خیابان انقلاب اسلامی بن بست سروش پلاک 2 طبقه چهار
</p> </p>
@ -114,11 +114,11 @@ export default class Footer extends Component {
> >
<div className="d-flex align-items-center"> <div className="d-flex align-items-center">
<span>02163462405</span> <span>02163462405</span>
<img src={contact} alt="تماس" className="m-1" /> <img src={contact} alt=window.t("تماس") className="m-1" />
</div> </div>
<div className="d-flex align-items-center"> <div className="d-flex align-items-center">
<span>Info@Danovin.ir</span> <span>Info@Danovin.ir</span>
<img src={home} alt="خانه" className="m-1" /> <img src={home} alt=window.t(window.t(window.t("خانه"))) className="m-1" />
</div> </div>
</div> </div>
</div> </div>
@ -156,10 +156,10 @@ export default class Footer extends Component {
Footer.defaultProps = { Footer.defaultProps = {
fastAccess: [ fastAccess: [
{ name: "صفحه اصلی", link: "/" }, { name: window.t("صفحه اصلی"), link: "/" },
{ name: "فروشگاه", link: "/shop" }, { name: window.t("فروشگاه"), link: "/shop" },
{ name: "سوالات متداول", link: "/faq" }, { name: window.t("سوالات متداول"), link: "/faq" },
{ name: "درباره ما", link: "/about" }, { name: window.t("درباره ما"), link: "/about" },
{ name: "تماس با ما", link: "/call" }, { name: window.t("تماس با ما"), link: "/call" },
], ],
}; };

@ -42,7 +42,7 @@ const Item = (props) => {
}}> }}>
<img <img
src={props.data.image} src={props.data.image}
alt="عکس" alt=window.t("عکس")
style={{ style={{
width: `${props.data.width}%`, width: `${props.data.width}%`,
height: "100%", height: "100%",

@ -20,7 +20,7 @@ export default class HomeScroll extends Component {
</div> </div>
<div className="mobile-home-scroll__header--more d-flex"> <div className="mobile-home-scroll__header--more d-flex">
<span>{moreText}</span> <span>{moreText}</span>
<img src={dropdown} alt="فلش" /> <img src={dropdown} alt=window.t("فلش") />
</div> </div>
</div> </div>
<div className="mobile-home-scroll__list d-flex"> <div className="mobile-home-scroll__list d-flex">

@ -56,7 +56,7 @@ export default function CustomizedSelects(props) {
filters: { filters: {
...parent.state.filters, ...parent.state.filters,
[name]: [name]:
e.target.value === "پایه تحصیلی" ? [] : [e.target.value], e.target.value === window.t(window.t("پایه تحصیلی")) ? [] : [e.target.value],
}, },
}) })
} }

@ -28,7 +28,7 @@ class HomeSearch extends Component {
return window.innerWidth > 1000 ? ( return window.innerWidth > 1000 ? (
<div className="home-search d-flex"> <div className="home-search d-flex">
<input <input
placeholder="جستجو در عناوین کتاب ..." placeholder=window.t("جستجو در عناوین کتاب ...")
className="home-search__input d-flex" className="home-search__input d-flex"
type="text" type="text"
name="searchBox" name="searchBox"
@ -40,7 +40,7 @@ class HomeSearch extends Component {
/> />
<div className="home-search__select"> <div className="home-search__select">
<Select options={levels} name="levels" parent={this} /> <Select options={levels} name="levels" parent={this} />
{/* <img src={dropdown} alt="فلش" style={{ position: "relative" }} /> */} {/* <img src={dropdown} alt=window.t("فلش") style={{ position: "relative" }} /> */}
</div> </div>
<button className="home-search__submit">جستجو</button> <button className="home-search__submit">جستجو</button>
</div> </div>
@ -49,13 +49,13 @@ class HomeSearch extends Component {
<div className="home-mobile-search d-flex"> <div className="home-mobile-search d-flex">
<div className="home-mobile-search__select" style={{ width: "100%" }}> <div className="home-mobile-search__select" style={{ width: "100%" }}>
<Select options={levels} name="levels" parent={this} /> <Select options={levels} name="levels" parent={this} />
<img src={dropdown} alt="فلش" /> <img src={dropdown} alt=window.t("فلش") />
</div> </div>
</div> </div>
<div className="home-mobile-search "> <div className="home-mobile-search ">
<input <input
ref="input" ref="input"
placeholder="نام یک کتاب را جستجو کنید" placeholder=window.t("نام یک کتاب را جستجو کنید")
className="home-mobile-search__input " className="home-mobile-search__input "
type="text" type="text"
name="searchBox" name="searchBox"

@ -18,10 +18,10 @@ const fontSize = {
}; };
const colors = [ const colors = [
{ name: "علمی تخیلی", color: "red" }, { name: window.t("علمی تخیلی"), color: "red" },
{ name: "سیاسی", color: "blue" }, { name: window.t("سیاسی"), color: "blue" },
{ name: "تاریخی", color: "orange" }, { name: window.t("تاریخی"), color: "orange" },
{ name: "ورزشی", color: "yellow" }, { name: window.t("ورزشی"), color: "yellow" },
]; ];
export default class Simple extends Component { export default class Simple extends Component {
render() { render() {
@ -132,7 +132,7 @@ export default class Simple extends Component {
</div> </div>
</div> </div>
<Link to={`/blogs/${data.id}`}> <Link to={`/blogs/${data.id}`}>
{data.buttonText || "ادامه مطلب"} {data.buttonText || window.t(window.t("ادامه مطلب"))}
</Link> </Link>
</div> </div>
<span <span

@ -34,7 +34,7 @@ const SimpleHeader = (props) => {
className="home-scroll__header--more d-flex align-items-center" className="home-scroll__header--more d-flex align-items-center"
> >
<span style={{ fontSize: fontSize.desktop.h1 }}>بیشتر</span> <span style={{ fontSize: fontSize.desktop.h1 }}>بیشتر</span>
<img src={dropdown} alt="فلش" /> <img src={dropdown} alt=window.t("فلش") />
</Link> </Link>
) : null} ) : null}
</div> </div>
@ -51,7 +51,7 @@ const SimpleHeader = (props) => {
className="mobile-home-scroll__header--more d-flex align-items-center" className="mobile-home-scroll__header--more d-flex align-items-center"
> >
<span>بیشتر</span> <span>بیشتر</span>
<img src={dropdown} alt="فلش" /> <img src={dropdown} alt=window.t("فلش") />
</Link> </Link>
) : null} */} ) : null} */}
</div> </div>
@ -74,7 +74,7 @@ const TabHeader = (props) => {
className="home-scroll__header--more d-flex align-items-center" className="home-scroll__header--more d-flex align-items-center"
> >
<span style={{ fontSize: fontSize.desktop.h1 }}>بیشتر</span> <span style={{ fontSize: fontSize.desktop.h1 }}>بیشتر</span>
<img src={dropdown} alt="فلش" /> <img src={dropdown} alt=window.t("فلش") />
</Link> */} </Link> */}
</div> </div>
) : null} ) : null}
@ -86,7 +86,7 @@ const TabHeader = (props) => {
</div> </div>
{/* <div className="mobile-home-scroll__header--more d-flex align-items-center"> {/* <div className="mobile-home-scroll__header--more d-flex align-items-center">
<span>بیشتر</span> <span>بیشتر</span>
<img src={dropdown} alt="فلش" /> <img src={dropdown} alt=window.t("فلش") />
</div> */} </div> */}
</div> </div>
) : null} ) : null}

@ -53,7 +53,7 @@ const Item = (props) => {
> >
<img <img
src={`https://dnvn.ir/api/v1/file/${data.fileId}`} src={`https://dnvn.ir/api/v1/file/${data.fileId}`}
alt={"عکس محصول"} alt={window.t("عکس محصول")}
/> />
</div> </div>
); );

@ -87,7 +87,7 @@ const Item = (props) => {
</div> </div>
<img <img
src={`https://dnvn.ir/api/v1/file/${props.data.fileId}`} src={`https://dnvn.ir/api/v1/file/${props.data.fileId}`}
alt="عکس" alt=window.t("عکس")
/> />
</div> </div>
) : ( ) : (
@ -100,7 +100,7 @@ const Item = (props) => {
> >
<img <img
src={`https://dnvn.ir/api/v1/file/${props.data.fileId}`} src={`https://dnvn.ir/api/v1/file/${props.data.fileId}`}
alt="عکس" alt=window.t("عکس")
style={{ float: "left" }} style={{ float: "left" }}
/> />
<div className="d-flex flex-column"> <div className="d-flex flex-column">

@ -16,8 +16,8 @@ class Membership extends Component {
<p>مشخصات خودت رو وارد کنید و امتیاز هدیه بگیرید</p> <p>مشخصات خودت رو وارد کنید و امتیاز هدیه بگیرید</p>
</div> </div>
<div className="d-flex"> <div className="d-flex">
<Input label={"نام و نام خانوادگی"} name={"name"} /> <Input label={window.t("نام و نام خانوادگی")} name={"name"} />
<Input label={"شماره تماس"} name={"mobile"} /> <Input label={window.t(window.t(window.t("شماره تماس")))} name={"mobile"} />
<button className="membership__submit">ثبت </button> <button className="membership__submit">ثبت </button>
</div> </div>
</div> </div>
@ -35,7 +35,7 @@ class Membership extends Component {
<Input label={"نامونام خانوادگی"} name={"name"} /> <Input label={"نامونام خانوادگی"} name={"name"} />
</div> </div>
<div> <div>
<Input label={"شماره تماس"} name={"mobile"} /> <Input label={window.t(window.t(window.t("شماره تماس")))} name={"mobile"} />
</div> </div>
<button className="mobile-membership__submit">ثبت </button> <button className="mobile-membership__submit">ثبت </button>
</div> </div>

@ -36,7 +36,7 @@ class LaptopNavbar extends Component {
<nav className="laptop-navbar d-flex"> <nav className="laptop-navbar d-flex">
<div className="d-flex"> <div className="d-flex">
<Link to="/" className="laptop-navbar__logo"> <Link to="/" className="laptop-navbar__logo">
<img src={logo} alt="لوگو" /> <img src={logo} alt=window.t("لوگو") />
</Link> </Link>
<ul className="laptop-navbar__list d-flex"> <ul className="laptop-navbar__list d-flex">
{links.map((item, i) => ( {links.map((item, i) => (
@ -92,7 +92,7 @@ class LaptopNavbar extends Component {
width="20" width="20"
height="23" height="23"
src={basket} src={basket}
alt="سبد خرید" alt=window.t("سبد خرید")
style={{ marginRight: 5 }} style={{ marginRight: 5 }}
/> />
</Link> </Link>
@ -176,10 +176,10 @@ export default connect((state) => ({ status: state.user.status }), {
})(LaptopNavbar); })(LaptopNavbar);
LaptopNavbar.defaultProps = { LaptopNavbar.defaultProps = {
links: [ links: [
{ name: "صفحه اصلی", to: "/", page: "home" }, { name: window.t("صفحه اصلی"), to: "/", page: "home" },
{ name: "فروشگاه", to: "/products", page: "products" }, { name: window.t("فروشگاه"), to: "/products", page: "products" },
{ name: "سوالات متداول", to: "/faq", page: "faq" }, { name: window.t("سوالات متداول"), to: "/faq", page: "faq" },
{ name: "درباره ما", to: "/about", page: "about" }, { name: window.t("درباره ما"), to: "/about", page: "about" },
{ name: "پشتیبانی", to: "/contact", page: "contact" }, { name: window.t("پشتیبانی"), to: "/contact", page: "contact" },
], ],
}; };

@ -29,37 +29,37 @@ class NavbarDrawer extends Component {
const statusx = proxy.status(); const statusx = proxy.status();
this.links = [ this.links = [
{ {
name: "صفحه اصلی", name: window.t("صفحه اصلی"),
link: "/", link: "/",
icon: <img src={mobileHome} alt="صفحه اصلی" />, icon: <img src={mobileHome} alt=window.t("صفحه اصلی") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "ورود یا ثبت نام", name: "ورود یا ثبت نام",
link: "/auth", link: "/auth",
icon: <img src={mobileLogout} alt="کتابهای من" />, icon: <img src={mobileLogout} alt=window.t("کتابهای من") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "درباره ما", name: window.t("درباره ما"),
link: "/about", link: "/about",
icon: <img src={mobileBlog} alt="کتابهای من" />, icon: <img src={mobileBlog} alt=window.t("کتابهای من") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "فروشگاه", name: window.t("فروشگاه"),
link: "/products", link: "/products",
icon: <img src={mobileBlog} alt="کتابهای من" />, icon: <img src={mobileBlog} alt=window.t("کتابهای من") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "سبد خرید", name: window.t("سبد خرید"),
link: "/cart", link: "/cart",
icon: <img src={mobileBlog} alt="کتابهای من" />, icon: <img src={mobileBlog} alt=window.t("کتابهای من") />,
toast: "", toast: "",
message: "", message: "",
}, },
@ -71,9 +71,9 @@ class NavbarDrawer extends Component {
message: "", message: "",
}, },
{ {
name: "پشتیبانی", name: window.t("پشتیبانی"),
link: "/support", link: "/support",
icon: <img src={mobileDanger} alt="پشتیبانی" />, icon: <img src={mobileDanger} alt=window.t("پشتیبانی") />,
toast: "", toast: "",
message: "", message: "",
// onClick: this.props.logout, // onClick: this.props.logout,
@ -81,37 +81,37 @@ class NavbarDrawer extends Component {
]; ];
this.links2 = [ this.links2 = [
{ {
name: "صفحه اصلی", name: window.t("صفحه اصلی"),
link: "/", link: "/",
icon: <img src={mobileHome} alt="صفحه اصلی" />, icon: <img src={mobileHome} alt=window.t("صفحه اصلی") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "واقعیت افزوده", name: window.t(window.t("واقعیت افزوده")),
link: "/ar", link: "/ar",
icon: <img src={mobileAr} alt="واقعیت افزوده" />, icon: <img src={mobileAr} alt=window.t(window.t("واقعیت افزوده")) />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "بارکد خوان", name: window.t("بارکد خوان"),
link: "/qr-scan", link: "/qr-scan",
icon: <img src={qrcode} alt="بارکد خوان" />, icon: <img src={qrcode} alt=window.t("بارکد خوان") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "کتابهای من", name: window.t("کتابهای من"),
link: "/mybooks", link: "/mybooks",
icon: <img src={mobileBlog} alt="کتابهای من" />, icon: <img src={mobileBlog} alt=window.t("کتابهای من") />,
toast: "", toast: "",
message: "", message: "",
}, },
{ {
name: "سبد خرید", name: window.t("سبد خرید"),
link: "/cart", link: "/cart",
icon: <img src={mobileBasket} alt="فروشگاه" />, icon: <img src={mobileBasket} alt=window.t("فروشگاه") />,
toast: "", toast: "",
message: "", message: "",
}, },
@ -123,31 +123,31 @@ class NavbarDrawer extends Component {
message: "", message: "",
}, },
{ {
name: "دانوینیها", name: window.t("دانوینیها"),
link: "/", link: "/",
icon: <img src={mobileProfile} alt="دانوینیها" />, icon: <img src={mobileProfile} alt=window.t("دانوینیها") />,
toast: "به زودی این بخش فعال می شود", toast: window.t("به زودی این بخش فعال می شود"),
message: "به زودی", message: "به زودی",
}, },
{ {
name: "پشتیبانی", name: window.t("پشتیبانی"),
link: "/support", link: "/support",
icon: <img src={mobileDanger} alt="پشتیبانی" />, icon: <img src={mobileDanger} alt=window.t("پشتیبانی") />,
toast: "", toast: "",
message: "", message: "",
// onClick: this.props.logout, // onClick: this.props.logout,
}, },
{ {
name: "ویرایش مشخصات", name: window.t(window.t("ویرایش مشخصات")),
link: "/profile", link: "/profile",
icon: <img src={mobileMail} alt="ویرایش مشخصات" />, icon: <img src={mobileMail} alt=window.t(window.t("ویرایش مشخصات")) />,
toast: "", toast: "",
// message: "4 پیام", // message: "4 پیام",
}, },
{ {
name: "بروز رسانی", name: window.t("بروز رسانی"),
link: "/", link: "/",
icon: <img src={mobileLogout} alt="خروج" />, icon: <img src={mobileLogout} alt=window.t(window.t(window.t("خروج"))) />,
toast: "", toast: "",
message: "", message: "",
onClick: () => { onClick: () => {
@ -155,9 +155,9 @@ class NavbarDrawer extends Component {
}, },
}, },
{ {
name: "خروج", name: window.t(window.t(window.t("خروج"))),
link: "/auth", link: "/auth",
icon: <img src={mobileLogout} alt="خروج" />, icon: <img src={mobileLogout} alt=window.t(window.t(window.t("خروج"))) />,
toast: "", toast: "",
message: "", message: "",
onClick: () => { onClick: () => {

@ -18,7 +18,7 @@ function BackButton({ children }) {
let history = useHistory(); let history = useHistory();
return ( return (
<div type="button" onClick={() => history.goBack()}> <div type="button" onClick={() => history.goBack()}>
<img src={back} alt="بازگشت" /> <img src={back} alt=window.t("بازگشت") />
</div> </div>
); );
} }
@ -82,10 +82,10 @@ export default function MobileNavbar(props) {
style={{ marginTop: 10 }} style={{ marginTop: 10 }}
onClick={toggleDrawer("right", true)} onClick={toggleDrawer("right", true)}
> >
<img src={hamburger} alt="منو" /> <img src={hamburger} alt=window.t("منو") />
</div> </div>
<Link to="/" className="mobile-navbar__logo2" style={{}}> <Link to="/" className="mobile-navbar__logo2" style={{}}>
<img src={logo} alt="لوگو" className="logo" /> <img src={logo} alt=window.t("لوگو") className="logo" />
</Link> </Link>
</div> </div>
<div className="mobile-navbar__left d-flex" style={{ marginLeft: 10 }}> <div className="mobile-navbar__left d-flex" style={{ marginLeft: 10 }}>
@ -115,23 +115,23 @@ export default function MobileNavbar(props) {
// style={{ transform: page !== "home" ? "translateX(-29px)" : "none" }} // style={{ transform: page !== "home" ? "translateX(-29px)" : "none" }}
> >
<Link to="/"> <Link to="/">
<img src={logo} alt="لوگو" /> <img src={logo} alt=window.t("لوگو") />
</Link> </Link>
</div> */} </div> */}
<div <div
className="mobile-navbar__menu" className="mobile-navbar__menu"
onClick={toggleDrawer("right", true)} onClick={toggleDrawer("right", true)}
> >
<img src={hamburger} alt="منو" /> <img src={hamburger} alt=window.t("منو") />
<Link to="/"> <Link to="/">
<img src={logo} alt="لوگو" className="logo" /> <img src={logo} alt=window.t("لوگو") className="logo" />
</Link> </Link>
</div> </div>
<div className="mobile-navbar__left"> <div className="mobile-navbar__left">
{page === "home" || page === "download" ? ( {page === "home" || page === "download" ? (
<Link to={"/products"}> <Link to={"/products"}>
<img src={search} alt="جستجو" /> <img src={search} alt=window.t(window.t("جستجو")) />
</Link> </Link>
) : ( ) : (
<div className="d-flex align-items-center"> <div className="d-flex align-items-center">
@ -139,7 +139,7 @@ export default function MobileNavbar(props) {
window.location.pathname !== "/mybooks" && window.location.pathname !== "/mybooks" &&
window.location.pathname !== "/profile" && ( window.location.pathname !== "/profile" && (
<Link to={"/products"}> <Link to={"/products"}>
<img src={search} alt="جستجو" /> <img src={search} alt=window.t(window.t("جستجو")) />
</Link> </Link>
)} )}
{window.location.pathname !== "/qr-scan" && {window.location.pathname !== "/qr-scan" &&

@ -6,19 +6,19 @@ import moment from "jalali-moment";
import "./index.scss"; import "./index.scss";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
class MyBooks extends Component { class MyBooks extends Component {
componentDidMount() { componentDidMount() {

@ -125,7 +125,7 @@ const Item = (props) => {
<div className="mobile-products-product d-flex flex-column"> <div className="mobile-products-product d-flex flex-column">
<img <img
src={`https://dnvn.ir/api/v1/file/${data.product.book.fileIds}`} src={`https://dnvn.ir/api/v1/file/${data.product.book.fileIds}`}
alt={"عکس مجصول"} alt={window.t("عکس مجصول")}
/> />
<div className="mobile-products-product__info d-flex flex-column"> <div className="mobile-products-product__info d-flex flex-column">
<h1 style={{ fontSize: fontSize.mobile.h1 }}> <h1 style={{ fontSize: fontSize.mobile.h1 }}>
@ -140,7 +140,7 @@ const Item = (props) => {
<div className="products-product d-flex flex-column"> <div className="products-product d-flex flex-column">
<img <img
src={`https://dnvn.ir/api/v1/file/${data.product.book.fileIds}`} src={`https://dnvn.ir/api/v1/file/${data.product.book.fileIds}`}
alt={"عکس مجصول"} alt={window.t("عکس مجصول")}
/> />
<div className="mobile-products-product__info d-flex flex-column"> <div className="mobile-products-product__info d-flex flex-column">
<h1 style={{ fontSize: fontSize.desktop.h1 }}> <h1 style={{ fontSize: fontSize.desktop.h1 }}>

@ -41,8 +41,8 @@ class NewProfile extends Component {
username: "", username: "",
address: "", address: "",
email: "", email: "",
gender: "دختر", gender: window.t("دختر"),
userRoleId: "دانش آموز", userRoleId: window.t("دانش آموز"),
nationalId: "", nationalId: "",
provinceId: "", provinceId: "",
phone: "", phone: "",
@ -67,7 +67,7 @@ class NewProfile extends Component {
} }
onChange = (name, value) => { onChange = (name, value) => {
if (name === "gardeId" && this.state.userRoleId === "معلم") { if (name === "gardeId" && this.state.userRoleId === window.t("معلم")) {
this.setState((prevState) => ({ this.setState((prevState) => ({
gradeId: [...prevState.gradeId, value], gradeId: [...prevState.gradeId, value],
})); }));
@ -187,19 +187,19 @@ class NewProfile extends Component {
render() { render() {
const { profile } = this.props; const { profile } = this.props;
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
return ( return (
<> <>
@ -221,7 +221,7 @@ class NewProfile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="firstName" name="firstName"
label="نام" label=window.t("نام")
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
/> />
@ -229,7 +229,7 @@ class NewProfile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="lastName" name="lastName"
label="نام خانوادگی" label=window.t("نام خانوادگی")
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
/> />
@ -237,7 +237,7 @@ class NewProfile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="username" name="username"
label="نام کاربری" label=window.t(window.t("نام کاربری"))
parent={this} parent={this}
defaultValue={profile} defaultValue={profile}
align="left" align="left"
@ -246,7 +246,7 @@ class NewProfile extends Component {
<div className="mb-2"> <div className="mb-2">
<Gender <Gender
options={["دختر", "پسر"]} options={[window.t("دختر"), window.t("پسر")]}
parent={this} parent={this}
name="gender" name="gender"
selectedOption={this.state.gender} selectedOption={this.state.gender}
@ -255,7 +255,7 @@ class NewProfile extends Component {
<div className="mb-2"> <div className="mb-2">
<Input <Input
name="nationalId" name="nationalId"
label="کد ملی" label=window.t("کد ملی")
parent={this} parent={this}
align="left" align="left"
defaultValue={profile} defaultValue={profile}
@ -272,49 +272,49 @@ class NewProfile extends Component {
<div className="mb-2" style={{ minWidth: "100%" }}> <div className="mb-2" style={{ minWidth: "100%" }}>
<Gender <Gender
parent={this} parent={this}
options={["معلم", "دانش آموز"]} options={[window.t("معلم"), window.t("دانش آموز")]}
name="userRoleId" name="userRoleId"
label={"عنوان"} label={window.t("عنوان")}
selectedOption={this.state.userRoleId} selectedOption={this.state.userRoleId}
/> />
</div> </div>
{this.state.userRoleId === "دانش آموز" ? ( {this.state.userRoleId === window.t("دانش آموز") ? (
<div className="mb-2"> <div className="mb-2">
<Select <Select
parent={this} parent={this}
options={grades} options={grades}
name="gradeId" name="gradeId"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
/> />
</div> </div>
) : null} ) : null}
{this.state.userRoleId === "معلم" ? ( {this.state.userRoleId === window.t("معلم") ? (
<div className="mb-2"> <div className="mb-2">
<MultipleSelector <MultipleSelector
parent={this} parent={this}
options={grades} options={grades}
name="gradeId" name="gradeId"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
selectedOptions={this.state.gradeId} selectedOptions={this.state.gradeId}
/> />
</div> </div>
) : null} ) : null}
{this.state.userRoleId === "دانش آموز" && {this.state.userRoleId === window.t("دانش آموز") &&
this.state.gradeId > 9 ? ( this.state.gradeId > 9 ? (
<div className="mb-2"> <div className="mb-2">
<Select <Select
parent={this} parent={this}
options={[ options={[
"ریاضی", window.t("ریاضی"),
"تجربی", window.t("تجربی"),
"انسانی", window.t("انسانی"),
"فنی حرفهای", window.t("فنی حرفهای"),
"کاردانش", window.t("کاردانش"),
"معارف", window.t("معارف"),
]} ]}
name="field" name="field"
label={"رشته تحصیلی"} label={window.t("رشته تحصیلی")}
selectedOptions={this.state.gradeId} selectedOptions={this.state.gradeId}
/> />
</div> </div>
@ -325,7 +325,7 @@ class NewProfile extends Component {
parent={this} parent={this}
options={["karaj", "tehran"]} options={["karaj", "tehran"]}
name="province" name="province"
label={"استان"} label={window.t("استان")}
/> />
</div> </div>
<div className="mb-2"> <div className="mb-2">
@ -333,7 +333,7 @@ class NewProfile extends Component {
parent={this} parent={this}
options={["karaj", "tehran"]} options={["karaj", "tehran"]}
name="city" name="city"
label={"شهرستان"} label={window.t("شهرستان")}
/> />
</div> </div>
<div className="mb-2"> <div className="mb-2">
@ -341,25 +341,25 @@ class NewProfile extends Component {
parent={this} parent={this}
options={["chaharbagh", "mahalat"]} options={["chaharbagh", "mahalat"]}
name="zoneId" name="zoneId"
label={"شهر/روستا"} label={window.t("شهر/روستا")}
/> />
</div> </div>
{this.state.userRoleId === "دانش آموز" ? ( {this.state.userRoleId === window.t("دانش آموز") ? (
<div className="mb-2"> <div className="mb-2">
<Input <Input
parent={this} parent={this}
name="schoolId" name="schoolId"
label={"نام مدرسه"} label={window.t("نام مدرسه")}
defaultValue={profile} defaultValue={profile}
/> />
</div> </div>
) : null} ) : null}
{this.state.userRoleId === "معلم" ? ( {this.state.userRoleId === window.t("معلم") ? (
<div className="mb-2"> <div className="mb-2">
<Input <Input
parent={this} parent={this}
name="schoolId" name="schoolId"
label={"محل تدریس"} label={window.t("محل تدریس")}
defaultValue={profile} defaultValue={profile}
/> />
</div> </div>
@ -368,7 +368,7 @@ class NewProfile extends Component {
<Input <Input
parent={this} parent={this}
name="postalCode" name="postalCode"
label={"کد پستی"} label={window.t("کد پستی")}
align="left" align="left"
defaultValue={profile} defaultValue={profile}
/> />
@ -376,7 +376,7 @@ class NewProfile extends Component {
<div className="mb-2"> <div className="mb-2">
<TextArea <TextArea
parent={this} parent={this}
label={"آدرس محل سکونت"} label={window.t("آدرس محل سکونت")}
name="address" name="address"
/> />
</div> </div>
@ -398,31 +398,31 @@ class NewProfile extends Component {
<Upload name="file" parent={this} /> <Upload name="file" parent={this} />
<Input <Input
name="firstName" name="firstName"
label="نام" label=window.t("نام")
parent={this} parent={this}
onInput={this.forcePersian} onInput={this.forcePersian}
/> />
<Input <Input
name="lastName" name="lastName"
label="نام خانوادگی" label=window.t("نام خانوادگی")
parent={this} parent={this}
onInput={this.forcePersian} onInput={this.forcePersian}
/> />
<Input <Input
name="username" name="username"
label="نام کاربری" label=window.t(window.t("نام کاربری"))
parent={this} parent={this}
align="left" align="left"
/> />
<Gender <Gender
options={["دختر", "پسر"]} options={[window.t("دختر"), window.t("پسر")]}
parent={this} parent={this}
name="gender" name="gender"
selectedOption={this.state.gender} selectedOption={this.state.gender}
/> />
<Input <Input
name="nationalId" name="nationalId"
label="کد ملی" label=window.t("کد ملی")
parent={this} parent={this}
align="left" align="left"
maxLength={10} maxLength={10}
@ -431,41 +431,41 @@ class NewProfile extends Component {
<Birthdate /> <Birthdate />
<Gender <Gender
parent={this} parent={this}
options={["معلم", "دانش آموز"]} options={[window.t("معلم"), window.t("دانش آموز")]}
name="userRoleId" name="userRoleId"
selectedOption={this.state.userRoleId} selectedOption={this.state.userRoleId}
/> />
{this.state.userRoleId === "دانش آموز" ? ( {this.state.userRoleId === window.t("دانش آموز") ? (
<Select <Select
parent={this} parent={this}
options={grades} options={grades}
name="gradeId" name="gradeId"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
/> />
) : null} ) : null}
{this.state.userRoleId === "معلم" ? ( {this.state.userRoleId === window.t("معلم") ? (
<MultipleSelector <MultipleSelector
parent={this} parent={this}
options={grades} options={grades}
name="gradeId" name="gradeId"
label={"پایه تحصیلی"} label={window.t(window.t("پایه تحصیلی"))}
selectedOptions={this.state.gradeId} selectedOptions={this.state.gradeId}
/> />
) : null} ) : null}
{this.state.userRoleId === "دانش آموز" && {this.state.userRoleId === window.t("دانش آموز") &&
Number(this.state.gradeId) > 9 ? ( Number(this.state.gradeId) > 9 ? (
<Select <Select
parent={this} parent={this}
options={[ options={[
"ریاضی", window.t("ریاضی"),
"تجربی", window.t("تجربی"),
"انسانی", window.t("انسانی"),
"فنی حرفهای", window.t("فنی حرفهای"),
"کاردانش", window.t("کاردانش"),
"معارف", window.t("معارف"),
]} ]}
name="field" name="field"
label={"رشته تحصیلی"} label={window.t("رشته تحصیلی")}
selectedOptions={this.state.gradeId} selectedOptions={this.state.gradeId}
/> />
) : null} ) : null}
@ -474,36 +474,36 @@ class NewProfile extends Component {
parent={this} parent={this}
options={["karaj", "tehran"]} options={["karaj", "tehran"]}
name="provinceId" name="provinceId"
label={"استان"} label={window.t("استان")}
/> />
<Select <Select
parent={this} parent={this}
options={["karaj", "tehran"]} options={["karaj", "tehran"]}
name="cityId" name="cityId"
label={"شهرستان"} label={window.t("شهرستان")}
/> />
<Select <Select
parent={this} parent={this}
options={["chaharbagh", "mahalat"]} options={["chaharbagh", "mahalat"]}
name="zoneId" name="zoneId"
label={"شهر/روستا"} label={window.t("شهر/روستا")}
/> />
{this.state.userRoleId === "دانش آموز" ? ( {this.state.userRoleId === window.t("دانش آموز") ? (
<Input parent={this} name="schoolId" label={"نام مدرسه"} /> <Input parent={this} name="schoolId" label={window.t("نام مدرسه")} />
) : null} ) : null}
{this.state.userRoleId === "معلم" ? ( {this.state.userRoleId === window.t("معلم") ? (
<Input parent={this} name="schoolId" label={"محل تدریس"} /> <Input parent={this} name="schoolId" label={window.t("محل تدریس")} />
) : null} ) : null}
{this.state.userRoleId === "معلم" ? ( {this.state.userRoleId === window.t("معلم") ? (
<Document parent={this} name="docFileIds" /> <Document parent={this} name="docFileIds" />
) : null} ) : null}
<Input <Input
parent={this} parent={this}
name="postalCode" name="postalCode"
label={"کد پستی"} label={window.t("کد پستی")}
align="left" align="left"
/> />
<TextArea parent={this} label={"آدرس محل سکونت"} name="address" /> <TextArea parent={this} label={window.t("آدرس محل سکونت")} name="address" />
<div className="mobile-auth-profile__footer d-flex justify-content-center"> <div className="mobile-auth-profile__footer d-flex justify-content-center">
<button onClick={() => this.onSubmit()}>ذخیره</button> <button onClick={() => this.onSubmit()}>ذخیره</button>
</div> </div>

@ -5,19 +5,19 @@ import { userFactor } from "~/Redux/actions";
import "./index.css"; import "./index.css";
import moment from "jalali-moment"; import moment from "jalali-moment";
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
class Orders extends Component { class Orders extends Component {
componentDidMount() { componentDidMount() {
@ -61,7 +61,7 @@ class Orders extends Component {
className="order-data-container-item-row1-order-status-text" className="order-data-container-item-row1-order-status-text"
> >
{ {
["پرداخت نشده", "در حال پردازش", "ارسال شد", "لغو شد"][ [window.t("پرداخت نشده"), window.t("در حال پردازش"), window.t(window.t("ارسال شد")), window.t("لغو شد")][
item.condition item.condition
] ]
} }

@ -107,7 +107,7 @@ function AddToCart(props) {
style={{ fontSize: fontSize.desktop.button, opacity: 0.3 }} style={{ fontSize: fontSize.desktop.button, opacity: 0.3 }}
className="product-addtocart__box--digitalButton" className="product-addtocart__box--digitalButton"
> >
{page === "digital" ? "کتاب چاپی" : "نسخه الکترونیک"} {page === "digital" ? "کتاب چاپی" : window.t("نسخه الکترونیک")}
<img src={ebook_blue} alt="" /> <img src={ebook_blue} alt="" />
</Link> </Link>
<button <button
@ -124,7 +124,7 @@ function AddToCart(props) {
count: 1, count: 1,
}); });
else { else {
toast.info("جهت ادامه فرآیند خرید وارد حساب خود شوید"); toast.info(window.t("جهت ادامه فرآیند خرید وارد حساب خود شوید"));
localStorage.setItem("afterLogin", window.location.pathname); localStorage.setItem("afterLogin", window.location.pathname);
localStorage.setItem( localStorage.setItem(
"pushToCart", "pushToCart",

@ -40,7 +40,7 @@ export default function Comment(props) {
className="comment__user" className="comment__user"
style={{ fontSize: fontSize.desktop.strong }} style={{ fontSize: fontSize.desktop.strong }}
> >
{comment.username || "کاربر میهمان"} {comment.username || window.t("کاربر میهمان")}
</strong> </strong>
<p className="comment__text" style={{ fontSize: fontSize.desktop.p }}> <p className="comment__text" style={{ fontSize: fontSize.desktop.p }}>
{comment.text} {comment.text}

@ -16,7 +16,7 @@ const Modal = (props) => {
<div className="modal__display"> <div className="modal__display">
{ {
displayed.type === 'image' ? displayed.type === 'image' ?
<img src={displayed.value} alt="عکس" /> : null <img src={displayed.value} alt=window.t("عکس") /> : null
} }
{ {
displayed.type === 'film' ? displayed.type === 'film' ?
@ -54,7 +54,7 @@ const Item = (props) => {
<div className="modal-carousel-item"> <div className="modal-carousel-item">
{ {
props.data.type === 'image' ? props.data.type === 'image' ?
<img src={props.data.value} alt="عکس" /> : null <img src={props.data.value} alt=window.t("عکس") /> : null
} }
{ {
props.data.type === 'film' ? props.data.type === 'film' ?

@ -19,7 +19,7 @@ export default function Gallery(props) {
{selectedMedia.type === "image" ? ( {selectedMedia.type === "image" ? (
<img <img
src={`https://dnvn.ir/api/v1/file/${selectedMedia.id}`} src={`https://dnvn.ir/api/v1/file/${selectedMedia.id}`}
alt={"عکس"} alt={window.t("عکس")}
/> />
) : null} ) : null}
{selectedMedia.type === "film" ? <Video /> : null} {selectedMedia.type === "film" ? <Video /> : null}
@ -88,7 +88,7 @@ const Item = (props) => {
className="product-gallery-item d-flex" className="product-gallery-item d-flex"
> >
{item.type === "image" ? ( {item.type === "image" ? (
<img src={`https://dnvn.ir/api/v1/file/${item.id}`} alt={"عکس"} /> <img src={`https://dnvn.ir/api/v1/file/${item.id}`} alt={window.t("عکس")} />
) : null} ) : null}
{item.type === "film" ? ( {item.type === "film" ? (
<Video fileId={`https://dnvn.ir/api/v1/file/${item.id}`} /> <Video fileId={`https://dnvn.ir/api/v1/file/${item.id}`} />

@ -74,7 +74,7 @@ function SimpleModal(props) {
کامنت خود را وارد کرده و دکمه ثبت را بزنید. کامنت خود را وارد کرده و دکمه ثبت را بزنید.
</h2> </h2>
<textarea <textarea
placeholder="متن پیام" placeholder=window.t("متن پیام")
name="description" name="description"
rows="5" rows="5"
onChange={(e) => setText(e.target.value)} onChange={(e) => setText(e.target.value)}

@ -30,19 +30,19 @@ import "./index.scss";
const maxDesktopSize = 1250; const maxDesktopSize = 1250;
const maxMobileSize = 550; const maxMobileSize = 550;
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
const fontSize = { const fontSize = {
desktop: { desktop: {
@ -64,7 +64,7 @@ function Addbutton({ page, info, pushToCart, userId }) {
} }
let productId = localStorage.getItem("pushToCart"); let productId = localStorage.getItem("pushToCart");
if (productId) { if (productId) {
toast.info("جهت ادامه فرآیند خرید وارد حساب خود شوید"); toast.info(window.t("جهت ادامه فرآیند خرید وارد حساب خود شوید"));
localStorage.removeItem("pushToCart"); localStorage.removeItem("pushToCart");
pushToCart({ pushToCart({
@ -85,7 +85,7 @@ function Addbutton({ page, info, pushToCart, userId }) {
count: 1, count: 1,
}); });
else { else {
toast.info("جهت ادامه فرآیند خرید وارد حساب خود شوید"); toast.info(window.t("جهت ادامه فرآیند خرید وارد حساب خود شوید"));
localStorage.setItem("afterLogin", window.location.pathname); localStorage.setItem("afterLogin", window.location.pathname);
localStorage.setItem( localStorage.setItem(
"pushToCart", "pushToCart",
@ -145,7 +145,7 @@ class Product extends Component {
<Info <Info
subTitle={`پایه ${grades[info.gradeId]}`} subTitle={`پایه ${grades[info.gradeId]}`}
title={`${info.name} ${grades[info.gradeId]}`} title={`${info.name} ${grades[info.gradeId]}`}
description={info.description || "توضیحات محصول خالیست"} description={info.description || window.t("توضیحات محصول خالیست")}
/> />
<AddToCart <AddToCart
@ -169,7 +169,7 @@ class Product extends Component {
</h3> </h3>
<button onClick={() => this.handleOpenComment()}> <button onClick={() => this.handleOpenComment()}>
ارسال نظر ارسال نظر
<img src={send_comment} alt="ارسال نظر" /> <img src={send_comment} alt=window.t("ارسال نظر") />
</button> </button>
</div> </div>
@ -217,7 +217,7 @@ class Product extends Component {
info.name info.name
} پایه ${grades[info.gradeId]}`}</h1> } پایه ${grades[info.gradeId]}`}</h1>
<h2 style={{ fontSize: fontSize.mobile.h2 }}> <h2 style={{ fontSize: fontSize.mobile.h2 }}>
{page !== "digital" ? "نسخه چاپی" : "نسخه الکترونیک"} {page !== "digital" ? window.t("نسخه چاپی") : window.t("نسخه الکترونیک")}
</h2> </h2>
<h3 style={{ fontSize: fontSize.mobile.h1 }}> <h3 style={{ fontSize: fontSize.mobile.h1 }}>
{page === "digital" {page === "digital"
@ -242,7 +242,7 @@ class Product extends Component {
className="mobile-product__header--digitalButton" className="mobile-product__header--digitalButton"
style={{ fontSize: fontSize.mobile.a, opacity: 0.3 }} style={{ fontSize: fontSize.mobile.a, opacity: 0.3 }}
> >
{page === "digital" ? "نسخه چاپی" : "نسخه الکترونیک"} {page === "digital" ? window.t("نسخه چاپی") : window.t("نسخه الکترونیک")}
</Link> </Link>
<Link <Link
to={ to={
@ -250,7 +250,7 @@ class Product extends Component {
} }
onClick={() => onClick={() =>
!info.sampleFileId !info.sampleFileId
? toast.info("برای این کتاب نمونهای درج نشده است.") ? toast.info(window.t("برای این کتاب نمونهای درج نشده است."))
: null : null
} }
className="mobile-product__header--purchase" className="mobile-product__header--purchase"
@ -271,7 +271,7 @@ class Product extends Component {
<div className="mobile-product__abstraction d-flex flex-column"> <div className="mobile-product__abstraction d-flex flex-column">
<h3 style={{ fontSize: fontSize.mobile.h3 }}>معرفی کتاب</h3> <h3 style={{ fontSize: fontSize.mobile.h3 }}>معرفی کتاب</h3>
<p style={{ fontSize: fontSize.mobile.p }}> <p style={{ fontSize: fontSize.mobile.p }}>
{info.description || "توضیحات محصول خالیست"} {info.description || window.t("توضیحات محصول خالیست")}
</p> </p>
</div> </div>
<div className="mobile-product__modules d-flex flex-column"> <div className="mobile-product__modules d-flex flex-column">
@ -299,7 +299,7 @@ class Product extends Component {
</h3> </h3>
<button onClick={() => this.handleOpenComment()}> <button onClick={() => this.handleOpenComment()}>
ارسال نظر ارسال نظر
<img src={send_comment} alt="ارسال نظر" /> <img src={send_comment} alt=window.t("ارسال نظر") />
</button> </button>
</div> </div>
<div className="mobile-product__comments--list d-flex"> <div className="mobile-product__comments--list d-flex">

@ -20,14 +20,14 @@ export default class Filtesrs extends React.Component {
name="subject" name="subject"
parent={parent} parent={parent}
data={parent.props.subjects} data={parent.props.subjects}
title="دسته بندی موضوعی" title=window.t("دسته بندی موضوعی")
theme="#D7FF17" theme="#D7FF17"
/> />
<TypicalFilters <TypicalFilters
name="level" name="level"
parent={parent} parent={parent}
data={parent.props.levels} data={parent.props.levels}
title="پایه تحصیلی" title=window.t(window.t("پایه تحصیلی"))
theme="#FF8917" theme="#FF8917"
/> />
</div> </div>

@ -10,19 +10,19 @@ import { connect } from "react-redux";
import { userProduct } from "~/Redux/actions"; import { userProduct } from "~/Redux/actions";
import "./index.scss"; import "./index.scss";
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
function Product(props) { function Product(props) {
@ -53,7 +53,7 @@ function Product(props) {
<img <img
className="pimg" className="pimg"
src={`https://dnvn.ir/api/v1/file/${product.fileIds}`} src={`https://dnvn.ir/api/v1/file/${product.fileIds}`}
alt={"عکس مجصول"} alt={window.t("عکس مجصول")}
/> />
<div className="mobile-products-product__info d-flex flex-column"> <div className="mobile-products-product__info d-flex flex-column">
<h1>{`${product.name} پایه ${grades[product.gradeId]}`}</h1> <h1>{`${product.name} پایه ${grades[product.gradeId]}`}</h1>
@ -157,7 +157,7 @@ function Product(props) {
count: 1, count: 1,
}); });
else { else {
toast.info("جهت ادامه فرآیند خرید وارد حساب خود شوید"); toast.info(window.t("جهت ادامه فرآیند خرید وارد حساب خود شوید"));
localStorage.setItem("afterLogin", window.location.pathname); localStorage.setItem("afterLogin", window.location.pathname);
localStorage.setItem("pushToCart", product.product[0].id); localStorage.setItem("pushToCart", product.product[0].id);
Navigate({ path: "/auth" }); Navigate({ path: "/auth" });

@ -48,9 +48,9 @@ export default function CustomizedSelects(props) {
id="demo-customized-select-native" id="demo-customized-select-native"
value={props.parent.state[props.name]} value={props.parent.state[props.name]}
onChange={(e) => onChange={(e) =>
e.target.value !== "نام کتاب" && e.target.value !== window.t("نام کتاب") &&
e.target.value !== "مرتب سازی" && e.target.value !== window.t("مرتب سازی") &&
e.target.value !== "پایه تحصیلی" e.target.value !== window.t(window.t("پایه تحصیلی"))
? props.parent.setState({ ? props.parent.setState({
selectedFilters: { selectedFilters: {
...props.parent.state.selectedFilters, ...props.parent.state.selectedFilters,

@ -54,7 +54,7 @@ class Products extends Component {
window.location.search.length window.location.search.length
) === "cart" ) === "cart"
) { ) {
toast.info("ابتدا یک محصول به سبد خریدتان اضافه کنید."); toast.info(window.t("ابتدا یک محصول به سبد خریدتان اضافه کنید."));
} }
} }
@ -92,10 +92,10 @@ class Products extends Component {
<input <input
type="search" type="search"
style={{ fontSize: 15 }} style={{ fontSize: 15 }}
placeholder={"جستجو"} placeholder={window.t(window.t("جستجو"))}
onChange={(e) => this.handleProductSearch(e.target.value)} onChange={(e) => this.handleProductSearch(e.target.value)}
/> />
<img src={navbarSearch} alt="جستجو" /> <img src={navbarSearch} alt=window.t(window.t("جستجو")) />
</div> </div>
<div className="mobile-products__filters d-flex"> <div className="mobile-products__filters d-flex">
<div className="d-flex"> <div className="d-flex">
@ -155,5 +155,5 @@ export default connect(
)(Products); )(Products);
Products.defaultProps = { Products.defaultProps = {
sortItems: ["پرفروش ترین", "جدیدترین"], sortItems: ["پرفروش ترین", window.t("جدیدترین")],
}; };

@ -55,7 +55,7 @@ export default function Dropdown(props) {
style={{ fontSize: fontSize.desktop.input }} style={{ fontSize: fontSize.desktop.input }}
onChange={(e) => handleSearch(e.target.value)} onChange={(e) => handleSearch(e.target.value)}
/> />
<img src={navbarSearch} alt="جستجو" /> <img src={navbarSearch} alt=window.t(window.t("جستجو")) />
</div> </div>
<ul> <ul>
{search {search
@ -70,10 +70,10 @@ export default function Dropdown(props) {
Dropdown.defaultProps = { Dropdown.defaultProps = {
subjects: [ subjects: [
{ id: 0, name: "مقدمه" }, { id: 0, name: window.t("مقدمه") },
{ id: 1, name: "سخنی با خوانندگان" }, { id: 1, name: window.t("سخنی با خوانندگان") },
{ id: 2, name: "آتشفشانها و اقیانوسها" }, { id: 2, name: window.t("آتشفشانها و اقیانوسها") },
{ id: 3, name: "نحوه جدایی صفحات کره" }, { id: 3, name: window.t("نحوه جدایی صفحات کره") },
], ],
}; };

@ -27,18 +27,18 @@ function Navigate({ path }) {
} }
const maxDesktopSize = 1250; const maxDesktopSize = 1250;
const grades = [ const grades = [
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
class QR extends Component { class QR extends Component {
state = { state = {
@ -224,7 +224,7 @@ class QR extends Component {
<div> <div>
<img <img
src={exit} src={exit}
alt="انصراف" alt=window.t("انصراف")
onClick={() => onClick={() =>
// this.props.logout({}) // this.props.logout({})
this.setState({ menu: !this.state.menu }) this.setState({ menu: !this.state.menu })

@ -5,18 +5,18 @@ import "./index.scss";
const grades = [ const grades = [
"0", "0",
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
export default function LastQR(props) { export default function LastQR(props) {

@ -45,7 +45,7 @@ class QRModal extends Component {
<div className="d-flex" style={{ justifyContent: "center" }}> <div className="d-flex" style={{ justifyContent: "center" }}>
<Input <Input
name="pageNumber" name="pageNumber"
// label="نام" // label=window.t("نام")
parent={this} parent={this}
defaultValue={pageNumber} defaultValue={pageNumber}
maxLength={3} maxLength={3}
@ -63,7 +63,7 @@ class QRModal extends Component {
"/qr?id=" + (pageNumber ? "oloom4-" + pageNumber : tail) "/qr?id=" + (pageNumber ? "oloom4-" + pageNumber : tail)
} }
> >
{hasZ10 ? "علوم چهارم" : "تایید"} {hasZ10 ? window.t("علوم چهارم") : window.t("تایید")}
</Link> </Link>
{hasZ10 ? ( {hasZ10 ? (
<Link className="button" to={"/qr?id=" + tail}> <Link className="button" to={"/qr?id=" + tail}>
@ -105,7 +105,7 @@ class QRModal extends Component {
</span> </span>
<Input <Input
name="pageNumber" name="pageNumber"
// label="نام" // label=window.t("نام")
parent={this} parent={this}
defaultValue={pageNumber} defaultValue={pageNumber}
maxLength={3} maxLength={3}
@ -123,7 +123,7 @@ class QRModal extends Component {
"/qr?id=" + (pageNumber ? "oloom4-" + pageNumber : tail) "/qr?id=" + (pageNumber ? "oloom4-" + pageNumber : tail)
} }
> >
{hasZ10 ? "علوم چهارم" : "تایید"} {hasZ10 ? window.t("علوم چهارم") : window.t("تایید")}
</Link> </Link>
{hasZ10 ? ( {hasZ10 ? (
<Link className="button" to={"/qr?id=" + tail}> <Link className="button" to={"/qr?id=" + tail}>

@ -35,7 +35,7 @@ export default function Sample({ fileId }) {
> >
<Page <Page
pageNumber={pageNumber} pageNumber={pageNumber}
noData="نمونه ای برای این محصول درج نشده است" noData=window.t("نمونه ای برای این محصول درج نشده است")
/> />
</Document> </Document>
<p> <p>

@ -37,7 +37,7 @@ export default function Document(props) {
margin: "auto", margin: "auto",
}} }}
> >
{parent.state.file?.name || "تصویر بارگزاری شد"} {parent.state.file?.name || window.t("تصویر بارگزاری شد")}
</span> </span>
) : ( ) : (
<span style={{ fontSize: fontSize.mobile.span }}> <span style={{ fontSize: fontSize.mobile.span }}>
@ -64,7 +64,7 @@ export default function Document(props) {
margin: "auto", margin: "auto",
}} }}
> >
{parent.state.file?.name || "فایل ثبت شد"} {parent.state.file?.name || window.t("فایل ثبت شد")}
</span> </span>
) : ( ) : (
<span <span

@ -11,19 +11,19 @@ import { connect } from "react-redux";
const maxDesktopSize = 1250; const maxDesktopSize = 1250;
const maxMobileSize = 550; const maxMobileSize = 550;
const grades = [ const grades = [
"پیش دبستان", window.t("پیش دبستان"),
"اول", window.t("اول"),
"دوم", window.t("دوم"),
"سوم", window.t("سوم"),
"چهارم", window.t("چهارم"),
"پنجم", window.t("پنجم"),
"ششم", window.t("ششم"),
"هفتم", window.t("هفتم"),
"هشتم", window.t("هشتم"),
"نهم", window.t("نهم"),
"دهم", window.t("دهم"),
"یازدهم", window.t("یازدهم"),
"دوازدهم", window.t("دوازدهم"),
]; ];
const fontSize = { const fontSize = {
desktop: { desktop: {
@ -81,7 +81,7 @@ class Support extends Component {
} }
render() { render() {
let { status } = this.props; let { status } = this.props;
let opt = ["واحد مورد نظر", "واحد فروش", "واحد فنی", "واحد محتوایی"]; let opt = [window.t("واحد مورد نظر"), window.t("واحد فروش"), window.t("واحد فنی"), window.t("واحد محتوایی")];
opt = opt.map((e) => [e, e]); opt = opt.map((e) => [e, e]);
return ( return (
<> <>
@ -96,11 +96,11 @@ class Support extends Component {
{status ? null : ( {status ? null : (
<> <>
<Input <Input
label={"نام و نام خانوادگی"} label={window.t("نام و نام خانوادگی")}
name={"name"} name={"name"}
parent={this} parent={this}
/> />
<Input label={"شماره تماس"} name={"cellphone"} parent={this} /> <Input label={window.t(window.t(window.t("شماره تماس")))} name={"cellphone"} parent={this} />
</> </>
)} )}
<Select <Select
@ -113,7 +113,7 @@ class Support extends Component {
} }
parent={this} parent={this}
/> />
{this.state.unit === "واحد محتوایی" ? ( {this.state.unit === window.t("واحد محتوایی") ? (
<Select <Select
required required
name="bookId" name="bookId"
@ -132,7 +132,7 @@ class Support extends Component {
) : null} ) : null}
<Input label={"موضوع "} name={"subject"} parent={this} required /> <Input label={"موضوع "} name={"subject"} parent={this} required />
<Input <Input
label={"متن"} label={window.t("متن")}
name={"text"} name={"text"}
parent={this} parent={this}
multiline multiline

@ -8707,7 +8707,7 @@ mapir-react-component@^1.8.1:
"material-ui-audio-player@https://github.com/RezaAshrafi77/material-ui-audio-player.git": "material-ui-audio-player@https://github.com/RezaAshrafi77/material-ui-audio-player.git":
version "1.6.6" version "1.6.6"
resolved "git+ssh://git@github.com/RezaAshrafi77/material-ui-audio-player.git#2b14d5358156644e8a5995250a3396dee9043e06" resolved "https://github.com/RezaAshrafi77/material-ui-audio-player.git#2b14d5358156644e8a5995250a3396dee9043e06"
dependencies: dependencies:
classnames "^2.2.6" classnames "^2.2.6"

Loading…
Cancel
Save