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