note vs tab deletion clarity
This commit is contained in:
+70
-20
@@ -23,6 +23,8 @@ export const NotepadView: Component<{
|
||||
const [isLinkedTasksOpen, setIsLinkedTasksOpen] = createSignal(false);
|
||||
const [isDragging, setIsDragging] = createSignal(false);
|
||||
const [editorInstance, setEditorInstance] = createSignal<any>(null);
|
||||
const [noteActionsOpen, setNoteActionsOpen] = createSignal(false);
|
||||
const [confirmDeleteOpen, setConfirmDeleteOpen] = createSignal(false);
|
||||
|
||||
const currentUserId = pb.authStore.model?.id;
|
||||
|
||||
@@ -332,13 +334,16 @@ export const NotepadView: Component<{
|
||||
const isOwner = note().user === currentUserId;
|
||||
const canEdit = isOwner || !note().isPrivate;
|
||||
|
||||
const hasTopViewer = createMemo(() => {
|
||||
const c = note()?.content;
|
||||
if (!c) return false;
|
||||
const s = c.trim();
|
||||
return s.startsWith('<div data-type="file-viewer-wrapper"') ||
|
||||
(s.startsWith('<div data-type="file-attachment"') && s.includes('data-filename') && s.toLowerCase().includes('.pdf'));
|
||||
});
|
||||
const hasTopViewer = createMemo(() => {
|
||||
const c = note()?.content;
|
||||
if (!c) return false;
|
||||
const s = c.trim();
|
||||
return s.startsWith('<div data-type="file-viewer-wrapper"') ||
|
||||
(s.startsWith('<div data-type="file-attachment"') && s.includes('data-filename') && s.toLowerCase().includes('.pdf'));
|
||||
});
|
||||
const isChildNote = createMemo(() => {
|
||||
return (note()?.tags || []).some(t => t.startsWith("child-of-"));
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -707,11 +712,17 @@ export const NotepadView: Component<{
|
||||
</div>
|
||||
</div>
|
||||
{/* Sticky Footer Actions (Match TaskDetail style) */}
|
||||
<div class="px-4 py-3 border-t border-border/50 md:hidden flex items-center justify-between shrink-0 bg-background/95 backdrop-blur-sm z-40 w-full sticky bottom-0">
|
||||
<div class="px-4 py-4 border-t border-border/50 md:hidden flex items-center justify-between shrink-0 bg-background/95 backdrop-blur-sm z-40 w-full sticky bottom-0">
|
||||
<div class="flex items-center gap-2 w-16 shrink-0">
|
||||
{/* "..." popover menu containing Public/Private toggle and Delete */}
|
||||
<Show when={isOwner}>
|
||||
<Popover>
|
||||
<Popover
|
||||
open={noteActionsOpen()}
|
||||
onOpenChange={(nextOpen) => {
|
||||
setNoteActionsOpen(nextOpen);
|
||||
if (!nextOpen) setConfirmDeleteOpen(false);
|
||||
}}
|
||||
>
|
||||
<PopoverTrigger
|
||||
as={Button}
|
||||
variant="ghost"
|
||||
@@ -735,18 +746,57 @@ export const NotepadView: Component<{
|
||||
<><Lock size={14} /> Private</>
|
||||
</Show>
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
class="w-full justify-start text-[0.625rem] font-bold uppercase tracking-widest gap-2 hover:bg-destructive/10 hover:text-destructive text-muted-foreground transition-all"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
handleDeleteNote(note().id);
|
||||
}}
|
||||
<Show
|
||||
when={!confirmDeleteOpen() || isChildNote()}
|
||||
fallback={
|
||||
<div class="rounded-lg border border-border/50 bg-muted/30 p-2 text-[0.625rem] uppercase tracking-widest text-muted-foreground flex flex-col gap-2">
|
||||
<span>Delete note? This cannot be undone.</span>
|
||||
<div class="flex gap-2">
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
class="flex-1 h-7 text-[0.625rem] uppercase tracking-widest"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
setConfirmDeleteOpen(false);
|
||||
}}
|
||||
>
|
||||
Cancel
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
class="flex-1 h-7 text-[0.625rem] uppercase tracking-widest hover:bg-destructive/10 hover:text-destructive"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
handleDeleteNote(note().id);
|
||||
setConfirmDeleteOpen(false);
|
||||
setNoteActionsOpen(false);
|
||||
}}
|
||||
>
|
||||
Delete
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<Trash2 size={14} />
|
||||
Delete
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
class="w-full justify-start text-[0.625rem] font-bold uppercase tracking-widest gap-2 hover:bg-destructive/10 hover:text-destructive text-muted-foreground transition-all"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
if (isChildNote()) {
|
||||
handleDeleteNote(note().id);
|
||||
} else {
|
||||
setConfirmDeleteOpen(true);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<Trash2 size={14} />
|
||||
{isChildNote() ? "Delete Tab" : "Delete Note"}
|
||||
</Button>
|
||||
</Show>
|
||||
</div>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
|
||||
Reference in New Issue
Block a user