Dev #7

Merged
sandrodach merged 33 commits from dev into main 2026-10-27 11:42:12 +01:00
Showing only changes of commit d3dd4c8cc6 - Show all commits
@@ -89,22 +89,20 @@ const FolderTreeItem: React.FC<FolderTreeItemProps> = ({
const hasContent = node.subfolders.length > 0 || node.docs.length > 0; const hasContent = node.subfolders.length > 0 || node.docs.length > 0;
return ( return (
<div <div className="space-y-0.5">
onDragOver={(e) => {
e.preventDefault();
e.stopPropagation();
setDragOverFolder(node.fullPath);
}}
onDragLeave={(e) => {
e.preventDefault();
if (dragOverFolder === node.fullPath) setDragOverFolder(null);
}}
onDrop={(e) => handleDropOnFolder(node.fullPath, e)}
className="space-y-0.5"
>
<div <div
draggable draggable
onDragStart={(e) => handleFolderDragStart(e, node.fullPath)} onDragStart={(e) => handleFolderDragStart(e, node.fullPath)}
onDragOver={(e) => {
e.preventDefault();
e.stopPropagation();
setDragOverFolder(node.fullPath);
}}
onDragLeave={(e) => {
e.preventDefault();
if (dragOverFolder === node.fullPath) setDragOverFolder(null);
}}
onDrop={(e) => handleDropOnFolder(node.fullPath, e)}
style={{ paddingLeft: `${depth * 12 + 8}px` }} style={{ paddingLeft: `${depth * 12 + 8}px` }}
className={`group flex items-center justify-between pr-2 py-1 rounded-btn text-xs cursor-pointer transition-colors ${ className={`group flex items-center justify-between pr-2 py-1 rounded-btn text-xs cursor-pointer transition-colors ${
isDragOver isDragOver
@@ -464,7 +462,14 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
} }
const res = await api.createFolder(clean); const res = await api.createFolder(clean);
setFolders((prev) => (prev.includes(res.path) ? prev : [...prev, res.path].sort())); setFolders((prev) => (prev.includes(res.path) ? prev : [...prev, res.path].sort()));
setExpandedFolders((prev) => ({ ...prev, [res.path]: true })); const parts = res.path.split('/');
let acc = '';
const expansions: Record<string, boolean> = {};
for (const part of parts) {
acc = acc ? `${acc}/${part}` : part;
expansions[acc] = true;
}
setExpandedFolders((prev) => ({ ...prev, ...expansions }));
setNewFolderName(''); setNewFolderName('');
setNewFolderIsShared(false); setNewFolderIsShared(false);
setShowNewFolderModal(false); setShowNewFolderModal(false);
@@ -526,6 +531,16 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
setDocs((prev) => setDocs((prev) =>
prev.map((d) => (d.id === docId ? { ...d, folderPath: updatedDoc.folderPath } : d)) prev.map((d) => (d.id === docId ? { ...d, folderPath: updatedDoc.folderPath } : d))
); );
if (targetFolder) {
const parts = targetFolder.split('/');
let acc = '';
const expansions: Record<string, boolean> = {};
for (const part of parts) {
acc = acc ? `${acc}/${part}` : part;
expansions[acc] = true;
}
setExpandedFolders((prev) => ({ ...prev, ...expansions }));
}
} catch { } catch {
// ignore // ignore
} }
@@ -533,6 +548,16 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
triggerHaptic(15); triggerHaptic(15);
try { try {
await api.moveFolder(folderPath, targetFolder); await api.moveFolder(folderPath, targetFolder);
if (targetFolder) {
const parts = targetFolder.split('/');
let acc = '';
const expansions: Record<string, boolean> = {};
for (const part of parts) {
acc = acc ? `${acc}/${part}` : part;
expansions[acc] = true;
}
setExpandedFolders((prev) => ({ ...prev, ...expansions }));
}
loadWorkspaceData(); loadWorkspaceData();
} catch { } catch {
// ignore // ignore
@@ -672,7 +697,12 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
} }
} }
const sortedPaths = Array.from(allPathsSet).sort((a, b) => a.localeCompare(b)); const sortedPaths = Array.from(allPathsSet).sort((a, b) => {
const depthA = a.split('/').length;
const depthB = b.split('/').length;
if (depthA !== depthB) return depthA - depthB;
return a.localeCompare(b);
});
for (const p of sortedPaths) { for (const p of sortedPaths) {
const parts = p.split('/'); const parts = p.split('/');