1- import React , { useEffect , useMemo , useState } from "react" ;
1+ import React , { useCallback , useEffect , useMemo , useState } from "react" ;
22import { useSelector , useDispatch } from "react-redux" ;
33import { useParams } from "react-router-dom" ;
4+ import { Modal } from "../../../../shared/components/Modal" ;
5+ import { useModal } from "../../../../shared/hooks" ;
46import { formatPrice } from "../../../../shared/utils" ;
57import {
68 AboutTabComponent ,
79 PreviewInformationList ,
810 DiscussionsComponent ,
911} from "../../components/CommonDetailContainer" ;
10- import { getCommonDetail } from "../../store/actions" ;
11- import { selectCommonDetail , selectProposals , selectDiscussions } from "../../store/selectors" ;
12+ import { getCommonDetail , loadCommonDiscussionList } from "../../store/actions" ;
13+ import {
14+ selectCommonDetail ,
15+ selectProposals ,
16+ selectDiscussions ,
17+ selectIsDiscussionsLoaded ,
18+ } from "../../store/selectors" ;
1219import "./index.scss" ;
1320interface CommonDetailRouterParams {
1421 id : string ;
@@ -35,11 +42,13 @@ const tabs = [
3542
3643export default function CommonDetail ( ) {
3744 const { id } = useParams < CommonDetailRouterParams > ( ) ;
38- const [ tab , setTab ] = useState ( "discussions" ) ;
39- const common = useSelector ( selectCommonDetail ) ;
40- const proposals = useSelector ( selectProposals ) ;
41- const discussions = useSelector ( selectDiscussions ) ;
45+ const [ tab , setTab ] = useState ( "about" ) ;
46+ const common = useSelector ( selectCommonDetail ( ) ) ;
47+ const proposals = useSelector ( selectProposals ( ) ) ;
48+ const discussions = useSelector ( selectDiscussions ( ) ) ;
49+ const isDiscussionsLoaded = useSelector ( selectIsDiscussionsLoaded ( ) ) ;
4250 const dispatch = useDispatch ( ) ;
51+ const { isShowing, onOpen, onClose } = useModal ( false ) ;
4352
4453 useEffect ( ( ) => {
4554 dispatch ( getCommonDetail . request ( id ) ) ;
@@ -63,80 +72,102 @@ export default function CommonDetail() {
6372 [ discussions ] ,
6473 ) ;
6574
75+ const changeTabHandler = useCallback (
76+ ( tab : string ) => {
77+ switch ( tab ) {
78+ case "discussions" :
79+ if ( ! isDiscussionsLoaded ) {
80+ dispatch ( loadCommonDiscussionList . request ( ) ) ;
81+ }
82+ break ;
83+
84+ default :
85+ break ;
86+ }
87+ setTab ( tab ) ;
88+ } ,
89+ [ dispatch , isDiscussionsLoaded ] ,
90+ ) ;
91+
6692 return (
6793 common && (
68- < div className = "common-detail-wrapper" >
69- < div className = "main-information-block" >
70- < div className = "main-information-wrapper" >
71- < div className = "img-wrapper" >
72- < img src = { common ?. image } alt = { common ?. name } />
73- </ div >
74- < div className = "text-information-wrapper" >
75- < div className = "text" >
76- < div className = "name" > { common ?. name } </ div >
77- < div className = "tagline" > { common ?. metadata . byline } </ div >
94+ < >
95+ < Modal isShowing = { isShowing } onClose = { onClose } >
96+ < div > hello</ div >
97+ </ Modal >
98+ < div className = "common-detail-wrapper" >
99+ < div className = "main-information-block" >
100+ < div className = "main-information-wrapper" >
101+ < div className = "img-wrapper" >
102+ < img src = { common ?. image } alt = { common ?. name } />
78103 </ div >
79- < div className = "numbers " >
80- < div className = "item " >
81- < div className = "value " > { formatPrice ( common ?. balance ) } </ div >
82- < div className = "name" > Available Funds </ div >
104+ < div className = "text-information-wrapper " >
105+ < div className = "text " >
106+ < div className = "name " > { common ?. name } </ div >
107+ < div className = "tagline" > { common ?. metadata . byline } </ div >
83108 </ div >
84- < div className = "item" >
85- < div className = "value" > { formatPrice ( common ?. raised ) } </ div >
86- < div className = "name" > Total Raised</ div >
109+ < div className = "numbers" >
110+ < div className = "item" onClick = { onOpen } >
111+ < div className = "value" > { formatPrice ( common ?. balance ) } </ div >
112+ < div className = "name" > Available Funds</ div >
113+ </ div >
114+ < div className = "item" >
115+ < div className = "value" > { formatPrice ( common ?. raised ) } </ div >
116+ < div className = "name" > Total Raised</ div >
117+ </ div >
118+ < div className = "item" >
119+ < div className = "value" > { common ?. members . length } </ div >
120+ < div className = "name" > Members</ div >
121+ </ div >
122+ < div className = "item" >
123+ < div className = "value" > 0</ div >
124+ < div className = "name" > Active Proposals</ div >
125+ </ div >
87126 </ div >
88- < div className = "item" >
89- < div className = "value" > { common ?. members . length } </ div >
90- < div className = "name" > Members</ div >
127+ </ div >
128+ < div className = "line" > </ div >
129+ < div className = "common-content-selector" >
130+ < div className = "tabs-wrapper" >
131+ { tabs . map ( ( t ) => (
132+ < div
133+ key = { t . key }
134+ className = { `tab-item ${ tab === t . key ? "active" : "" } ` }
135+ onClick = { ( ) => changeTabHandler ( t . key ) }
136+ >
137+ { t . name }
138+ { tab === t . key && < span > </ span > }
139+ </ div >
140+ ) ) }
91141 </ div >
92- < div className = "item" >
93- < div className = "value" > 0</ div >
94- < div className = "name" > Active Proposals</ div >
142+ < div className = "social-wrapper" >
143+ < button className = "button-blue" > Join the effort</ button >
95144 </ div >
96145 </ div >
97146 </ div >
98- < div className = "line" > </ div >
99- < div className = "common-content-selector" >
100- < div className = "tabs-wrapper" >
101- { tabs . map ( ( t ) => (
102- < div
103- key = { t . key }
104- className = { `tab-item ${ tab === t . key ? "active" : "" } ` }
105- onClick = { ( ) => setTab ( t . key ) }
106- >
107- { t . name }
108- { tab === t . key && < span > </ span > }
109- </ div >
110- ) ) }
147+ </ div >
148+ < div className = "main-content-container" >
149+ < div className = "tab-title" > { tab } </ div >
150+ < div className = "inner-main-content-wrapper" >
151+ < div className = "tab-content-wrapper" >
152+ { tab === "about" && < AboutTabComponent common = { common } /> }
153+ { tab === "discussions" && < DiscussionsComponent discussions = { discussions } /> }
111154 </ div >
112- < div className = "social-wrapper" >
113- < button className = "button-blue" > Join the effort</ button >
155+ < div className = "sidebar-wrapper" >
156+ < PreviewInformationList
157+ title = "Latest Discussions"
158+ data = { latestDiscussions }
159+ vievAllHandler = { ( ) => setTab ( "discussions" ) }
160+ />
161+ < PreviewInformationList
162+ title = "Latest Proposals"
163+ data = { lastestProposals }
164+ vievAllHandler = { ( ) => setTab ( "proposals" ) }
165+ />
114166 </ div >
115167 </ div >
116168 </ div >
117169 </ div >
118- < div className = "main-content-container" >
119- < div className = "tab-title" > { tab } </ div >
120- < div className = "inner-main-content-wrapper" >
121- < div className = "tab-content-wrapper" >
122- { tab === "about" && < AboutTabComponent common = { common } /> }
123- { tab === "discussions" && < DiscussionsComponent /> }
124- </ div >
125- < div className = "sidebar-wrapper" >
126- < PreviewInformationList
127- title = "Latest Discussions"
128- data = { latestDiscussions }
129- vievAllHandler = { ( ) => setTab ( "discussions" ) }
130- />
131- < PreviewInformationList
132- title = "Latest Proposals"
133- data = { lastestProposals }
134- vievAllHandler = { ( ) => setTab ( "proposals" ) }
135- />
136- </ div >
137- </ div >
138- </ div >
139- </ div >
170+ </ >
140171 )
141172 ) ;
142173}
0 commit comments