summaryrefslogtreecommitdiff
path: root/client/src/routes/app/components
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/routes/app/components')
-rw-r--r--client/src/routes/app/components/content/content.css20
-rw-r--r--client/src/routes/app/components/content/content.jsx32
-rw-r--r--client/src/routes/app/components/sidebar/sidebar.css24
-rw-r--r--client/src/routes/app/components/sidebar/sidebar.jsx19
4 files changed, 95 insertions, 0 deletions
diff --git a/client/src/routes/app/components/content/content.css b/client/src/routes/app/components/content/content.css
new file mode 100644
index 0000000..196fb96
--- /dev/null
+++ b/client/src/routes/app/components/content/content.css
@@ -0,0 +1,20 @@
+.content {
+ display: flex;
+ flex-direction: column;
+
+ flex-grow: 1;
+ padding: 10px;
+
+ overflow-y: scroll;
+
+ .title {
+ border: 0;
+ padding: 10px;
+ margin-left: 15px;
+ margin-bottom: 50px;
+ }
+ .title:focus {
+ border: 0;
+ outline: 0;
+ }
+}
diff --git a/client/src/routes/app/components/content/content.jsx b/client/src/routes/app/components/content/content.jsx
new file mode 100644
index 0000000..42ecb8a
--- /dev/null
+++ b/client/src/routes/app/components/content/content.jsx
@@ -0,0 +1,32 @@
+import {useLayoutEffect, useRef, useState} from 'react';
+
+import './content.css';
+
+import Entry from '../../../../components/entry';
+
+export default function Content({ title, setTitle, items, setItems }) {
+ const [focused, setFocused] = useState(null);
+
+ const children = items.map((item, i) => {
+ return <Entry
+ item={item}
+ isFocused={i === focused}
+ onSelect={delta => setFocused(i + delta)}
+ onRemove={refocus => setItems(a => {
+ if (refocus) {
+ setFocused(i-1);
+ }
+ return [...a.slice(0, i), ...a.slice(i + 1)]
+ })}
+ onEnter={type => setItems(a => {
+ setFocused(i+1);
+ return a.toSpliced(i+1, 0, { type, text: '' });
+ })}
+ />;
+ });
+
+ return <div className="content">
+ <h1 className='title' contentEditable="true">{title}</h1>
+ {children}
+ </div>;
+}
diff --git a/client/src/routes/app/components/sidebar/sidebar.css b/client/src/routes/app/components/sidebar/sidebar.css
new file mode 100644
index 0000000..515117a
--- /dev/null
+++ b/client/src/routes/app/components/sidebar/sidebar.css
@@ -0,0 +1,24 @@
+.sidebar {
+ width: 200px;
+ background-color: #f2f2f2;
+
+ flex-shrink: 0;
+
+ h1 {
+ margin-left: 10px;
+ margin-top: 10px;
+ }
+
+ .file {
+ display: block;
+
+ color: black;
+ text-decoration: none;
+
+ padding: 5px;
+ }
+
+ .file:hover {
+ background-color: #e4e4e4;
+ }
+}
diff --git a/client/src/routes/app/components/sidebar/sidebar.jsx b/client/src/routes/app/components/sidebar/sidebar.jsx
new file mode 100644
index 0000000..1ce7d2b
--- /dev/null
+++ b/client/src/routes/app/components/sidebar/sidebar.jsx
@@ -0,0 +1,19 @@
+import { useNavigate } from "react-router";
+import { RichTreeView } from '@mui/x-tree-view/RichTreeView';
+
+import './sidebar.css';
+
+
+export default function Sidebar({ files }) {
+ const navigate = useNavigate();
+
+ const onSelect = (_, i) => {
+ navigate(`/file/${i}`);
+ };
+
+ return <div className="sidebar">
+ <h1>🧀🥜</h1>
+ <hr/>
+ <RichTreeView items={files} onItemClick={onSelect} getItemLabel={p => p.title} />
+ </div>;
+}