master
amir hosein gorji 3 years ago
parent b5e5ee0d9c
commit 450e09e09e
  1. 2
      package.json
  2. 78903
      public/7.pdf
  3. 47
      public/serviceworker.js
  4. 8
      src/AppRouter.js
  5. 3
      src/Redux/proxy.js
  6. 2
      src/Redux/reducers/activation.js
  7. 2
      src/Redux/reducers/blog.js
  8. 9
      src/Redux/reducers/book.js
  9. 2
      src/Redux/reducers/comment.js
  10. 2
      src/Redux/reducers/file.js
  11. 29
      src/Redux/reducers/public.js
  12. 2
      src/Redux/reducers/qr.js
  13. 2
      src/Redux/reducers/transport.js
  14. 9
      src/Redux/reducers/user.js
  15. 2
      src/Redux/reducers/userFactor.js
  16. 2
      src/Redux/reducers/userProduct.js
  17. BIN
      src/assets/icons/basket2.png
  18. 6
      src/views/AR/index.js
  19. 46
      src/views/Cart/Table/index.js
  20. 4
      src/views/Contact/index.js
  21. 2
      src/views/Faq/index.js
  22. 13
      src/views/Home/Footer/index.scss
  23. 2
      src/views/Home/HomeSearch/index.js
  24. 4
      src/views/Home/HomeSlider/Header/index.js
  25. 2
      src/views/Home/HomeSlider/Simple/index.scss
  26. 91
      src/views/Home/Navbar/Laptop/index.js
  27. 69
      src/views/Home/Navbar/Laptop/index.scss
  28. 174
      src/views/Home/Navbar/Mobile/NavbarDrawer/NavbarDrawer.js
  29. 22
      src/views/Home/Navbar/Mobile/index.js
  30. 11
      src/views/Home/Navbar/index.scss
  31. 15
      src/views/Home/index.js
  32. 66
      src/views/Product/AddToCart/index.js
  33. 2
      src/views/Product/Comment/index.js
  34. 5
      src/views/Product/Gallery/index.js
  35. 2
      src/views/Product/Gallery/index.scss
  36. 79
      src/views/Product/index.js
  37. 11
      src/views/Product/index.scss
  38. 64
      src/views/Products/Filters/AppliedFilters/index.js
  39. 33
      src/views/Products/Filters/TypicalFilters/index.js
  40. 33
      src/views/Products/List/index.js
  41. 3
      src/views/Products/List/index.scss
  42. 226
      src/views/Products/Product/index.js
  43. 279
      src/views/Products/Product/index.scss
  44. 4
      src/views/Products/Select/index.js
  45. 3
      src/views/Products/index.js
  46. 4
      src/views/Products/index.scss
  47. 3
      src/views/QR/index.js
  48. 58
      src/views/Sample/index.js
  49. 5
      src/views/Sample/index.scss
  50. 7
      src/views/Support/index.js
  51. 450
      yarn.lock

@ -7,6 +7,7 @@
"@material-ui/core": "^4.11.4",
"@material-ui/icons": "^4.11.2",
"@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
"@react-pdf/renderer": "^2.0.19",
"@svgr/webpack": "5.5.0",
"@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0",
@ -71,6 +72,7 @@
"react-dev-utils": "^11.0.3",
"react-dom": "^17.0.2",
"react-elastic-carousel": "^0.11.5",
"react-pdf": "^5.3.2",
"react-player": "^2.9.0",
"react-qr-reader": "^2.2.1",
"react-qr-scanner": "^1.0.0-alpha.7",

File diff suppressed because one or more lines are too long

@ -1,42 +1,41 @@
const CACHE_NAME = "version-1";
const urlsToCache = ['index.html', 'offline.html'];
const CACHE_NAME = "version-11";
const urlsToCache = ["index.html", "offline.html"];
const self = this;
//Install SW
self.addEventListener('install', (event) => {
self.addEventListener("install", (event) => {
event.waitUntil(
caches.open(CACHE_NAME)
.then((cache) => {
console.log('Opened cache');
caches.open(CACHE_NAME).then((cache) => {
console.log("Opened cache");
return cache.addAll(urlsToCache);
})
)
return cache.addAll(urlsToCache);
})
);
});
//Listen for requests
self.addEventListener('fetch', (event) => {
self.addEventListener("fetch", (event) => {
event.respondWith(
caches.match(event.request)
.then(() => {
return fetch(event.request)
.catch(() => caches.match('offline.html'));
})
caches.match(event.request).then(() => {
return fetch(event.request).catch(() => caches.match("offline.html"));
})
);
});
//Activate the SW
self.addEventListener('activate', (event) => {
self.addEventListener("activate", (event) => {
const cacheWhiteList = [];
cacheWhiteList.push(CACHE_NAME);
event.waitUntil(
caches.keys().then((cacheNames) => Promise.all(
cacheNames.map((cacheName) => {
if (!cacheWhiteList.includes(cacheName)) {
return caches.delete(cacheName);
}
})
))
)
caches.keys().then((cacheNames) =>
Promise.all(
cacheNames.map((cacheName) => {
if (!cacheWhiteList.includes(cacheName)) {
return caches.delete(cacheName);
}
})
)
)
);
});

@ -31,6 +31,7 @@ import Callback from "./views/Callback/index";
import NewProfile from "./views/NewProfile/index";
import Blogs from "./views/Blogs/index";
import Blog from "./views/Blog/index";
import Sample from "./views/Sample/index";
class AppRouter extends Component {
constructor(props) {
@ -67,7 +68,7 @@ class AppRouter extends Component {
render() {
const mobile = window.innerWidth < 1000 ? true : false;
let status = proxy.status();
console.log({ status });
console.log({ status, s: this.props.profile });
let home = (
<Route exact path={"/"}>
{status && status.status == 0 ? (
@ -100,6 +101,9 @@ class AppRouter extends Component {
<Route exact path={"/products"}>
<Products />
</Route>
<Route path={"/sample"}>
<Sample />
</Route>
<Route exact path={"/newProfile"}>
{mobile ? (
status ? (
@ -140,7 +144,7 @@ class AppRouter extends Component {
<QR />
</Route>
<Route exact path={"/auth"}>
{status ? (
{proxy.status() ? (
<Redirect
to={{
pathname: "/",

@ -45,7 +45,7 @@ class Proxy {
check = async (url, { dispatch }, fetch, params) => {
dispatch = dispatch || (() => {});
dispatch({ type: "loading" });
dispatch({ type: url.split("/")[0] + "/" + "loading" });
let response = await fetch();
switch (response.status) {
case 200:
@ -112,6 +112,7 @@ class Proxy {
localStorage.removeItem("userData");
return false;
}
return JSON.parse(userData);
};
}

@ -21,7 +21,7 @@ export default function activation(state = initialState, action) {
return { ...state, loading: false, error: null };
case "activation/delete":
return { ...state, loading: false, error: null };
case "loading":
case "activation/loading":
return { ...state, loading: true };
case "activation/error":
toast.error(data.message);

@ -17,7 +17,7 @@ export default function blog(state = initialState, action) {
case "blog/delete":
return { ...state, loading: false, error: null };
/////////////
case "loading":
case "blog/loading":
return { ...state, loading: true };
case "blog/error":
toast.error(data.message);

@ -31,11 +31,13 @@ export default function book(state = initialState, action) {
let { type, data } = action;
switch (type) {
case "book/list":
let itemsSubject = data.map((item, index) => item.name);
let itemsSubject = (Array.isArray(data) ? data : []).map(
(item, index) => item.name
);
if (window.innerWidth < 1000) {
itemsSubject.unshift("نام کتاب");
}
let itemsLevel = data
let itemsLevel = (Array.isArray(data) ? data : [])
.map((item) => item.gradeId * 1)
.sort((a, b) => a - b)
.map((e) => grades[e]);
@ -48,6 +50,7 @@ export default function book(state = initialState, action) {
list: data,
subjects: [...new Set(itemsSubject)],
levels: [...new Set(itemsLevel)],
filterResult: data,
error: null,
};
case "book/info":
@ -113,7 +116,7 @@ export default function book(state = initialState, action) {
error: null,
filterResult: finalSort,
};
case "loading":
case "book/loading":
return { ...state, loading: true };
case "book/error":
toast.error(data.message);

@ -24,7 +24,7 @@ export default function comment(state = initialState, action) {
list: data,
error: null,
};
case "loading":
case "comment/loading":
return { ...state, loading: true };
case "comment/error":
toast.error(data.message);

@ -16,7 +16,7 @@ export default function file(state = initialState, action) {
uploads: { ...state.uploads, [params?.target || "last"]: data.id },
lastUpload: data.id,
};
case "loading":
case "file/loading":
return { ...state, loading: true };
case "file/error":
return { ...state, loading: false, error: data.message };

@ -37,14 +37,15 @@ export default function publicApi(state = initialState, action) {
let itemsLevel;
// if (window.innerWidth > 1000) {
const jadidTarin = data.filter(
(item) => item.title === "جدیدترین کتابهای دانوین"
(item) => item.title === "کتابهای دانوین"
);
itemsLevel = jadidTarin[0]
? jadidTarin[0].data
.map((item) => item.book.gradeId * 1)
.sort((a, b) => a - b)
.map((e) => grades[e])
: [];
itemsLevel =
jadidTarin[0] && jadidTarin[0].data
? jadidTarin[0].data
.map((item) => item.book.gradeId * 1)
.sort((a, b) => a - b)
.map((e) => grades[e])
: [];
itemsLevel.unshift("پایه تحصیلی");
// }
@ -55,12 +56,15 @@ export default function publicApi(state = initialState, action) {
error: null,
homeData: data,
};
case "user/logout":
case "user/login":
case "user/otp/login":
return { ...state, homeData: [] };
case "public/filter":
const realList =
state.newProducts.length === 0
? state.homeData.filter(
(item) => item.title === "جدیدترین کتابهای دانوین"
)[0].data
? state.homeData.filter((item) => item.title === "کتابهای دانوین")[0]
.data
: state.newProducts;
if (state.newProducts.length === 0) {
state = {
@ -79,7 +83,7 @@ export default function publicApi(state = initialState, action) {
loading: false,
error: null,
homeData: state.homeData.map((item) =>
item.title === "جدیدترین کتابهای دانوین"
item.title === "کتابهای دانوین"
? { ...item, data: state.newProducts }
: { ...item }
),
@ -150,6 +154,7 @@ export default function publicApi(state = initialState, action) {
: { ...item, active: false }
),
};
case "public/faq/search":
return {
...state,
@ -169,7 +174,7 @@ export default function publicApi(state = initialState, action) {
return { ...state, loading: false, error: null, blogList: data };
case "public/blogInfo":
return { ...state, loading: false, error: null, blog: data };
case "loading":
case "public/loading":
return { ...state, loading: true };
case "public/error":
toast.error(data.message);

@ -23,7 +23,7 @@ export default function qr(state = initialState, action) {
error: null,
};
/////////////
case "loading":
case "qr/loading":
return { ...state, loading: true };
case "qr/error":
toast.error(data.message);

@ -21,7 +21,7 @@ export default function transport(state = initialState, action) {
return { ...state, loading: false, error: null };
case "transport/delete":
return { ...state, loading: false, error: null };
case "loading":
case "transport/loading":
return { ...state, loading: true };
case "transport/error":
toast.error(data.message);

@ -20,13 +20,16 @@ export default function user(state = initialState, action) {
toast.success("کد به شماره شما ارسال گردید.");
return { ...state, loading: false, status: data.profile, error: null };
case "user/otp/login":
window.location = "https://dnvn.ir/";
toast.success("به دانوین خوش آمدید.");
return {
...state,
loading: false,
status: data.profile,
error: null,
};
case "user/getProfile":
localStorage.setItem("userData", JSON.stringify(data));
return {
@ -37,6 +40,10 @@ export default function user(state = initialState, action) {
setDone: false,
};
case "user/logout":
localStorage.removeItem("refresh");
localStorage.removeItem("access");
localStorage.removeItem("userData");
window.location = "https://dnvn.ir/";
return { ...state, loading: false, status: proxy.status(), error: null };
case "user/getUserRole":
return { ...state, loading: false, userRoles: data, error: null };
@ -48,7 +55,7 @@ export default function user(state = initialState, action) {
return { ...state, loading: false, mothers: data, error: null };
case "user/setProfile":
return { ...state, loading: false, error: null, setDone: true };
case "loading":
case "user/loading":
return { ...state, loading: true };
case "user/error":
toast.error(data.message);

@ -37,7 +37,7 @@ export default function userFactor(state = initialState, action) {
return { ...state, loading: false, error: null, isVerified: false };
case "userFactor/verify":
return { ...state, loading: false, error: null, isVerified: true };
case "loading":
case "userFactor/loading":
return { ...state, loading: true };
case "userFactor/error":
toast.error(data.message);

@ -42,7 +42,7 @@ export default function userProduct(state = initialState, action) {
return { ...state, loading: false, error: null, sum: data.payPrice };
case "userProduct/delete":
return { ...state, loading: false, error: null };
case "loading":
case "userProduct/loading":
return { ...state, loading: true };
case "userProduct/error":
toast.error(data.message);

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

@ -95,9 +95,9 @@ class AR extends Component {
export default connect(
(state) => ({
arList:
state.userProduct.myList.filter((product) => product.productType == 3) ||
[],
arList: (state.userProduct.myList || []).filter(
(product) => product.productType == 3
),
loading: state.loading,
}),
{

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

@ -113,6 +113,7 @@ class Contact extends Component {
className="d-flex justify-content-center align-items-center"
style={{ height: "100vh", width: "100vw" }}
>
<Navbar page={"contact"} />
<Loader />
</div>
)
@ -196,6 +197,7 @@ class Contact extends Component {
className="d-flex justify-content-center align-items-center"
style={{ height: "100vh", width: "100vw" }}
>
<Navbar page={"contact"} />
<Loader />
</div>
)
@ -209,7 +211,7 @@ export default connect(
(state) => ({
loading: state.publicApi.loading,
contactData: state.publicApi.contactData,
list: state.userProduct.mylist,
list: state.userProduct.mylist || [],
//loading: state.publicApi.loading,
}),
{ getContactData: publicApi.getContactData, getList: userProduct.mylist }

@ -136,6 +136,8 @@ class Faq extends Component {
className="d-flex justify-content-center align-items-center"
style={{ height: "100vh", width: "100vw" }}
>
<Navbar page={"faq"} />
<Loader />
</div>
)

@ -3,6 +3,7 @@
background-color: rgb(80, 80, 80);
// padding: 10px;
&-container {
padding: 0 10px;
width: 100%;
max-width: 1250px;
margin: 0px auto;
@ -19,17 +20,17 @@
h1 {
font-family: numeralMedium;
color: #c4e14c;
font-size: calc(100vw / 80);
font-size: 14px;
}
p {
margin-bottom: 0px;
font-family: numeralLight;
font-size: calc(100vw / 110);
font-size: 12px;
max-width: 80%;
}
span {
font-family: numeralLight;
font-size: calc(100vw / 110);
font-size: 11px;
color: #c4e14c;
margin-top: 2px;
}
@ -40,7 +41,7 @@
h1 {
font-family: numeralMedium;
color: #c4e14c;
font-size: calc(100vw / 80);
font-size: 14px;
}
ul {
list-style: none;
@ -48,7 +49,7 @@
li {
a {
font-family: numeralLight;
font-size: calc(100vw / 110);
font-size: 12px;
margin-top: 5px;
color: white;
text-decoration: none;
@ -72,7 +73,7 @@
padding: 15px 0px;
p {
font-family: numeralMedium;
font-size: calc(100vw / 130);
font-size: 13px;
margin-bottom: 0px;
}
}

@ -40,7 +40,7 @@ class HomeSearch extends Component {
/>
<div className="home-search__select">
<Select options={levels} name="levels" parent={this} />
<img src={dropdown} alt="فلش" />
{/* <img src={dropdown} alt="فلش" style={{ position: "relative" }} /> */}
</div>
<button className="home-search__submit">جستجو</button>
</div>

@ -30,7 +30,9 @@ export default class Header extends Component {
>
<h1>{data.title}</h1>
<h2>{data.subTitle}</h2>
<Link to={data.link || "/"}>{data.buttonText}</Link>
{data.buttonText && (
<Link to={data.link || "/"}>{data.buttonText}</Link>
)}
</div>
</div>
) : null}

@ -14,7 +14,7 @@
}
h1 {
font-family: numeralMedium;
margin-top: 5px;
margin-top: 10px;
margin-bottom: 5px;
color: #41c26f;
letter-spacing: -1px;

@ -2,12 +2,18 @@ import React, { Component } from "react";
import { Dropdown } from "react-bootstrap";
import proxy from "~/Redux/proxy";
import { Link } from "react-router-dom";
import Avatar from "@material-ui/core/Avatar";
import logo from "~/assets/icons/logo.png";
import basket from "~/assets/icons/basket.png";
import KeyboardArrowUpIcon from "@material-ui/icons/KeyboardArrowUp";
import KeyboardArrowDownIcon from "@material-ui/icons/KeyboardArrowDown";
import MenuItem from "@material-ui/core/MenuItem";
import Menu from "@material-ui/core/Menu";
import { connect } from "react-redux";
import AddCircleOutlineRoundedIcon from "@material-ui/icons/AddCircleOutlineRounded";
import "./index.scss";
import { useHistory } from "react-router-dom";
import { user } from "~/Redux/actions";
function Navigate({ path }) {
let history = useHistory();
return <>{history.push(path)}</>;
@ -21,9 +27,12 @@ const fontSize = {
},
};
export default class LaptopNavbar extends Component {
class LaptopNavbar extends Component {
state = {};
render() {
let score = 0;
const { status } = this.props;
if (this.state.navigatePath) return <Navigate path={this.navigatePath} />;
const { links } = this.props;
return (
@ -66,22 +75,68 @@ export default class LaptopNavbar extends Component {
</Dropdown.Item>
</Dropdown.Menu>
</Dropdown> */}
<Link to="/cart" style={{ marginLeft: 10 }}>
<img width="30" height="35" src={basket} alt="سبد خرید" />
<Link to="/cart" className="laptop-navbar__logout">
سبد خرید
<img
width="20"
height="23"
src={basket}
alt="سبد خرید"
style={{ marginRight: 5 }}
/>
</Link>
<div
to="/auth?logout"
style={{ fontSize: fontSize.desktop.a }}
className="laptop-navbar__logout"
onClick={() => {
localStorage.removeItem("refresh");
localStorage.removeItem("access");
localStorage.removeItem("userData");
window.location.reload();
// this.setState({ navigatePath: "/auth" });
<Menu
id="menu-desktop-navbar"
anchorEl={this.state.anchorEl}
keepMounted
anchorOrigin={{
vertical: "bottom",
horizontal: "center",
}}
transformOrigin={{
vertical: "bottom",
horizontal: "center",
}}
open={this.state.dropdown}
onClose={() => this.setState({ dropdown: false })}
>
خروج
<MenuItem onClick={() => this.setState({ dropdown: false })}>
<Link to={"/newProfile"}>اضافه کردن حساب</Link>
</MenuItem>
<MenuItem
onClick={() => {
this.props.logout({});
this.setState({ dropdown: false });
}}
>
خروج
</MenuItem>
</Menu>
<div
className="navbar-drawer__header d-flex align-items-center"
onClick={(event) =>
this.setState({
dropdown: !this.state.dropdown,
anchorEl: event.currentTarget,
})
}
>
<div
className="laptop-navbar__header--right d-fex flex-column"
style={{ fontSize: "13px" }}
>
{status.firstName + " " + status.lastName}
</div>
<Avatar
style={{ width: 40, height: 40 }}
alt="Remy Sharp"
src={
status.picFileId
? `https://dnvn.ir/api/v1/file/${status.picFileId}`
: ""
}
/>
</div>
</>
) : (
@ -100,7 +155,9 @@ export default class LaptopNavbar extends Component {
);
}
}
export default connect((state) => ({ status: state.user.status }), {
logout: user.logout,
})(LaptopNavbar);
LaptopNavbar.defaultProps = {
links: [
{ name: "صفحه اصلی", to: "/", page: "home" },

@ -1,11 +1,51 @@
.laptop-navbar {
max-width: 1250px;
margin: 0px auto;
&__header {
&--right {
cursor: pointer;
}
&--dropdown {
cursor: pointer;
position: relative;
width: 30px;
}
}
&__dropdown {
hr {
margin: 0;
}
font-size: 12px;
padding-bottom: 10px;
z-index: 10;
background-color: rgb(255, 255, 255);
border-radius: 5px;
border: 1px solid #adadad;
position: absolute;
top: 50px;
width: 150px;
&_item {
text-align: right;
width: 100%;
color: #4d4d4d;
// padding: 5px 0;
margin: 10px;
}
a {
text-decoration: none;
}
a:hover {
color: #60805c !important;
}
}
width: 100%;
// height: 60px;
justify-content: space-between;
align-items: center;
font-family: numeralLight;
z-index: 100;
overflow: hidden;
// overflow: hidden;
background-color: white;
padding: 0px 10px 0px 20px;
max-height: 60px;
@ -23,6 +63,16 @@
max-height: 60px;
}
}
&__cart:hover {
color: #6cbe44;
}
&__cart {
text-decoration: none;
color: #6cbe44;
& img {
margin: 0 5px;
}
}
&__list {
margin: 0px;
list-style: none;
@ -30,7 +80,7 @@
padding: 0px;
margin-right: 10px;
li {
margin: 0px 10px;
// margin: 0px 10px;
padding: 0px 15px;
text-decoration: none;
a {
@ -60,18 +110,31 @@
color: white;
}
}
&__logout {
font-family: numeralLight;
font-size: 12px;
text-decoration: none;
color: white;
background-color: white;
border-radius: 6px;
padding: 10px 20px;
padding: 5px 10px;
border: 1px solid #6cbe44;
color: #6cbe44;
cursor: pointer;
white-space: nowrap;
&:hover {
color: #93bb52;
}
}
}
#menu-desktop-navbar {
.MuiPaper-rounded {
top: 50px !important;
width: 130px;
}
a {
color: #4d4d4d !important;
text-decoration: none;
}
}

@ -8,7 +8,7 @@ import CheckIcon from "@material-ui/icons/Check";
import KeyboardArrowUpIcon from "@material-ui/icons/KeyboardArrowUp";
import KeyboardArrowDownIcon from "@material-ui/icons/KeyboardArrowDown";
import { user } from "~/Redux/actions";
import user1 from "~/assets/images/user1.png";
import user2 from "~/assets/images/user2.png";
import mobileHome from "~/assets/icons/mobileHome.svg";
@ -66,6 +66,82 @@ class NavbarDrawer extends Component {
message: "",
// onClick: this.props.logout,
},
];
this.links2 = [
{
name: "صفحه اصلی",
link: "/",
icon: <img src={mobileHome} alt="صفحه اصلی" />,
toast: "",
message: "",
},
{
name: "واقعیت افزوده",
link: "/ar",
icon: <img src={mobileAr} alt="واقعیت افزوده" />,
toast: "",
message: "",
},
{
name: "بارکد خوان",
link: "/qr-scan",
icon: <img src={qrcode} alt="بارکد خوان" />,
toast: "",
message: "",
},
{
name: "کتابهای من",
link: "/mybooks",
icon: <img src={mobileBlog} alt="کتابهای من" />,
toast: "",
message: "",
},
{
name: "سبد خرید",
link: "/cart",
icon: <img src={mobileBasket} alt="فروشگاه" />,
toast: "",
message: "",
},
{
name: "بلاگ",
link: "/blogs",
icon: <img src={mobileBlog} alt="بلاگ" />,
toast: "",
message: "",
},
{
name: "دانوینیها",
link: "/",
icon: <img src={mobileProfile} alt="دانوینیها" />,
toast: "به زودی این بخش فعال می شود",
message: "به زودی",
},
{
name: "پشتیبانی",
link: "/support",
icon: <img src={mobileDanger} alt="پشتیبانی" />,
toast: "",
message: "",
// onClick: this.props.logout,
},
{
name: "ویرایش مشخصات",
link: "/profile",
icon: <img src={mobileMail} alt="ویرایش مشخصات" />,
toast: "",
// message: "4 پیام",
},
{
name: "بروز رسانی",
link: "/",
icon: <img src={mobileLogout} alt="خروج" />,
toast: "",
message: "",
onClick: () => {
window.location.reload(true);
},
},
{
name: "خروج",
link: "/auth",
@ -73,10 +149,7 @@ class NavbarDrawer extends Component {
toast: "",
message: "",
onClick: () => {
localStorage.removeItem("refresh");
localStorage.removeItem("access");
localStorage.removeItem("userData");
window.location.reload();
this.props.logout({});
},
},
];
@ -145,7 +218,7 @@ class NavbarDrawer extends Component {
</div>
) : null}
<div className="navbar-drawer__bottom mt-3">
{(statusx ? this.props.links : this.links).map((item, key) => (
{(statusx ? this.links2 : this.links).map((item, key) => (
<Link
to={item.link}
key={key}
@ -171,92 +244,9 @@ class NavbarDrawer extends Component {
}
}
export default connect(
(state) => ({ status: state.user.status }),
{}
)(NavbarDrawer);
NavbarDrawer.defaultProps = {
links: [
{
name: "صفحه اصلی",
link: "/",
icon: <img src={mobileHome} alt="صفحه اصلی" />,
toast: "",
message: "",
},
{
name: "واقعیت افزوده",
link: "/ar",
icon: <img src={mobileAr} alt="واقعیت افزوده" />,
toast: "",
message: "",
},
{
name: "بارکد خوان",
link: "/qr-scan",
icon: <img src={qrcode} alt="بارکد خوان" />,
toast: "",
message: "",
},
{
name: "کتابهای من",
link: "/mybooks",
icon: <img src={mobileBlog} alt="کتابهای من" />,
toast: "",
message: "",
},
{
name: "سبد خرید",
link: "/cart",
icon: <img src={mobileBasket} alt="فروشگاه" />,
toast: "",
message: "",
},
{
name: "بلاگ",
link: "/blogs",
icon: <img src={mobileBlog} alt="بلاگ" />,
toast: "",
message: "",
},
{
name: "دانوینیها",
link: "/",
icon: <img src={mobileProfile} alt="دانوینیها" />,
toast: "به زودی این بخش فعال می شود",
message: "به زودی",
},
{
name: "پشتیبانی",
link: "/support",
icon: <img src={mobileDanger} alt="پشتیبانی" />,
toast: "",
message: "",
// onClick: this.props.logout,
},
{
name: "ویرایش مشخصات",
link: "/profile",
icon: <img src={mobileMail} alt="ویرایش مشخصات" />,
toast: "",
// message: "4 پیام",
},
{
name: "خروج",
link: "/auth",
icon: <img src={mobileLogout} alt="خروج" />,
toast: "",
message: "",
onClick: () => {
localStorage.removeItem("refresh");
localStorage.removeItem("access");
localStorage.removeItem("userData");
window.location.reload();
},
},
],
};
export default connect((state) => ({ status: state.user.status }), {
logout: user.logout,
})(NavbarDrawer);
const User = (props) => {
return (

@ -1,5 +1,5 @@
import React, { useState, Component } from "react";
import { Link } from "react-router-dom";
import { Link, useHistory } from "react-router-dom";
import { makeStyles } from "@material-ui/core/styles";
import { SwipeableDrawer } from "@material-ui/core";
import NavbarDrawer from "./NavbarDrawer/NavbarDrawer.js";
@ -14,6 +14,15 @@ import search from "../../../../assets/icons/navbarSearch.png";
import proxy from "~/Redux/proxy";
import "./index.scss";
function BackButton({ children }) {
let history = useHistory();
return (
<div type="button" onClick={() => history.goBack()}>
<img src={back} alt="بازگشت" />
</div>
);
}
const maxDesktopSize = 1250;
const maxMobileSize = 650;
const fontSize = {
@ -100,11 +109,7 @@ export default function MobileNavbar(props) {
>
ورود یا ثبتنام
</Link>
{page !== "home" ? (
<Link to={"/"}>
<img src={back} alt="بازگشت" />
</Link>
) : null}
{page !== "home" ? <BackButton /> : null}
</div>
<SwipeableDrawer
anchor="right"
@ -162,10 +167,7 @@ export default function MobileNavbar(props) {
<img src={ar} alt="AR" />
</Link>
)}
<Link to={"/"}>
<img src={back} alt="بازگشت" />
</Link>
<BackButton />
</div>
)}
</div>

@ -1,11 +1,14 @@
.navbar {
width: 100%;
max-width: 1250px;
width: 100vw;
position: fixed !important;
top: 0px !important;
overflow-x: hidden;
left: 0px !important;
// text-align: center !important;
// overflow-x: hidden;
background-color: white !important;
z-index: 300;
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
padding: 2px 0 !important;
// margin: 0px auto !important;
}

@ -41,22 +41,30 @@ class Home extends Component {
componentDidMount() {
const mobile = window.innerWidth < 1000;
window.scrollTo(0, 0);
if (mobile && this.props.status) {
console.log("xx");
// if (this.props.homeData.length == 0) {
if (mobile && this.props.userStatus) {
this.props.getHomeData({ device: 2 });
} else {
this.props.getHomeData({ device: 1, mobile: mobile ? 1 : 0 });
}
return null;
// }
}
//componentDidupdate = this.componentDidMount();
render() {
console.log("!xx");
const { homeData, loading, status } = this.props;
if (!loading && this.props.homeData.length == 0)
return this.componentDidMount();
const mobile = window.innerWidth < 1000;
if (loading)
if (loading && this.props.homeData.length == 0)
return (
<div
className="d-flex justify-content-center align-items-center"
style={{ height: "100vh", width: "100vw" }}
>
<Navbar page={"home"} />
<Loader />
</div>
);
@ -85,6 +93,7 @@ export default connect(
(state) => ({
homeData: state.publicApi.homeData,
loading: state.publicApi.loading,
userStatus: state.user.status,
}),
{ getHomeData: publicApi.getHomeData }
)(Home);

@ -11,7 +11,7 @@ import "./index.scss";
import document_red from "~/assets/icons/document-red.png";
import ebook_blue from "~/assets/icons/e-book-blue.png";
import basket_white from "~/assets/icons/basket-white.png";
const file = (fileId) => `${window.baseURL}file/${fileId}`;
const maxDesktopSize = 1250;
const fontSize = {
@ -26,32 +26,57 @@ const fontSize = {
};
function AddToCart(props) {
const { price, off, supportItems, page, loading, info } = props;
const {
price,
off,
supportItems,
page,
loading,
info,
sampleFileId,
productType,
} = props;
console.log({ info, productType });
return (
<>
{window.innerWidth > 1000 ? (
<section className="product-addtocart d-flex flex-column">
<div className="product-addtocart__box d-flex flex-column">
<div className="product-addtocart__box--price d-flex">
<div style={{ fontSize: fontSize.desktop.div }}>
<strong style={{ fontSize: fontSize.desktop.strong }}>
{price}
</strong>{" "}
تومان
<div className="product-addtocart__box--price d-flex ">
<div
style={{ fontSize: fontSize.desktop.div, width: "100%" }}
className="flex-column"
>
<div
style={{ fontSize: 14, fontWeight: "bold", width: "100%" }}
className="d-flex"
>
{info.product[productType].name}
</div>
<div style={{ float: "left" }}>
<strong style={{ fontSize: fontSize.desktop.strong }}>
{price}
</strong>{" "}
تومان
</div>
</div>
{off ? (
<span style={{ fontSize: fontSize.desktop.span }}>
{off} تومان تخفیف
</span>
) : null}
</div>
<button
<a
href={file(sampleFileId)}
target="_blank"
rel="noopener noreferrer"
style={{ fontSize: fontSize.desktop.button }}
className="product-addtocart__box--sampleButton"
>
مشاهده نمونه کتاب
<img src={document_red} />
</button>
<img src={document_red} alt="" />
</a>
<Link
// to={`/products/${
// page === "digital"
@ -67,8 +92,8 @@ function AddToCart(props) {
style={{ fontSize: fontSize.desktop.button, opacity: 0.3 }}
className="product-addtocart__box--digitalButton"
>
{page === "digital" ? "کتاب فیزیکی" : "نسخه دیجیتال"}
<img src={ebook_blue} />
{page === "digital" ? "کتاب چاپی" : "نسخه الکترونیک"}
<img src={ebook_blue} alt="" />
</Link>
<button
style={{ fontSize: fontSize.desktop.button }}
@ -87,15 +112,16 @@ function AddToCart(props) {
}
>
افزودن به سبد خرید
<img src={basket_white} />
<img src={basket_white} alt="" />
</button>
<div className="product-addtocart__box--accept d-flex">
<input type="checkbox" />
<p style={{ fontSize: fontSize.desktop.p }}>
نکته هایی که در هنگام خرید باید به آن توجه داشته باشید در این
قسمت از سایت سمت چپ قرار خواهند گرفت. در این قسمت فروشنده موارد
لازم را به خریدار یادآوری می کند.
</p>
<input type="checkbox" checked={true} />
<Link
to="/privacy"
style={{ fontSize: "11px", margin: 0, padding: 0 }}
>
شرایط استفاده از دانوین و حریم خصوصی را مطالعه کرده ام
</Link>
</div>
</div>
<footer className="product-addtocart__footer d-flex justify-content-between mt-3">

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

@ -7,7 +7,8 @@ import "./index.scss";
export default function Gallery(props) {
const [selectedMedia, setSelectedMedia] = useState(props.gallery[0]);
const [modal, setModal] = useState(null);
//FIXME:
if (props.gallery[0] != selectedMedia) setSelectedMedia(props.gallery[0]);
return (
<>
{window.innerWidth > 1000 ? (
@ -83,7 +84,7 @@ const Item = (props) => {
<>
{window.innerWidth > 1000 ? (
<div
style={{ border: active ? "4px solid #1BBC6E" : "" }}
style={{ boxShadow: active ? "0px 0px 10px #1BBC6EEE" : "" }}
className="product-gallery-item d-flex"
>
{item.type === "image" ? (

@ -22,7 +22,7 @@
// min-width: 110px;
height: 110px;
max-width: 110px;
border-radius: 21px;
border-radius: 25px;
position: relative;
margin: 5px;
cursor: pointer;

@ -13,6 +13,7 @@ import Comment from "./Comment/index";
import Breadcrumbs from "./BreadCrumb/index";
import Gallery from "./Gallery/index";
import Info from "./Info/index";
import AddToCart from "./AddToCart/index";
import HomeScroll from "../Home/HomeScroll/index";
import HomeSlider from "../Home/HomeSlider/index";
@ -28,7 +29,21 @@ import "./index.scss";
const maxDesktopSize = 1250;
const maxMobileSize = 550;
const grades = [
"پیش دبستان",
"اول",
"دوم",
"سوم",
"چهارم",
"پنجم",
"ششم",
"هفتم",
"هشتم",
"نهم",
"دهم",
"یازدهم",
"دوازدهم",
];
const fontSize = {
desktop: {
h1: window.innerWidth > maxDesktopSize ? 20 : window.innerWidth / 70,
@ -84,15 +99,14 @@ class Product extends Component {
<header className="product__header d-flex mt-4">
<Gallery gallery={info.files} />
<Info
subTitle={info.category}
title={
page === "digital"
? info.product[0].name
: info.product[1].name
}
subTitle={`پایه ${grades[info.gradeId]}`}
title={`${info.name} ${grades[info.gradeId]}`}
description={info.description || "توضیحات محصول خالیست"}
/>
<AddToCart
info={info}
sampleFileId={info.sampleFileId}
supportItems={supportItems}
price={
page === "digital"
@ -101,6 +115,7 @@ class Product extends Component {
}
// off={product.off}
page={page}
productType={page === "digital" ? 0 : 1}
/>
</header>
<div className="product__comments d-flex flex-column">
@ -116,8 +131,15 @@ class Product extends Component {
<div className="product__comments--list d-flex flex-column">
{info.comment.length > 0 ? (
<Comment comment={info.comment[0]} />
) : null}
info.comment.map((item, i) => (
<Comment comment={item} key={i} />
))
) : (
<div className="nocomments">
از اینکه با نظرات خود ما را در ارتقای کیفیت محصولاتمان
یاری کنید ، سپاسگزاریم
</div>
)}
</div>
</div>
{0 ? <Identifier item={[]} /> : null}
@ -147,9 +169,11 @@ class Product extends Component {
src={`https://dnvn.ir/api/v1/file/${info.fileIds}`}
alt={info.name}
/>
<h1 style={{ fontSize: fontSize.mobile.h1 }}>{info.name}</h1>
<h1 style={{ fontSize: fontSize.mobile.h1 }}>{`${
info.name
} پایه ${grades[info.gradeId]}`}</h1>
<h2 style={{ fontSize: fontSize.mobile.h2 }}>
{info.category}
{page !== "digital" ? "نسخه چاپی" : "نسخه الکترونیک"}
</h2>
<h3 style={{ fontSize: fontSize.mobile.h1 }}>
{page === "digital"
@ -174,7 +198,7 @@ class Product extends Component {
className="mobile-product__header--digitalButton"
style={{ fontSize: fontSize.mobile.a, opacity: 0.3 }}
>
{page === "digital" ? "کتاب فیزیکی" : "نسخه دیجیتال"}
{page === "digital" ? "نسخه چاپی" : "نسخه الکترونیک"}
</Link>
<Link
onClick={() =>
@ -207,7 +231,7 @@ class Product extends Component {
</div>
</header>
<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 }}>
{info.description || "توضیحات محصول خالیست"}
</p>
@ -224,18 +248,7 @@ class Product extends Component {
))} */}
</ul>
</div>
<div className="mobile-product__tips d-flex flex-column">
<h3 style={{ fontSize: fontSize.mobile.h3 }}>
نکاتی که هنگام خرید باید به آن توجه داشته باشید؟
</h3>
<ul>
{/* {product.tips.map((item, i) => (
<React.Fragment key={i}>
<Item item={item} />
</React.Fragment>
))} */}
</ul>
</div>
<div className="mobile-product__description d-flex">
<p style={{ fontSize: fontSize.mobile.p }}>
{info.description}
@ -252,11 +265,16 @@ class Product extends Component {
</button>
</div>
<div className="mobile-product__comments--list d-flex">
{info.comment.length > 0
? info.comment.map((item, i) => (
<Comment comment={item} key={i} />
))
: null}
{info.comment.length > 0 ? (
info.comment.map((item, i) => (
<Comment comment={item} key={i} />
))
) : (
<div className="nocomments">
از اینکه با نظرات خود ما را در ارتقای کیفیت محصولاتمان
یاری کنید ، سپاسگزاریم
</div>
)}
</div>
</div>
</div>
@ -268,6 +286,7 @@ class Product extends Component {
width: "100%",
height: "40px",
left: "0px",
}}
>
<Link

@ -6,6 +6,10 @@
direction: rtl;
padding-top: 70px;
overflow-x: hidden;
.nocomments {
color: gray;
font-size: 12px;
}
&__header {
width: 100%;
div {
@ -156,7 +160,8 @@
}
&--list {
width: 100vw;
width: 94vw;
margin: 0 3vw;
overflow-x: scroll !important;
transform: translateX(10px);
}
@ -232,3 +237,7 @@
}
}
}
.nocomments {
color: gray;
font-size: 12px;
}

@ -1,51 +1,51 @@
import React from 'react';
import CloseIcon from '@material-ui/icons/Close';
import React from "react";
import CloseIcon from "@material-ui/icons/Close";
import './index.scss';
import "./index.scss";
const maxDesktopSize = 1250;
const fontSize = {
h2 : window.innerWidth > maxDesktopSize ? 13 : window.innerWidth / 85,
button: window.innerWidth > maxDesktopSize ? 12 : window.innerWidth / 85,
}
h2: 15, //window.innerWidth > maxDesktopSize ? 13 : window.innerWidth / 85,
button: 15, //window.innerWidth > maxDesktopSize ? 12 : window.innerWidth / 85,
};
export default class AppliedFilters extends React.Component {
delete = (name, data) => {
if (name === "subject") {
this.props.parent.setState((prevState) => ({
selectedFilters: {
...prevState.selectedFilters,
subject: prevState.selectedFilters.subject.filter(item => item !== data),
subject: prevState.selectedFilters.subject.filter(
(item) => item !== data
),
},
}));
}else if(name === "level"){
} else if (name === "level") {
this.props.parent.setState((prevState) => ({
selectedFilters: {
...prevState.selectedFilters,
level: prevState.selectedFilters.level.filter(item => item !== data),
level: prevState.selectedFilters.level.filter(
(item) => item !== data
),
},
}));
}
};
render() {
const {data} = this.props;
return(
const { data } = this.props;
return (
<div className="products-filters-applied d-flex flex-column">
<header className="products-filters-applied__header d-flex align-items-center">
<span></span>
<h2 style={{ fontSize : fontSize.h2 }}>فیلترهای اعمال شده</h2>
<h2 style={{ fontSize: fontSize.h2 }}>فیلترهای اعمال شده</h2>
</header>
<div className="products-filters-applied__items d-flex flex-wrap">
{
data.level.map((item,i) => (
<Item name={"level"} data={item} key={i} parent={this} />
))
}
{
data.subject.map((item,i) => (
<Item name={"subject"} data={item} key={i} parent={this} />
))
}
{data.level.map((item, i) => (
<Item name={"level"} data={item} key={i} parent={this} />
))}
{data.subject.map((item, i) => (
<Item name={"subject"} data={item} key={i} parent={this} />
))}
</div>
</div>
);
@ -53,11 +53,21 @@ export default class AppliedFilters extends React.Component {
}
const Item = (props) => {
const {data, name, parent} = props;
return(
<button className="d-flex align-items-center" onClick={() => parent.delete(name, data)}>
const { data, name, parent } = props;
return (
<button
className="d-flex align-items-center"
onClick={() => parent.delete(name, data)}
>
<span style={{ fontSize: fontSize.button }}>{data}</span>
<CloseIcon style={{ fontSize: 12, marginRight: 10, borderRadius : '50%', border: '1px solid #b5b5b5' }} />
<CloseIcon
style={{
fontSize: 12,
marginRight: 10,
borderRadius: "50%",
border: "1px solid #b5b5b5",
}}
/>
</button>
);
}
};

@ -22,17 +22,19 @@ export default class TypicalFilters extends React.Component {
...prevState.selectedFilters,
subject:
prevState.selectedFilters.subject.indexOf(data) !== -1
? prevState.selectedFilters.subject.filter(item => item !== data)
? prevState.selectedFilters.subject.filter(
(item) => item !== data
)
: [...new Set([...prevState.selectedFilters.subject, data])],
},
}));
}else if(name === "level"){
} else if (name === "level") {
this.props.parent.setState((prevState) => ({
selectedFilters: {
...prevState.selectedFilters,
level:
prevState.selectedFilters.level.indexOf(data) !== -1
? prevState.selectedFilters.level.filter(item => item !== data)
? prevState.selectedFilters.level.filter((item) => item !== data)
: [...new Set([...prevState.selectedFilters.level, data])],
},
}));
@ -44,7 +46,7 @@ export default class TypicalFilters extends React.Component {
<div className="products-filters-typical d-flex flex-column">
<header className="products-filters-typical__header d-flex align-items-center">
<span style={{ background: theme }}></span>
<h2 style={{ fontSize: fontSize.h2 }}>{title}</h2>
<h2 style={{ fontSize: 15 }}>{title}</h2>
</header>
<div className="products-filters-typical__items d-flex flex-column">
{data.map((item, i) => (
@ -60,13 +62,22 @@ const Item = (props) => {
const { data, parent } = props;
const checkHandler = (data, name) => {
var available;
if(name === "subject"){
available = props.parent.props.parent.state.selectedFilters.subject.indexOf(data) !== -1 ? true : false;
}else if(name === "level"){
available = props.parent.props.parent.state.selectedFilters.level.indexOf(data) !== -1 ? true : false;
if (name === "subject") {
available =
props.parent.props.parent.state.selectedFilters.subject.indexOf(
data
) !== -1
? true
: false;
} else if (name === "level") {
available =
props.parent.props.parent.state.selectedFilters.level.indexOf(data) !==
-1
? true
: false;
}
return available;
}
};
return (
<div className="d-flex align-items-center mt-2">
<FormControlLabel
@ -77,10 +88,10 @@ const Item = (props) => {
name="checkedH"
/>
}
checked={checkHandler(data,parent.props.name)}
checked={checkHandler(data, parent.props.name)}
onChange={() => parent.onChange(parent.props.name, data)}
/>
<strong style={{ fontSize: fontSize.strong }}>{data}</strong>
<strong style={{ fontSize: 15 }}>{data}</strong>
</div>
);
};

@ -6,20 +6,28 @@ import Product from "../Product/index";
import Loader from "~/components/Loader/index";
import "./index.scss";
class List extends React.Component {
componentDidMount() {
this.props.getList();
if (this.props.list.length == 0) this.props.getList();
}
render() {
const { list, filterResult, loading } = this.props;
let { list, filterResult, loading } = this.props;
return window.innerWidth > 1000 ? (
<div className="products-list d-flex flex-wrap">
{!loading ? (
filterResult.length > 0 || localStorage.getItem("filter") ? (
filterResult.map((item, i) => <Product product={item} key={i} />)
filterResult.length > 0 ? (
(Array.isArray(filterResult) ? filterResult : []).map((item, i) => (
<Product product={item} key={i} />
))
) : (
list.map((item, i) => <Product product={item} key={i} />)
<div>محصولی با این مشخصات یافت نشد</div>
// (Array.isArray(list) ? list : []).map((item, i) => (
// <Product product={item} key={i} />
// ))
)
) : (
<div
@ -32,12 +40,21 @@ class List extends React.Component {
</div>
) : (
<>
<div className="mobile-products-list d-flex flex-wrap">
<div
className="mobile-products-list d-flex flex-wrap"
style={{ marginBottom: 40 }}
>
{!loading ? (
filterResult.length > 0 || localStorage.getItem("filter") ? (
filterResult.length > 0 ? (
filterResult.map((item, i) => <Product product={item} key={i} />)
) : (
list.map((item, i) => <Product product={item} key={i} />)
//list.map((item, i) => <Product product={item} key={i} />)
<div
align="center"
style={{ margin: "20px auto", color: "gray" }}
>
محصولی با این مشخصات یافت نشد
</div>
)
) : (
<div

@ -1,3 +1,4 @@
.products-list{
.products-list {
padding: 20px 20px;
margin: 0 auto;
}

@ -1,103 +1,179 @@
/* eslint-disable jsx-a11y/anchor-is-valid */
import React, { Component } from "react";
import { Link } from "react-router-dom";
import { toast } from "react-toastify";
import proxy from "~/Redux/proxy";
import basket from "../../../assets/icons/basket.png";
import basket2 from "../../../assets/icons/basket2.png";
import { connect } from "react-redux";
import { userProduct } from "~/Redux/actions";
import "./index.scss";
const grades = [
"پیش دبستان",
"اول",
"دوم",
"سوم",
"چهارم",
"پنجم",
"ششم",
"هفتم",
"هشتم",
"نهم",
"دهم",
"یازدهم",
"دوازدهم",
];
const maxMobileSize = 550;
const maxDesktopSize = 1250;
const fontSize = {
mobile: {
h1: window.innerWidth > maxMobileSize ? 18 : window.innerWidth / 22,
h2: window.innerWidth > maxMobileSize ? 16 : window.innerWidth / 34,
div: window.innerWidth > maxMobileSize ? 18 : window.innerWidth / 32,
a: window.innerWidth > maxMobileSize ? 15 : window.innerWidth / 26,
},
desktop: {
h1: window.innerWidth > maxDesktopSize ? 18 : window.innerWidth / 65,
h2: window.innerWidth > maxDesktopSize ? 15 : window.innerWidth / 75,
div: window.innerWidth > maxDesktopSize ? 16 : window.innerWidth / 85,
old: window.innerWidth > maxDesktopSize ? 9 : window.innerWidth / 120,
},
};
export default class Product extends Component {
class Product extends Component {
render() {
const { product, id } = this.props;
return (
<>
{window.innerWidth < 1000 ? (
<Link
to={`/products/physical/${product.id}`}
className="mobile-products-product d-flex flex-column"
>
<img
src={`https://dnvn.ir/api/v1/file/${product.fileIds}`}
alt={"عکس مجصول"}
/>
<div className="mobile-products-product__info d-flex flex-column">
<h1 style={{ fontSize: fontSize.mobile.h1 }}>{product.name}</h1>
<div className="mobile-products-product d-flex flex-column ">
<Link
to={`/products/physical/${product.id}`}
className=" align-items-center d-flex flex-column "
style={{ textDecoration: "none" }}
>
<img
className="pimg"
src={`https://dnvn.ir/api/v1/file/${product.fileIds}`}
alt={"عکس مجصول"}
/>
<div className="mobile-products-product__info d-flex flex-column">
<h1>{`${product.name} پایه ${grades[product.gradeId]}`}</h1>
</div>
</Link>
<div className="mobile-products-product__links d-flex flex-column">
<div className="d-flex" style={{ width: "100%" }}>
<Link
to={`/products/physical/${product.id}`}
className="mobile-products-product__links--physical d-flex justify-content-between align-items-center"
>
<h2> نسخه چاپی</h2>
<span>{product.product[1].price} تومان</span>
</Link>
<div
className="mobile-products-product__links--basket d-flex"
style={{ backgroundColor: "#7fc75d" }}
onClick={() => {
proxy.status()
? this.props.pushToCart({
productId: product.product[1].id,
userId: this.props.id,
count: 1,
})
: toast.info("ابتدا وارد حساب کاربری خود شوید.");
}}
>
<img src={basket2} alt="" width="20px" height="20px" />
</div>
</div>
<div className="d-flex" style={{ width: "100%", opacity: 0.3 }}>
<Link
to={`/products/digital/${product.id}`}
className="mobile-products-product__links--ar d-flex justify-content-between align-items-center"
>
<h2> الکترونیکی</h2>
<span>{product.product[0].price} تومان</span>
</Link>
<div
className="mobile-products-product__links--basket d-flex"
// onClick={() => {
// proxy.status()
// ? this.props.pushToCart({
// productId: product.product[0].id,
// userId: this.props.id,
// count: 1,
// })
// : toast.info("ابتدا وارد حساب کاربری خود شوید.");
// }}
>
<img src={basket} alt="" width="20px" height="20px" />
</div>
</div>
</div>
<div className="mobile-products-product__links d-flex mt-2">
<div
// to={`/products/physical/${product.id}`}
style={{ fontSize: fontSize.mobile.a }}
className="mobile-products-product__links--physical d-flex justify-content-between align-items-center"
</div>
) : null}
{window.innerWidth > 1000 ? (
<article className="products-product d-flex flex-column align-items-center">
<Link
to={`/products/physical/${product.id}`}
style={{ textDecoration: "none" }}
>
<img
className="pimg"
src={`https://dnvn.ir/api/v1/file/${product.fileIds}`}
alt={product.name}
/>
<h1 style={{ fontSize: 15 }}>
{`${product.name} پایه ${grades[product.gradeId]}`}
</h1>
</Link>
<div className="d-flex" style={{ width: "100%" }}>
<Link
to={`/products/physical/${product.id}`}
style={{ fontSize: 12 }}
className="products-product--physical d-flex justify-content-between align-items-center"
>
<h2 style={{ fontSize: fontSize.mobile.h2 }}>کتاب</h2>
<span style={{ fontSize: fontSize.mobile.h2 }}>
<h2 style={{ fontSize: 12 }}>نسخه چاپی</h2>
<span style={{ fontSize: 12 }}>
{product.product[1].price} تومان
</span>
</Link>
<div
className="products-product--basket d-flex"
style={{ backgroundColor: "#7fc75d", marginTop: 0 }}
onClick={() => {
proxy.status()
? this.props.pushToCart({
productId: product.product[1].id,
userId: this.props.id,
count: 1,
})
: toast.info("ابتدا وارد حساب کاربری خود شوید.");
}}
>
<img src={basket2} alt="" width="20px" height="20px" />
</div>
<a
href="#"
</div>
<div className="d-flex" style={{ width: "100%", opacity: 0.3 }}>
<Link
// to={`/products/digital/${product.id}`}
style={{ fontSize: fontSize.mobile.a, opacity: 0.3 }}
className="mobile-products-product__links--ar d-flex justify-content-between align-items-center"
className="products-product--ar d-flex justify-content-between align-items-center"
>
<h2 style={{ fontSize: fontSize.mobile.h2 }}>دیجیتال</h2>
<span style={{ fontSize: fontSize.mobile.h2 }}>
<h2 style={{ fontSize: 12 }}>نسخه الکترونیک</h2>
<span style={{ fontSize: 12 }}>
{product.product[0].price} تومان
</span>
</a>
</Link>
<div
className="products-product--basket d-flex"
// onClick={() => {
// proxy.status()
// ? this.props.pushToCart({
// productId: product.product[0].id,
// userId: this.props.id,
// count: 1,
// })
// : toast.info("ابتدا وارد حساب کاربری خود شوید.");
// }}
>
<img src={basket} alt="" width="20px" height="20px" />
</div>
</div>
</Link>
) : null}
{window.innerWidth > 1000 ? (
<article className="products-product d-flex flex-column align-items-center">
<img
src={`https://dnvn.ir/api/v1/file/${product.fileIds}`}
alt={product.name}
/>
<h1 style={{ fontSize: fontSize.desktop.h1 }}>{product.name}</h1>
<Link
to={`/products/physical/${product.id}`}
style={{ fontSize: fontSize.mobile.a }}
className="products-product--physical d-flex justify-content-between align-items-center"
>
<h2 style={{ fontSize: fontSize.desktop.h2 }}>کتاب</h2>
<span style={{ fontSize: fontSize.desktop.h2 }}>
{product.product[1].price} تومان
</span>
{/* {!product.status.digital ? (
<img src={basket} alt="افزودن به سبد خرید" />
) : null} */}
</Link>
<Link
// to={`/products/digital/${product.id}`}
style={{ fontSize: fontSize.mobile.a, opacity: 0.3 }}
className="products-product--ar d-flex justify-content-between align-items-center"
>
<h2 style={{ fontSize: fontSize.desktop.h2 }}>دیجیتال</h2>
<span style={{ fontSize: fontSize.desktop.h2 }}>
{product.product[0].price} تومان
</span>
</Link>
</article>
) : null}
</>
);
}
}
export default connect((state) => ({}), {
pushToCart: userProduct.add,
})(Product);

@ -1,13 +1,12 @@
.products-product {
width: calc(100% / 4);
// width: calc(100% / 4);
padding: 10px;
margin-bottom: 20px;
text-align: center;
&:hover {
}
img {
width: 100%;
.pimg {
height: 200px;
border-radius: 30px;
}
@ -22,11 +21,12 @@
&--physical {
background-color: #7fc75d;
color: white;
padding: 5px 7px;
padding: 2px 7px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
width: 100%;
flex: 1;
margin: 0px 0px 0px 2px;
h2 {
margin: 0px;
}
@ -35,12 +35,31 @@
}
}
&--ar {
margin: 10px 0px 0px 2px;
border: 1px solid #7fc75d;
padding: 5px 7px;
border-radius: 7px;
color: #7fc75d;
text-decoration: none;
font-family: numeralLight;
flex: 1;
h2 {
margin: 0px;
}
&:hover {
color: #7fc75d;
}
}
&--basket {
// display: inline-block !important;
cursor: pointer;
border: 1px solid #7fc75d;
padding: 5px 7px;
border-radius: 7px;
color: #7fc75d;
margin-top: 10px;
width: 100%;
width: 33px;
text-decoration: none;
font-family: numeralLight;
h2 {
@ -54,200 +73,94 @@
.mobile-products-product {
text-decoration: none;
}
@media screen and (max-width: 350px) {
.mobile-products-product {
h2 {
margin: 0px;
font-size: 12px;
}
width: 100%;
background-color: #fafafa;
margin: 10px 5px 0;
padding: 0 05px 10px;
border-radius: 0.5rem;
box-shadow: 0 3px 8px 0 rgb(0 0 0 / 16%);
.pimg {
width: 80%;
margin: 5px auto;
border-radius: 8px;
}
&__info {
color: #02a1a6;
font-size: 14px;
text-align: center;
h1,
h2 {
margin: 0px;
font-size: 15px;
}
}
&__links {
width: 80%;
margin: 5px auto;
justify-content: space-between;
margin: 0px !important;
width: 100%;
background-color: #fafafa;
margin: 15px 10px 0;
border-radius: 0.5rem;
box-shadow: 0 3px 8px 0 rgb(0 0 0 / 16%);
img {
width: 80%;
margin: 10px auto;
border-radius: 8px;
}
&__info {
width: 80%;
margin: 10px auto;
h1 {
font-family: NumeralLight;
color: #4d4d4d;
letter-spacing: -1px;
}
a {
width: 48%;
padding: 5px 3px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
}
&--physical {
background-color: #7fc75d;
color: white;
font-size: 12px;
a,
div {
// width: 48%;
// padding: 5px 3px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
}
&--physical {
flex: 1;
background-color: #7fc75d;
color: white;
margin-top: 5px;
margin-left: 2px;
padding: 5px !important;
flex: 1 !important;
h2 {
padding: 5px !important;
}
&--ar {
border: 1px solid #7fc75d;
color: #7fc75d;
span {
text-align: left !important;
}
}
&__links {
width: 80%;
margin: 10px auto;
justify-content: space-between;
a,
div {
width: 48%;
padding: 5px 3px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
}
&--physical {
background-color: #7fc75d;
color: white;
}
&--ar {
border: 1px solid #7fc75d;
color: #7fc75d;
&--ar {
flex: 1;
border: 1px solid #7fc75d;
color: #7fc75d;
margin-top: 5px !important;
margin-left: 2px;
flex: 1 !important;
padding: 5px !important;
span {
text-align: left !important;
}
}
&--basket {
width: 33px;
border: 1px solid #7fc75d;
color: #7fc75d;
margin-left: 2px;
margin-bottom: 0px;
margin-top: 5px;
justify-content: center;
width: 33px !important;
padding: 5px;
}
}
}
@media screen and (min-width: 350px) {
.mobile-products-product {
h2 {
margin: 0px;
}
width: calc(50% - 20px);
background-color: #fafafa;
margin: 8px;
border-radius: 0.5rem;
box-shadow: 0 3px 8px 0 rgb(0 0 0 / 16%);
img {
width: 80%;
margin: 5px auto;
border-radius: 8px;
}
&__info {
width: 80%;
margin: 0px auto;
h1 {
font-family: NumeralLight;
color: #4d4d4d;
letter-spacing: -1px;
margin: 0px;
text-align: center;
}
a,
div {
width: 48%;
padding: 5px 3px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
}
&--physical {
background-color: #7fc75d;
color: white;
}
&--ar {
border: 1px solid #7fc75d;
color: #7fc75d;
}
}
&__links {
width: 80%;
margin: 10px auto;
flex-direction: column;
a,
div {
width: 100%;
padding: 10px 5px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
margin-bottom: 5px;
}
&--physical {
background-color: #7fc75d;
color: white;
}
&--ar {
border: 1px solid #7fc75d;
color: #7fc75d;
}
}
width: calc(50% - 10px);
}
}
@media screen and (min-width: 550px) {
.mobile-products-product {
h2 {
margin: 0px;
}
width: calc(33% - 20px);
background-color: #fafafa;
margin: 10px;
border-radius: 0.5rem;
box-shadow: 0 3px 8px 0 rgb(0 0 0 / 16%);
img {
width: 80%;
margin: 10px auto;
border-radius: 8px;
}
&__info {
width: 80%;
margin: 10px auto;
h1 {
font-family: NumeralLight;
color: #4d4d4d;
letter-spacing: -1px;
}
a,
div {
width: 48%;
padding: 5px 3px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
}
&--physical {
background-color: #7fc75d;
color: white;
}
&--ar {
border: 1px solid #7fc75d;
color: #7fc75d;
}
}
&__links {
width: 80%;
margin: 10px auto;
flex-direction: column;
a,
div {
width: 100%;
padding: 10px 5px;
border-radius: 7px;
font-family: numeralMedium;
text-decoration: none;
margin-bottom: 5px;
}
&--physical {
background-color: #7fc75d;
color: white;
}
&--ar {
border: 1px solid #7fc75d;
color: #7fc75d;
}
}
width: calc(33% - 10px);
}
}

@ -16,10 +16,10 @@ const BootstrapInput = withStyles((theme) => ({
position: "relative",
backgroundColor: theme.palette.background.paper,
border: "1px solid #a5a5a5",
fontSize: window.innerWidth > 1000 ? 16 : "calc(100vw / 30)",
fontSize: 15,
color: "#a5a5a5",
// maxWidth : 70,
minWidth: window.innerWidth > 420 ? 100 : 80,
minWidth: window.innerWidth > 420 ? 90 : 80,
height: "35px",
padding: "5px",
transition: theme.transitions.create(["border-color", "box-shadow"]),

@ -100,7 +100,7 @@ class Products extends Component {
<div className="mobile-products__search d-flex">
<input
type="search"
style={{ fontSize: fontSize.mobile.input }}
style={{ fontSize: 15 }}
placeholder={"جستجو"}
onChange={(e) => this.handleProductSearch(e.target.value)}
/>
@ -123,6 +123,7 @@ class Products extends Component {
width: "100%",
height: "40px",
left: 0,
}}
>
<Link

@ -2,7 +2,7 @@
width: 100vw;
max-width: 1250px;
margin: 0px auto;
padding: 0px 10px;
padding: 0px 15px;
direction: rtl;
min-height: calc(100vh - 288px);
padding-top: 70px;
@ -19,7 +19,7 @@
}
.mobile-products {
width: 100vw;
max-width: 600px;
max-width: 750px;
margin: 0px auto 40px;
padding: 0px;
direction: rtl;

@ -220,8 +220,9 @@ class QR extends Component {
<div>
<img
src={exit}
alt="خروج"
alt="انصراف"
onClick={() =>
// this.props.logout({})
this.setState({ menu: !this.state.menu })
}
/>

@ -0,0 +1,58 @@
import React, { useState } from "react";
import { pdfjs, Document, Page } from "react-pdf";
import LinearProgress from "@material-ui/core/LinearProgress";
import "./index.scss";
import Navbar from "../Home/Navbar/index";
// pdfjs.PDFJS.workerSrc = "/js/pdf.worker.js";
pdfjs.GlobalWorkerOptions.workerSrc = "https://dnvn.ir/pdf.worker.min.js";
const file = (fileId) => `${window.baseURL}file/${fileId}`;
export default function Sample({ fileId }) {
const [numPages, setNumPages] = useState(null);
const [pageNumber, setPageNumber] = useState(1);
const [progress, setProgress] = useState(null);
function onDocumentLoadSuccess({ numPages }) {
setNumPages(numPages);
setProgress(null);
}
const id = +window.location.pathname.split("/").slice(-1)[0];
console.log(progress);
return (
<div className="sample">
<Navbar page="sample" />
<br />
<br />
<br />
{progress < 100 ? (
<LinearProgress variant="determinate" value={progress} />
) : null}
<Document
height="400"
width="300"
className="sample_documnet"
onLoadProgress={({ loaded, total }) => {
console.log({ loaded, total, progress });
setProgress((loaded / total) * 100);
}}
//file={"../" + id + ".pdf"}
//file={"https://dnvn.ir/files/sample/science/7.pdf"}
file={file(id)}
onLoadSuccess={onDocumentLoadSuccess}
>
<Page
pageNumber={pageNumber}
noData="نمونه ای برای این محصول درج نشده است"
/>
</Document>
<div onClick={() => setPageNumber(Math.max(1, pageNumber - 1))}>قبل</div>
<p>
صفجه {pageNumber} از {numPages}
</p>
<div onClick={() => setPageNumber(Math.min(numPages, pageNumber + 1))}>
بعد{" "}
</div>
</div>
);
}

@ -0,0 +1,5 @@
.sample {
&_document {
margin-top: 85px;
}
}

@ -34,7 +34,8 @@ class Support extends Component {
text: null,
};
componentDidMount() {
this.props.getList();
console.log(this.props);
// this.props?.getList();
}
render() {
@ -61,7 +62,7 @@ class Support extends Component {
name="book"
options={[
...new Set(
this.props.list.map((item) => item.product.book.name)
this.props.list?.map((item) => item.product.book.name) || []
),
]}
parent={this}
@ -79,7 +80,7 @@ class Support extends Component {
export default connect(
(state) => ({
list: state.userProduct.mylist,
list: state.userProduct.mylist || [],
}),
{ getList: userProduct.mylist }
)(Support);

@ -1164,6 +1164,13 @@
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.4.3", "@babel/runtime@^7.6.2":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a"
integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.5.tgz#665450911c6031af38f81db530f387ec04cd9a98"
@ -1716,6 +1723,148 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.3.tgz#8b68da1ebd7fc603999cf6ebee34a4899a14b88e"
integrity sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==
"@react-pdf/font@^2.0.12":
version "2.0.12"
resolved "https://registry.yarnpkg.com/@react-pdf/font/-/font-2.0.12.tgz#57e32ecf72efb1c0cb0eb85984e4d67e4aef5538"
integrity sha512-Bxm8kZEpvfdV24fWgHKPi/Or1rkcEKlbLTzzEMvHxWQI37AGgLqx18SxvjxN8Uf0RH84vkZs/KlAeDQkhfPSqA==
dependencies:
"@react-pdf/fontkit" "^2.0.6"
"@react-pdf/types" "^2.0.5"
cross-fetch "^3.0.4"
is-url "^1.2.4"
"@react-pdf/fontkit@^2.0.6":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@react-pdf/fontkit/-/fontkit-2.0.6.tgz#1aad76bba2e7925631824e54a98ae9b63a888428"
integrity sha512-9l85jaY8WiyLHMZvh4d08q5TMWPRwqZIwN6uLzqaoMjMqJ1A3I6StE5kaxvEGVxvFvAeExHfFVgKdyeFmLQg4g==
dependencies:
"@react-pdf/unicode-properties" "^2.4.1"
brotli "^1.2.0"
clone "^1.0.4"
deep-equal "^1.0.0"
dfa "1.1.0"
restructure "^0.5.3"
tiny-inflate "^1.0.2"
unicode-trie "^0.3.0"
"@react-pdf/image@^2.0.3":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@react-pdf/image/-/image-2.0.3.tgz#6d20b86b7adc286573cd09a31842a29b8ff09817"
integrity sha512-7PbId4yS1VCOj3rkeLsA8OmPiah2nkLXbBIxBpq/pyU+vcc0EqBhzSy/9Wkhw23uV5AZxE26V+ngMNhWdcgctw==
dependencies:
"@react-pdf/png-js" "^2.0.2"
cross-fetch "^3.0.4"
"@react-pdf/layout@^2.0.19":
version "2.0.19"
resolved "https://registry.yarnpkg.com/@react-pdf/layout/-/layout-2.0.19.tgz#5387f79a7724fd801c9bb6ed44388a8219beeb91"
integrity sha512-6kQDQ9AFvDKNO8rwUHyj7mNbcYG/4qK2BHtO3/i9MRQbNaEW/+E81XC+ufG5eQ7bSTNPsPE1hkj3by6CwjZQVw==
dependencies:
"@babel/runtime" "^7.6.2"
"@react-pdf/image" "^2.0.3"
"@react-pdf/pdfkit" "^2.0.11"
"@react-pdf/primitives" "^2.0.0"
"@react-pdf/stylesheet" "^2.0.11"
"@react-pdf/textkit" "^2.0.6"
"@react-pdf/types" "^2.0.5"
"@react-pdf/yoga" "^2.0.2"
cross-fetch "^3.0.4"
emoji-regex "^8.0.0"
queue "^6.0.1"
ramda "^0.26.1"
"@react-pdf/pdfkit@^2.0.11":
version "2.0.11"
resolved "https://registry.yarnpkg.com/@react-pdf/pdfkit/-/pdfkit-2.0.11.tgz#60f8fa9a5121f16da6c013c6a956a0a9cb46909c"
integrity sha512-cQYgatQeyZe7UcSJyN4ZPUiDG90heyYMrwHQYaH+1sJIXYRNoxTfHb4ubjjQ3K3bJAzrMMn/CSW92ngiQWUYSg==
dependencies:
"@react-pdf/fontkit" "^2.0.6"
"@react-pdf/png-js" "^2.0.2"
crypto-js "^4.0.0"
"@react-pdf/png-js@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@react-pdf/png-js/-/png-js-2.0.2.tgz#1267f7a02701433dac1db88e07cf55b3771c7139"
integrity sha512-hdOxW8JiWKy1JtocfMG6RhNFRLJeJIHOdAPg9CNpg4Az7PrDdtPoEZfQ1rXSuPhX2iHH5Brfb3Epv+VvUl7BKg==
"@react-pdf/primitives@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@react-pdf/primitives/-/primitives-2.0.0.tgz#2a97ef32c97050e0039a427d73f673da3bd914b5"
integrity sha512-Yh8TEjzyObnalM271znZVJsy6BiY+s6uTOCjLJL8jSvU1rGA1p45VjK7AnNpgH+n+JzpddXQweT2oE2HWGuYFA==
"@react-pdf/render@^2.0.13":
version "2.0.13"
resolved "https://registry.yarnpkg.com/@react-pdf/render/-/render-2.0.13.tgz#fc6e2dc741925fbd6dea0e26d608571e0f231304"
integrity sha512-SJAnojyBpggXDLwvPWQSbw3kc+6SxgJYgLkaRWtvwfviBugYINzf3ADJi0lnt2h6k36vpHQ2aMEerxMbn1LWtA==
dependencies:
"@react-pdf/primitives" "^2.0.0"
"@react-pdf/textkit" "^2.0.6"
"@react-pdf/types" "^2.0.5"
abs-svg-path "^0.1.1"
color-string "^1.5.3"
normalize-svg-path "^1.1.0"
parse-svg-path "^0.1.2"
ramda "^0.26.1"
svg-arc-to-cubic-bezier "^3.2.0"
"@react-pdf/renderer@^2.0.19":
version "2.0.19"
resolved "https://registry.yarnpkg.com/@react-pdf/renderer/-/renderer-2.0.19.tgz#00b808973f8ac92d1f822412c677d8b5cd76ab5f"
integrity sha512-7e6vv+ijPhRewJR1xwG4HVsH5mNgJ/L50ljtuseNuvVV5NjUdLlW1HUdJPAWZL1e3p8a7YHu0VCkIAccajsPcA==
dependencies:
"@babel/runtime" "^7.6.2"
"@react-pdf/font" "^2.0.12"
"@react-pdf/layout" "^2.0.19"
"@react-pdf/pdfkit" "^2.0.11"
"@react-pdf/primitives" "^2.0.0"
"@react-pdf/render" "^2.0.13"
"@react-pdf/types" "^2.0.5"
blob-stream "^0.1.3"
queue "^6.0.1"
ramda "^0.26.1"
react-reconciler "^0.23.0"
scheduler "^0.15.0"
"@react-pdf/stylesheet@^2.0.11":
version "2.0.11"
resolved "https://registry.yarnpkg.com/@react-pdf/stylesheet/-/stylesheet-2.0.11.tgz#e430c27657bf608f5ec7c710c791fe0f36a8226d"
integrity sha512-Gw1qj8Gu7JZstPhyNrrTJJxMg661Dw1I0AiipodFQL/4iGyIVhawYddKlV/gghAPPRiVKEn6jUmkCjgKoC100g==
dependencies:
"@react-pdf/types" "^2.0.5"
color-string "^1.5.3"
hsl-to-hex "^1.0.0"
media-engine "^1.0.3"
ramda "^0.26.1"
"@react-pdf/textkit@^2.0.6":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@react-pdf/textkit/-/textkit-2.0.6.tgz#12fa9dfcef5da1f552dd92ac7983a029ce569e25"
integrity sha512-B+pZpiAKPZ4shGv9/rRspZX6O9P6u1gfsXcGiS2/o9LAGIspoNuSE217Ir7oRKUqHtPdYslviY42AzvY4nes3g==
dependencies:
"@babel/runtime" "^7.4.3"
"@react-pdf/unicode-properties" "^2.4.1"
hyphen "^1.6.4"
ramda "^0.26.1"
"@react-pdf/types@^2.0.5":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@react-pdf/types/-/types-2.0.5.tgz#076036fb991de98bb021f8d2c6d73cbe9e75683d"
integrity sha512-uyLwL0bBpzXAUI4BYrHkhtBtoHZFhqfzXKmwN8Hc7vVp5sguQpZYOXjCW5UYopqUlSOMdbnrWUsVQYbUa52KiQ==
"@react-pdf/unicode-properties@^2.4.1":
version "2.4.1"
resolved "https://registry.yarnpkg.com/@react-pdf/unicode-properties/-/unicode-properties-2.4.1.tgz#7e0dd41537e9d91e18c8a3bbab0c15a2b86df2dc"
integrity sha512-B6jnyp7KaTcQeWbkk5wlBEWrGrsGAMtcWVHIyUArBK2HXo3CDkCyx3/AiRsZYgBLBJzjmD7Qv6nPK9ksXNQD/Q==
dependencies:
unicode-trie "^0.3.0"
"@react-pdf/yoga@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@react-pdf/yoga/-/yoga-2.0.2.tgz#5d23a70ec86f4b166fa5fcb03454e742cbb865de"
integrity sha512-BKEbxIw1XHy3BDYAaOOjrJRLQZUmh+DIv+WIYO6MbwPXP7WLhbggqhC1MOLS3ZyNyBC12VInsYEdpF1l5ia3ng==
dependencies:
"@types/yoga-layout" "^1.9.3"
"@restart/context@^2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02"
@ -2246,6 +2395,11 @@
dependencies:
"@types/yargs-parser" "*"
"@types/yoga-layout@^1.9.3":
version "1.9.4"
resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.4.tgz#fad54fef623464dacd9e765d854f0e76ff1184f7"
integrity sha512-RRHc1+8Hc5mf/2lZKnom6kCnqcNS07s8keahniWTOva0KELF6RgDJmaEcvGEKUUJgN4UgessmEsWuidaOycIOw==
"@typescript-eslint/eslint-plugin@^4.5.0":
version "4.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz#b9c7313321cb837e2bf8bebe7acc2220659e67d3"
@ -2559,6 +2713,11 @@ abab@^2.0.3, abab@^2.0.5:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==
abs-svg-path@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/abs-svg-path/-/abs-svg-path-0.1.1.tgz#df601c8e8d2ba10d4a76d625e236a9a39c2723bf"
integrity sha1-32Acjo0roQ1KdtYl4japo5wnI78=
accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
@ -2673,6 +2832,11 @@ alphanum-sort@^1.0.0:
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
ansi-colors@^3.0.0:
version "3.2.4"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
@ -2880,11 +3044,25 @@ assign-symbols@^1.0.0:
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
ast-transform@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/ast-transform/-/ast-transform-0.0.0.tgz#74944058887d8283e189d954600947bc98fe0062"
integrity sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=
dependencies:
escodegen "~1.2.0"
esprima "~1.0.4"
through "~2.3.4"
ast-types-flow@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
ast-types@^0.7.0:
version "0.7.8"
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9"
integrity sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=
astral-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
@ -3177,7 +3355,7 @@ babel-preset-react-app@^10.0.0:
babel-plugin-macros "2.8.0"
babel-plugin-transform-react-remove-prop-types "0.4.24"
babel-runtime@^6.26.0:
babel-runtime@^6.11.6, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
@ -3195,7 +3373,7 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base64-js@^1.0.2:
base64-js@^1.0.2, base64-js@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@ -3250,6 +3428,18 @@ bindings@^1.5.0:
dependencies:
file-uri-to-path "1.0.0"
blob-stream@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/blob-stream/-/blob-stream-0.1.3.tgz#98d668af6996e0f32ef666d06e215ccc7d77686c"
integrity sha1-mNZor2mW4PMu9mbQbiFczH13aGw=
dependencies:
blob "0.0.4"
blob@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
integrity sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=
bluebird@^3.5.5:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
@ -3339,11 +3529,25 @@ brorand@^1.0.1, brorand@^1.1.0:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
brotli@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/brotli/-/brotli-1.3.2.tgz#525a9cad4fcba96475d7d388f6aecb13eed52f46"
integrity sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=
dependencies:
base64-js "^1.1.2"
browser-process-hrtime@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
browser-resolve@^1.8.1:
version "1.11.3"
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
dependencies:
resolve "1.1.7"
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
version "1.2.0"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
@ -3375,6 +3579,15 @@ browserify-des@^1.0.0:
inherits "^2.0.1"
safe-buffer "^5.1.2"
browserify-optional@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/browserify-optional/-/browserify-optional-1.0.1.tgz#1e13722cfde0d85f121676c2a72ced533a018869"
integrity sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=
dependencies:
ast-transform "0.0.0"
ast-types "^0.7.0"
browser-resolve "^1.8.1"
browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
version "4.1.0"
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d"
@ -3782,6 +3995,11 @@ cliui@^6.0.0:
strip-ansi "^6.0.0"
wrap-ansi "^6.2.0"
clone@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
clsx@^1.0.4, clsx@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
@ -3838,6 +4056,14 @@ color-name@^1.0.0, color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.5.3:
version "1.6.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312"
integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color-string@^1.5.4:
version "1.5.5"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014"
@ -4111,6 +4337,13 @@ create-index@^2.6.0:
moment "^2.25.3"
yargs "^15.3.1"
cross-fetch@^3.0.4:
version "3.1.4"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39"
integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==
dependencies:
node-fetch "2.6.1"
cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@ -4148,6 +4381,11 @@ crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
crypto-js@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
@ -4506,7 +4744,7 @@ deep-equal@1.0.1:
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
deep-equal@^1.0.1:
deep-equal@^1.0.0, deep-equal@^1.0.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
@ -4624,6 +4862,13 @@ detect-port-alt@1.1.6:
address "^1.0.1"
debug "^2.6.0"
dfa@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.1.0.tgz#d30218bd10d030fa421df3ebbc82285463a31781"
integrity sha1-0wIYvRDQMPpCHfPrvIIoVGOjF4E=
dependencies:
babel-runtime "^6.11.6"
diff-sequences@^26.6.2:
version "26.6.2"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
@ -5018,6 +5263,17 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
escodegen@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.2.0.tgz#09de7967791cc958b7f89a2ddb6d23451af327e1"
integrity sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=
dependencies:
esprima "~1.0.4"
estraverse "~1.5.0"
esutils "~1.0.0"
optionalDependencies:
source-map "~0.1.30"
eslint-config-react-app@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz#ccff9fc8e36b322902844cbd79197982be355a0e"
@ -5235,6 +5491,11 @@ esprima@^4.0.0, esprima@^4.0.1:
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esprima@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad"
integrity sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=
esquery@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
@ -5259,6 +5520,11 @@ estraverse@^5.1.0, estraverse@^5.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
estraverse@~1.5.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71"
integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=
estree-walker@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
@ -5274,6 +5540,11 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
esutils@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570"
integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=
etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
@ -5523,6 +5794,14 @@ file-loader@6.1.1:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
file-loader@^6.0.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d"
integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==
dependencies:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
@ -6128,6 +6407,18 @@ hsl-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=
hsl-to-hex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz#c58c826dc6d2f1e0a5ff1da5a7ecbf03faac1352"
integrity sha1-xYyCbcbS8eCl/x2lp+y/A/qsE1I=
dependencies:
hsl-to-rgb-for-reals "^1.1.0"
hsl-to-rgb-for-reals@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz#e1eb23f6b78016e3722431df68197e6dcdc016d9"
integrity sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==
hsla-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
@ -6276,6 +6567,11 @@ human-signals@^1.1.1:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
hyphen@^1.6.4:
version "1.6.4"
resolved "https://registry.yarnpkg.com/hyphen/-/hyphen-1.6.4.tgz#9859678fe1af2793b49e7d466e85f85b5698917e"
integrity sha512-nWwvXceFMAFIjkiRzqZMZSOa1LVngieSolnYIVKWSwmDwMSmdutjzqImmdbxe2eUCfX693fgrCgtPjbllqx1lA==
hyphenate-style-name@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
@ -6820,6 +7116,11 @@ is-typedarray@^1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
is-url@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
is-windows@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
@ -7828,6 +8129,11 @@ magic-string@^0.25.0, magic-string@^0.25.7:
dependencies:
sourcemap-codec "^1.4.4"
make-cancellable-promise@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/make-cancellable-promise/-/make-cancellable-promise-1.1.0.tgz#b4e9fcb31db3a27417e44f80cffa598ec9ac9f4e"
integrity sha512-X5Opjm2xcZsOLuJ+Bnhb4t5yfu4ehlA3OKEYLtqUchgVzL/QaqW373ZUVxVHKwvJ38cmYuR4rAHD2yUvAIkTPA==
make-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
@ -7843,6 +8149,11 @@ make-dir@^3.0.0, make-dir@^3.0.2:
dependencies:
semver "^6.0.0"
make-event-props@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.2.0.tgz#96b87d88919533b8f8934b58b4c3d5679459a0cf"
integrity sha512-BmWFkm/jZzVH9A0tEBdkjAARUz/eha+5IRyfOndeSMKRadkgR5DawoBHoRwLxkYmjJOI5bHkXKpaZocxj+dKgg==
makeerror@1.0.x:
version "1.0.11"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
@ -7932,6 +8243,11 @@ mdn-data@2.0.4:
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
media-engine@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/media-engine/-/media-engine-1.0.3.tgz#be3188f6cd243ea2a40804a35de5a5b032f58dad"
integrity sha1-vjGI9s0kPqKkCASjXeWlsDL1ja0=
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@ -7958,11 +8274,21 @@ memory-fs@^0.5.0:
errno "^0.1.3"
readable-stream "^2.0.1"
merge-class-names@^1.1.1:
version "1.4.2"
resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.2.tgz#78d6d95ab259e7e647252a7988fd25a27d5a8835"
integrity sha512-bOl98VzwCGi25Gcn3xKxnR5p/WrhWFQB59MS/aGENcmUc6iSm96yrFDF0XSNurX9qN4LbJm0R9kfvsQ17i8zCw==
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
merge-refs@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/merge-refs/-/merge-refs-1.0.0.tgz#388348bce22e623782c6df9d3c4fc55888276120"
integrity sha512-WZ4S5wqD9FCR9hxkLgvcHJCBxzXzy3VVE6p8W2OzxRzB+hLRlcadGE2bW9xp2KSzk10rvp4y+pwwKO6JQVguMg==
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@ -8313,6 +8639,11 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
node-fetch@2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
node-forge@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
@ -8401,6 +8732,13 @@ normalize-range@^0.1.2:
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
normalize-svg-path@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz#0e614eca23c39f0cffe821d6be6cd17e569a766c"
integrity sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==
dependencies:
svg-arc-to-cubic-bezier "^3.0.0"
normalize-url@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
@ -8723,6 +9061,11 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
pako@^0.2.5:
version "0.2.9"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=
pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
@ -8781,6 +9124,11 @@ parse-json@^5.0.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
parse-svg-path@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/parse-svg-path/-/parse-svg-path-0.1.2.tgz#7a7ec0d1eb06fa5325c7d3e009b859a09b5d49eb"
integrity sha1-en7A0esG+lMlx9PgCbhZoJtdSes=
parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
@ -8892,6 +9240,11 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
pdfjs-dist@2.6.347:
version "2.6.347"
resolved "https://registry.yarnpkg.com/pdfjs-dist/-/pdfjs-dist-2.6.347.tgz#f257ed66e83be900cd0fd28524a2187fb9e25cd5"
integrity sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ==
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@ -9897,6 +10250,13 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
queue@^6.0.1:
version "6.0.2"
resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
dependencies:
inherits "~2.0.3"
quickselect@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018"
@ -9909,6 +10269,11 @@ raf@^3.4.1:
dependencies:
performance-now "^2.1.0"
ramda@^0.26.1:
version "0.26.1"
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@ -10099,6 +10464,20 @@ react-overlays@^5.0.1:
uncontrollable "^7.2.1"
warning "^4.0.3"
react-pdf@^5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/react-pdf/-/react-pdf-5.3.2.tgz#517109d2a32ea7450dea49f7e5cc8e10bd2cfc4b"
integrity sha512-gT2xeUAUJem5UWNZYIQSPJAlPDbc3mIIhEgGK8P/qo1B68WIE4R4v3tNFYM9e5nqlKnGZG4Cd68SetlmnPejwA==
dependencies:
"@babel/runtime" "^7.0.0"
file-loader "^6.0.0"
make-cancellable-promise "^1.0.0"
make-event-props "^1.1.0"
merge-class-names "^1.1.1"
merge-refs "^1.0.0"
pdfjs-dist "2.6.347"
prop-types "^15.6.2"
react-player@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.9.0.tgz#ef7fe7073434087565f00ff219824e1e02c4b046"
@ -10127,6 +10506,16 @@ react-qr-scanner@^1.0.0-alpha.7:
"@zxing/library" "^0.18.3"
prop-types "^15.7.2"
react-reconciler@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.23.0.tgz#5f0bfc35dda030b0220c07de11f93131c5d6db63"
integrity sha512-vV0KlLimP9a/NuRcM6GRVakkmT6MKSzhfo8K72fjHMnlXMOhz9GlPe+/tCp5CWBkg+lsMUt/CR1nypJBTPfwuw==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
prop-types "^15.6.2"
scheduler "^0.17.0"
react-redux@^7.2.4:
version "7.2.4"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.4.tgz#1ebb474032b72d806de2e0519cd07761e222e225"
@ -10583,6 +10972,11 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
resolve@1.18.1:
version "1.18.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130"
@ -10615,6 +11009,13 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
restructure@^0.5.3:
version "0.5.4"
resolved "https://registry.yarnpkg.com/restructure/-/restructure-0.5.4.tgz#f54e7dd563590fb34fd6bf55876109aeccb28de8"
integrity sha1-9U591WNZD7NP1r9Vh2EJrsyyjeg=
dependencies:
browserify-optional "^1.0.0"
ret@~0.1.10:
version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@ -10844,6 +11245,22 @@ saxes@^5.0.1:
dependencies:
xmlchars "^2.2.0"
scheduler@^0.15.0:
version "0.15.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e"
integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
scheduler@^0.17.0:
version "0.17.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe"
integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==
dependencies:
loose-envify "^1.1.0"
object-assign "^4.1.1"
scheduler@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91"
@ -11221,6 +11638,13 @@ source-map@^0.7.3, source-map@~0.7.2:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
source-map@~0.1.30:
version "0.1.43"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=
dependencies:
amdefine ">=0.0.4"
sourcemap-codec@^1.4.4:
version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
@ -11582,6 +12006,11 @@ supports-hyperlinks@^2.0.0:
has-flag "^4.0.0"
supports-color "^7.0.0"
svg-arc-to-cubic-bezier@^3.0.0, svg-arc-to-cubic-bezier@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz#390c450035ae1c4a0104d90650304c3bc814abe6"
integrity sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==
svg-parser@^2.0.2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
@ -11742,7 +12171,7 @@ through2@^2.0.0:
readable-stream "~2.3.6"
xtend "~4.0.1"
through@^2.3.6:
through@^2.3.6, through@~2.3.4:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
@ -11764,6 +12193,11 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
tiny-inflate@^1.0.0, tiny-inflate@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
tiny-invariant@^1.0.2:
version "1.1.0"
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
@ -12023,6 +12457,14 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==
unicode-trie@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-0.3.1.tgz#d671dddd89101a08bac37b6a5161010602052085"
integrity sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=
dependencies:
pako "^0.2.5"
tiny-inflate "^1.0.0"
union-value@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"

Loading…
Cancel
Save