Skip to content

Commit dbe6616

Browse files
CocoChartbenel
authored andcommitted
FEATURE: Consult own documents as a list or a graph (closes #277).
1 parent b1dcc84 commit dbe6616

File tree

2 files changed

+56
-9
lines changed

2 files changed

+56
-9
lines changed

frontend/src/routes/Bookshelf.jsx

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import '../styles/Bookshelf.css';
22
import { useState, useEffect } from 'react';
33
import Container from 'react-bootstrap/Container';
4+
import ButtonGroup from 'react-bootstrap/ButtonGroup';
5+
import ToggleButton from 'react-bootstrap/ToggleButton';
46
import FutureDocument from '../components/FutureDocument.jsx';
7+
import DocumentsCards from '../components/DocumentsCards.jsx';
58
import Graph from '../components/Graph.jsx';
69
import Col from 'react-bootstrap/Col';
710
import Row from 'react-bootstrap/Row';
811

912
function 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
}

frontend/src/styles/Bookshelf.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
.bookshelf .card {
22
background-color: ghostwhite;
33
}
4+
.bookshelf .btn {
5+
color: rgb(81, 81, 81);
6+
}
7+
.bookshelf .btn-check:checked + .btn {
8+
color: black;
9+
font-weight: bold;
10+
background-color: #de940a;
11+
}

0 commit comments

Comments
 (0)