update 11 files

temp
mahdi 2 years ago
parent 14f4991dcd
commit 14975386a8
  1. 38
      src/views/Product/index.js
  2. 8
      src/views/Products/layouts/Desktop/Main.js
  3. 12
      src/views/Products/layouts/Desktop/Sidebar.js
  4. 4
      src/views/Products/layouts/Mobile/Header.js
  5. 31
      src/views/Products/layouts/Mobile/Main.js
  6. 10
      src/views/QR/Content/components/Links.js
  7. 40
      src/views/QR/Content/components/Tab.js
  8. 35
      src/views/QR/Content/index.js
  9. 26
      src/views/ShoppingCart/Code/index.js
  10. 18
      src/views/ShoppingCart/Product/index.js

@ -74,7 +74,7 @@ export const Product = ({
{book?.name} {book?.name}
</h1> </h1>
<div className="text-green7B text-tiny dark:text-greenBA"> <div className="text-green7B text-tiny dark:text-greenBA">
{"پایه" + " " + grades[book?.gradeId]} {window.t("پایه") + " " + grades[book?.gradeId]}
</div> </div>
</div> </div>
</header> </header>
@ -83,23 +83,27 @@ export const Product = ({
style={{ direction: "ltr" }} style={{ direction: "ltr" }}
> >
<li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white"> <li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white">
{book?.pagesNum} <br /> صفحه {book?.pagesNum} <br /> {window.t("صفحه")}
</li> </li>
<li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white"> <li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white">
{"فیزیکی - دیجیتالی"} <br /> در دسترس {window.t("فیزیکی - دیجیتالی")}
<br /> {window.t("در دسترس")}
</li> </li>
<li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white"> <li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white">
{book?.rate} <br /> امتیاز {book?.rate} <br />
{window.t("امتیاز")}
</li> </li>
</ul> </ul>
<h2 className="text-green7B text-base font-semibold mt-10 dark:text-greenBA"> <h2 className="text-green7B text-base font-semibold mt-10 dark:text-greenBA">
نسخه محصول را انتخاب کنید {window.t("نسخه محصول را انتخاب کنید")}
</h2> </h2>
<div className="w-full flex flex-row justify-between items-center mt-5"> <div className="w-full flex flex-row justify-between items-center mt-5">
<ButtonBetween <ButtonBetween
width="100%" width="100%"
item={"خرید نسخه فیزیکی کتاب"} item={window.t("خرید نسخه فیزیکی کتاب")}
status={separate(book?.product[1]?.price) + " " + "تومان"} status={
separate(book?.product[1]?.price) + " " + window.t("تومان")
}
onClick={() => onClick={() =>
userId userId
? pushToCart({ ? pushToCart({
@ -107,15 +111,17 @@ export const Product = ({
userId, userId,
count: 1, count: 1,
}) })
: toast.info("ابتدا وارد حساب کاربری خود شوید.") : toast.info(window.t("ابتدا وارد حساب کاربری خود شوید"))
} }
/> />
</div> </div>
<div className="w-full flex flex-row justify-between items-center mt-4 gap-2"> <div className="w-full flex flex-row justify-between items-center mt-4 gap-2">
<ButtonBetween <ButtonBetween
width="72%" width="72%"
item={"خرید نسخه دیجیتال کتاب"} item={window.t("خرید نسخه دیجیتال کتاب")}
status={separate(book?.product[0]?.price) + " " + "تومان"} status={
separate(book?.product[0]?.price) + " " + window.t("تومان")
}
onClick={() => onClick={() =>
userId userId
? pushToCart({ ? pushToCart({
@ -123,7 +129,7 @@ export const Product = ({
userId, userId,
count: 1, count: 1,
}) })
: toast.info("ابتدا وارد حساب کاربری خود شوید.") : toast.info(window.t("ابتدا وارد حساب کاربری خود شوید."))
} }
/> />
<a <a
@ -131,14 +137,16 @@ export const Product = ({
className="flex-1 border-2 border-solid text-sm border-green-500 bg-green-50 bg-opacity-70 rounded-sm font-bold text-green-700 text-center" className="flex-1 border-2 border-solid text-sm border-green-500 bg-green-50 bg-opacity-70 rounded-sm font-bold text-green-700 text-center"
style={{ padding: "18px 0px" }} style={{ padding: "18px 0px" }}
> >
مشاهده نمونه {window.t("مشاهده نمونه")}
</a> </a>
</div> </div>
<div className="w-full flex flex-row justify-between items-center mt-4"> <div className="w-full flex flex-row justify-between items-center mt-4">
<ButtonBetween <ButtonBetween
width="72%" width="72%"
item={"خرید نسخه ویدئویی کتاب"} item={window.t("خرید نسخه ویدئویی کتاب")}
status={separate(book?.product[2]?.price) + " " + "تومان"} status={
separate(book?.product[2]?.price) + " " + window.t("تومان")
}
onClick={() => onClick={() =>
userId userId
? pushToCart({ ? pushToCart({
@ -146,7 +154,7 @@ export const Product = ({
userId, userId,
count: 1, count: 1,
}) })
: toast.info("ابتدا وارد حساب کاربری خود شوید.") : toast.info(window.t("ابتدا وارد حساب کاربری خود شوید."))
} }
/> />
<ButtonBetween <ButtonBetween

@ -73,15 +73,15 @@ export const Main = ({
byAvailableFilter = bySubjectFilter; byAvailableFilter = bySubjectFilter;
} }
if (sort) { if (sort) {
if (sort === "ارزان ترین") { if (sort === window.t("ارزان ترین")) {
bySortFilter = byAvailableFilter?.sort( bySortFilter = byAvailableFilter?.sort(
(a, b) => a.product[type].price - b.product[type].price (a, b) => a.product[type].price - b.product[type].price
); );
} else if (sort === "محبوب ترین") { } else if (sort === window.t("محبوب ترین")) {
bySortFilter = byAvailableFilter?.sort( bySortFilter = byAvailableFilter?.sort(
(a, b) => a.product[type].rate - b.product[type].rate (a, b) => a.product[type].rate - b.product[type].rate
); );
} else if (sort === "جدیدترین") { } else if (sort === window.t("جدیدترین")) {
bySortFilter = byAvailableFilter?.sort( bySortFilter = byAvailableFilter?.sort(
(a, b) => moment(a.createdAt) - moment(b.createdAt) (a, b) => moment(a.createdAt) - moment(b.createdAt)
); );
@ -168,7 +168,7 @@ export const Main = ({
</g> </g>
</svg> </svg>
<span className="text-tiny text-greenBA font-bold"> <span className="text-tiny text-greenBA font-bold">
{"مرتب سازی" + "" + ":"} {window.t("مرتب سازی") + "" + ":"}
</span> </span>
</div> </div>
<ul className="flex py-0 flex-1 gap-4"> <ul className="flex py-0 flex-1 gap-4">

@ -116,7 +116,7 @@ export const Sidebar = ({
}} }}
> >
<div className="flex justify-between items-center mb-10"> <div className="flex justify-between items-center mb-10">
<strong className="text-lg text-green4F">فیلترها</strong> <strong className="text-lg text-green4F">{window.t("فیلترها")}</strong>
{filterLength > 0 && ( {filterLength > 0 && (
<span <span
className="text-tiny text-greenBA bg-greenBA bg-opacity-20 rounded-full px-3 py-2" className="text-tiny text-greenBA bg-greenBA bg-opacity-20 rounded-full px-3 py-2"
@ -130,30 +130,30 @@ export const Sidebar = ({
}) })
} }
> >
{filterLength + " " + "فیلتر"} {filterLength + " " + window.t("فیلتر")}
</span> </span>
)} )}
</div> </div>
<div className="flex flex-col divide-y divide-solid divide-gray-200"> <div className="flex flex-col divide-y divide-solid divide-gray-200">
<Dropdown <Dropdown
list={productTypes} list={productTypes}
title="نوع محصول" title={window.t("نوع محصول")}
name="productType" name="productType"
active={filterOptions.productType} active={filterOptions.productType}
/> />
<Dropdown <Dropdown
list={Object.values(levels)} list={Object.values(levels)}
title={"پایه تحصیلی"} title={window.t("پایه تحصیلی")}
name="grade" name="grade"
active={filterOptions.grade} active={filterOptions.grade}
/> />
<Dropdown <Dropdown
list={subjects} list={subjects}
title={"عنوان کتاب"} title={window.t("عنوان کتاب")}
name="subject" name="subject"
active={filterOptions.subject} active={filterOptions.subject}
/> />
<CkeckItem title="فقط کالاهای موجود" name={"available"} /> <CkeckItem title={window.t("فقط کالاهای موجود")} name={"available"} />
</div> </div>
</div> </div>
); );

@ -37,7 +37,7 @@ export const Header = ({
borderColor="border-grayDB dark:border-gray45" borderColor="border-grayDB dark:border-gray45"
backgroundColor="bg-gray-100" backgroundColor="bg-gray-100"
onChange={(name, value) => onChange={(name, value) =>
value === "نوع محصول" value === window.t("نوع محصول")
? setFilterOptions({ ...filterOptions, [name]: null }) ? setFilterOptions({ ...filterOptions, [name]: null })
: setFilterOptions({ ...filterOptions, [name]: value }) : setFilterOptions({ ...filterOptions, [name]: value })
} }
@ -50,7 +50,7 @@ export const Header = ({
borderColor="border-grayDB dark:border-gray45" borderColor="border-grayDB dark:border-gray45"
backgroundColor="bg-gray-100" backgroundColor="bg-gray-100"
onChange={(name, value) => onChange={(name, value) =>
value === "پایه تحصیلی" value === window.t("پایه تحصیلی")
? setFilterOptions({ ...filterOptions, [name]: null }) ? setFilterOptions({ ...filterOptions, [name]: null })
: setFilterOptions({ ...filterOptions, [name]: value }) : setFilterOptions({ ...filterOptions, [name]: value })
} }

@ -55,7 +55,7 @@ export const Main = ({ books, filterOptions, grades }) => {
bySearchFilter = byAvailableFilter; bySearchFilter = byAvailableFilter;
} }
return filterOptions.productType === "دوره ویدئویی" return filterOptions.productType === window.t("دوره ویدئویی")
? bySearchFilter?.map((product, index) => ( ? bySearchFilter?.map((product, index) => (
<Link <Link
to={"/videos/" + product?.id} to={"/videos/" + product?.id}
@ -81,16 +81,18 @@ export const Main = ({ books, filterOptions, grades }) => {
{product?.name} {product?.name}
</strong> </strong>
<span className="text-tiny lg:text-sm text-green7B dark:text-greenBA font-light mb-4"> <span className="text-tiny lg:text-sm text-green7B dark:text-greenBA font-light mb-4">
{"پایه" + " " + grades[product?.gradeId]} {window.t("پایه") + " " + grades[product?.gradeId]}
</span> </span>
<div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-tiny text-blue5F dark:text-white"> <div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-tiny text-blue5F dark:text-white">
{product?.product[2]?.price + " " + "تومان"} {product?.product[2]?.price + " " + window.t("تومان")}
</div> </div>
</Link> </Link>
)) ))
: bySearchFilter?.map((product) => ( : bySearchFilter?.map((product) => (
<> <>
{(productType ? productType === "کتاب دیجیتال" : true) && ( {(productType
? productType === window.t("کتاب دیجیتال")
: true) && (
<Link <Link
key={product?.product[0]?.id} key={product?.product[0]?.id}
to={"/products/" + product?.id} to={"/products/" + product?.id}
@ -101,17 +103,17 @@ export const Main = ({ books, filterOptions, grades }) => {
className="w-full rounded-md mb-3 object-contain" className="w-full rounded-md mb-3 object-contain"
/> />
<strong className="text-blue5F dark:text-white text-tiny font-bold lg:text-sm lg:font-medium mb-2"> <strong className="text-blue5F dark:text-white text-tiny font-bold lg:text-sm lg:font-medium mb-2">
{"کتاب دیجیتال" + " " + product?.name} {window.t("کتاب دیجیتال") + " " + product?.name}
</strong> </strong>
<span className="text-tiny lg:text-xs text-green7B dark:text-greenBA font-light mb-4"> <span className="text-tiny lg:text-xs text-green7B dark:text-greenBA font-light mb-4">
{"پایه" + " " + grades[product?.gradeId]} {window.t("پایه") + " " + grades[product?.gradeId]}
</span> </span>
<div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-sm text-blue5F dark:text-white"> <div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-sm text-blue5F dark:text-white">
{product?.product[0]?.price + " " + "تومان"} {product?.product[0]?.price + " " + window.t("تومان")}
</div> </div>
</Link> </Link>
)} )}
{(productType ? productType === "کتاب فیزیکی" : true) && ( {(productType ? productType === window.t("کتاب فیزیکی") : true) && (
<Link <Link
key={product?.product[1]?.id} key={product?.product[1]?.id}
to={"/products/" + product?.id} to={"/products/" + product?.id}
@ -120,15 +122,16 @@ export const Main = ({ books, filterOptions, grades }) => {
<img <img
src={"https://dnvn.ir/api/v1/file/" + product?.fileIds} src={"https://dnvn.ir/api/v1/file/" + product?.fileIds}
className="w-full rounded-md mb-3" className="w-full rounded-md mb-3"
alt=""
/> />
<strong className="text-blue5F dark:text-white text-tiny font-bold lg:text-sm lg:font-medium mb-2"> <strong className="text-blue5F dark:text-white text-tiny font-bold lg:text-sm lg:font-medium mb-2">
{"کتاب فیزیکی" + " " + product?.name} {window.t("کتاب فیزیکی") + " " + product?.name}
</strong> </strong>
<span className="text-tiny lg:text-xs text-green7B dark:text-greenBA font-light mb-4"> <span className="text-tiny lg:text-xs text-green7B dark:text-greenBA font-light mb-4">
{"پایه" + " " + grades[product?.gradeId]} {window.t("پایه") + " " + grades[product?.gradeId]}
</span> </span>
<div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-sm text-blue5F dark:text-white"> <div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-sm text-blue5F dark:text-white">
{product?.product[1]?.price + " " + "تومان"} {product?.product[1]?.price + " " + window.t("تومان")}
</div> </div>
</Link> </Link>
)} )}
@ -138,9 +141,9 @@ export const Main = ({ books, filterOptions, grades }) => {
return ( return (
<div className="h-full overflow-y-scroll w-full flex flex-wrap py-32"> <div className="h-full overflow-y-scroll w-full flex flex-wrap py-32">
{filterOptions?.productType === "دوره ویدئویی" && Items(2)} {filterOptions?.productType === window.t("دوره ویدئویی") && Items(2)}
{filterOptions?.productType === "کتاب دیجیتال" && Items(0)} {filterOptions?.productType === window.t("کتاب دیجیتال") && Items(0)}
{filterOptions?.productType === "کتاب فیزیکی" && Items(1)} {filterOptions?.productType === window.t("کتاب فیزیکی") && Items(1)}
{!filterOptions?.productType && Items(0)} {!filterOptions?.productType && Items(0)}
{filterLoading && ( {filterLoading && (
<div className="w-full h-screen flex justify-center items-center bg-white bg-opacity-20 backdrop-filter backdrop-blur-xl fixed left-0 top-0"> <div className="w-full h-screen flex justify-center items-center bg-white bg-opacity-20 backdrop-filter backdrop-blur-xl fixed left-0 top-0">

@ -6,14 +6,20 @@ export default function Links({ data }) {
return ( return (
<div className="w-full flex-row justify-between items-center rounded-md bg-yellow-100 bg-opacity-20 py-3 px-2 mt-5 relative dark:bg-opacity-10"> <div className="w-full flex-row justify-between items-center rounded-md bg-yellow-100 bg-opacity-20 py-3 px-2 mt-5 relative dark:bg-opacity-10">
<div className="flex flex-col"> <div className="flex flex-col">
<strong className="text-sm font-normal dark:text-white">لینک ها</strong> <strong className="text-sm font-normal dark:text-white">
{window.t("لینک ها")}
</strong>
{data.map((link, i) => ( {data.map((link, i) => (
<Link to="#" key={i} className="text-xs mt-1 dark:text-white"> <Link to="#" key={i} className="text-xs mt-1 dark:text-white">
{link} {link}
</Link> </Link>
))} ))}
</div> </div>
<img src={linkIcon} className="w-8 absolute left-2 top-1/2 transform -translate-y-1/2" /> <img
src={linkIcon}
className="w-8 absolute left-2 top-1/2 transform -translate-y-1/2"
alt=""
/>
</div> </div>
); );
} }

@ -21,7 +21,7 @@ export default function Tab({ data }) {
: "bg-white font-normal" : "bg-white font-normal"
}`} }`}
> >
تمامی محتوا {window.t("تمامی محتوا")}
</button> </button>
<button <button
onClick={() => setDataType("voice")} onClick={() => setDataType("voice")}
@ -31,7 +31,7 @@ export default function Tab({ data }) {
: "bg-white font-normal" : "bg-white font-normal"
}`} }`}
> >
صوت {window.t("صوت")}
</button> </button>
<button <button
onClick={() => setDataType("video")} onClick={() => setDataType("video")}
@ -41,7 +41,7 @@ export default function Tab({ data }) {
: "bg-white font-normal" : "bg-white font-normal"
}`} }`}
> >
ویدئو {window.t("ویدئو")}
</button> </button>
<button <button
onClick={() => setDataType("pdf")} onClick={() => setDataType("pdf")}
@ -51,7 +51,7 @@ export default function Tab({ data }) {
: "bg-white font-normal" : "bg-white font-normal"
}`} }`}
> >
پی دی اف {window.t("پی دی اف")}
</button> </button>
<button <button
onClick={() => setDataType("ppt")} onClick={() => setDataType("ppt")}
@ -61,7 +61,7 @@ export default function Tab({ data }) {
: "bg-white font-normal" : "bg-white font-normal"
}`} }`}
> >
پاور پوینت {window.t("پاور پوینت")}
</button> </button>
<button <button
onClick={() => setDataType("links")} onClick={() => setDataType("links")}
@ -71,18 +71,14 @@ export default function Tab({ data }) {
: "bg-white font-normal" : "bg-white font-normal"
}`} }`}
> >
لینک ها {window.t("لینک ها")}
</button> </button>
</div> </div>
<div className="flex flex-col w-full p-4"> <div className="flex flex-col w-full p-4">
{dataType === "all" && ( {dataType === "all" && (
<> <>
{data.voice && ( {data.voice && <Voice data={data?.voice} />}
<Voice data={data?.voice} /> {data.video && <Video data={data?.video} />}
)}
{data.video && (
<Video data={data?.video} />
)}
{data.ppt && <PPT data={data.ppt} />} {data.ppt && <PPT data={data.ppt} />}
{data.pdf && <PDF data={data.pdf} />} {data.pdf && <PDF data={data.pdf} />}
{data.links && <Links data={data.links} />} {data.links && <Links data={data.links} />}
@ -93,7 +89,9 @@ export default function Tab({ data }) {
{data.voice ? ( {data.voice ? (
<Voice data={data.voice} /> <Voice data={data.voice} />
) : ( ) : (
<p className="text-sm text-gray70">فایل صدا یافت نشد.</p> <p className="text-sm text-gray70">
{window.t("فایل صدا یافت نشد.")}
</p>
)} )}
</> </>
)} )}
@ -102,7 +100,9 @@ export default function Tab({ data }) {
{data.video ? ( {data.video ? (
<Video data={data.video} /> <Video data={data.video} />
) : ( ) : (
<p className="text-sm text-gray70">فایل تصویری یافت نشد.</p> <p className="text-sm text-gray70">
{window.t("فایل تصویری یافت نشد.")}
</p>
)} )}
</> </>
)} )}
@ -111,7 +111,9 @@ export default function Tab({ data }) {
{data.ppt ? ( {data.ppt ? (
<PPT data={data.ppt} /> <PPT data={data.ppt} />
) : ( ) : (
<p className="text-sm text-gray70">فایل پاورپوینت یافت نشد.</p> <p className="text-sm text-gray70">
{window.t("فایل پاورپوینت یافت نشد.")}
</p>
)} )}
</> </>
)} )}
@ -120,7 +122,9 @@ export default function Tab({ data }) {
{data.pdf ? ( {data.pdf ? (
<PDF data={data.pdf} /> <PDF data={data.pdf} />
) : ( ) : (
<p className="text-sm text-gray70">فایل پی دی اف یافت نشد.</p> <p className="text-sm text-gray70">
{window.t("فایل پی دی اف یافت نشد.")}
</p>
)} )}
</> </>
)} )}
@ -129,7 +133,9 @@ export default function Tab({ data }) {
{data.links ? ( {data.links ? (
<Links data={data.links} /> <Links data={data.links} />
) : ( ) : (
<p className="text-sm text-gray70">لینکی پیدا نشد.</p> <p className="text-sm text-gray70">
{window.t("لینکی پیدا نشد.")}
</p>
)} )}
</> </>
)} )}

@ -36,17 +36,19 @@ export const Content = ({
<span className="text-sm text-blueC0 mt-2 dark:text-greenBA"> <span className="text-sm text-blueC0 mt-2 dark:text-greenBA">
{grades[data?.book?.gradeId]} {grades[data?.book?.gradeId]}
</span> </span>
<p className="text-sm mt-2 text-blueC0 dark:text-greenBA">{`شما در حال مشاهده صفحه ${data?.qr?.pageNumber} هستید.`}</p> <p className="text-sm mt-2 text-blueC0 dark:text-greenBA">{`${window.t(
"شما در حال مشاهده صفحه"
)} ${data?.qr?.pageNumber} ${window.t("هستید.")}`}</p>
</div> </div>
</div> </div>
<Tab <Tab
data={{ data={{
voice: data?.qr?.content?.filter((obj) => obj.type === 'voice')[0], voice: data?.qr?.content?.filter((obj) => obj.type === "voice")[0],
video: data?.qr?.content?.filter((obj) => obj.type === 'video')[0], video: data?.qr?.content?.filter((obj) => obj.type === "video")[0],
pdf: data?.qr?.content?.filter((obj) => obj.type === 'pdf')[0], pdf: data?.qr?.content?.filter((obj) => obj.type === "pdf")[0],
ppt: data?.qr?.content?.filter((obj) => obj.type === 'ppt')[0], ppt: data?.qr?.content?.filter((obj) => obj.type === "ppt")[0],
links: data?.qr?.content?.filter((obj) => obj.type === 'links')[0], links: data?.qr?.content?.filter((obj) => obj.type === "links")[0],
}} }}
/> />
</div> </div>
@ -67,18 +69,21 @@ export default connect(mapStateToProps, mapDispatchToProps)(Content);
Content.defaultProps = { Content.defaultProps = {
data: { data: {
name: "ریاضیات گسسته خیلی پیشرفته", name: window.t("ریاضیات گسسته خیلی پیشرفته"),
grade: "پایه هفتم ابتدایی", grade: window.t("پایه هفتم ابتدایی"),
page: "67", page: "67",
percent: "62", percent: "62",
voice: { name: "استاد رضایی: فصل پنجم توضیح در مورد آتش فشان ها", file: 1 }, voice: {
video: { name: "ویدئوی آزمایش آتشفشان سرکه ای", file: 1 }, name: window.t("استاد رضایی: فصل پنجم توضیح در مورد آتش فشان ها"),
pdf: { name: "فایل پاورپوینت ارائه درس آتشفشان ها", file: 1 }, file: 1,
ppt: { name: "فایل پاورپوینت ارائه درس آتشفشان ها", file: 1 }, },
video: { name: window.t("ویدئوی آزمایش آتشفشان سرکه ای"), file: 1 },
pdf: { name: window.t("فایل پی دی اف ارائه درس آتشفشان ها"), file: 1 },
ppt: { name: window.t("فایل پاورپوینت ارائه درس آتشفشان ها"), file: 1 },
links: [ links: [
"وبسایت آموزشی دانوین", window.t("وبسایت آموزشی دانوین"),
"وبسایت رسمی مدیریت راهبردی کشور", window.t("وبسایت رسمی مدیریت راهبردی کشور"),
"سازمان تبلیغات صنایع سبک ", window.t("سازمان تبلیغات صنایع سبک "),
], ],
}, },
}; };

@ -7,31 +7,35 @@ function Code({ codeId, setCodeId, userId, factorId }) {
const setOff = () => { const setOff = () => {
setCodeId({ offCodeValue: value, userId: userId, id: factorId }); setCodeId({ offCodeValue: value, userId: userId, id: factorId });
} };
return ( return (
<div className="flex w-full flex-row border border-blueC0 border-solid rounded-md mt-3 mb-4 overflow-hidden lg:w-2/5 lg:mt-5"> <div className="flex w-full flex-row border border-blueC0 border-solid rounded-md mt-3 mb-4 overflow-hidden lg:w-2/5 lg:mt-5">
<input <input
type="text" type="text"
className="border-0 flex-1 text-right pr-3 font-medium text-tiny dark:bg-gray2077 placeholder:text-blue5F dark:text-white outline-none lg:text-base lg:font-bold" className="border-0 flex-1 text-right pr-3 font-medium text-tiny dark:bg-gray2077 placeholder:text-blue5F dark:text-white outline-none lg:text-base lg:font-bold"
placeholder={"کد تخفیف دارید ؟"} placeholder={window.t("کد تخفیف دارید ؟")}
/> />
<button className={"py-3 px-4 lg:py-4 text-tiny bg-blueC0 text-white border border-blueC0 border-solid lg:font-bold"} onClick={() => setOff()}>ثبت کد</button> <button
className={
"py-3 px-4 lg:py-4 text-tiny bg-blueC0 text-white border border-blueC0 border-solid lg:font-bold"
}
onClick={() => setOff()}
>
{window.t("ثبت کد")}
</button>
</div> </div>
); );
} }
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({
codeId: state.userFactor.info?.codeId, codeId: state.userFactor.info?.codeId,
userId: state.user.status.id, userId: state.user.status.id,
factorId: state.userFactor.info?.id, factorId: state.userFactor.info?.id,
}); });
const mapDispatchToProps = { const mapDispatchToProps = {
setCodeId: userFactor.update, setCodeId: userFactor.update,
} };
export default connect( export default connect(mapStateToProps, mapDispatchToProps)(Code);
mapStateToProps,
mapDispatchToProps
)(Code);

@ -22,10 +22,12 @@ function Product({ product, grades, pushToCart, isMobile, loading }) {
{product.product.book.name} {product.product.book.name}
</strong> </strong>
<span className="text-gray70 text-tiny mb-2 dark:text-greenBA"> <span className="text-gray70 text-tiny mb-2 dark:text-greenBA">
{"پایه" + " " + grades[product.product.book.gradeId]} {window.t("پایه") + " " + grades[product.product.book.gradeId]}
</span> </span>
<span className="text-gray70 text-tiny dark:text-greenBA"> <span className="text-gray70 text-tiny dark:text-greenBA">
{product.productType === 2 ? "نسخه فیزیکی" : "نسخه دیجیتال"} {product.productType === 2
? window.t("نسخه فیزیکی")
: window.t("نسخه دیجیتال")}
</span> </span>
</div> </div>
</div> </div>
@ -107,7 +109,8 @@ function Product({ product, grades, pushToCart, isMobile, loading }) {
</div> </div>
)} )}
<strong className="font-bold text-md text-blue5F dark:text-white"> <strong className="font-bold text-md text-blue5F dark:text-white">
{separate(product.product.price * product.count)}&nbsp;تومان {separate(product.product.price * product.count)}&nbsp;
{window.t("تومان")}
</strong> </strong>
</div> </div>
</div> </div>
@ -129,17 +132,20 @@ function Product({ product, grades, pushToCart, isMobile, loading }) {
<div className="flex flex-row items-center mt-4"> <div className="flex flex-row items-center mt-4">
<span className="w-2 h-2 bg-greenBA rounded-md ml-1"></span> <span className="w-2 h-2 bg-greenBA rounded-md ml-1"></span>
<div className="text-gray70 text-sm dark:text-greenBA"> <div className="text-gray70 text-sm dark:text-greenBA">
{"پایه" + " " + grades[product?.product?.book?.gradeId]} {window.t("پایه") + " " + grades[product?.product?.book?.gradeId]}
</div> </div>
<span className="w-2 h-2 bg-greenBA rounded-md mr-5 ml-1"></span> <span className="w-2 h-2 bg-greenBA rounded-md mr-5 ml-1"></span>
<div className="text-gray70 text-sm dark:text-greenBA"> <div className="text-gray70 text-sm dark:text-greenBA">
{product?.productType === 2 ? "نسخه فیزیکی" : "نسخه دیجیتال"} {product?.productType === 2
? window.t("نسخه فیزیکی")
: window.t("نسخه دیجیتال")}
</div> </div>
</div> </div>
<div className="flex flex-row items-center pl-4 mt-6"> <div className="flex flex-row items-center pl-4 mt-6">
<strong className="font-semibold text-xl text-blue5F dark:text-white"> <strong className="font-semibold text-xl text-blue5F dark:text-white">
&nbsp;{separate(product?.product?.price * product.count)} &nbsp;{separate(product?.product?.price * product.count)}
&nbsp;&nbsp;تومان &nbsp;&nbsp;
{window.t("تومان")}
</strong> </strong>
</div> </div>
</div> </div>

Loading…
Cancel
Save