1+ import { useHistory , useLocation } from "@docusaurus/router" ;
2+ import { useEffect } from "react" ;
3+ import styles from "./styles.module.css" ;
4+ import LargeProjectCard from "./LargeProjectCard" ;
5+ import { getCategoryFromProjectPageName } from "." ;
6+ import FundableProjects from "." ;
7+ import Layout from "@theme/Layout" ;
8+ import { Route } from 'react-router-dom' ;
9+
10+
11+ export default function LargeProjectCardPage ( ) {
12+ const location = useLocation ( ) ;
13+ const history = useHistory ( ) ;
14+
15+ useEffect ( ( ) => {
16+ if ( location . state ?. fromFundable ) {
17+ window . scrollTo ( { top : location . state . scrollY ?? 0 , behavior : 'auto' } ) ;
18+ }
19+ } , [ ] ) ;
20+
21+ const handleOverlayClick = ( ) => {
22+ const scrollY = location . state ?. scrollY ;
23+ setTimeout ( ( ) => {
24+ if ( scrollY !== undefined ) {
25+ window . scrollTo ( { top : scrollY , behavior : 'auto' } ) ;
26+ }
27+ } , 0 ) ;
28+ history . replace ( '/fundable' ) ;
29+ } ;
30+
31+ const handleClose = ( ) => {
32+ const scrollY = location . state ?. scrollY ;
33+ if ( location . state ?. fromFundable ) {
34+ history . replace ( '/fundable' ) ;
35+
36+ setTimeout ( ( ) => {
37+ if ( scrollY !== undefined ) {
38+ window . scrollTo ( { top : scrollY , behavior : 'auto' } ) ;
39+ }
40+ } , 0 ) ;
41+ } else {
42+ history . goBack ( ) ;
43+ }
44+ }
45+ return (
46+ < Layout >
47+ < FundableProjects />
48+ < Route
49+ path = "/fundable/:pageName"
50+ render = { ( { match } ) => {
51+ const { pageName } = match . params ; /* extract the dynamic part from the url i.e. the pageName*/
52+ const projectsByCategory = getCategoryFromProjectPageName ( pageName ) ;
53+ const project = projectsByCategory . find ( ( project ) => project . pageName === pageName ) ;
54+ if ( ! project ) return null ;
55+
56+ return (
57+ < div className = { styles . modal_overlay } onClick = { handleOverlayClick } >
58+ < div
59+ className = { styles . modal_content }
60+ onClick = { ( e ) => e . stopPropagation ( ) }
61+ >
62+ < button
63+ className = "close-button"
64+ style = { {
65+ position : "absolute" ,
66+ top : "10px" ,
67+ right : "10px" ,
68+ } }
69+ onClick = { handleClose }
70+ />
71+ < LargeProjectCard project = { project } />
72+ </ div >
73+ </ div >
74+ ) ;
75+ } }
76+ />
77+ </ Layout >
78+ )
79+ }
0 commit comments