|
|
|
@@ -17,11 +17,52 @@ import { ReactComponent as BrainIcon } from '../../assets/icons/bx-brain.svg'; |
|
|
|
import { ReactComponent as InternBadge } from '../../assets/icons/intern-badge.svg'; |
|
|
|
import { CircularProgressbar } from 'react-circular-progressbar'; |
|
|
|
import { AddWord } from "../add-word/AddWord"; |
|
|
|
import { IProfile } from "../../structure/profile"; |
|
|
|
|
|
|
|
|
|
|
|
export var userProfileData : IProfile = { |
|
|
|
name: 'Neymar Jr', |
|
|
|
image: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSERA5Pm3aRBV7AaI8tvpZfzpD24ZgrU1_8NA&usqp=CAU', |
|
|
|
medal: { |
|
|
|
name: 'Intern badge', |
|
|
|
minValue: 0, |
|
|
|
maxValue: 100, |
|
|
|
icon: <InternBadge /> |
|
|
|
}, |
|
|
|
categories: [{ |
|
|
|
name: 'Vocabulary', |
|
|
|
icon: <TimeIcon />, |
|
|
|
shelves: [{ |
|
|
|
name: 'All Words', |
|
|
|
words: [], |
|
|
|
revisedWords: [], |
|
|
|
description: 'All Words that I use on a daily basis', |
|
|
|
viewPermission: 'PUBLIC' |
|
|
|
}] |
|
|
|
}, { |
|
|
|
name: 'Books', |
|
|
|
icon: <BookMarkIcon />, |
|
|
|
shelves: [{ |
|
|
|
name: 'Sapiens', |
|
|
|
words: [], |
|
|
|
revisedWords: [], |
|
|
|
description: 'Sapiens book complex words', |
|
|
|
viewPermission: 'PUBLIC' |
|
|
|
}] |
|
|
|
}, { |
|
|
|
name: 'GRE', |
|
|
|
icon: <BrainIcon />, |
|
|
|
shelves: [] |
|
|
|
}, { |
|
|
|
name: 'ELTS', |
|
|
|
icon: <PersonSpeakerIcon />, |
|
|
|
shelves: [] |
|
|
|
}] |
|
|
|
}; |
|
|
|
|
|
|
|
export const Home: React.FC = () => { |
|
|
|
const [isAddWordModalOpen, setAddWordModalState] = useState<boolean>(false); |
|
|
|
|
|
|
|
|
|
|
|
return <section className="page"> |
|
|
|
|
|
|
|
<header className={styles.pageHeader}> |
|
|
|
@@ -42,8 +83,8 @@ export const Home: React.FC = () => { |
|
|
|
}} |
|
|
|
} /> |
|
|
|
{/* eslint-disable-next-line */} |
|
|
|
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSERA5Pm3aRBV7AaI8tvpZfzpD24ZgrU1_8NA&usqp=CAU" alt="profile-image" /> |
|
|
|
<InternBadge /> |
|
|
|
<img src={userProfileData.image} alt="profile-image" /> |
|
|
|
{ userProfileData.medal.icon } |
|
|
|
</div> |
|
|
|
<div className={styles.userDetails}> |
|
|
|
<h2> Neymar Junior </h2> |
|
|
|
@@ -118,86 +159,30 @@ export const Home: React.FC = () => { |
|
|
|
</button> |
|
|
|
</header> |
|
|
|
<ul> |
|
|
|
<li> |
|
|
|
<div className={styles.progress}> |
|
|
|
<CircularProgressbar value={30} strokeWidth={7} |
|
|
|
styles={{ |
|
|
|
path: { |
|
|
|
stroke: 'white', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}, |
|
|
|
trail: { |
|
|
|
stroke: 'rgba(255, 255, 255, 0.25)', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}} |
|
|
|
} /> |
|
|
|
|
|
|
|
<span className={styles.text}> 30% </span> |
|
|
|
</div> |
|
|
|
<h5> All Words </h5> |
|
|
|
<p> Vocabulary </p> |
|
|
|
<p> 1.2K Words </p> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<div className={styles.progress}> |
|
|
|
<CircularProgressbar value={50} strokeWidth={7} |
|
|
|
styles={{ |
|
|
|
path: { |
|
|
|
stroke: 'white', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}, |
|
|
|
trail: { |
|
|
|
stroke: 'rgba(255, 255, 255, 0.25)', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}} |
|
|
|
} /> |
|
|
|
|
|
|
|
<span className={styles.text}> 50% </span> |
|
|
|
</div> |
|
|
|
<h5> IELTS Fundamentals </h5> |
|
|
|
<p> IELTS </p> |
|
|
|
<p> 250 Words </p> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<div className={styles.progress}> |
|
|
|
<CircularProgressbar value={10} strokeWidth={7} |
|
|
|
styles={{ |
|
|
|
path: { |
|
|
|
stroke: 'white', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}, |
|
|
|
trail: { |
|
|
|
stroke: 'rgba(255, 255, 255, 0.25)', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}} |
|
|
|
} /> |
|
|
|
|
|
|
|
<span className={styles.text}> 10% </span> |
|
|
|
</div> |
|
|
|
<h5> GRE Fundamentals </h5> |
|
|
|
<p> GRE </p> |
|
|
|
<p> 456 Words </p> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<div className={styles.progress}> |
|
|
|
<CircularProgressbar value={25} strokeWidth={7} |
|
|
|
styles={{ |
|
|
|
path: { |
|
|
|
stroke: 'white', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}, |
|
|
|
trail: { |
|
|
|
stroke: 'rgba(255, 255, 255, 0.25)', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}} |
|
|
|
} /> |
|
|
|
|
|
|
|
<span className={styles.text}> 25% </span> |
|
|
|
</div> |
|
|
|
<h5> Sapiens </h5> |
|
|
|
<p> Book </p> |
|
|
|
<p> 125 Words </p> |
|
|
|
</li> |
|
|
|
{ userProfileData.categories.map(category => { |
|
|
|
return category.shelves.map(shelf => { |
|
|
|
return <li key={shelf.name}> |
|
|
|
<div className={styles.progress}> |
|
|
|
<CircularProgressbar value={shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0} strokeWidth={7} |
|
|
|
styles={{ |
|
|
|
path: { |
|
|
|
stroke: 'white', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}, |
|
|
|
trail: { |
|
|
|
stroke: 'rgba(255, 255, 255, 0.25)', |
|
|
|
strokeLinecap: 'round', |
|
|
|
}} |
|
|
|
} /> |
|
|
|
|
|
|
|
<span className={styles.text}> { shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0 }% </span> |
|
|
|
</div> |
|
|
|
<h5> { category.name } </h5> |
|
|
|
<p> { shelf.name } </p> |
|
|
|
<p> { shelf.words.length } words </p> |
|
|
|
</li> |
|
|
|
}) |
|
|
|
}) } |
|
|
|
</ul> |
|
|
|
</section> |
|
|
|
|
|
|
|
@@ -215,42 +200,17 @@ export const Home: React.FC = () => { |
|
|
|
</button> |
|
|
|
</header> |
|
|
|
<ul> |
|
|
|
<li> |
|
|
|
<div className={styles.icon}> |
|
|
|
<TimeIcon /> |
|
|
|
</div> |
|
|
|
<div className={styles.info}> |
|
|
|
<label> Vocabulary </label> |
|
|
|
<span> 5 Shelves </span> |
|
|
|
</div> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<div className={styles.icon}> |
|
|
|
<BookMarkIcon /> |
|
|
|
</div> |
|
|
|
<div className={styles.info}> |
|
|
|
<label> Books </label> |
|
|
|
<span> 3 Shelves </span> |
|
|
|
</div> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<div className={styles.icon}> |
|
|
|
<PersonSpeakerIcon /> |
|
|
|
</div> |
|
|
|
<div className={styles.info}> |
|
|
|
<label> IELTS </label> |
|
|
|
<span> 5 Shelves </span> |
|
|
|
</div> |
|
|
|
</li> |
|
|
|
<li> |
|
|
|
<div className={styles.icon}> |
|
|
|
<BrainIcon /> |
|
|
|
</div> |
|
|
|
<div className={styles.info}> |
|
|
|
<label> GRE </label> |
|
|
|
<span> 2 Shelves </span> |
|
|
|
</div> |
|
|
|
</li> |
|
|
|
{ userProfileData.categories.map(category => { |
|
|
|
return <li key={category.name}> |
|
|
|
<div className={styles.icon}> |
|
|
|
{ category.icon } |
|
|
|
</div> |
|
|
|
<div className={styles.info}> |
|
|
|
<label> { category.name } </label> |
|
|
|
<span> { category.shelves.length } Shelves </span> |
|
|
|
</div> |
|
|
|
</li> |
|
|
|
})} |
|
|
|
</ul> |
|
|
|
</section> |
|
|
|
|
|
|
|
|