1
1
import React , { useEffect , useState } from "react" ;
2
2
import Layout from "@theme/Layout" ;
3
3
import "./index.css" ;
4
+ import { useHistory , useLocation } from "react-router-dom" ;
4
5
import useParseMarkdown from "../../../hooks/useParseMarkdown" ;
5
6
import ErrorComponent from "../../../components/ErrorComponent" ;
6
7
import Sidebar from "../../../components/Sidebar" ;
7
8
import C4GT2024Description from "../../../components/C4gt2024Description" ;
9
+ import OrgDescription from "../../../components/OrgDescription" ;
10
+ import IssueDescription from "../../../components/IssueDescription" ;
8
11
9
12
function C4GT2024 ( ) {
13
+ const location = useLocation ( ) ;
14
+ const history = useHistory ( ) ;
10
15
const { API_AUTH_KEY , API_BASE_URL } = useParseMarkdown ( ) ;
11
- const [ issueData , setIssueData ] = useState ( null ) ;
12
- const [ error , setError ] = useState ( null ) ;
13
16
const [ currentOrg , setCurrentOrg ] = useState ( null ) ;
14
17
const [ currentIssue , setCurrentIssue ] = useState ( null ) ;
18
+ const [ issueData , setIssueData ] = useState ( null ) ;
19
+ const [ currentOrgData , setCurrentOrgData ] = useState ( null ) ;
20
+ const [ currentTab , setCurrentTab ] = useState ( null )
21
+ const [ error , setError ] = useState ( null ) ;
15
22
16
23
useEffect ( ( ) => {
17
24
setError ( ( ) => null ) ;
25
+ const queryString = location . search ;
26
+ const urlParams = new URLSearchParams ( queryString ) ;
27
+ const ifOrg = urlParams . get ( "id" ) ? urlParams . get ( "id" ) : null ;
28
+ const ifIssue = urlParams . get ( "issue" ) ? urlParams . get ( "issue" ) : null ;
29
+ const newUrl = ifIssue
30
+ ? `/docs/2024?id=${ ifOrg } &issue=${ ifIssue } `
31
+ : ifOrg
32
+ ? `/docs/2024?id=${ ifOrg } `
33
+ : "/docs/2024/" ;
34
+ history . push ( newUrl ) ;
35
+ if ( ifIssue ) setCurrentIssue ( ( ) => ifIssue ) ;
36
+ else setCurrentIssue ( null ) ;
37
+ if ( ifOrg ) { setCurrentOrg ( ( ) => ifOrg ) ;
38
+ setCurrentTab ( "org" )
39
+ }
40
+ else { setCurrentOrg ( null ) ;
41
+ setCurrentTab ( "c4gt" )
42
+ }
18
43
fetch ( `${ API_BASE_URL } /issues` , {
19
44
method : "GET" ,
20
45
headers : {
@@ -29,13 +54,49 @@ function C4GT2024() {
29
54
throw new Error ( `${ data ?. message } ` ) ;
30
55
} else if ( data ?. error ) {
31
56
throw new Error ( `${ data ?. error } ` ) ;
32
- } else setIssueData ( ( ) => data ?. issues ) ;
57
+ } else {
58
+ let issues = data ?. issues ;
59
+ setIssueData ( ( ) => issues ) ;
60
+ if ( ifOrg ) {
61
+ setCurrentOrgData ( ( ) => {
62
+ let issue_data = issues ?. filter ( ( d , i ) => {
63
+ if ( d . org_name == ifOrg ) return d . issues ;
64
+ else return ;
65
+ } ) ;
66
+ return issue_data ;
67
+ } ) ;
68
+ } else setCurrentOrgData ( null ) ;
69
+ }
33
70
} )
34
71
. catch ( ( error ) => {
35
72
setError ( ( ) => error ) ;
36
73
} ) ;
37
74
} , [ ] ) ;
38
75
76
+ useEffect ( ( ) => {
77
+ const queryString = location . search ;
78
+ const urlParams = new URLSearchParams ( queryString ) ;
79
+ const ifOrg = urlParams . get ( "id" ) ? urlParams . get ( "id" ) : null ;
80
+ const ifIssue = urlParams . get ( "issue" ) ? urlParams . get ( "issue" ) : null ;
81
+ if ( ifIssue ) setCurrentIssue ( ( ) => ifIssue ) ;
82
+ else setCurrentIssue ( null ) ;
83
+ if ( ifOrg ) {
84
+ setCurrentOrg ( ( ) => ifOrg ) ;
85
+ setCurrentOrgData ( ( ) => {
86
+ let data = issueData ?. filter ( ( d , i ) => {
87
+ if ( d . org_name == ifOrg ) return d . issues ;
88
+ else return ;
89
+ } ) ;
90
+ return data ;
91
+ } ) ;
92
+ setCurrentTab ( "org" )
93
+ } else {
94
+ setCurrentOrg ( null ) ;
95
+ setCurrentOrgData ( null ) ;
96
+ setCurrentTab ( "c4gt" )
97
+ }
98
+ } , [ location ] ) ;
99
+
39
100
return (
40
101
< >
41
102
{ error ? (
@@ -47,15 +108,34 @@ function C4GT2024() {
47
108
< aside className = "theme-doc-sidebar-container sidebar-container-2024" >
48
109
< Sidebar
49
110
issueData = { issueData }
50
- currentTab = { "c4gt" }
111
+ currentTab = { currentTab }
51
112
currentOrg = { currentOrg }
52
113
currentIssue = { currentIssue }
53
114
setCurrentIssue = { setCurrentIssue }
54
115
setCurrentOrg = { setCurrentOrg }
116
+ setCurrentTab = { setCurrentTab }
55
117
/>
56
118
</ aside >
57
119
< main className = "main-container" >
120
+ { currentTab === "c4gt" ? (
58
121
< C4GT2024Description />
122
+ ) : currentIssue != null ? (
123
+ < IssueDescription
124
+ currentOrg = { currentOrg }
125
+ currentIssue = { currentIssue }
126
+ />
127
+ ) : currentOrg != null ? (
128
+ < OrgDescription
129
+ currentIssue = { currentIssue }
130
+ setCurrentIssue = { setCurrentIssue }
131
+ currentOrg = { currentOrg }
132
+ issueData = { issueData }
133
+ currentOrgData = { currentOrgData }
134
+ />
135
+ ) : (
136
+ < > </ >
137
+ ) }
138
+
59
139
</ main >
60
140
</ div >
61
141
</ div >
0 commit comments