mirror of
https://github.com/Paris-est-Ludique/intranet.git
synced 2025-06-10 01:24:20 +02:00
74 lines
2.6 KiB
TypeScript
74 lines
2.6 KiB
TypeScript
import { FC, memo } from "react"
|
|
import * as _ from "lodash"
|
|
import { RouteComponentProps, Link } from "react-router-dom"
|
|
import { useSelector, shallowEqual } from "react-redux"
|
|
import { Helmet } from "react-helmet"
|
|
import { EntityState } from "@reduxjs/toolkit"
|
|
|
|
import { AppState, AppThunk } from "../../store"
|
|
import { AnnouncementLink, LoginForm } from "../../components"
|
|
import styles from "./styles.module.scss"
|
|
import { fetchAnnouncementListIfNeed } from "../../store/announcementList"
|
|
import { Announcement } from "../../services/announcement"
|
|
import { selectUserJwtToken } from "../../store/auth"
|
|
import ContentTitle from "../../components/ui/Content/ContentTitle"
|
|
|
|
export type Props = RouteComponentProps
|
|
|
|
let prevAnnouncements: EntityState<Announcement> | undefined
|
|
|
|
const AnnouncementsPage: FC<Props> = (): JSX.Element => {
|
|
const jwtToken = useSelector(selectUserJwtToken)
|
|
|
|
const announcementList = useSelector((state: AppState) => {
|
|
if (!state.announcementList) {
|
|
return undefined
|
|
}
|
|
const announcements = _.pick(state.announcementList, "entities", "ids")
|
|
if (announcements) {
|
|
prevAnnouncements = announcements
|
|
return announcements
|
|
}
|
|
return prevAnnouncements
|
|
}, shallowEqual)
|
|
|
|
if (jwtToken === undefined) return <p>Loading...</p>
|
|
|
|
if (jwtToken && announcementList) {
|
|
const list = _.orderBy(announcementList.ids, _.identity, "desc")
|
|
const listElements = list.map((id) => {
|
|
const announcement = announcementList.entities[id] as Announcement
|
|
return announcement && <AnnouncementLink key={id} announcement={announcement} />
|
|
})
|
|
|
|
return (
|
|
<div className={styles.announcements}>
|
|
<div className={styles.announcementsContent}>
|
|
<ContentTitle title="Annonces" />
|
|
{listElements}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
return (
|
|
<div>
|
|
<div className={styles.announcements}>
|
|
<div className={styles.loginContent}>
|
|
<Helmet title="LoginPage" />
|
|
<LoginForm />
|
|
</div>
|
|
</div>
|
|
<div className={styles.announcements}>
|
|
<div className={styles.navigationLink}>
|
|
<Link to="/sinscrire"> S'informer sur le bénévolat </Link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
// Fetch server-side data here
|
|
export const loadData = (): AppThunk[] => [fetchAnnouncementListIfNeed()]
|
|
|
|
export default memo(AnnouncementsPage)
|