diff --git a/package.json b/package.json index 6df0e58..0dfcd5b 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "axios": "^0.21.0", "classnames": "^2.2.6", "highcharts-react-official": "^3.0.0", + "lodash": "^4.17.20", "node-sass": "^4.14.1", "pure-react-carousel": "^1.27.3", "query-string": "^6.13.7", diff --git a/src/App.js b/src/App.js index 07e3d24..158ea46 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,9 @@ import React, { memo } from 'react'; import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'; import { MuiThemeProvider } from '@material-ui/core/styles'; +import SnackBar from 'components/utilityComponents/UniversalSnackbar'; +import ThemeDialog from 'components/utilityComponents/ThemeDialog'; +import LogoutDialog from 'components/utilityComponents/LogoutDialog'; import { useDarkMode } from './custom-hooks/darkModeHook'; import theme, { darkTheme } from './utils/theme'; import 'react-image-lightbox/style.css'; @@ -11,8 +14,8 @@ import { Dashboard, AnimeDetailsView, AnimeWatchlistStatsView, + PageNotFoundView, } from './views'; -import SnackBar from './components/utilityComponents/UniversalSnackbar'; import './App.css'; const App = () => { @@ -21,6 +24,8 @@ const App = () => { return ( + + @@ -28,11 +33,8 @@ const App = () => { - + + diff --git a/src/actions/drawerAction.js b/src/actions/drawerAction.js index 7b854dd..cf970b1 100644 --- a/src/actions/drawerAction.js +++ b/src/actions/drawerAction.js @@ -1,5 +1,10 @@ -import { DRAWER_OPEN, DRAWER_CLOSE } from "../constants/drawerConstant"; +import { DRAWER_OPEN, DRAWER_CLOSE } from '../constants/drawerConstant'; export const drawerOpen = () => ({ type: DRAWER_OPEN }); export const drawerClose = () => ({ type: DRAWER_CLOSE }); + +export const setScreenNameAction = (payload) => ({ + type: 'SET_SCREEN_NAME', + payload, +}); diff --git a/src/assets/animation/default-loader.json b/src/assets/animation/default-loader.json new file mode 100644 index 0000000..f4892ef --- /dev/null +++ b/src/assets/animation/default-loader.json @@ -0,0 +1 @@ +{"v":"4.12.0","fr":15,"ip":0,"op":90,"w":200,"h":200,"nm":"loading","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"loading Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[100,103.5,0],"ix":2},"a":{"a":0,"k":[100,100,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.246,0],[0,-5.247],[-5.247,0],[0,5.247]],"o":[[-5.247,0],[0,5.247],[5.246,0],[0,-5.247]],"v":[[0,-9.5],[-9.5,0],[0,9.5],[9.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-4.687,0],[0,-4.687],[4.687,0],[0,4.687]],"o":[[4.687,0],[0,4.687],[-4.687,0],[0,-4.687]],"v":[[0,-8.5],[8.5,0],[0,8.5],[-8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":64,"s":[0],"e":[100]},{"t":79}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270999983245,0.497999991623,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[165.792,93.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":61,"s":[0,0],"e":[150,150]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":76,"s":[150,150],"e":[100,100]},{"t":81}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"6","np":5,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.247,0],[0,-5.247],[-5.247,0],[0,5.247]],"o":[[-5.247,0],[0,5.247],[5.247,0],[0,-5.247]],"v":[[0,-9.5],[-9.5,0],[0,9.5],[9.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-4.687,0],[0,-4.687],[4.687,0],[0,4.687]],"o":[[4.687,0],[0,4.687],[-4.687,0],[0,-4.687]],"v":[[0,-8.5],[8.5,0],[0,8.5],[-8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":49,"s":[0],"e":[100]},{"t":64}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270999983245,0.497999991623,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[138.875,93.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":46,"s":[0,0],"e":[150,150]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":61,"s":[150,150],"e":[100,100]},{"t":67}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"5","np":5,"cix":2,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.247,0],[0,-5.247],[-5.246,0],[0,5.247]],"o":[[-5.246,0],[0,5.247],[5.247,0],[0,-5.247]],"v":[[0,-9.5],[-9.5,0],[0,9.5],[9.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-4.687,0],[0,-4.687],[4.687,0],[0,4.687]],"o":[[4.687,0],[0,4.687],[-4.687,0],[0,-4.687]],"v":[[0,-8.5],[8.5,0],[0,8.5],[-8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":34,"s":[0],"e":[100]},{"t":49}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270999983245,0.497999991623,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[111.958,93.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":31,"s":[0,0],"e":[150,150]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":45,"s":[150,150],"e":[100,100]},{"t":51}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"4","np":5,"cix":2,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.247,0],[0,-5.247],[-5.247,0],[0,5.247]],"o":[[-5.247,0],[0,5.247],[5.247,0],[0,-5.247]],"v":[[0,-9.5],[-9.5,0],[0,9.5],[9.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-4.687,0],[0,-4.687],[4.687,0],[0,4.687]],"o":[[4.687,0],[0,4.687],[-4.687,0],[0,-4.687]],"v":[[0,-8.5],[8.5,0],[0,8.5],[-8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":21,"s":[0],"e":[100]},{"t":36}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270999983245,0.497999991623,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[85.041,93.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":19,"s":[100,100],"e":[150,150]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":34,"s":[150,150],"e":[100,100]},{"t":39}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"3","np":5,"cix":2,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.247,0],[0,-5.247],[-5.247,0],[0,5.247]],"o":[[-5.247,0],[0,5.247],[5.247,0],[0,-5.247]],"v":[[0,-9.5],[-9.5,0],[0,9.5],[9.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-4.687,0],[0,-4.687],[4.687,0],[0,4.687]],"o":[[4.687,0],[0,4.687],[-4.687,0],[0,-4.687]],"v":[[0,-8.5],[8.5,0],[0,8.5],[-8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":12,"s":[0],"e":[100]},{"t":27}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270999983245,0.497999991623,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[58.125,93.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":10,"s":[0,0],"e":[150,150]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":25,"s":[150,150],"e":[100,100]},{"t":30}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2","np":5,"cix":2,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.247,0],[0,-5.247],[-5.247,0],[0,5.247]],"o":[[-5.247,0],[0,5.247],[5.247,0],[0,-5.247]],"v":[[0,-9.5],[-9.5,0],[0,9.5],[9.5,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-4.687,0],[0,-4.687],[4.687,0],[0,4.687]],"o":[[4.687,0],[0,4.687],[-4.687,0],[0,-4.687]],"v":[[0,-8.5],[8.5,0],[0,8.5],[-8.5,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":3,"s":[0],"e":[100]},{"t":18}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":4,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270999983245,0.497999991623,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[31.208,93.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[0,0],"e":[150,150]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":15,"s":[150,150],"e":[100,100]},{"t":20}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"1","np":5,"cix":2,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":90,"st":0,"bm":0}]} \ No newline at end of file diff --git a/src/assets/animation/not-found-404.json b/src/assets/animation/not-found-404.json new file mode 100644 index 0000000..81b0629 --- /dev/null +++ b/src/assets/animation/not-found-404.json @@ -0,0 +1 @@ +{"v":"5.4.3","fr":30,"ip":0,"op":210,"w":128,"h":128,"nm":"preview","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"anchor","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":12,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":15,"s":[128,44,0],"e":[112,44,0],"to":[-2.66666674613953,0,0],"ti":[-1.33333337306976,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":19,"s":[112,44,0],"e":[136,44,0],"to":[1.33333337306976,0,0],"ti":[-2.66666674613953,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[136,44,0],"e":[128,44,0],"to":[2.66666674613953,0,0],"ti":[1.33333337306976,0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[128,44,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":25,"nm":"Drop Shadow","np":8,"mn":"ADBE Drop Shadow","ix":1,"en":1,"ef":[{"ty":2,"nm":"Shadow Color","mn":"ADBE Drop Shadow-0001","ix":1,"v":{"a":0,"k":[0,0,0,1],"ix":1}},{"ty":0,"nm":"Opacity","mn":"ADBE Drop Shadow-0002","ix":2,"v":{"a":0,"k":51,"ix":2}},{"ty":0,"nm":"Direction","mn":"ADBE Drop Shadow-0003","ix":3,"v":{"a":0,"k":180,"ix":3}},{"ty":0,"nm":"Distance","mn":"ADBE Drop Shadow-0004","ix":4,"v":{"a":0,"k":4,"ix":4}},{"ty":0,"nm":"Softness","mn":"ADBE Drop Shadow-0005","ix":5,"v":{"a":0,"k":32,"ix":5}},{"ty":7,"nm":"Shadow Only","mn":"ADBE Drop Shadow-0006","ix":6,"v":{"a":0,"k":0,"ix":6}}]}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,8.836],[-8.836,0],[0,-8.836],[8.837,0]],"o":[[0,-8.836],[8.837,0],[0,8.836],[-8.836,0]],"v":[[-16,0],[0,-16],[16,0],[0,16]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[128,44],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"점검중 Outlines 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":17,"s":[0],"e":[-16]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":22,"s":[-16],"e":[14]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":27,"s":[14],"e":[-12]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":36,"s":[-12],"e":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":45,"s":[10],"e":[-8]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":56,"s":[-8],"e":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":67,"s":[6],"e":[-4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":80,"s":[-4],"e":[4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":93,"s":[4],"e":[-2]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":108,"s":[-2],"e":[2]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":123,"s":[2],"e":[-1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":140,"s":[-1],"e":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":158,"s":[1],"e":[0]},{"t":179}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":15,"s":[128,44,0],"e":[112,44,0],"to":[-2.66666674613953,0,0],"ti":[-1.33333337306976,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":19,"s":[112,44,0],"e":[136,44,0],"to":[1.33333337306976,0,0],"ti":[-2.66666674613953,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":25,"s":[136,44,0],"e":[128,44,0],"to":[2.66666674613953,0,0],"ti":[1.33333337306976,0,0]},{"t":36}],"ix":2},"a":{"a":0,"k":[128,44,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[2.505,-4.731]],"o":[[0,0],[0,0],[0,0],[-2.005,3.117],[0,0]],"v":[[-4.867,3.6],[1.845,3.6],[1.845,-7.697],[1.602,-7.697],[-4.867,3.347]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-3.842,6.029],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[1.973,-3.876],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.738,7.428],[-8.982,7.428],[-8.982,3.204],[-0.311,-11.415],[6.112,-11.415],[6.112,3.457],[8.982,3.457],[8.982,7.428],[6.112,7.428],[6.112,11.415],[1.738,11.415]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[147.018,152],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,5.348],[2.506,0],[0,-5.3],[-2.506,0]],"o":[[0,-5.315],[-2.49,0],[0,5.332],[2.521,0]],"v":[[4.055,-0.04],[0,-8.093],[-4.054,-0.04],[0,8.108]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,7.579],[-5.39,0],[0,-7.579],[5.421,0]],"o":[[0,-7.562],[5.375,0],[0,7.545],[-5.421,0]],"v":[[-8.701,-0.04],[0,-12],[8.701,-0.023],[0,12]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[127.992,152],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[2.505,-4.731]],"o":[[0,0],[0,0],[0,0],[-2.005,3.117],[0,0]],"v":[[-4.867,3.6],[1.845,3.6],[1.845,-7.697],[1.602,-7.697],[-4.867,3.347]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-3.842,6.029],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[1.974,-3.876],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.738,7.428],[-8.982,7.428],[-8.982,3.204],[-0.311,-11.415],[6.112,-11.415],[6.112,3.457],[8.982,3.457],[8.982,7.428],[6.112,7.428],[6.112,11.415],[1.738,11.415]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[108.982,152],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-1.044],[-0.823,0],[0,1.043],[0.82,0]],"o":[[0,1.054],[0.825,0],[0,-1.04],[-0.818,0]],"v":[[-1.288,1.042],[0.026,2.727],[1.347,1.048],[0.026,-0.639]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.819],[-1.463,0],[-0.3,-0.632],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.808,0]],"o":[[0,-1.813],[0.787,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.31,0.615],[-1.468,0]],"v":[[-2.868,1.035],[-0.496,-1.9],[1.241,-0.896],[1.332,-0.896],[1.332,-3.982],[2.868,-3.982],[2.868,3.895],[1.379,3.895],[1.379,2.999],[1.283,2.999],[-0.496,3.982]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[150.132,219.982],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-0.862,0],[0,-1.365],[0,0],[0,0],[0,0],[0.729,0],[0,-0.75],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0.27,-0.642],[1.294,0],[0,0],[0,0],[0,0],[0,-0.785],[-0.712,0],[0,0],[0,0],[0,0]],"v":[[-2.648,-2.788],[-1.16,-2.788],[-1.16,-1.873],[-1.064,-1.873],[0.658,-2.912],[2.648,-0.773],[2.648,2.912],[1.112,2.912],[1.112,-0.416],[0.039,-1.615],[-1.113,-0.375],[-1.113,2.912],[-2.648,2.912]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[143.952,220.964],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0.883,0],[0,1.323],[0,0],[0,0],[0,0],[-0.707,0],[0,0.76],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-0.275,0.661],[-1.257,0],[0,0],[0,0],[0,0],[0,0.786],[0.767,0],[0,0],[0,0],[0,0]],"v":[[2.662,2.788],[1.173,2.788],[1.173,1.873],[1.077,1.873],[-0.623,2.912],[-2.661,0.804],[-2.661,-2.912],[-1.124,-2.912],[-1.124,0.416],[-0.053,1.604],[1.126,0.375],[1.126,-2.912],[2.662,-2.912]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[137.64,221.088],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.105],[0.813,0],[0,-1.096],[-0.824,0]],"o":[[0,-1.096],[-0.818,0],[0,1.11],[0.818,0]],"v":[[1.288,-0.003],[0,-1.745],[-1.289,-0.003],[0,1.744]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.866],[-1.775,0],[0,-1.851],[1.791,0]],"o":[[0,-1.846],[1.774,0],[0,1.866],[-1.79,0]],"v":[[-2.868,-0.003],[0,-2.975],[2.868,-0.003],[0,2.974]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[131.452,221.026],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-2.496,3.729],[-2.496,-3.729],[2.496,-3.729],[2.496,-2.396],[-0.901,-2.396],[-0.901,-0.454],[2.2,-0.454],[2.2,0.824],[-0.901,0.824],[-0.901,3.729]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[125.594,220.148],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.523,0],[-0.148,0.015],[0,0],[0.295,0],[0,1.111],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0.496],[0.201,0],[0,0],[-0.19,0.036],[-1.416,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[0.619,-3.537],[0.619,-2.126],[1.828,-2.126],[1.828,-0.942],[0.619,-0.942],[0.619,1.621],[1.374,2.345],[1.828,2.324],[1.828,3.471],[1.057,3.538],[-0.919,1.978],[-0.919,-0.942],[-1.827,-0.942],[-1.827,-2.126],[-0.919,-2.126],[-0.919,-3.537]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[118.132,220.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.105],[0.813,0],[0,-1.096],[-0.824,0]],"o":[[0,-1.096],[-0.818,0],[0,1.11],[0.819,0]],"v":[[1.288,-0.003],[-0.001,-1.745],[-1.29,-0.003],[-0.001,1.744]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.866],[-1.774,0],[0,-1.851],[1.791,0]],"o":[[0,-1.846],[1.775,0],[0,1.866],[-1.79,0]],"v":[[-2.868,-0.003],[-0.001,-2.975],[2.868,-0.003],[-0.001,2.974]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[113.197,221.026],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-3.23,3.729],[-3.23,-3.729],[-1.899,-3.729],[1.609,0.916],[1.704,0.916],[1.704,-3.729],[3.23,-3.729],[3.23,3.729],[1.91,3.729],[-1.609,-0.938],[-1.704,-0.938],[-1.704,3.729]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[106.229,220.148],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.627,0],[0,6.627],[26.51,0],[0,-26.51],[0,0],[-6.627,0],[0,0],[0,6.627],[0,0],[6.627,0],[0,0],[0,0],[0,12.956],[-13.453,-0.255],[0,-13.1]],"o":[[6.627,0],[0,-26.51],[-26.51,0],[0,0],[0,6.627],[0,0],[6.627,0],[0,0],[0,-6.627],[0,0],[0,0],[-12.956,0],[0,-13.456],[13.041,0.247],[0,6.627]],"v":[[36,-60],[48,-72],[0,-120],[-48,-72],[-48,108],[-36,120],[36,120],[48,108],[48,-36],[36,-48],[24,-48],[-0.541,-48],[-24,-71.459],[0.464,-95.996],[24,-72]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.475,0.20800000359,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[128,128],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 13","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":210,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[64,64,0],"ix":2},"a":{"a":0,"k":[128,128,0],"ix":1},"s":{"a":0,"k":[40,40,100],"ix":6}},"ao":0,"w":256,"h":256,"ip":0,"op":210,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/src/assets/login-image.jpg b/src/assets/login-image.jpg new file mode 100644 index 0000000..960601f Binary files /dev/null and b/src/assets/login-image.jpg differ diff --git a/src/components/CustomDrawer/CustomDrawer.js b/src/components/CustomDrawer/CustomDrawer.js index aaad8ba..52b7c1b 100644 --- a/src/components/CustomDrawer/CustomDrawer.js +++ b/src/components/CustomDrawer/CustomDrawer.js @@ -9,28 +9,20 @@ import { Divider, } from '@material-ui/core'; import { useResizeScreen } from 'custom-hooks/useResizeHook'; +import { screenNames } from 'custom-hooks/drawerHook'; import cls from 'classnames'; -import { ReactComponent as DashboardIcon } from 'assets/dashboard.svg'; -import { ReactComponent as User } from '../../assets/userHam.svg'; -import { ReactComponent as Bell } from '../../assets/bell.svg'; -import { ReactComponent as Pie } from '../../assets/pie.svg'; -import { ReactComponent as Logout } from '../../assets/logout.svg'; -import { ReactComponent as DarkModeIcon } from '../../assets/nightMode.svg'; +import DashboardIcon from 'assets/dashboard.svg'; +import UserIcon from 'assets/userHam.svg'; +import PieIcon from 'assets/pie.svg'; +import { ReactComponent as Logout } from 'assets/logout.svg'; +import DarkModeIcon from 'assets/nightMode.svg'; const useStyles = makeStyles((theme) => ({ - userIcon: { - width: 30, - height: 30, - }, - bellIcon: { - width: 30, - height: 30, - }, - pieIcon: { + logoutIcon: { width: 30, height: 30, }, - logoutIcon: { + iconStyle: { width: 30, height: 30, }, @@ -55,10 +47,39 @@ const useStyles = makeStyles((theme) => ({ }, })); +const drawerItems = [ + { + icon: DashboardIcon, + toolTipText: 'Dashboard', + id: 1, + name: screenNames.Dashboard, + }, + { + icon: UserIcon, + toolTipText: 'View your profile', + id: 2, + name: screenNames.Profile, + }, + { + icon: PieIcon, + toolTipText: 'See statistics', + id: 3, + name: screenNames.Statistics, + }, + { icon: DarkModeIcon, toolTipText: 'Change your theme', id: 4 }, +]; + const CustomDrawer = (props) => { const classes = useStyles(); const { isMobile } = useResizeScreen(); - const { open, onLogOutClick, onClose, handleDarkModeClick } = props; + const { + open, + onLogOutClick, + onClose, + handleDarkModeClick, + onIconClick, + screenName, + } = props; return ( { classes={{ paper: classes.drawer }} > - - - - - - - - - - - - - - - - - - - - - - - - - - + {drawerItems.map((item) => ( + <> + {item.id === 4 && } + + onIconClick(item.id) + } + > + drawer-icon + + + + ))} {}, }; export default CustomDrawer; diff --git a/src/components/Dashboard/DashboardComponent.js b/src/components/Dashboard/DashboardComponent.js index 709d1b8..6dcfd3c 100644 --- a/src/components/Dashboard/DashboardComponent.js +++ b/src/components/Dashboard/DashboardComponent.js @@ -5,8 +5,6 @@ import { useResizeScreen } from 'custom-hooks/useResizeHook'; import Header from '../Header/Header'; import DashboardContent from './DashboardContent'; import DrawerContainer from '../../containers/CustomDrawerContainer/DrawerContainer'; -import ThemeDialog from '../utilityComponents/ThemeDialog'; -import LogoutDialog from '../utilityComponents/LogoutDialog'; import AnimeDeleteDialog from '../utilityComponents/DeleteAnimeDialog'; const useStyles = makeStyles(() => ({ @@ -32,8 +30,6 @@ const DashboardComponent = () => { >
- - diff --git a/src/components/Header/Header.js b/src/components/Header/Header.js index 9239cf7..5a01865 100644 --- a/src/components/Header/Header.js +++ b/src/components/Header/Header.js @@ -17,11 +17,12 @@ const Header = (props) => { isBackButtonRequired, isSearchBarRequired, isAvatarPopUpRequired, + iconText, } = props; return ( - {isBackButtonRequired && } + {isBackButtonRequired && } {isSearchBarRequired && } @@ -37,12 +38,14 @@ Header.propTypes = { isBackButtonRequired: PropTypes.bool, isSearchBarRequired: PropTypes.bool, isAvatarPopUpRequired: PropTypes.bool, + iconText: PropTypes.string, }; Header.defaultProps = { isBackButtonRequired: false, isSearchBarRequired: false, isAvatarPopUpRequired: false, + iconText: '', }; export default Header; diff --git a/src/components/utilityComponents/FullScreenLoader.js b/src/components/utilityComponents/FullScreenLoader.js index bfefb21..e4585e4 100644 --- a/src/components/utilityComponents/FullScreenLoader.js +++ b/src/components/utilityComponents/FullScreenLoader.js @@ -1,14 +1,15 @@ /* eslint-disable no-dupe-keys */ import React from 'react'; import PropTypes from 'prop-types'; +import Lottie from 'react-lottie'; import { makeStyles, Typography } from '@material-ui/core'; -import logoLoader from '../../assets/logoLoader.png'; +import defaultLoaderAnimation from 'assets/animation/default-loader.json'; import './styles/fullScreenLoaderStyles.css'; const useStyles = makeStyles((theme) => ({ loaderContainer: { - width: '100vw', - height: '100vh', + width: '100%', + height: '100%', display: 'flex', flexDirection: 'column', justifyContent: 'center', @@ -32,9 +33,17 @@ const useStyles = makeStyles((theme) => ({ const FullScreenLoader = (props) => { const classes = useStyles(); const { title } = props; + const defaultOptions = { + loop: true, + autoplay: true, + animationData: defaultLoaderAnimation, + rendererSettings: { + preserveAspectRatio: 'xMidYMid slice', + }, + }; return (
- Logo-Loader + {title}
); diff --git a/src/components/utilityComponents/GoBack.js b/src/components/utilityComponents/GoBack.js index 97c6d39..36768d8 100644 --- a/src/components/utilityComponents/GoBack.js +++ b/src/components/utilityComponents/GoBack.js @@ -1,10 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { useHistory } from 'react-router-dom'; import ArrowBackIcon from '@material-ui/icons/ArrowBack'; -import { makeStyles, Tooltip, Button } from '@material-ui/core/'; +import { makeStyles, Tooltip, Button, Typography } from '@material-ui/core/'; import cls from 'classnames'; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles((theme) => ({ headerContainer: { display: 'flex', justifyContent: 'space-between', @@ -13,8 +14,12 @@ const useStyles = makeStyles(() => ({ }, backIcon: { fontSize: '2rem', - color: '#111', cursor: 'pointer', + color: theme.palette.text.primary, + }, + iconTextStyle: { + color: theme.palette.primary.main, + fontSize: theme.typography.pxToRem(22), }, '@media screen and (max-width: 600px)': { backIcon: { @@ -28,14 +33,25 @@ const useStyles = makeStyles(() => ({ const GoBack = (props) => { const classes = useStyles(); - const { toolTipTitle } = props; + const { toolTipTitle, iconText } = props; + const history = useHistory(); + + const onGoBackClick = () => { + history.goBack(); + }; + return (
-
@@ -44,10 +60,12 @@ const GoBack = (props) => { GoBack.defaultProps = { toolTipTitle: 'Go Back', + iconText: '', }; GoBack.propTypes = { toolTipTitle: PropTypes.string, + iconText: PropTypes.string, }; export default GoBack; diff --git a/src/components/utilityComponents/Logo.js b/src/components/utilityComponents/Logo.js index 0fb7b29..862506e 100644 --- a/src/components/utilityComponents/Logo.js +++ b/src/components/utilityComponents/Logo.js @@ -1,5 +1,8 @@ +/* eslint-disable jsx-a11y/no-static-element-interactions */ +/* eslint-disable jsx-a11y/click-events-have-key-events */ import React from 'react'; import PropTypes from 'prop-types'; +import { useHistory } from 'react-router-dom'; import { makeStyles, Button, Tooltip } from '@material-ui/core'; import ArrowBackIcon from '@material-ui/icons/ArrowBack'; import LogoImg from '../../assets/logo.png'; @@ -15,6 +18,7 @@ const useStyles = makeStyles(() => ({ color: '#fff', cursor: 'pointer', }, + '@media screen and (max-width: 600px)': { logoImg: logoStyleMobileView, backIcon: { @@ -25,6 +29,7 @@ const useStyles = makeStyles(() => ({ const Logo = (props) => { const classes = useStyles(); + const history = useHistory(); const { isBackButtonRequired, onBackButtonPress } = props; return (
{ display: 'flex', justifyContent: 'flex-start', alignItems: 'center', - // flexDirection: "column", }} > -
+
history.push('/')}> Logo
{isBackButtonRequired && ( diff --git a/src/constants/logoConstant.js b/src/constants/logoConstant.js index 7b2c99a..a741fc9 100644 --- a/src/constants/logoConstant.js +++ b/src/constants/logoConstant.js @@ -2,12 +2,13 @@ export const logoStyleObject = { width: 110, height: 70, zIndex: 100, - margin: "1rem", + margin: '1rem', + cursor: 'pointer', }; export const logoStyleMobileView = { width: 70, height: 50, zIndex: 100, - margin: "1rem", + margin: '1rem', }; diff --git a/src/containers/AnimeStatisticsGraph/AnimeStatisticsGraphContainer.js b/src/containers/AnimeStatisticsGraph/AnimeStatisticsGraphContainer.js new file mode 100644 index 0000000..5839d93 --- /dev/null +++ b/src/containers/AnimeStatisticsGraph/AnimeStatisticsGraphContainer.js @@ -0,0 +1,23 @@ +import React from 'react'; +import { Redirect } from 'react-router-dom'; +import Header from 'components/Header/Header'; +import { useAuthentication } from 'custom-hooks/authHook'; + +const AnimeStatisticsGraphContainer = () => { + const { isAuthenticated } = useAuthentication(); + + if (!isAuthenticated) { + return ; + } + return ( + <> +
+ + ); +}; + +export default AnimeStatisticsGraphContainer; diff --git a/src/containers/CustomDrawerContainer/DrawerContainer.js b/src/containers/CustomDrawerContainer/DrawerContainer.js index 173dd9f..af3e818 100644 --- a/src/containers/CustomDrawerContainer/DrawerContainer.js +++ b/src/containers/CustomDrawerContainer/DrawerContainer.js @@ -5,6 +5,7 @@ import { useLogOut } from '../../custom-hooks/authHook'; import { useDarkMode } from '../../custom-hooks/darkModeHook'; import { drawerClose } from '../../actions/drawerAction'; import {} from '../../actions/dialogAction'; +import { useDrawer } from 'custom-hooks/drawerHook'; const DrawerContainer = () => { const { handleLogoutButtonClick } = useLogOut(); @@ -12,6 +13,7 @@ const DrawerContainer = () => { const isDrawerOpen = useSelector(selectIsDrawerOpen); const dispatch = useDispatch(); const { handleDarkModeClick } = useDarkMode(); + const { handleIconClick, screenName } = useDrawer(); const handleDrawerClose = () => { dispatch(drawerClose()); @@ -23,6 +25,8 @@ const DrawerContainer = () => { open={isDrawerOpen} onClose={handleDrawerClose} handleDarkModeClick={handleDarkModeClick} + onIconClick={handleIconClick} + screenName={screenName} /> ); }; diff --git a/src/custom-hooks/animeHook.js b/src/custom-hooks/animeHook.js index 3098853..f606d6d 100644 --- a/src/custom-hooks/animeHook.js +++ b/src/custom-hooks/animeHook.js @@ -1,5 +1,6 @@ import { useCallback, useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import { isEmpty } from 'lodash'; import { openAnimeDeleteDialog, closeAnimeDeleteDialog, @@ -69,7 +70,7 @@ export const useAnime = () => { }; const fetchAnimes = useCallback(() => { - dispatch(getAnimeWatchlistStart()); + if (isEmpty(animeWatchlist)) dispatch(getAnimeWatchlistStart()); }, [dispatch]); return { diff --git a/src/custom-hooks/authHook.js b/src/custom-hooks/authHook.js index e238715..1a5bfc4 100644 --- a/src/custom-hooks/authHook.js +++ b/src/custom-hooks/authHook.js @@ -2,6 +2,7 @@ import { useState, useCallback, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import qs from 'query-string'; +import { isEmpty } from 'lodash'; import { loginAPIStart, getMeAPIStart, @@ -95,7 +96,9 @@ export const useGetMe = () => { const userDetails = useSelector((state) => state.auth.user); const getCurrentUser = useCallback(() => { - dispatch(getMeAPIStart()); + if (isEmpty(userDetails)) { + dispatch(getMeAPIStart()); + } }, [dispatch]); return { @@ -117,8 +120,6 @@ export const useVerifyAccount = (props) => { } }, [email, token]); - console.log({ isUserVerifying, isUserVerified }); - return { isUserVerifying, isUserVerified, diff --git a/src/custom-hooks/drawerHook.js b/src/custom-hooks/drawerHook.js new file mode 100644 index 0000000..9763ae7 --- /dev/null +++ b/src/custom-hooks/drawerHook.js @@ -0,0 +1,57 @@ +import { useEffect } from 'react'; +import { useHistory } from 'react-router-dom'; +import { useSelector, useDispatch } from 'react-redux'; +import { setScreenNameAction } from 'actions/drawerAction'; + +export const screenNames = { + Dashboard: 'dashboard', + Statistics: 'statistics', + Profile: 'profile', +}; + +const selectScreenName = ({ drawer: { screenName = '' } = {} }) => screenName; + +export const useDrawer = () => { + const history = useHistory(); + const dispatch = useDispatch(); + const screenName = useSelector(selectScreenName); + + useEffect(() => { + if (window.location.pathname) { + switch (window.location.pathname) { + case '/dashboard': + dispatch(setScreenNameAction({ screenName: screenNames.Dashboard })); + break; + case '/profile': + dispatch(setScreenNameAction({ screenName: screenNames.Profile })); + break; + case '/statistics': + dispatch(setScreenNameAction({ screenName: screenNames.Statistics })); + break; + default: + dispatch(setScreenNameAction({ screenName: screenNames.Dashboard })); + } + } + }, [window.location.pathname]); + + const handleIconClick = (screenID) => { + switch (screenID) { + case 1: + history.push(screenNames.Dashboard); + break; + case 2: + history.push(screenNames.Profile); + break; + case 3: + history.push(screenNames.Statistics); + break; + default: + history.push(screenNames.Dashboard); + } + }; + + return { + screenName, + handleIconClick, + }; +}; diff --git a/src/reducers/drawerReducer.js b/src/reducers/drawerReducer.js index 81210ce..c782dd8 100644 --- a/src/reducers/drawerReducer.js +++ b/src/reducers/drawerReducer.js @@ -1,12 +1,14 @@ -import { DRAWER_CLOSE, DRAWER_OPEN } from "../constants/drawerConstant"; -import { AUTH } from "../constants/authConstant"; +import { DRAWER_CLOSE, DRAWER_OPEN } from 'constants/drawerConstant'; +import { AUTH } from 'constants/authConstant'; +import { screenNames } from 'custom-hooks/drawerHook'; const initialState = { isDrawerOpen: false, + screenName: screenNames.Dashboard, }; export const drawerReducer = (state = initialState, action) => { - const { type } = action; + const { type, payload } = action; switch (type) { case DRAWER_OPEN: return { @@ -18,6 +20,11 @@ export const drawerReducer = (state = initialState, action) => { ...state, isDrawerOpen: false, }; + case 'SET_SCREEN_NAME': + return { + ...state, + screenName: payload.screenName, + }; case AUTH.RESET_ALL: return initialState; default: diff --git a/src/views/AnimeWatchlistStats/AnimeWatchlistStatsView.js b/src/views/AnimeWatchlistStats/AnimeWatchlistStatsView.js index 9a8b0c1..8830554 100644 --- a/src/views/AnimeWatchlistStats/AnimeWatchlistStatsView.js +++ b/src/views/AnimeWatchlistStats/AnimeWatchlistStatsView.js @@ -2,6 +2,7 @@ import React from 'react'; import { makeStyles, Grid } from '@material-ui/core/'; import DrawerContainer from 'containers/CustomDrawerContainer/DrawerContainer'; import { useResizeScreen } from 'custom-hooks/useResizeHook'; +import AnimeStatisticsGraphContainer from 'containers/AnimeStatisticsGraph/AnimeStatisticsGraphContainer'; const useStyles = makeStyles((theme) => ({ '@global': { '*::-webkit-scrollbar': { @@ -32,7 +33,7 @@ const AnimeWatchlistStatsView = (props) => { const { isMobile } = useResizeScreen(); return ( <> - + @@ -41,7 +42,7 @@ const AnimeWatchlistStatsView = (props) => { xs={isMobile ? 12 : 11} className={isMobile ? classes.noGridStyle : classes.rightGridStyle} > - Here are rest + diff --git a/src/views/Auth/AuthView.js b/src/views/Auth/AuthView.js index 3236f0d..2fc4277 100644 --- a/src/views/Auth/AuthView.js +++ b/src/views/Auth/AuthView.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { makeStyles } from '@material-ui/core'; import Logo from '../../components/utilityComponents/Logo'; import AuthContainer from '../../containers/Auth/AuthContainer'; -import LoginImg from '../../assets/test.jpg'; +import LoginImg from '../../assets/login-image.jpg'; const useStyles = makeStyles((theme) => ({ backgroundCover: { diff --git a/src/views/HomeView/404View.js b/src/views/HomeView/404View.js new file mode 100644 index 0000000..47b3eab --- /dev/null +++ b/src/views/HomeView/404View.js @@ -0,0 +1,119 @@ +import React from 'react'; +import { useHistory } from 'react-router-dom'; +import { makeStyles, Typography, Button } from '@material-ui/core'; +import Lottie from 'react-lottie'; +import notFound404Animation from 'assets/animation/not-found-404.json'; +import Logo from 'components/utilityComponents/Logo'; + +const useStyles = makeStyles((theme) => ({ + errorContainer: { + width: '100vw', + height: '100vh', + background: theme.palette.background.default, + overflow: 'auto', + }, + errorContainerInner: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + }, + errorTextContainer: { + padding: '1rem', + }, + heading: { + color: theme.palette.primary.main, + fontSize: '6rem', + }, + subHeadingOne: { + fontSize: '2rem', + color: theme.palette.text.primary, + }, + subHeadingTwo: { + fontSize: '1rem', + color: theme.palette.text.primary, + }, + homeButton: { + padding: '0.4rem 0.8rem', + color: '#fff', + background: theme.button.background.light, + border: 'none', + outline: 'none', + cursor: 'pointer', + borderRadius: '20px', + fontSize: '0.7rem', + fontWeight: 'bold', + marginTop: '1rem', + boxShadow: `10px 13px 45px rgba(0, 0, 0, 0.1)`, + '&:hover': { + opacity: 0.9, + }, + '&:disabled': { + background: theme.button.background.light, + cursor: 'no-drop', + opacity: '0.5', + }, + }, + '@media screen and (max-width: 600px)': { + errorContainer: { + padding: '1rem', + }, + errorContainerInner: { + flexDirection: 'column', + }, + heading: { + fontSize: '3rem', + }, + subHeadingOne: { + fontSize: '1.2rem', + }, + subHeadingTwo: { + fontSize: '0.8rem', + }, + }, +})); + +const NotFound404 = () => { + const classes = useStyles(); + const history = useHistory(); + const defaultOptions = { + loop: true, + autoplay: true, + animationData: notFound404Animation, + rendererSettings: { + preserveAspectRatio: 'xMidYMid slice', + }, + }; + + const handleHomeClick = () => { + history.push('/'); + }; + + return ( + <> +
+ +
+ + + 404 + + UH OH! You are lost. + + + The page you are looking for is not found. Maybe it has been + removed or your in the wrong path. + + + +
+
+ + ); +}; + +export default NotFound404; diff --git a/src/views/HomeView/HomeView.js b/src/views/HomeView/HomeView.js index eabba57..8234228 100644 --- a/src/views/HomeView/HomeView.js +++ b/src/views/HomeView/HomeView.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { makeStyles, Typography, Button } from '@material-ui/core'; import { Link } from 'react-router-dom'; +import { useAuthentication } from 'custom-hooks/authHook'; import AwesomeSlider from 'react-awesome-slider'; import withAutoplay from 'react-awesome-slider/dist/autoplay'; import 'react-awesome-slider/dist/styles.css'; @@ -102,6 +103,7 @@ const useStyles = makeStyles((theme) => ({ const SlideContent = (props) => { const { classes } = props; + const { isAuthenticated } = useAuthentication(); return (
@@ -109,18 +111,26 @@ const SlideContent = (props) => { place to manage all your favourite animes.
- - - - - - + {!isAuthenticated ? ( + <> + + + + + + + + ) : ( + + + + )}
); diff --git a/src/views/index.js b/src/views/index.js index 9f32860..2e04e1c 100644 --- a/src/views/index.js +++ b/src/views/index.js @@ -4,3 +4,4 @@ export { default as AuthView } from './Auth/AuthView'; export { default as VerifyAccountView } from './Auth/VerifyAccountView'; export { default as Dashboard } from './Dashboard/Dashboard'; export { default as AnimeDetailsView } from './AnimeDetailsView/AnimeDetailsView'; +export { default as PageNotFoundView } from './HomeView/404View';