Compare commits

...

2 Commits

Author SHA1 Message Date
Reza 157d4e8f0c reza added inital light mode 3 years ago
Reza a3c35eb82d reza changed home theme 3 years ago
  1. 9
      src/components/GradeFilter/index.scss
  2. 9
      src/components/GradeFilter/index.tsx
  3. 44
      src/components/HomeSearchBox/index.scss
  4. 15
      src/components/HomeSearchBox/index.tsx
  5. 17
      src/components/Navbar/index.scss
  6. 29
      src/components/Navbar/index.tsx
  7. 3
      src/views/About/index.tsx
  8. 27
      src/views/Auth/Login/index.scss
  9. 18
      src/views/Auth/Login/index.tsx
  10. 10
      src/views/Auth/SignUp/index.scss
  11. 34
      src/views/Auth/SignUp/index.tsx
  12. 14
      src/views/Auth/index.tsx
  13. 10
      src/views/Course/Lesson/index.scss
  14. 27
      src/views/Course/Lesson/index.tsx
  15. 18
      src/views/Course/index.scss
  16. 22
      src/views/Course/index.tsx
  17. 13
      src/views/Faq/index.scss
  18. 12
      src/views/Faq/index.tsx
  19. 13
      src/views/Home/AppDownload/index.scss
  20. 18
      src/views/Home/AppDownload/index.tsx
  21. 6
      src/views/Home/Books/Book/index.scss
  22. 44
      src/views/Home/Books/Book/index.tsx
  23. 4
      src/views/Home/Books/index.tsx
  24. 6
      src/views/Home/Courses/Course/index.scss
  25. 38
      src/views/Home/Courses/Course/index.tsx
  26. 4
      src/views/Home/Courses/index.tsx
  27. 7
      src/views/Home/Footer/index.scss
  28. 13
      src/views/Home/Footer/index.tsx
  29. 13
      src/views/Home/index.tsx
  30. 16
      src/views/Subscription/SubscribeRadio/index.scss
  31. 25
      src/views/Subscription/SubscribeRadio/index.tsx
  32. 37
      src/views/Subscription/index.tsx
  33. 3
      src/views/VideoTube/AddComment/index.tsx
  34. 14
      src/views/VideoTube/LessonPlayList/index.scss
  35. 19
      src/views/VideoTube/LessonPlayList/index.tsx
  36. 36
      src/views/VideoTube/index.scss
  37. 18
      src/views/VideoTube/index.tsx

@ -8,6 +8,15 @@
&__box{
display: none !important;
}
&__light{
color: black;
background-color: white;
border: 1px solid black;
.grade-filter__list{
background-color: white;
border: 1px solid black;
}
}
h1{
margin: 0px;
padding: 0px 15px;

@ -1,11 +1,11 @@
import React, { useState, useEffect, useRef } from "react";
import { connect } from "react-redux";
import { book } from "../../redux/actions";
import _ from 'lodash';
import dropdown from "../../assets/icons/dropdown.png";
function GradeFilter({selectedGrade, gradeFilter, grades, gradeDropdown, setGradeDropdown}: any) {
function GradeFilter({selectedGrade, gradeFilter, grades, gradeDropdown, setGradeDropdown, theme}: any) {
const [arrowTop, setArrowTop] = useState(false);
useEffect(() => {
@ -20,13 +20,13 @@ function GradeFilter({selectedGrade, gradeFilter, grades, gradeDropdown, setGrad
}
return (
<section className="grade-filter d-flex align-items-center">
<section className={_.join(["grade-filter d-flex align-items-center", theme === 'light' ? 'grade-filter__light' : 'grade-filter__dark']," ")}>
<h1 className="d-flex align-items-center">
پایه تحصیلی
<span className="desktop"></span>
</h1>
<div
className="grade-filter__box d-flex"
className="grade-filter__box mobile"
onClick={(e : any) => setDropdown(e)}
>
{selectedGrade ? (
@ -75,6 +75,7 @@ function GradeFilter({selectedGrade, gradeFilter, grades, gradeDropdown, setGrad
export default connect(
(state: any) => ({
selectedGrade: state.book.selectedGrade,
theme : state.publicApi.theme,
}),
{ gradeFilter: book.gradeFilter }
)(GradeFilter);

@ -5,24 +5,56 @@
* {
transition: all 0.5s;
}
&__dark{
form {
button {
background-color: $gray1;
}
input {
background-color: $gray5;
border: 0px;
color: $gray6;
&::placeholder {
color: $gray6;
}
&:focus {
outline: 2px solid $green !important;
}
}
}
}
&__light{
form {
button {
background-color: $gray1;
border: none;
}
input {
border: 1px solid $gray5 !important;
color: black;
background-color: white !important;
&::placeholder {
color: black !important;
}
&:focus {
outline: 2px solid $green !important;
}
}
}
}
form {
button {
margin-right: 3px;
border-top-left-radius: 9px;
border-bottom-left-radius: 9px;
border: 0px;
}
input {
width: 100%;
background-color: $gray5;
border: 0px;
border-top-right-radius: 9px;
border-bottom-right-radius: 9px;
color: $gray6;
&::placeholder {
padding-right: 0px;
color: $gray6;
opacity: 0.4;
}
&:focus {
@ -195,7 +227,7 @@
background: $gray1;
&::placeholder {
font-size: calc(100vw / 34);
color: white !important;
color: white;
}
}
button {

@ -1,5 +1,6 @@
import React, { useState } from "react";
import { connect } from "react-redux";
import _ from "lodash";
import { book } from "../../redux/actions";
import search from "../../assets/icons/search.png";
import voice from "../../assets/icons/voice.png";
@ -11,6 +12,7 @@ function HomeSearchBox({
setInputValue,
sortFilter,
selectedSort,
theme,
}: any) {
const submitInput = (value: any) => {
setInputValue(value);
@ -21,7 +23,17 @@ function HomeSearchBox({
sortFilter({ search: inputValue, sort: value });
};
return (
<section className="home-search-box d-flex flex-column align-items-center">
<section
className={_.join(
[
"home-search-box d-flex flex-column align-items-center",
theme === "light"
? "home-search-box__light"
: "home-search-box__dark",
],
" "
)}
>
<form className="d-flex" onSubmit={(e) => e.preventDefault()}>
<input
type="search"
@ -73,6 +85,7 @@ function HomeSearchBox({
export default connect(
(state: any) => ({
selectedSort: state.book.selectedSort,
theme: state.publicApi.theme,
}),
{ sortFilter: book.sortFilter }
)(HomeSearchBox);

@ -1,13 +1,24 @@
.nav{
width: 100%;
background-color: black;
height: 60px;
padding: 0px 10px;
position: fixed !important;
top: 0px !important;
left: 0px;
z-index: 150;
&__light{
background-color: white;
.nav___share{
background-color: $gray1 !important;
border: none !important;
}
.MuiButton-root{
color: black !important;
}
}
&__dark{
background-color: black;
}
&__container{
width: 100%;
font-family: numeralLight;
@ -115,7 +126,6 @@
@media screen and (min-width: 641px) and (max-width: 1007px){
.nav{
background-color: black;
&__container{
max-width: 900px;
&--buttons{
@ -137,7 +147,6 @@
@media screen and (max-width: 640px){
.nav{
background-color: black;
&__container{
max-width: 500px;
&--buttons{

@ -6,8 +6,10 @@ import NavbarDrawer from "../NavbarDrawer/NavbarDrawer";
import clsx from "clsx";
import proxy from "../../redux/proxy";
import { makeStyles } from "@mui/styles";
import Menu from '../Menu/index';
import logoIcon from '../../assets/icons/logo.png';
import Menu from "../Menu/index";
import logoIcon from "../../assets/icons/logo.png";
import { connect } from "react-redux";
import _ from "lodash";
const useStyles = makeStyles({
list: {
@ -20,7 +22,7 @@ const useStyles = makeStyles({
},
});
export default function Navbar(props: any) {
function Navbar(props: any) {
const status = proxy.status();
const classes = useStyles();
const [state, setState] = useState({
@ -30,7 +32,7 @@ export default function Navbar(props: any) {
right: false,
searchFlag: false,
});
const { page } = props;
const { page, theme } = props;
const toggleDrawer = (anchor: any, open: any) => (event: any) => {
console.log("on");
@ -63,11 +65,18 @@ export default function Navbar(props: any) {
const userStatus = proxy.status();
return (
<nav className="nav align-items-center justify-content-center">
<nav
className={_.join([
"nav align-items-center justify-content-center",
theme === "light" ? "nav__light" : "nav__dark",
], " ")}
>
<div className="nav__container d-flex align-items-center justify-content-between">
<ul className="nav__container--links desktop align-items-center">
<li className="nav___logo d-flex align-items-center">
<Link to="/"><img src={logoIcon} alt="" /></Link>
<Link to="/">
<img src={logoIcon} alt="" />
</Link>
<span></span>
</li>
<li>
@ -76,7 +85,7 @@ export default function Navbar(props: any) {
</ul>
<MenuRoundedIcon
className="mobile"
style={{ color: "white", fontSize: 40 }}
style={{ color: theme === "dark" ? "white" : "black", fontSize: 40 }}
onClick={toggleDrawer("right", true)}
/>
<ul className="nav__container--buttons d-flex align-items-center">
@ -102,6 +111,10 @@ export default function Navbar(props: any) {
);
}
export default connect((state: any) => ({
theme: state.publicApi.theme,
}))(Navbar);
Navbar.defaultProps = {
grades: [
{
@ -153,4 +166,4 @@ Navbar.defaultProps = {
value: 12,
},
],
}
};

@ -14,9 +14,8 @@ function About({ fury, advantages, keywords, keywords2, first, theme, setTheme }
<div
className={_.join([
"about main d-flex flex-column",
theme === "dark" ? "main__light" : "main__dark",
theme === "dark" ? "main__dark" : "main__light",
], " ")}
onClick={() => setTheme('dark')}
>
<Navbar />
<main className="d-flex flex-column align-items-center">

@ -3,6 +3,30 @@
height: 100vh;
position: relative;
font-family: numeralLight;
&__light {
.MuiFormControl-root label{
background-color: white !important;
}
b{
color: black !important;
}
.login {
&__back {
a {
color: black !important;
}
}
&__options {
color: black;
a {
color: $green4;
}
}
}
}
&__dark {
background-color: black;
}
&__options {
color: #b5b5b5;
a {
@ -23,7 +47,6 @@
.MuiButtonBase-root {
padding: 0px !important;
}
background: black;
.footer {
position: fixed;
bottom: 0px;
@ -129,7 +152,6 @@
@media screen and (min-width: 641px) and (max-width: 1007px) {
.login {
background: black;
.footer {
display: none !important;
}
@ -190,7 +212,6 @@
@media screen and (max-width: 640px) {
.login {
background: black;
section {
// background-color: red;
width: 90%;

@ -12,14 +12,14 @@ import arrow from "../../../assets/icons/dropdown.png";
import onInput from "../../../util/onInput";
import { connect } from "react-redux";
import { user } from "../../../redux/actions";
import _ from "lodash";
interface LoginFields {
username?: string;
password?: string;
}
function Login({login, ...props}: any) {
function Login({ login, theme, ...props }: any) {
const [loginFields, setSignUpFiels] = useState<LoginFields | undefined>(
undefined
);
@ -29,11 +29,17 @@ function Login({login, ...props}: any) {
// const usernameInput = useRef<any>();
// const passwordInput = useRef<any>();
useEffect(() => {
}, []);
useEffect(() => {}, []);
return (
<div className="login d-flex flex-column align-items-center justify-content-center">
<div
className={_.join(
[
"login d-flex flex-column align-items-center justify-content-center",
theme === "light" ? "login__light" : "login__dark",
],
" "
)}
>
<Navbar />
<section className="d-flex flex-column">
<div className="login__back d-flex justify-content-end">

@ -3,10 +3,18 @@
height: 100vh;
position: relative;
font-family: numeralLight;
&__light{
background-color: white;
b{
color: black !important;
}
input{
background-color: white !important;
}
}
img {
// transform: rotate(-90deg);
}
background: black;
.footer {
position: fixed;
bottom: 0px;

@ -1,5 +1,5 @@
import React, { useState, useRef, useEffect } from "react";
import {useHistory} from 'react-router-dom';
import { useHistory } from "react-router-dom";
import Navbar from "../../../components/Navbar";
import Footer from "../../Home/Footer";
import Timer from "../../../components/Timer";
@ -8,16 +8,16 @@ import { Link } from "react-router-dom";
import arrow from "../../../assets/icons/dropdown.png";
import arrowLeft from "../../../assets/icons/arrow-left.png";
import { connect } from "react-redux";
import { user } from "../../../redux/actions";
import _ from "lodash";
interface SignUpFields {
cellphone?: String;
otp?: String;
}
function SignUp({ sendOtp, sendPhoneNumber, loginFlag }: any) {
function SignUp({ sendOtp, sendPhoneNumber, loginFlag, theme }: any) {
const [level, setLevel] = useState("phonenumber");
const [signUpFields, setSignUpFiels] = useState<SignUpFields | undefined>(
undefined
@ -86,12 +86,20 @@ function SignUp({ sendOtp, sendPhoneNumber, loginFlag }: any) {
useEffect(() => {
if (loginFlag) {
history.push('/');
history.push("/");
}
}, [loginFlag]);
const light = theme === "light";
return (
<div className="signup d-flex flex-column align-items-center justify-content-center">
<div
className={_.join(
[
"signup d-flex flex-column align-items-center justify-content-center",
light ? "signup__light" : "signup__dark",
],
" "
)}
>
<Navbar />
{level === "phonenumber" && (
<section className="d-flex flex-column">
@ -167,7 +175,10 @@ function SignUp({ sendOtp, sendPhoneNumber, loginFlag }: any) {
ارسال مجدد کد در <Timer seconds={60} refresh={setResend} /> دیگر
</p>
) : (
<p className="signup__info d-flex justify-content-center" onClick={() => checkPhoneNumber()}>
<p
className="signup__info d-flex justify-content-center"
onClick={() => checkPhoneNumber()}
>
دوباره ارسال کنید
</p>
)}
@ -178,9 +189,12 @@ function SignUp({ sendOtp, sendPhoneNumber, loginFlag }: any) {
);
}
export default connect((state : any) => ({
export default connect(
(state: any) => ({
loginFlag: state.user.setLogin,
}), {
}),
{
sendOtp: user.otp_login,
sendPhoneNumber: user.otp,
})(SignUp);
}
)(SignUp);

@ -2,17 +2,23 @@ import React, {useState, useEffect} from 'react';
import SignUp from './SignUp/index';
import Profile from './Profile/index';
import Login from './Login/index';
import {connect} from 'react-redux';
export default function Auth(props : any) {
function Auth(props : any) {
const [page, setPage] = useState(props.page);
useEffect(() => {
setPage(() => props.page);
},[props.page]);
return (
<>
{ page === 'signup' && <SignUp /> }
{ page === 'login' && <Login setPage={setPage} /> }
{ page === 'profile' && <Profile /> }
{ page === 'signup' && <SignUp theme={props.theme} /> }
{ page === 'login' && <Login theme={props.theme} setPage={setPage} /> }
{ page === 'profile' && <Profile theme={props.theme} /> }
</>
)
}
export default connect((state : any) => ({
theme : state.publicApi.theme,
}))(Auth);

@ -2,6 +2,16 @@
transition: all 0.3s;
overflow : hidden;
border-bottom: 1px solid $gray9;
&__light{
header{
background-color : white !important;
border: 1px solid $gray9;
}
.lesson__files *{
color: black !important;
}
}
&__active{
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;

@ -6,6 +6,7 @@ import document from "../../../assets/icons/document.png";
import { connect } from "react-redux";
import { book, publicApi } from "../../../redux/actions";
import location from "../../../util/location";
import _ from "lodash";
function Lesson({
toggle,
@ -13,6 +14,7 @@ function Lesson({
activeCategory,
realCategories,
vodDuration,
theme,
}: any) {
const [selectedLesson, setSelectedLesson] = useState(null);
const duration = (value: number) => {
@ -22,10 +24,20 @@ function Lesson({
};
const setCategory = (catId: any, videoId: any) => {
localStorage.removeItem("bookId");
localStorage.setItem("category", location.getId() + "," + catId + "," + videoId);
localStorage.setItem(
"category",
location.getId() + "," + catId + "," + videoId
);
};
const light = theme === "light";
return (
<div className="lesson d-flex flex-column">
<div
className={_.join([
"lesson d-flex flex-column",
light ? "lesson__light" : "lesson__dark",
], " ")}
>
<header
className="desktop justify-content-between align-items-center"
onClick={() => toggle(lesson[0].categoryId)}
@ -110,13 +122,20 @@ function Lesson({
</div>
<ul className="d-flex">
<li>{data.type !== "pdf" && duration(data.duration)}</li>
<Link to={"/video/"+ data.id} onClick={() => setCategory(lesson[0].categoryId, data.name)}>
<Link
to={"/video/" + data.id}
onClick={() => setCategory(lesson[0].categoryId, data.name)}
>
<li>{"مشاهده"}</li>
</Link>
{/* <li>{data.download ? "دانلود" : <img src={lock} alt="" />}</li> */}
</ul>
</li>
{selectedLesson === data.id && <p style={{ fontSize: 11, padding: "10px 60px 10px 20px" }}>توضیحات مرتبط با این درس</p>}
{selectedLesson === data.id && (
<p style={{ fontSize: 11, padding: "10px 60px 10px 20px" }}>
توضیحات مرتبط با این درس
</p>
)}
</div>
))}
</ul>

@ -1,6 +1,15 @@
@import './Lesson/index.scss';
@import "./Lesson/index.scss";
.course {
&__light {
.course__options--rate {
color: black;
}
.course__options--button {
background-color: white !important;
color: black;
}
}
&__header {
padding: 30px 0px 45px;
border-bottom: 2px solid $gray5;
@ -78,7 +87,6 @@
}
}
@media screen and (min-width: 1441px) {
.course {
main {
@ -149,7 +157,6 @@
margin-top: 15px;
font-size: 20px;
}
}
&--button {
width: 315px;
@ -191,7 +198,7 @@
font-size: calc(100vw / 50);
}
p {
font-size: calc(100vw / 100);;
font-size: calc(100vw / 100);
}
.course-info-items {
width: 45%;
@ -235,7 +242,6 @@
margin-top: 5px;
font-size: calc(100vw / 80);
}
}
&--button {
width: 70%;
@ -326,7 +332,6 @@
margin-top: 5px;
font-size: calc(100vw / 40);
}
}
&--button {
width: 48%;
@ -426,7 +431,6 @@
margin-top: 5px;
font-size: calc(100vw / 40);
}
}
&--button {
width: 48%;

@ -14,8 +14,9 @@ import { connect } from "react-redux";
import { publicApi } from "../../redux/actions";
import scroll from "../../util/scroll";
import Loader from "../../components/Loader";
import _ from "lodash";
function Course({ getInfo, info, categories, loading }: any) {
function Course({ getInfo, info, categories, loading, theme }: any) {
const [links, setLinks] = useState([
{ link: "/", name: "صفحه اصلی" },
{ link: "/courses", name: "دورهها" },
@ -25,7 +26,7 @@ function Course({ getInfo, info, categories, loading }: any) {
useEffect(() => {
scroll.goToTop();
getInfo({
bookId: location.getId()
bookId: location.getId(),
});
}, []);
@ -36,9 +37,16 @@ function Course({ getInfo, info, categories, loading }: any) {
localStorage.setItem("bookId", location.getId());
localStorage.removeItem("category");
};
const light = theme === "light";
return (
<div
className="course main d-flex flex-column"
className={_.join(
[
"course main d-flex flex-column",
light ? "course__light" : "course__dark",
],
" "
)}
style={{ filter: loading ? "blur(8px)" : "" }}
>
<Navbar />
@ -59,7 +67,10 @@ function Course({ getInfo, info, categories, loading }: any) {
<i>{info?.vodTeacher}</i>
</div>
<div className="d-flex " style={{ minWidth: 150 }}>
<div className="course-info-items d-flex align-items-center justify-content-around" style={{ minWidth: 150 }}>
<div
className="course-info-items d-flex align-items-center justify-content-around"
style={{ minWidth: 150 }}
>
<img src={slide} alt="" />
<div className="d-flex flex-column" style={{ minWidth: 100 }}>
<i>{info?.vodDuration} ساعت درس </i>
@ -156,7 +167,7 @@ function Course({ getInfo, info, categories, loading }: any) {
{/* <p>در این قسمت شاید یک متن جهت زیباسازی قرار بگیرد </p> */}
</header>
{categories?.map((lesson: any, i: any) => (
<Lesson key={i} lesson={lesson} />
<Lesson key={i} lesson={lesson} theme={theme} />
))}
</section>
</main>
@ -175,6 +186,7 @@ export default connect(
info: state.publicApi.bookInfo,
categories: state.publicApi.categories,
loading: state.publicApi.loading,
theme: state.publicApi.theme,
}),
{ getInfo: publicApi.bookInfo }
)(Course);

@ -1,4 +1,17 @@
.faq {
&__light{
.faq{
&__list{
li{
background-color: white !important;
border: 1px solid black !important;
p{
color: black !important;
}
}
}
}
}
header {
width: 100%;
margin: 0px auto;

@ -7,6 +7,7 @@ import whiteDropdown from "../../assets/icons/white-dropdown.png";
import { connect } from "react-redux";
import { faq } from "../../redux/actions";
import scroll from "../../util/scroll.js";
import _ from "lodash";
function Faq({
list,
@ -15,13 +16,21 @@ function Faq({
searchFaq,
searchResult,
search,
theme,
}: any) {
useEffect(() => {
getList();
scroll.goToTop();
}, []);
const light = theme === "light";
return (
<div className="faq main d-flex flex-column">
<div
className={_.join([
"faq main d-flex flex-column",
light ? "faq__light" : "faq__dark",
], " ")}
>
<Navbar />
<main className="d-flex flex-column">
<header className="d-flex flex-column">
@ -97,6 +106,7 @@ export default connect(
list: state.faq.list,
searchResult: state.faq.searchResult,
search: state.faq.search,
theme: state.publicApi.theme,
}),
{ getList: faq.list, selectFaq: faq.selectFaq, searchFaq: faq.searchFaq }
)(Faq);

@ -9,6 +9,12 @@
h1 {
font-family: numeralBold;
}
&__light {
h1 {
color: black !important;
}
}
&__figure {
&--screen {
width: 220px;
@ -25,7 +31,8 @@
padding: 10px;
background-color: black;
border-radius: 10px;
h2,p{
h2,
p {
margin: 0px;
margin-right: 5px;
}
@ -71,7 +78,8 @@
padding: 10px;
background-color: black;
border-radius: 10px;
h2,p{
h2,
p {
margin: 0px;
margin-right: 5px;
}
@ -110,5 +118,4 @@
}
}
}
}

@ -1,13 +1,21 @@
import React from "react";
import ar from "../../../assets/icons/ar.png";
import download from "../../../assets/icons/download.png";
import _ from "lodash";
export default function AppDownload() {
export default function AppDownload(props: any) {
const { theme } = props;
return (
<section className="app-download desktop justify-content-between align-items-center">
<h1>
دریافت اپلیکیشن دانوین
</h1>
<section
className={_.join(
[
"app-download desktop justify-content-between align-items-center",
theme === "light" ? "app-download__light" : "app-download__dark",
],
" "
)}
>
<h1>دریافت اپلیکیشن دانوین</h1>
<figure className="app-download__figure d-flex flex-column align-items-center">
<div className="app-download__figure--screen"></div>
<div className="app-download__figure--details d-flex justify-content-between align-items-center">

@ -4,6 +4,12 @@
border: 1px solid black;
padding: 10px;
border-radius: 10px;
&__light{
border: none;
h2{
color: black !important;
}
}
img{
border-radius: 8px;
}

@ -1,18 +1,36 @@
import React from "react";
import { Link } from 'react-router-dom';
import { Link } from "react-router-dom";
import { connect } from "react-redux";
import _ from "lodash";
export default function Book(props: any) {
const { data } = props;
function Book(props: any) {
const { data, theme } = props;
const desc: any = {
"ریاضی": 'ریاضی از ریاضت میاد ولی دانوین آسون و لذت بخشش کرده',
'علوم تجربی': "علوم تجربی تو دانوین واقعا تجربی و محسوس میشه",
'زیست شناسی': "زیست را در دانوین باید زیست",
'شیمی': 'شیمی اینجا می فهمه کیمیا یعنی چی',
'فیزیک': "با دانوین فیزیکو با یه لنز جدید ببنید"
}
ریاضی: "ریاضی از ریاضت میاد ولی دانوین آسون و لذت بخشش کرده",
"علوم تجربی": "علوم تجربی تو دانوین واقعا تجربی و محسوس میشه",
"زیست شناسی": "زیست را در دانوین باید زیست",
شیمی: "شیمی اینجا می فهمه کیمیا یعنی چی",
فیزیک: "با دانوین فیزیکو با یه لنز جدید ببنید",
};
return (
<Link to={`/courses/${data.id}`} className="home-books-book d-flex flex-column" draggable={'false'}>
<img src={`https://dnvn.ir/api/v1/file/${data.fileIds}`} alt={data.name} draggable={'false'} />
<Link
to={`/courses/${data.id}`}
className={_.join(
[
"home-books-book d-flex flex-column",
theme === "light"
? "home-books-book__light"
: "home-books-book__dark",
],
" "
)}
draggable={"false"}
>
<img
src={`https://dnvn.ir/api/v1/file/${data.fileIds}`}
alt={data.name}
draggable={"false"}
/>
<footer className="d-flex">
<div className="home-books-book__info d-flex flex-column">
<h2>{data.name}</h2>
@ -22,3 +40,7 @@ export default function Book(props: any) {
</Link>
);
}
export default connect((state: any) => ({
theme: state.publicApi.theme,
}))(Book);

@ -30,13 +30,13 @@ function Books({list, number}: any) {
showArrows={true}
pagination={false}
>
{list?.map((item: Object, i: Number) => (
{list?.map((item: Object, i: any) => (
<Book data={item} key={i} />
))}
</Carousel>
) : (
<div className="home-books__list d-flex">
{list?.map((item: Object, i: Number) => (
{list?.map((item: Object, i: any) => (
<Book data={item} key={i} />
))}
</div>

@ -4,6 +4,12 @@
transition: all 0.5s;
border: 1px solid black;
border-radius: 10px;
&__light{
border: none;
h2{
color: black !important;
}
}
img{
border-radius: 8px;
margin: 0px auto;

@ -1,15 +1,35 @@
import React from "react";
import Avatar from "@mui/material/Avatar";
import {Link} from 'react-router-dom';
import { Link } from "react-router-dom";
import { connect } from "react-redux";
import _ from "lodash";
export default function Course(props: any) {
const { data } = props;
function Course(props: any) {
const { data, theme } = props;
return (
<Link to={`/courses/${data.id}`} className="home-courses-course d-flex flex-column" draggable={'false'}>
<img src={`https://dnvn.ir/api/v1/file/${data.fileIds}`} alt={data.name} draggable={'false'} />
<Link
to={`/courses/${data.id}`}
className={_.join(
[
"home-courses-course d-flex flex-column",
theme === "light"
? "home-courses-course__light"
: "home-courses-course__dark",
],
" "
)}
draggable={"false"}
>
<img
src={`https://dnvn.ir/api/v1/file/${data.fileIds}`}
alt={data.name}
draggable={"false"}
/>
<footer className="d-flex">
<Avatar src={`https://dnvn.ir/api/v1/file/${data.fileIds}`} style={{ width: 40, height: 40 }} />
<Avatar
src={`https://dnvn.ir/api/v1/file/${data.fileIds}`}
style={{ width: 40, height: 40 }}
/>
<div className="home-courses-course__info d-flex flex-column">
<h2>{data.name}</h2>
{/* {window.innerWidth > 1007 ? (
@ -35,3 +55,7 @@ export default function Course(props: any) {
</Link>
);
}
export default connect((state: any) => ({
theme: state.publicApi.theme,
}))(Course);

@ -36,13 +36,13 @@ function Courses({ number, courses, selectedSort }: any) {
showArrows={true}
pagination={false}
>
{courses?.map((item: Object, i: Number) => (
{courses?.map((item: Object, i:any) => (
<Course data={item} key={i} />
))}
</Carousel>
) : (
<div className="home-courses__list d-flex">
{courses?.map((item: Object, i: Number) => (
{courses?.map((item: Object, i: any) => (
<Course data={item} key={i} />
))}
</div>

@ -2,9 +2,16 @@
width: 100%;
font-family: numeralLight;
background-color: #1a1a1a;
&__light{
background-color: white;
p,a{
color: black !important;
}
}
&__container{
width: 100%;
margin : 0px auto;
padding: 0px 10px;
p{
margin: 0px;
color: $gray;

@ -1,15 +1,16 @@
import React, { useEffect } from "react";
import { Link } from "react-router-dom";
import scroll from "../../../util/scroll";
import {connect} from 'react-redux';
import _ from 'lodash';
export default function Footer(props: any) {
const { links } = props;
function Footer(props: any) {
const { links, theme } = props;
useEffect(() => {
scroll.goToTop()
}, []);
return (
<footer className="footer desktop">
<footer className={_.join(["footer desktop", theme === 'light' ? 'footer__light' : 'footer__dark'], " ")}>
<div className="footer__container d-flex justify-content-between align-items-center">
<ul className="d-flex">
{links.map((item: any, i: any) =>
@ -30,6 +31,10 @@ export default function Footer(props: any) {
);
}
export default connect((state : any) => ({
theme : state.publicApi.theme,
}))(Footer)
Footer.defaultProps = {
links: [
{ name: "تعرفهها", link: "/subscribe" },

@ -13,6 +13,7 @@ import scroll from "../../util/scroll";
import Loader from "../../components/Loader";
import { connect } from "react-redux";
import { book, publicApi } from "../../redux/actions";
import _ from 'lodash';
function Home({
courseList,
@ -27,6 +28,7 @@ function Home({
getHeader,
bookLoading,
publicLoading,
theme
}: any) {
const [grade, setGrade] = useState(null);
const [vocal, setVocal] = useState(false);
@ -47,7 +49,7 @@ function Home({
return (
<>
<div
className="home main d-flex flex-column"
className={_.join(["home main d-flex flex-column", theme === 'dark' ? 'main__dark' : 'main__light'], " ")}
style={{
filter: vocal || bookLoading || publicLoading ? "blur(8px)" : "",
}}
@ -61,6 +63,7 @@ function Home({
setVocal={setVocal}
inputValue={inputValue}
setInputValue={setInputValue}
theme={theme}
/>
<Courses courses={sortFilterCourse ? sortFilterCourse : courseList} />
<GradeFilter
@ -69,10 +72,11 @@ function Home({
setGrade={setGrade}
gradeDropdown={gradeDropdown}
setGradeDropdown={setGradeDropdown}
theme={theme}
/>
<Books list={gradeFilterBooks ? gradeFilterBooks : courseList} />
<Blogs />
<AppDownload />
<Books list={gradeFilterBooks ? gradeFilterBooks : courseList} theme={theme} />
<Blogs theme={theme} />
<AppDownload theme={theme} />
<Footer />
</div>
{vocal ? (
@ -96,6 +100,7 @@ export default connect(
headerData: state.publicApi.header,
bookLoading: state.book.loading,
publicLoading: state.publicApi.loading,
theme : state.publicApi.theme,
}),
{
getCourseList: book.list,

@ -5,13 +5,15 @@
border-radius: 10px;
cursor: pointer;
transition: all 0.5s;
&__name{
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
h2{
color: white !important;
color: white;
margin-bottom: 0px;
}
}
&__factor{
border-top-left-radius: 10px;
@ -62,6 +64,18 @@
background-color: rgba(255, 255, 255, 0.18);
}
}
&__light{
h2{
color: black !important;
}
.subscribe-radio{
&-active{
h2{
color: white !important;
}
}
}
}
}
@media screen and (min-width: 1441px) {

@ -4,25 +4,28 @@ import CircleRoundedIcon from "@mui/icons-material/CircleRounded";
import RadioButtonUncheckedRoundedIcon from "@mui/icons-material/RadioButtonUncheckedRounded";
import { connect } from "react-redux";
import { product, userProduct } from "../../../redux/actions";
import _ from "lodash";
function SubscribeRadio({ data, selectedVOD, selectVOD }: any) {
function SubscribeRadio({ data, selectedVOD, selectVOD, theme }: any) {
const submitVOD = (value: any) => {
if (selectedVOD?.id === data.id) {
selectVOD(null);
} else {
selectVOD(data)
}
selectVOD(data);
}
};
const light = theme === "light";
return (
<div
className={
"subscribe-radio d-flex" +
" " +
(selectedVOD?.id === data.id ? "subscribe-radio-active" : "")
}
onClick={() =>
submitVOD(data)
}
className={_.join(
[
"subscribe-radio d-flex",
selectedVOD?.id === data.id ? "subscribe-radio-active" : "",
light ? "subscribe-radio__light" : "subscribe-radio__dark",
],
" "
)}
onClick={() => submitVOD(data)}
>
<div className="subscribe-radio__name d-flex align-items-center">
<CustomCheckbox

@ -7,26 +7,50 @@ import { connect } from "react-redux";
import { product, userFactor } from "../../redux/actions";
import scroll from "../../util/scroll";
import Loader from "../../components/Loader";
import _ from "lodash";
function Subscription({ listVOD, getList, loading, selectedVOD, payment, verify }: any) {
function Subscription({
listVOD,
getList,
loading,
selectedVOD,
payment,
verify,
theme,
}: any) {
useEffect(() => {
getList();
scroll.goToTop();
}, []);
const light = theme === "light";
return (
<div className={"subscription main d-flex flex-column"}>
<div
className={_.join(
[
"subscription main d-flex flex-column",
],
" "
)}
>
<Navbar />
<main className={"d-flex flex-column" + " " + (loading && "blur")}>
<h1>خرید اشتراک دانوین</h1>
<p>
اینجا هم برای هر کتاب امکان خرید اشتراک جداگانه هست و هم اشتراک های مدت دار. با خرید اشتراک های مدت دار دانوین می تونید در هزینه هاتون صرفه جویی کنید.
اینجا هم برای هر کتاب امکان خرید اشتراک جداگانه هست و هم اشتراک های
مدت دار. با خرید اشتراک های مدت دار دانوین می تونید در هزینه هاتون
صرفه جویی کنید.
</p>
{listVOD?.map((subscribe: any, i: any) => (
<SubscribeRadio data={subscribe} key={i} />
<SubscribeRadio theme={theme} data={subscribe} key={i} />
))}
<DiscountCode />
<div className="d-flex justify-content-end py-4">
<button className="submit submit-large" onClick={() => payment({ productId: selectedVOD.id })}>تایید و پرداخت</button>
<button
className="submit submit-large"
onClick={() => payment({ productId: selectedVOD.id })}
>
تایید و پرداخت
</button>
</div>
</main>
<Footer />
@ -43,7 +67,8 @@ export default connect(
(state: any) => ({
listVOD: state.product.listVOD,
loading: state.product.loading,
selectedVOD: state.product.selectedVOD
selectedVOD: state.product.selectedVOD,
theme: state.publicApi.theme,
}),
{
getList: product.listVOD,

@ -2,7 +2,8 @@ import React from "react";
import Avatar from "@mui/material/Avatar";
import user3 from "../../../assets/images/user3.png";
export default function AddComment() {
export default function AddComment(props : any) {
const { theme } = props;
return (
<>
<Avatar style={{ width: 60, height: 60, marginLeft: 10 }} />

@ -1,6 +1,20 @@
.lesson-playlist{
width: 100%;
padding-bottom : 10px;
&__light{
.lesson-playlist{
h3{
background-color : inherit !important;
border: 1px solid $gray9 !important;
}
&__item{
*{
color: black !important;
}
}
}
}
header{
background-color: inherit !important;
margin-bottom: 5px;

@ -2,6 +2,7 @@ import React, { useEffect } from "react";
import { connect } from "react-redux";
import { publicApi } from "../../../redux/actions";
import { Link } from "react-router-dom";
import _ from "lodash";
function LessonPlayList({
category,
@ -10,6 +11,7 @@ function LessonPlayList({
catergories,
realCategories,
vods,
theme,
}: any) {
const bookId = localStorage.getItem("bookId");
useEffect(() => {
@ -20,23 +22,32 @@ function LessonPlayList({
) as HTMLElement;
const elementHeight: any = (listItem as any)?.offsetHeight;
const listHeight: any = (list as any).offsetHeight;
const index = vods?.findIndex((
const index = vods?.findIndex(
(item: any) => item?.name === selectedVideo?.name
));
);
console.log(index);
console.log(listHeight, elementHeight * (Number(index) + 1));
if (elementHeight * (Number(index) + 1) > listHeight) {
list.scrollTo(0, (elementHeight * (Number(index) + 1)) + elementHeight);
list.scrollTo(0, elementHeight * (Number(index) + 1) + elementHeight);
}
localStorage.removeItem("scroll-list");
}
}, [vods]);
const light = theme === "light";
return (
<>
{
<div className="lesson-playlist d-flex flex-column">
<div
className={_.join(
[
"lesson-playlist d-flex flex-column",
light ? "lesson-playlist__light" : "lesson-playlist__dark",
],
" "
)}
>
{bookId && (
<header>
<h3>

@ -1,9 +1,36 @@
@import './Attachments/index.scss';
@import './Book/index.scss';
@import './Comment/index.scss';
@import './LessonPlayList/index.scss';
@import "./Attachments/index.scss";
@import "./Book/index.scss";
@import "./Comment/index.scss";
@import "./LessonPlayList/index.scss";
.video-tube {
&__light {
h1,
p {
color: black !important;
}
.video-tube {
&__content {
&--comments {
color: black !important;
}
&--addComment {
textarea {
background-color: white !important;
color: black !important;
}
}
}
&__sidebar{
header{
background-color: white !important;
*{
color: black !important;
}
}
}
}
}
&__content {
margin-left: 15px;
@ -550,4 +577,3 @@
}
}
}

@ -10,6 +10,7 @@ import Video from "../../components/JolPlayer";
import listIcon from "../../assets/icons/list.png";
import { connect } from "react-redux";
import _ from "lodash";
import scroll from "../../util/scroll.js";
import location from "../../util/location.js";
import { book, publicApi } from "../../redux/actions";
@ -24,6 +25,7 @@ function VodTube({
categories,
setVideoActive,
allBooks,
theme,
}: any) {
const videoListTag = useRef(null);
useEffect(() => {
@ -43,10 +45,17 @@ function VodTube({
}
}, [allBooks]);
const light = theme === "light";
return (
<>
<div
className="video-tube main d-flex flex-column"
className={_.join(
[
"video-tube main d-flex flex-column",
light ? "video-tube__light" : "video-tube__dark",
],
" "
)}
style={{ filter: loading ? "blur(8px)" : "" }}
>
<Navbar />
@ -76,7 +85,7 @@ function VodTube({
</div>
</section>
<section className="desktop video-tube__content--addComment">
<AddComment />
<AddComment theme={theme} />
</section>
</div>
<div className="video-tube__sidebar d-flex flex-column">
@ -98,10 +107,10 @@ function VodTube({
>
{localStorage.getItem("bookId")
? categories?.map((video: any, i: any) => (
<LessonPlayList category={video} key={i} />
<LessonPlayList theme={theme} category={video} key={i} />
))
: info?.vods.map((video: any, i: any) => (
<LessonPlayList category={video} key={i} />
<LessonPlayList theme={theme} category={video} key={i} />
))}
</div>
</section>
@ -165,6 +174,7 @@ export default connect(
loading: state.publicApi.loading,
categories: state.publicApi.categories,
allBooks: state.publicApi.bookInfo?.vods,
theme: state.publicApi.theme,
}),
{
getInfo: publicApi.bookInfo,

Loading…
Cancel
Save