Files
Momento/memento-note/hooks/use-title-suggestions.ts
Sepehr Ramezani e4d4e23dc7 chore: clean up repo for public release
- Remove BMAD framework, IDE configs, dev screenshots, test files,
  internal docs, and backup files
- Rename keep-notes/ to memento-note/
- Update all references from keep-notes to memento-note
- Add Apache 2.0 license with Commons Clause (non-commercial restriction)
- Add clean .gitignore and .env.docker.example
2026-04-20 22:48:06 +02:00

75 lines
1.9 KiB
TypeScript

import { useState, useEffect } from 'react'
import { useDebounce } from './use-debounce'
export interface TitleSuggestion {
title: string
confidence: number
reasoning?: string
}
interface UseTitleSuggestionsProps {
content: string
enabled?: boolean
}
export function useTitleSuggestions({ content, enabled = true }: UseTitleSuggestionsProps) {
const [suggestions, setSuggestions] = useState<TitleSuggestion[]>([])
const [isAnalyzing, setIsAnalyzing] = useState(false)
const [error, setError] = useState<string | null>(null)
// Debounce le contenu de 2s pour éviter trop d'appels
const debouncedContent = useDebounce(content, 2000)
useEffect(() => {
if (!enabled || !debouncedContent) {
setSuggestions([])
return
}
const wordCount = debouncedContent.split(/\s+/).length
// Il faut au moins 10 mots
if (wordCount < 10) {
setSuggestions([])
return
}
const generateTitles = async () => {
setIsAnalyzing(true)
setError(null)
try {
const response = await fetch('/api/ai/title-suggestions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ content: debouncedContent }),
})
if (!response.ok) {
const errorData = await response.json()
throw new Error(errorData.error || 'Erreur lors de la génération des titres')
}
const data = await response.json()
setSuggestions(data.suggestions || [])
} catch (err) {
console.error('❌ Title suggestions error:', err)
setError('Impossible de générer des suggestions de titres')
} finally {
setIsAnalyzing(false)
}
}
generateTitles()
}, [debouncedContent, enabled])
return {
suggestions,
isAnalyzing,
error,
clearSuggestions: () => setSuggestions([])
}
}