From cdb074193f52d4ace18c0ddacd9a0539a4d5f13e Mon Sep 17 00:00:00 2001 From: Antonio Gatta Date: Sat, 20 Dec 2025 11:38:31 +0100 Subject: [PATCH] feat: support fullscreen mode in NoteEditorDialog - Added `isEditorFullscreen` state to track fullscreen mode for the Markdown editor. - Integrated `MutationObserver` to detect changes related to the `.w-md-editor-fullscreen` class. - Adjusted dialog and editor styles dynamically based on fullscreen state using `cn`. - Enhanced UX by resetting fullscreen state on dialog close. --- .../notebooks/components/NoteEditorDialog.tsx | 32 +++++++++++++++---- frontend/src/components/ui/dialog.tsx | 2 +- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/(dashboard)/notebooks/components/NoteEditorDialog.tsx b/frontend/src/app/(dashboard)/notebooks/components/NoteEditorDialog.tsx index be4d753..06e94ef 100644 --- a/frontend/src/app/(dashboard)/notebooks/components/NoteEditorDialog.tsx +++ b/frontend/src/app/(dashboard)/notebooks/components/NoteEditorDialog.tsx @@ -1,7 +1,7 @@ 'use client' import { Controller, useForm, useWatch } from 'react-hook-form' -import { useEffect } from 'react' +import { useEffect, useState } from 'react' import { useQueryClient } from '@tanstack/react-query' import { zodResolver } from '@hookform/resolvers/zod' import { z } from 'zod' @@ -11,6 +11,7 @@ import { useCreateNote, useUpdateNote, useNote } from '@/lib/hooks/use-notes' import { QUERY_KEYS } from '@/lib/api/query-client' import { MarkdownEditor } from '@/components/ui/markdown-editor' import { InlineEdit } from '@/components/common/InlineEdit' +import { cn } from "@/lib/utils"; const createNoteSchema = z.object({ title: z.string().optional(), @@ -53,6 +54,7 @@ export function NoteEditorDialog({ open, onOpenChange, notebookId, note }: NoteE }, }) const watchTitle = useWatch({ control, name: 'title' }) + const [isEditorFullscreen, setIsEditorFullscreen] = useState(false) useEffect(() => { if (!open) { @@ -67,6 +69,14 @@ export function NoteEditorDialog({ open, onOpenChange, notebookId, note }: NoteE reset({ title, content }) }, [open, note, fetchedNote, reset]) + useEffect(() => { + const observer = new MutationObserver(() => { + setIsEditorFullscreen(!!document.querySelector('.w-md-editor-fullscreen')) + }) + observer.observe(document.body, {subtree: true, attributes: true, attributeFilter: ['class']}) + return () => observer.disconnect() + }, []) + const onSubmit = async (data: CreateNoteFormData) => { if (note) { await updateNote.mutateAsync({ @@ -99,12 +109,16 @@ export function NoteEditorDialog({ open, onOpenChange, notebookId, note }: NoteE const handleClose = () => { reset() + setIsEditorFullscreen(false) onOpenChange(false) } return ( - + {isEditing ? 'Edit note' : 'Create note'} @@ -126,7 +140,10 @@ export function NoteEditorDialog({ open, onOpenChange, notebookId, note }: NoteE /> -
+
)} /> @@ -152,8 +172,8 @@ export function NoteEditorDialog({ open, onOpenChange, notebookId, note }: NoteE -