feat: prompt for mobile note titles

This commit is contained in:
lucaronin
2026-05-05 00:20:33 +02:00
parent 1f66fbda59
commit 46aa43c1cd
8 changed files with 274 additions and 57 deletions

View File

@@ -0,0 +1,64 @@
import { useCallback, useState } from 'react'
import type { MobileNote } from './demoData'
export function useMobileNoteCreateFlow({
createNote,
onCreated,
}: {
createNote: (title: string) => Promise<MobileNote | null>
onCreated: (note: MobileNote) => void
}) {
const [failed, setFailed] = useState(false)
const [isCreating, setIsCreating] = useState(false)
const [isPromptOpen, setIsPromptOpen] = useState(false)
const [title, setTitle] = useState('')
const cancel = useCallback(() => {
if (isCreating) {
return
}
setFailed(false)
setIsPromptOpen(false)
setTitle('')
}, [isCreating])
const open = useCallback(() => {
setFailed(false)
setIsPromptOpen(true)
}, [])
const submit = useCallback(() => {
if (isCreating) {
return
}
setFailed(false)
setIsCreating(true)
void createNote(title)
.then((note) => {
if (note) {
setIsPromptOpen(false)
setTitle('')
onCreated(note)
}
})
.catch(() => {
setFailed(true)
})
.finally(() => {
setIsCreating(false)
})
}, [createNote, isCreating, onCreated, title])
return {
cancel,
failed,
isCreating,
isPromptOpen,
open,
setTitle,
submit,
title,
}
}