Add collapsible sidebar to App component
This commit is contained in:
29
src/App.tsx
29
src/App.tsx
@@ -75,6 +75,7 @@ export default function App() {
|
|||||||
const [viewingVersion, setViewingVersion] = useState<HistoryEntry | null>(null);
|
const [viewingVersion, setViewingVersion] = useState<HistoryEntry | null>(null);
|
||||||
const [selectedHistoryId, setSelectedHistoryId] = useState<string | null>(null);
|
const [selectedHistoryId, setSelectedHistoryId] = useState<string | null>(null);
|
||||||
const [confirmState, setConfirmState] = useState<ConfirmState | null>(null);
|
const [confirmState, setConfirmState] = useState<ConfirmState | null>(null);
|
||||||
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
|
||||||
|
|
||||||
const bodyRef = useRef(body);
|
const bodyRef = useRef(body);
|
||||||
const historySnapshotRef = useRef<HistorySnapshot | null>(null);
|
const historySnapshotRef = useRef<HistorySnapshot | null>(null);
|
||||||
@@ -618,10 +619,22 @@ export default function App() {
|
|||||||
}, [handleSaveVersion]);
|
}, [handleSaveVersion]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className={`app${sidebarCollapsed ? " app--sidebar-collapsed" : ""}`}>
|
||||||
|
{!sidebarCollapsed ? (
|
||||||
<aside className="sidebar">
|
<aside className="sidebar">
|
||||||
<div className="sidebar__header">
|
<div className="sidebar__header">
|
||||||
|
<div className="sidebar__title-row">
|
||||||
<div className="app-title">TextDB</div>
|
<div className="app-title">TextDB</div>
|
||||||
|
<button
|
||||||
|
className="icon-button icon-button--ghost"
|
||||||
|
onClick={() => setSidebarCollapsed(true)}
|
||||||
|
aria-label="Collapse sidebar"
|
||||||
|
title="Collapse sidebar"
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
<span aria-hidden="true"><</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
<input
|
<input
|
||||||
className="search"
|
className="search"
|
||||||
placeholder="Search texts"
|
placeholder="Search texts"
|
||||||
@@ -688,8 +701,22 @@ export default function App() {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
) : null}
|
||||||
|
|
||||||
<main className="workspace">
|
<main className="workspace">
|
||||||
|
{sidebarCollapsed ? (
|
||||||
|
<div className="workspace__topbar">
|
||||||
|
<button
|
||||||
|
className="icon-button icon-button--ghost"
|
||||||
|
onClick={() => setSidebarCollapsed(false)}
|
||||||
|
aria-label="Expand sidebar"
|
||||||
|
title="Expand sidebar"
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
<span aria-hidden="true">></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
) : null}
|
||||||
{!selectedTextId ? (
|
{!selectedTextId ? (
|
||||||
<div className="empty-state">
|
<div className="empty-state">
|
||||||
<div className="empty-state__title">Create your first text</div>
|
<div className="empty-state__title">Create your first text</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user