Files
tolaria/apps/mobile/src/useMobileNoteCreateFlow.ts

65 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-05-05 00:20:33 +02:00
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,
}
}