浏览代码

Added links and redirection to shelf and category details page on click of the respective blocks

master
kj1352 4 年前
父节点
当前提交
c8d3b1be04
共有 6 个文件被更改,包括 94 次插入19 次删除
  1. +2
    -0
      src/App.tsx
  2. +7
    -7
      src/components/category-details/CategoryDetails.module.scss
  3. +6
    -2
      src/components/category-details/CategoryDetails.tsx
  4. +12
    -10
      src/components/home/Home.tsx
  5. +40
    -0
      src/components/shelf-details/ShelfDetails.module.scss
  6. +27
    -0
      src/components/shelf-details/ShelfDetails.tsx

+ 2
- 0
src/App.tsx 查看文件

@@ -6,6 +6,7 @@ import { BrowserRouter, Route, Redirect, Switch } from "react-router-dom";
import { AddWord } from "./components/add-word/AddWord"; import { AddWord } from "./components/add-word/AddWord";
import { AddShelf } from "./components/add-shelf/AddShelf"; import { AddShelf } from "./components/add-shelf/AddShelf";
import { CategoryDetails } from "./components/category-details/CategoryDetails"; import { CategoryDetails } from "./components/category-details/CategoryDetails";
import { ShelfDetails } from "./components/shelf-details/ShelfDetails";


function App() { function App() {
return ( return (
@@ -16,6 +17,7 @@ function App() {
<Route path="/add-shelf" component={AddShelf} /> <Route path="/add-shelf" component={AddShelf} />
<Route path="/categories" component={Categories} /> <Route path="/categories" component={Categories} />
<Route path="/category-details/" component={CategoryDetails} /> <Route path="/category-details/" component={CategoryDetails} />
<Route path="/shelf-details/" component={ShelfDetails} />
<Route path="/revise" component={Revise} /> <Route path="/revise" component={Revise} />
<Redirect from="/" to="/home" /> <Redirect from="/" to="/home" />
</Switch> </Switch>


+ 7
- 7
src/components/category-details/CategoryDetails.module.scss 查看文件

@@ -80,20 +80,20 @@
border-radius: 3rem; border-radius: 3rem;
padding: 1.5rem; padding: 1.5rem;


&:nth-child(5n - 4) {
&:nth-child(5n - 1) {
background-color: var(--orange); background-color: var(--orange);
} }


&:nth-child(5n - 3) {
&:nth-child(5n - 2) {
background-color: var(--blue); background-color: var(--blue);
}
}


&:nth-child(5n - 2) {
background-color: var(--red);
&:nth-child(5n - 3) {
background-color: var(--teal);
} }


&:nth-child(5n - 1) {
background-color: var(--teal);
&:nth-child(5n - 4) {
background-color: var(--red);
} }
} }




+ 6
- 2
src/components/category-details/CategoryDetails.tsx 查看文件

@@ -11,12 +11,14 @@ import { userProfileData } from "../home/Home";
import { CircularProgressbar } from "react-circular-progressbar"; import { CircularProgressbar } from "react-circular-progressbar";
import { NavLink } from "react-router-dom"; import { NavLink } from "react-router-dom";
import { IShelf } from "../../structure/shelf"; import { IShelf } from "../../structure/shelf";
import { useHistory } from "react-router-dom";


export const CategoryDetails: React.FC = () => { export const CategoryDetails: React.FC = () => {
const location = useLocation(); const location = useLocation();
const category_id: any = queryString.parse(location.pathname)['/category-details/category_id']; const category_id: any = queryString.parse(location.pathname)['/category-details/category_id'];
const shelfCount: number = userProfileData.categories[category_id].shelves.length; const shelfCount: number = userProfileData.categories[category_id].shelves.length;
const [shelfResult, setShelfResult] = useState<Array<IShelf>>(userProfileData.categories[category_id].shelves); const [shelfResult, setShelfResult] = useState<Array<IShelf>>(userProfileData.categories[category_id].shelves);
const history = useHistory();


const searchShelf = (text: string) => { const searchShelf = (text: string) => {
if (text.length > 0) { if (text.length > 0) {
@@ -70,8 +72,10 @@ export const CategoryDetails: React.FC = () => {


<section className={styles.Shelf}> <section className={styles.Shelf}>
<ul> <ul>
{ shelfResult.map(shelf => {
return <li key={shelf.name}>
{ shelfResult.map((shelf, index) => {
return <li key={shelf.name} onClick={() => {
history.push('/shelf-details/category_id=' + category_id + '&&shelf_id=' + index);
}}>
<div className={styles.progress}> <div className={styles.progress}>
<CircularProgressbar value={shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0} strokeWidth={7} <CircularProgressbar value={shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0} strokeWidth={7}
styles={{ styles={{


+ 12
- 10
src/components/home/Home.tsx 查看文件

@@ -19,7 +19,7 @@ import { CircularProgressbar } from 'react-circular-progressbar';
import { IProfile } from "../../structure/profile"; import { IProfile } from "../../structure/profile";
import { NavLink } from "react-router-dom"; import { NavLink } from "react-router-dom";
import { AddCategory } from "../add-category/AddCategory"; import { AddCategory } from "../add-category/AddCategory";
import { useHistory } from "react-router-dom";


export var userProfileData : IProfile = { export var userProfileData : IProfile = {
name: 'Neymar Jr', name: 'Neymar Jr',
@@ -63,6 +63,7 @@ export var userProfileData : IProfile = {


export const Home: React.FC = () => { export const Home: React.FC = () => {
const [isAddCategoryPopupOpen, setAddCategoryPopupState] = useState<Boolean>(false); const [isAddCategoryPopupOpen, setAddCategoryPopupState] = useState<Boolean>(false);
const history = useHistory();


return <section className="page"> return <section className="page">


@@ -152,17 +153,16 @@ export const Home: React.FC = () => {
<BookShelfIcon /> <BookShelfIcon />
Active Shelves Active Shelves
</h4> </h4>
<button className={styles.expandButton}>
<ExpandIcon />
</button>
<NavLink to={'/add-shelf'}> <NavLink to={'/add-shelf'}>
<PlusIcon /> <PlusIcon />
</NavLink> </NavLink>
</header> </header>
<ul> <ul>
{ userProfileData.categories.map(category => {
return category.shelves.map(shelf => {
return <li key={shelf.name}>
{ userProfileData.categories.map((category, categoryIndex) => {
return category.shelves.map((shelf, shelfIndex) => {
return <li key={shelf.name} onClick={ () => {
history.push('/shelf-details/category_id=' + categoryIndex + '&&shelf_id=' + shelfIndex);
} }>
<div className={styles.progress}> <div className={styles.progress}>
<CircularProgressbar value={shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0} strokeWidth={7} <CircularProgressbar value={shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0} strokeWidth={7}
styles={{ styles={{
@@ -202,14 +202,16 @@ export const Home: React.FC = () => {
</header> </header>
<ul> <ul>
{ userProfileData.categories.map((category, index) => { { userProfileData.categories.map((category, index) => {
return <li key={category.name}>
return <li key={category.name} onClick={() => {
history.push('/category-details/category_id=' + index);
}}>
<div className={styles.icon}> <div className={styles.icon}>
{ category.icon } { category.icon }
</div> </div>
<NavLink to={'/category-details/category_id=' + index} className={styles.info}>
<div className={styles.info}>
<label> { category.name } </label> <label> { category.name } </label>
<span> { category.shelves.length } Shelves </span> <span> { category.shelves.length } Shelves </span>
</NavLink>
</div>
</li> </li>
})} })}
</ul> </ul>


+ 40
- 0
src/components/shelf-details/ShelfDetails.module.scss 查看文件

@@ -0,0 +1,40 @@
.navHeader {
background-color: transparent;
text-align: center;
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;

button {
width: 4rem;
text-align: center;
background-color: transparent;
border: 0;
display: flex;
align-items: center;
justify-content: flex-start;

svg {
width: 1rem;
color: var(--black);
}
}

h5 {
font-size: 1.5rem;
}

figure {
display: block;
img {
display: block;
width: 4rem;
height: 4rem;
border-radius: 50%;
border: 1px solid var(--creamy-white);
}
}
}

+ 27
- 0
src/components/shelf-details/ShelfDetails.tsx 查看文件

@@ -0,0 +1,27 @@
import React from "react";
import styles from './ShelfDetails.module.scss';
import { ReactComponent as ChevronLeft } from '../../assets/icons/chevron-left.svg';
import { userProfileData } from "../home/Home";
import { useLocation } from "react-router-dom";
import queryString from 'query-string';

export const ShelfDetails: React.FC = () => {
const location = useLocation();
const category_id: any = queryString.parse(location.pathname)['/category-details/category_id'];
const shelf_id: any = queryString.parse(location.pathname)['shelf_id'];
return <section className="modalPage">
<header className={styles.navHeader}>
<button onClick={() => window.history.back()}>
<ChevronLeft />
</button>
<h5> Shelves </h5>

<figure>
{/* eslint-disable-next-line */}
<img src={ userProfileData.image } alt="profile-image" />
</figure>
</header>
</section>
}

正在加载...
取消
保存