master
amir hosein gorji 3 years ago
parent b5e5ee0d9c
commit 450e09e09e
  1. 2
      package.json
  2. 78903
      public/7.pdf
  3. 29
      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. 19
      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. 2
      src/views/Home/HomeSlider/Header/index.js
  25. 2
      src/views/Home/HomeSlider/Simple/index.scss
  26. 87
      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. 58
      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. 75
      src/views/Product/index.js
  37. 11
      src/views/Product/index.scss
  38. 60
      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. 174
      src/views/Products/Product/index.js
  43. 229
      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/core": "^4.11.4",
"@material-ui/icons": "^4.11.2", "@material-ui/icons": "^4.11.2",
"@pmmmwh/react-refresh-webpack-plugin": "0.4.3", "@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
"@react-pdf/renderer": "^2.0.19",
"@svgr/webpack": "5.5.0", "@svgr/webpack": "5.5.0",
"@testing-library/jest-dom": "^5.11.4", "@testing-library/jest-dom": "^5.11.4",
"@testing-library/react": "^11.1.0", "@testing-library/react": "^11.1.0",
@ -71,6 +72,7 @@
"react-dev-utils": "^11.0.3", "react-dev-utils": "^11.0.3",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-elastic-carousel": "^0.11.5", "react-elastic-carousel": "^0.11.5",
"react-pdf": "^5.3.2",
"react-player": "^2.9.0", "react-player": "^2.9.0",
"react-qr-reader": "^2.2.1", "react-qr-reader": "^2.2.1",
"react-qr-scanner": "^1.0.0-alpha.7", "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 CACHE_NAME = "version-11";
const urlsToCache = ['index.html', 'offline.html']; const urlsToCache = ["index.html", "offline.html"];
const self = this; const self = this;
//Install SW //Install SW
self.addEventListener('install', (event) => { self.addEventListener("install", (event) => {
event.waitUntil( event.waitUntil(
caches.open(CACHE_NAME) caches.open(CACHE_NAME).then((cache) => {
.then((cache) => { console.log("Opened cache");
console.log('Opened cache');
return cache.addAll(urlsToCache); return cache.addAll(urlsToCache);
}) })
) );
}); });
//Listen for requests //Listen for requests
self.addEventListener('fetch', (event) => { self.addEventListener("fetch", (event) => {
event.respondWith( event.respondWith(
caches.match(event.request) caches.match(event.request).then(() => {
.then(() => { return fetch(event.request).catch(() => caches.match("offline.html"));
return fetch(event.request)
.catch(() => caches.match('offline.html'));
}) })
); );
}); });
//Activate the SW //Activate the SW
self.addEventListener('activate', (event) => { self.addEventListener("activate", (event) => {
const cacheWhiteList = []; const cacheWhiteList = [];
cacheWhiteList.push(CACHE_NAME); cacheWhiteList.push(CACHE_NAME);
event.waitUntil( event.waitUntil(
caches.keys().then((cacheNames) => Promise.all( caches.keys().then((cacheNames) =>
Promise.all(
cacheNames.map((cacheName) => { cacheNames.map((cacheName) => {
if (!cacheWhiteList.includes(cacheName)) { if (!cacheWhiteList.includes(cacheName)) {
return caches.delete(cacheName); return caches.delete(cacheName);
} }
}) })
))
) )
)
);
}); });

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

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

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

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

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

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

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

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

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

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

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

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

@ -42,7 +42,7 @@ export default function userProduct(state = initialState, action) {
return { ...state, loading: false, error: null, sum: data.payPrice }; return { ...state, loading: false, error: null, sum: data.payPrice };
case "userProduct/delete": case "userProduct/delete":
return { ...state, loading: false, error: null }; return { ...state, loading: false, error: null };
case "loading": case "userProduct/loading":
return { ...state, loading: true }; return { ...state, loading: true };
case "userProduct/error": case "userProduct/error":
toast.error(data.message); 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( export default connect(
(state) => ({ (state) => ({
arList: arList: (state.userProduct.myList || []).filter(
state.userProduct.myList.filter((product) => product.productType == 3) || (product) => product.productType == 3
[], ),
loading: state.loading, loading: state.loading,
}), }),
{ {

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

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

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

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

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

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

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

@ -2,12 +2,18 @@ import React, { Component } from "react";
import { Dropdown } from "react-bootstrap"; import { Dropdown } from "react-bootstrap";
import proxy from "~/Redux/proxy"; import proxy from "~/Redux/proxy";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import Avatar from "@material-ui/core/Avatar";
import logo from "~/assets/icons/logo.png"; import logo from "~/assets/icons/logo.png";
import basket from "~/assets/icons/basket.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 "./index.scss";
import { useHistory } from "react-router-dom"; import { useHistory } from "react-router-dom";
import { user } from "~/Redux/actions";
function Navigate({ path }) { function Navigate({ path }) {
let history = useHistory(); let history = useHistory();
return <>{history.push(path)}</>; return <>{history.push(path)}</>;
@ -21,9 +27,12 @@ const fontSize = {
}, },
}; };
export default class LaptopNavbar extends Component { class LaptopNavbar extends Component {
state = {}; state = {};
render() { render() {
let score = 0;
const { status } = this.props;
if (this.state.navigatePath) return <Navigate path={this.navigatePath} />; if (this.state.navigatePath) return <Navigate path={this.navigatePath} />;
const { links } = this.props; const { links } = this.props;
return ( return (
@ -66,22 +75,68 @@ export default class LaptopNavbar extends Component {
</Dropdown.Item> </Dropdown.Item>
</Dropdown.Menu> </Dropdown.Menu>
</Dropdown> */} </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> </Link>
<div <Menu
to="/auth?logout" id="menu-desktop-navbar"
style={{ fontSize: fontSize.desktop.a }} anchorEl={this.state.anchorEl}
className="laptop-navbar__logout" 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={() => { onClick={() => {
localStorage.removeItem("refresh"); this.props.logout({});
localStorage.removeItem("access"); this.setState({ dropdown: false });
localStorage.removeItem("userData");
window.location.reload();
// this.setState({ navigatePath: "/auth" });
}} }}
> >
خروج خروج
</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> </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 = { LaptopNavbar.defaultProps = {
links: [ links: [
{ name: "صفحه اصلی", to: "/", page: "home" }, { name: "صفحه اصلی", to: "/", page: "home" },

@ -1,11 +1,51 @@
.laptop-navbar { .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%; width: 100%;
// height: 60px; // height: 60px;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-family: numeralLight; font-family: numeralLight;
z-index: 100; z-index: 100;
overflow: hidden; // overflow: hidden;
background-color: white; background-color: white;
padding: 0px 10px 0px 20px; padding: 0px 10px 0px 20px;
max-height: 60px; max-height: 60px;
@ -23,6 +63,16 @@
max-height: 60px; max-height: 60px;
} }
} }
&__cart:hover {
color: #6cbe44;
}
&__cart {
text-decoration: none;
color: #6cbe44;
& img {
margin: 0 5px;
}
}
&__list { &__list {
margin: 0px; margin: 0px;
list-style: none; list-style: none;
@ -30,7 +80,7 @@
padding: 0px; padding: 0px;
margin-right: 10px; margin-right: 10px;
li { li {
margin: 0px 10px; // margin: 0px 10px;
padding: 0px 15px; padding: 0px 15px;
text-decoration: none; text-decoration: none;
a { a {
@ -60,18 +110,31 @@
color: white; color: white;
} }
} }
&__logout { &__logout {
font-family: numeralLight; font-family: numeralLight;
font-size: 12px;
text-decoration: none; text-decoration: none;
color: white; color: white;
background-color: white; background-color: white;
border-radius: 6px; border-radius: 6px;
padding: 10px 20px; padding: 5px 10px;
border: 1px solid #6cbe44; border: 1px solid #6cbe44;
color: #6cbe44; color: #6cbe44;
cursor: pointer; cursor: pointer;
white-space: nowrap;
&:hover { &:hover {
color: #93bb52; 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 KeyboardArrowUpIcon from "@material-ui/icons/KeyboardArrowUp";
import KeyboardArrowDownIcon from "@material-ui/icons/KeyboardArrowDown"; import KeyboardArrowDownIcon from "@material-ui/icons/KeyboardArrowDown";
import { user } from "~/Redux/actions";
import user1 from "~/assets/images/user1.png"; import user1 from "~/assets/images/user1.png";
import user2 from "~/assets/images/user2.png"; import user2 from "~/assets/images/user2.png";
import mobileHome from "~/assets/icons/mobileHome.svg"; import mobileHome from "~/assets/icons/mobileHome.svg";
@ -66,6 +66,82 @@ class NavbarDrawer extends Component {
message: "", message: "",
// onClick: this.props.logout, // 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: "خروج", name: "خروج",
link: "/auth", link: "/auth",
@ -73,10 +149,7 @@ class NavbarDrawer extends Component {
toast: "", toast: "",
message: "", message: "",
onClick: () => { onClick: () => {
localStorage.removeItem("refresh"); this.props.logout({});
localStorage.removeItem("access");
localStorage.removeItem("userData");
window.location.reload();
}, },
}, },
]; ];
@ -145,7 +218,7 @@ class NavbarDrawer extends Component {
</div> </div>
) : null} ) : null}
<div className="navbar-drawer__bottom mt-3"> <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 <Link
to={item.link} to={item.link}
key={key} key={key}
@ -171,92 +244,9 @@ class NavbarDrawer extends Component {
} }
} }
export default connect( export default connect((state) => ({ status: state.user.status }), {
(state) => ({ status: state.user.status }), logout: user.logout,
{} })(NavbarDrawer);
)(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();
},
},
],
};
const User = (props) => { const User = (props) => {
return ( return (

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

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

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

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

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

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

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

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

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

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

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

@ -6,20 +6,28 @@ import Product from "../Product/index";
import Loader from "~/components/Loader/index"; import Loader from "~/components/Loader/index";
import "./index.scss"; import "./index.scss";
class List extends React.Component { class List extends React.Component {
componentDidMount() { componentDidMount() {
this.props.getList(); if (this.props.list.length == 0) this.props.getList();
} }
render() { render() {
const { list, filterResult, loading } = this.props; let { list, filterResult, loading } = this.props;
return window.innerWidth > 1000 ? ( return window.innerWidth > 1000 ? (
<div className="products-list d-flex flex-wrap"> <div className="products-list d-flex flex-wrap">
{!loading ? ( {!loading ? (
filterResult.length > 0 || localStorage.getItem("filter") ? ( filterResult.length > 0 ? (
filterResult.map((item, i) => <Product product={item} key={i} />) (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 <div
@ -32,12 +40,21 @@ class List extends React.Component {
</div> </div>
) : ( ) : (
<> <>
<div className="mobile-products-list d-flex flex-wrap"> <div
className="mobile-products-list d-flex flex-wrap"
style={{ marginBottom: 40 }}
>
{!loading ? ( {!loading ? (
filterResult.length > 0 || localStorage.getItem("filter") ? ( filterResult.length > 0 ? (
filterResult.map((item, i) => <Product product={item} key={i} />) 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 <div

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

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

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

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

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

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

@ -220,8 +220,9 @@ class QR extends Component {
<div> <div>
<img <img
src={exit} src={exit}
alt="خروج" alt="انصراف"
onClick={() => onClick={() =>
// this.props.logout({})
this.setState({ menu: !this.state.menu }) 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, text: null,
}; };
componentDidMount() { componentDidMount() {
this.props.getList(); console.log(this.props);
// this.props?.getList();
} }
render() { render() {
@ -61,7 +62,7 @@ class Support extends Component {
name="book" name="book"
options={[ options={[
...new Set( ...new Set(
this.props.list.map((item) => item.product.book.name) this.props.list?.map((item) => item.product.book.name) || []
), ),
]} ]}
parent={this} parent={this}
@ -79,7 +80,7 @@ class Support extends Component {
export default connect( export default connect(
(state) => ({ (state) => ({
list: state.userProduct.mylist, list: state.userProduct.mylist || [],
}), }),
{ getList: userProduct.mylist } { getList: userProduct.mylist }
)(Support); )(Support);

@ -1164,6 +1164,13 @@
dependencies: dependencies:
regenerator-runtime "^0.13.4" 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": "@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" version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.5.tgz#665450911c6031af38f81db530f387ec04cd9a98" 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" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.3.tgz#8b68da1ebd7fc603999cf6ebee34a4899a14b88e"
integrity sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ== 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": "@restart/context@^2.1.4":
version "2.1.4" version "2.1.4"
resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02"
@ -2246,6 +2395,11 @@
dependencies: dependencies:
"@types/yargs-parser" "*" "@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": "@typescript-eslint/eslint-plugin@^4.5.0":
version "4.26.1" version "4.26.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.26.1.tgz#b9c7313321cb837e2bf8bebe7acc2220659e67d3" 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" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== 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: accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7" version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 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" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= 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: ansi-colors@^3.0.0:
version "3.2.4" version "3.2.4"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" 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" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 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: ast-types-flow@^0.0.7:
version "0.0.7" version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= 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: astral-regex@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 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-macros "2.8.0"
babel-plugin-transform-react-remove-prop-types "0.4.24" 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" version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= 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" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base64-js@^1.0.2: base64-js@^1.0.2, base64-js@^1.1.2:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@ -3250,6 +3428,18 @@ bindings@^1.5.0:
dependencies: dependencies:
file-uri-to-path "1.0.0" 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: bluebird@^3.5.5:
version "3.7.2" version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 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" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 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: browser-process-hrtime@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== 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: browserify-aes@^1.0.0, browserify-aes@^1.0.4:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" 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" inherits "^2.0.1"
safe-buffer "^5.1.2" 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: browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" 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" strip-ansi "^6.0.0"
wrap-ansi "^6.2.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: clsx@^1.0.4, clsx@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" 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" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 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: color-string@^1.5.4:
version "1.5.5" version "1.5.5"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" 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" moment "^2.25.3"
yargs "^15.3.1" 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: cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2:
version "7.0.3" version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 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" randombytes "^2.0.0"
randomfill "^1.0.3" 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: crypto-random-string@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 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" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
deep-equal@^1.0.1: deep-equal@^1.0.0, deep-equal@^1.0.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
@ -4624,6 +4862,13 @@ detect-port-alt@1.1.6:
address "^1.0.1" address "^1.0.1"
debug "^2.6.0" 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: diff-sequences@^26.6.2:
version "26.6.2" version "26.6.2"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
@ -5018,6 +5263,17 @@ escodegen@^2.0.0:
optionalDependencies: optionalDependencies:
source-map "~0.6.1" 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: eslint-config-react-app@^6.0.0:
version "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" 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" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 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: esquery@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 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" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 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: estree-walker@^0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" 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" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 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: etag@~1.8.1:
version "1.8.1" version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 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" loader-utils "^2.0.0"
schema-utils "^3.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: file-uri-to-path@1.0.0:
version "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" 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" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= 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: hsla-regex@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" 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" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 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: hyphenate-style-name@^1.0.3:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" 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" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 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: is-windows@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 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: dependencies:
sourcemap-codec "^1.4.4" 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: make-dir@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 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: dependencies:
semver "^6.0.0" 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: makeerror@1.0.x:
version "1.0.11" version "1.0.11"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 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" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== 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: media-typer@0.3.0:
version "0.3.0" version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 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" errno "^0.1.3"
readable-stream "^2.0.1" 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: merge-descriptors@1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 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: merge-stream@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 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" lower-case "^2.0.2"
tslib "^2.0.3" 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: node-forge@^0.10.0:
version "0.10.0" version "0.10.0"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" 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" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= 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: normalize-url@1.9.1:
version "1.9.1" version "1.9.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" 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" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 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: pako@~1.0.5:
version "1.0.11" version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" 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" json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6" 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: parse5@6.0.1:
version "6.0.1" version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" 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" safe-buffer "^5.0.1"
sha.js "^2.4.8" 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: performance-now@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 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" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 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: quickselect@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018"
@ -9909,6 +10269,11 @@ raf@^3.4.1:
dependencies: dependencies:
performance-now "^2.1.0" 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: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 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" uncontrollable "^7.2.1"
warning "^4.0.3" 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: react-player@^2.9.0:
version "2.9.0" version "2.9.0"
resolved "https://registry.yarnpkg.com/react-player/-/react-player-2.9.0.tgz#ef7fe7073434087565f00ff219824e1e02c4b046" 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" "@zxing/library" "^0.18.3"
prop-types "^15.7.2" 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: react-redux@^7.2.4:
version "7.2.4" version "7.2.4"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.4.tgz#1ebb474032b72d806de2e0519cd07761e222e225" 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" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 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: resolve@1.18.1:
version "1.18.1" version "1.18.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" 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" onetime "^5.1.0"
signal-exit "^3.0.2" 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: ret@~0.1.10:
version "0.1.15" version "0.1.15"
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
@ -10844,6 +11245,22 @@ saxes@^5.0.1:
dependencies: dependencies:
xmlchars "^2.2.0" 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: scheduler@^0.20.2:
version "0.20.2" version "0.20.2"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" 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" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== 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: sourcemap-codec@^1.4.4:
version "1.4.8" version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 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" has-flag "^4.0.0"
supports-color "^7.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: svg-parser@^2.0.2:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" 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" readable-stream "~2.3.6"
xtend "~4.0.1" xtend "~4.0.1"
through@^2.3.6: through@^2.3.6, through@~2.3.4:
version "2.3.8" version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 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" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= 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: tiny-invariant@^1.0.2:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" 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" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== 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: union-value@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"

Loading…
Cancel
Save