Remove depth parameter from renderTextItem and renderFolder functions, update CSS for folder styling
This commit is contained in:
15
src/App.tsx
15
src/App.tsx
@@ -30,7 +30,6 @@ import {
|
|||||||
searchTexts,
|
searchTexts,
|
||||||
setFolderOrder,
|
setFolderOrder,
|
||||||
setTextOrder,
|
setTextOrder,
|
||||||
updateFolderName,
|
|
||||||
updateTextTitle,
|
updateTextTitle,
|
||||||
upsertDraft,
|
upsertDraft,
|
||||||
type Folder,
|
type Folder,
|
||||||
@@ -1190,11 +1189,10 @@ export default function App() {
|
|||||||
return () => window.removeEventListener("keydown", handleKeyDown);
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
||||||
}, [confirmState, handleSaveVersion, selectedTextId, settingsOpen]);
|
}, [confirmState, handleSaveVersion, selectedTextId, settingsOpen]);
|
||||||
|
|
||||||
const renderTextItem = (text: Text, depth: number, parentFolderId: string | null) => (
|
const renderTextItem = (text: Text, parentFolderId: string | null) => (
|
||||||
<div
|
<div
|
||||||
key={text.id}
|
key={text.id}
|
||||||
className={`prompt-item${text.id === selectedTextId ? " is-active" : ""}`}
|
className={`prompt-item${text.id === selectedTextId ? " is-active" : ""}`}
|
||||||
style={{ marginLeft: depth * 12 }}
|
|
||||||
draggable
|
draggable
|
||||||
onDragStart={(event) => handleDragStartText(event, text)}
|
onDragStart={(event) => handleDragStartText(event, text)}
|
||||||
onDragEnd={handleDragEnd}
|
onDragEnd={handleDragEnd}
|
||||||
@@ -1234,7 +1232,7 @@ export default function App() {
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
const renderFolder = (folder: Folder, depth: number) => {
|
const renderFolder = (folder: Folder) => {
|
||||||
if (hasSearch && !visibleFolderIds?.has(folder.id)) return null;
|
if (hasSearch && !visibleFolderIds?.has(folder.id)) return null;
|
||||||
const expanded = isFolderExpanded(folder.id);
|
const expanded = isFolderExpanded(folder.id);
|
||||||
const childFolders = foldersByParent.get(folder.id) ?? [];
|
const childFolders = foldersByParent.get(folder.id) ?? [];
|
||||||
@@ -1244,7 +1242,6 @@ export default function App() {
|
|||||||
<div key={folder.id} className="folder-node">
|
<div key={folder.id} className="folder-node">
|
||||||
<div
|
<div
|
||||||
className={`folder-item${expanded ? " is-open" : ""}`}
|
className={`folder-item${expanded ? " is-open" : ""}`}
|
||||||
style={{ marginLeft: depth * 12 }}
|
|
||||||
draggable
|
draggable
|
||||||
onDragStart={(event) => handleDragStartFolder(event, folder)}
|
onDragStart={(event) => handleDragStartFolder(event, folder)}
|
||||||
onDragEnd={handleDragEnd}
|
onDragEnd={handleDragEnd}
|
||||||
@@ -1267,8 +1264,8 @@ export default function App() {
|
|||||||
</div>
|
</div>
|
||||||
{expanded ? (
|
{expanded ? (
|
||||||
<div className="folder-children">
|
<div className="folder-children">
|
||||||
{childFolders.map((child) => renderFolder(child, depth + 1))}
|
{childFolders.map((child) => renderFolder(child))}
|
||||||
{childTexts.map((text) => renderTextItem(text, depth + 1, folder.id))}
|
{childTexts.map((text) => renderTextItem(text, folder.id))}
|
||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
@@ -1324,9 +1321,9 @@ export default function App() {
|
|||||||
<div className="empty">No texts yet.</div>
|
<div className="empty">No texts yet.</div>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
{(foldersByParent.get(null) ?? []).map((folder) => renderFolder(folder, 0))}
|
{(foldersByParent.get(null) ?? []).map((folder) => renderFolder(folder))}
|
||||||
{(textsByFolder.get(null) ?? []).map((text) =>
|
{(textsByFolder.get(null) ?? []).map((text) =>
|
||||||
renderTextItem(text, 0, null)
|
renderTextItem(text, null)
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -264,6 +264,63 @@ body {
|
|||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.folder-node {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-radius: 14px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
background: var(--bg-elevated);
|
||||||
|
color: var(--ink);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: border-color 0.15s ease, background 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-item:hover {
|
||||||
|
border-color: rgba(255, 255, 255, 0.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-item.is-open {
|
||||||
|
border-color: var(--border-strong);
|
||||||
|
background: var(--bg-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-item__toggle {
|
||||||
|
width: 22px;
|
||||||
|
height: 22px;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border: none;
|
||||||
|
background: transparent;
|
||||||
|
color: var(--muted);
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-item__title {
|
||||||
|
font-weight: 600;
|
||||||
|
flex: 1;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-children {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
|
margin-top: 6px;
|
||||||
|
padding-left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
.workspace {
|
.workspace {
|
||||||
padding: 28px 32px;
|
padding: 28px 32px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|||||||
Reference in New Issue
Block a user