Add knowledge identification requirement and unknown filter

This commit is contained in:
pikiou 2022-05-11 09:15:59 +02:00
parent 1b93b41225
commit df33d3a951
3 changed files with 60 additions and 19 deletions

View File

@ -1,4 +1,4 @@
import React, { memo } from "react" import React, { memo, useState } from "react"
import { useSelector } from "react-redux" import { useSelector } from "react-redux"
import styles from "./styles.module.scss" import styles from "./styles.module.scss"
import BoxItem from "./BoxItem" import BoxItem from "./BoxItem"
@ -11,12 +11,36 @@ import {
const BoxList: React.FC = (): JSX.Element | null => { const BoxList: React.FC = (): JSX.Element | null => {
const detailedBoxes = useSelector(selectSortedUniqueDetailedBoxes) const detailedBoxes = useSelector(selectSortedUniqueDetailedBoxes)
const [volunteerKnowledge, saveVolunteerKnowledge] = useVolunteerKnowledge() const [volunteerKnowledge, saveVolunteerKnowledge] = useVolunteerKnowledge()
const [showUnknownOnly, setShowUnknownOnly] = useState(false)
const onShowUnknownOnly = (e: React.ChangeEvent<HTMLInputElement>) =>
setShowUnknownOnly(e.target.checked)
if (!detailedBoxes || detailedBoxes.length === 0) return null if (!detailedBoxes || detailedBoxes.length === 0) return null
const boxesToShow = detailedBoxes.filter(
(box) =>
!box ||
!showUnknownOnly ||
!volunteerKnowledge ||
(!volunteerKnowledge.ok.includes(box.gameId) &&
!volunteerKnowledge.bof.includes(box.gameId) &&
!volunteerKnowledge.niet.includes(box.gameId))
)
return ( return (
<div>
<label className={styles.showUnknownOnlyLabel}>
<input
type="checkbox"
name="showUnknownOnly"
onChange={onShowUnknownOnly}
checked={showUnknownOnly}
/>{" "}
Uniquement les non-renseignés
</label>
<ul className={styles.boxList}> <ul className={styles.boxList}>
{detailedBoxes.map((detailedBox: any) => ( {boxesToShow.map((detailedBox: any) => (
<BoxItem <BoxItem
detailedBox={detailedBox} detailedBox={detailedBox}
volunteerKnowledge={volunteerKnowledge} volunteerKnowledge={volunteerKnowledge}
@ -25,6 +49,7 @@ const BoxList: React.FC = (): JSX.Element | null => {
/> />
))} ))}
</ul> </ul>
</div>
) )
} }

View File

@ -1,6 +1,13 @@
@import "../../theme/variables"; @import "../../theme/variables";
@import "../../theme/mixins"; @import "../../theme/mixins";
.showUnknownOnlyLabel {
text-align: left;
display: inline-block;
margin-bottom: 10px;
width: 280px;
}
.boxList { .boxList {
padding: 0; padding: 0;
list-style: none; list-style: none;

View File

@ -1,14 +1,22 @@
import { FC, memo } from "react" import { FC, memo } from "react"
import { useSelector } from "react-redux"
import { RouteComponentProps } from "react-router-dom" import { RouteComponentProps } from "react-router-dom"
import { Helmet } from "react-helmet" import { Helmet } from "react-helmet"
import { AppThunk } from "../../store" import { AppThunk } from "../../store"
import styles from "./styles.module.scss" import styles from "./styles.module.scss"
import { BoxList, KnowledgeIntro, fetchForKnowledge } from "../../components" import { BoxList, KnowledgeIntro, fetchForKnowledge } from "../../components"
import { selectUserJwtToken } from "../../store/auth"
export type Props = RouteComponentProps export type Props = RouteComponentProps
const KnowledgesPage: FC<Props> = (): JSX.Element => ( const KnowledgesPage: FC<Props> = (): JSX.Element => {
const jwtToken = useSelector(selectUserJwtToken)
if (jwtToken === undefined) return <p>Loading...</p>
if (!jwtToken) {
return <div>Besoin d'être identifié</div>
}
return (
<div className={styles.knowledgesPage}> <div className={styles.knowledgesPage}>
<div className={styles.knowledgesContent}> <div className={styles.knowledgesContent}>
<Helmet title="KnowledgesPage" /> <Helmet title="KnowledgesPage" />
@ -16,7 +24,8 @@ const KnowledgesPage: FC<Props> = (): JSX.Element => (
<BoxList /> <BoxList />
</div> </div>
</div> </div>
) )
}
// Fetch server-side data here // Fetch server-side data here
export const loadData = (): AppThunk[] => [...fetchForKnowledge.map((f) => f())] export const loadData = (): AppThunk[] => [...fetchForKnowledge.map((f) => f())]