Files
Momento/memento-note/context/notebook-drag-context.tsx
sepehr 986d438738
Some checks failed
Deploy to Production / Build and Deploy (push) Has been cancelled
fix: resolve React Error #310 and refactor admin section
- Fix React bug #33580: remove Suspense boundaries co-located with Link components
- Delete settings/loading.tsx and admin/loading.tsx (root cause of race condition)
- Convert all admin navigation from Next.js Link to anchor tags
- Move admin pages to dedicated (admin) route group
- Add AdminHeader matching main header visual design
- Add AdminSidebar with anchor-based navigation
- Add /api/admin/models route handler (replaces server actions for GET)
- Add /api/debug/client-error for server-side browser error reporting
- Add useNoteRefreshOptional() to fix crash in AdminHeader
- Hide Admin Dashboard menu for non-admin users
- Change app icons from yellow to blue (#3A7CA5) matching brand primary
- Fix admin search bar width to match main header

Made-with: Cursor
2026-04-25 20:46:10 +02:00

65 lines
1.7 KiB
TypeScript

'use client'
import { createContext, useContext, useState, useCallback, useMemo, ReactNode } from 'react'
interface NotebookDragContextValue {
draggedNoteId: string | null
dragOverNotebookId: string | null
startDrag: (noteId: string) => void
endDrag: () => void
dragOver: (notebookId: string | null) => void
isDragging: boolean
isDragOver: boolean
}
const NotebookDragContext = createContext<NotebookDragContextValue | null>(null)
export function useNotebookDrag() {
const context = useContext(NotebookDragContext)
if (!context) {
throw new Error('useNotebookDrag must be used within NotebookDragProvider')
}
return context
}
interface NotebookDragProviderProps {
children: ReactNode
}
export function NotebookDragProvider({ children }: NotebookDragProviderProps) {
const [draggedNoteId, setDraggedNoteId] = useState<string | null>(null)
const [dragOverNotebookId, setDragOverNotebookId] = useState<string | null>(null)
const startDrag = useCallback((noteId: string) => {
setDraggedNoteId(noteId)
}, [])
const endDrag = useCallback(() => {
setDraggedNoteId(null)
setDragOverNotebookId(null)
}, [])
const dragOver = useCallback((notebookId: string | null) => {
setDragOverNotebookId(notebookId)
}, [])
const isDragging = draggedNoteId !== null
const isDragOver = dragOverNotebookId !== null
const value = useMemo(() => ({
draggedNoteId,
dragOverNotebookId,
startDrag,
endDrag,
dragOver,
isDragging,
isDragOver,
}), [draggedNoteId, dragOverNotebookId, startDrag, endDrag, dragOver, isDragging, isDragOver])
return (
<NotebookDragContext.Provider value={value}>
{children}
</NotebookDragContext.Provider>
)
}