11import '../styles/Bookshelf.css' ;
22import { useState , useEffect } from 'react' ;
33import Container from 'react-bootstrap/Container' ;
4+ import ButtonGroup from 'react-bootstrap/ButtonGroup' ;
5+ import ToggleButton from 'react-bootstrap/ToggleButton' ;
46import FutureDocument from '../components/FutureDocument.jsx' ;
7+ import DocumentsCards from '../components/DocumentsCards.jsx' ;
58import Graph from '../components/Graph.jsx' ;
69import Col from 'react-bootstrap/Col' ;
710import Row from 'react-bootstrap/Row' ;
811
912function Bookshelf ( { backend, user } ) {
10- const [ documents , setDocuments ] = useState ( ) ;
13+ const [ documents , setDocuments ] = useState ( [ ] ) ;
1114 const [ lastUpdate , setLastUpdate ] = useState ( ) ;
15+ const [ displayMode , setDisplayMode ] = useState ( localStorage . getItem ( 'displayMode' ) || 'graph' ) ;
16+
17+ const displayModesList = [ 'graph' , 'list' ] ;
1218
1319 useEffect ( ( ) => {
1420 backend . getAllDocuments ( user )
@@ -18,16 +24,49 @@ function Bookshelf({ backend, user }) {
1824 . map ( ( { _id, dc_title, links} ) => [ _id , dc_title , links ] ) ;
1925 const displayedDocs = docs ?. flatMap ( d => d [ 0 ] ) ;
2026
27+ function DisplayDocuments ( ) {
28+ switch ( displayMode ) {
29+ case 'graph' :
30+ return (
31+ < Row >
32+ < Col className = "col-10" >
33+ < Graph rawDocs = { docs } { ...{ displayedDocs} } />
34+ </ Col >
35+ < Col >
36+ < FutureDocument relatedTo = { [ ] } { ...{ setLastUpdate, backend, user} } />
37+ </ Col >
38+ </ Row >
39+ ) ;
40+ case 'list' :
41+ return < DocumentsCards docs = { documents } byRow = { 4 } createOn = { [ ] }
42+ { ...{ setLastUpdate, backend, user} }
43+ /> ;
44+ }
45+ }
46+
2147 return (
2248 < Container className = "screen bookshelf" >
23- < Row >
24- < Col className = "col-10" >
25- < Graph rawDocs = { docs } { ...{ displayedDocs} } />
26- </ Col >
27- < Col >
28- < FutureDocument relatedTo = { [ ] } { ...{ setLastUpdate, backend, user} } />
29- </ Col >
30- </ Row >
49+ < h4 > My documents</ h4 >
50+ < ButtonGroup className = "mb-2" >
51+ { displayModesList . map ( ( display , idx ) => (
52+ < ToggleButton
53+ key = { idx }
54+ id = { `display-${ display } ` }
55+ type = "radio"
56+ variant = "outline-dark"
57+ name = "displayMode"
58+ value = { display }
59+ checked = { displayMode === display }
60+ onChange = { ( e ) => {
61+ setDisplayMode ( e . currentTarget . value ) ;
62+ localStorage . setItem ( 'displayMode' , e . currentTarget . value ) ;
63+ } }
64+ >
65+ As a { display }
66+ </ ToggleButton >
67+ ) ) }
68+ </ ButtonGroup >
69+ < DisplayDocuments />
3170 </ Container >
3271 ) ;
3372}
0 commit comments