feat: rename keep-notes to memento-note, migrate to PostgreSQL, fix MCP bugs
- Rename directory keep-notes -> memento-note with all code references - Prisma: SQLite -> PostgreSQL (both app and MCP server schemas) - Sync MCP schema with main app (add missing fields, relations, indexes) - Delete 17 SQLite migrations (clean slate for PostgreSQL) - Remove SQLite dependencies (@libsql/client, better-sqlite3, etc.) - Fix MCP server: hardcoded Windows DB paths -> DATABASE_URL env var - Fix MCP server: .dockerignore excluded index-sse.js (SSE mode broken) - MCP Dockerfile: node:20 -> node:22 - Docker Compose: add postgres service, remove SQLite volume - Generate favicon.ico, icon-192.png, icon-512.png, apple-icon.png - Update layout.tsx icons and manifest.json for PNG icons - Update all .env files for PostgreSQL - Rewrite README.md with updated sections - Remove mcp-server/node_modules and prisma/client-generated from git tracking Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
62
memento-note/hooks/use-auto-label-suggestion.ts
Normal file
62
memento-note/hooks/use-auto-label-suggestion.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { useSearchParams } from 'next/navigation'
|
||||
import { useSession } from 'next-auth/react'
|
||||
|
||||
/**
|
||||
* Hook to check if auto label suggestions should be shown for the current notebook
|
||||
* Triggers when notebook has 15+ notes (IA4)
|
||||
*/
|
||||
export function useAutoLabelSuggestion() {
|
||||
const { data: session } = useSession()
|
||||
const searchParams = useSearchParams()
|
||||
const [shouldSuggest, setShouldSuggest] = useState(false)
|
||||
const [notebookId, setNotebookId] = useState<string | null>(searchParams.get('notebook'))
|
||||
const [hasChecked, setHasChecked] = useState(false)
|
||||
|
||||
useEffect(() => {
|
||||
const currentNotebookId = searchParams.get('notebook')
|
||||
|
||||
// Reset when notebook changes
|
||||
if (currentNotebookId !== notebookId) {
|
||||
setNotebookId(currentNotebookId)
|
||||
setHasChecked(false)
|
||||
setShouldSuggest(false)
|
||||
|
||||
// Check if we should suggest labels for this notebook
|
||||
if (currentNotebookId && session?.user?.id) {
|
||||
checkNotebookForSuggestions(currentNotebookId)
|
||||
}
|
||||
}
|
||||
}, [searchParams, notebookId, session])
|
||||
|
||||
const checkNotebookForSuggestions = async (nbId: string) => {
|
||||
try {
|
||||
// Check if notebook has 15+ notes
|
||||
const response = await fetch('/api/ai/auto-labels', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
body: JSON.stringify({ notebookId: nbId }),
|
||||
})
|
||||
|
||||
const data = await response.json()
|
||||
|
||||
// Show suggestions if available
|
||||
if (data.success && data.data) {
|
||||
setShouldSuggest(true)
|
||||
}
|
||||
|
||||
setHasChecked(true)
|
||||
} catch (error) {
|
||||
console.error('Failed to check for label suggestions:', error)
|
||||
setHasChecked(true)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
shouldSuggest,
|
||||
notebookId,
|
||||
hasChecked,
|
||||
dismiss: () => setShouldSuggest(false),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user