feat(mobile): declutter mobile views with contextual FAB, filter sheet, and clean outliner
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 58s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 58s
This commit is contained in:
1 parent
1e47f3aeb7
commit
f2ead7513a
5 files changed
+430
-60
No files matched your search
@@ -100,7 +100,7 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
|
||||
initialDocId,
|
||||
onStatsChange,
|
||||
}) => {
|
||||
const { setGroups } = useMobileActions();
|
||||
const { setGroups, setPrimaryAction } = useMobileActions();
|
||||
const [showMobileFileDrawer, setShowMobileFileDrawer] = useState(false);
|
||||
|
||||
// Top Workspace Tab Mode: 'editor' vs 'todos' vs 'tags'
|
||||
@@ -2836,6 +2836,10 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
|
||||
|
||||
// Register context-sensitive mobile menu groups behind the MindSift logo
|
||||
useEffect(() => {
|
||||
setPrimaryAction(() => {
|
||||
handleCreateDoc(null);
|
||||
});
|
||||
|
||||
const openTodosCount = allWorkspaceTodos.filter((t) => !t.block.checked).length;
|
||||
setGroups([
|
||||
{
|
||||
@@ -2958,6 +2962,7 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
|
||||
allWorkspaceTodos,
|
||||
selectedDoc,
|
||||
setGroups,
|
||||
setPrimaryAction,
|
||||
]);
|
||||
|
||||
const renderDocItem = (doc: Document, depth: number) => {
|
||||
@@ -3186,49 +3191,6 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
|
||||
|
||||
return (
|
||||
<div className="w-full space-y-2">
|
||||
{/* Mobile Compact Workspace Bar (Options & mode switching live in MindSift Logo Menu) */}
|
||||
<div className="flex sm:hidden items-center justify-between gap-2 px-3 py-2 rounded-btn bg-panel border border-border">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
setWorkspaceMode('editor');
|
||||
setShowMobileFileDrawer(true);
|
||||
}}
|
||||
className="flex items-center gap-2 min-w-0 text-left py-0.5"
|
||||
title="Dateibaum & Ordner öffnen"
|
||||
>
|
||||
<FolderTree className="w-4 h-4 text-accent flex-shrink-0" />
|
||||
<span className="text-sm font-semibold text-main truncate">
|
||||
{workspaceMode === 'tags'
|
||||
? 'Themen & Hashtags'
|
||||
: workspaceMode === 'todos'
|
||||
? 'Globale To-Dos'
|
||||
: selectedDoc
|
||||
? `${selectedDoc.icon || '📄'} ${selectedDoc.title || 'Unbenannt'}`
|
||||
: 'Dateibaum öffnen'}
|
||||
</span>
|
||||
</button>
|
||||
|
||||
<div className="flex items-center gap-1.5 flex-shrink-0">
|
||||
{workspaceMode === 'editor' && selectedDoc && (
|
||||
<span className="badge-accent text-[10px]">
|
||||
<Check className="w-2.5 h-2.5" />
|
||||
{saveState === 'saving' ? 'Speichert…' : 'Gespeichert'}
|
||||
</span>
|
||||
)}
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
setWorkspaceMode('editor');
|
||||
setShowMobileFileDrawer(true);
|
||||
}}
|
||||
className="btn-action min-h-[36px] px-2.5 text-xs flex items-center gap-1"
|
||||
>
|
||||
<Folder className="w-3.5 h-3.5 text-accent" />
|
||||
<span>Dateien</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Top Navigation Mode Switcher: Notizen & Outliner vs. Globales To-Do Dashboard (Desktop) */}
|
||||
<div className="hidden sm:flex flex-wrap items-center justify-between gap-2 border-b border-border pb-2">
|
||||
@@ -4342,8 +4304,30 @@ export const WorkspaceView: React.FC<WorkspaceViewProps> = ({
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<div className="p-8 panel-surface text-center text-muted text-xs">
|
||||
Wähle links eine Datei im Datei-Explorer aus oder erstelle eine neue Datei.
|
||||
<div className="p-8 panel-surface text-center space-y-3">
|
||||
<FolderTree className="w-8 h-8 text-accent/60 mx-auto" />
|
||||
<p className="text-xs text-muted">Keine Notiz geöffnet.</p>
|
||||
<div className="flex flex-wrap items-center justify-center gap-2 pt-1">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
setWorkspaceMode('editor');
|
||||
setShowMobileFileDrawer(true);
|
||||
}}
|
||||
className="btn-action h-8 px-3 text-xs flex items-center gap-1.5 cursor-pointer"
|
||||
>
|
||||
<FolderTree className="w-3.5 h-3.5 text-accent" />
|
||||
<span>Dateibaum öffnen</span>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => handleCreateDoc(null)}
|
||||
className="btn-primary h-8 px-3 text-xs flex items-center gap-1.5 cursor-pointer"
|
||||
>
|
||||
<FilePlus className="w-3.5 h-3.5" />
|
||||
<span>Neue Notiz anlegen</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in new issue
Block a user