@react.component let make = (~label: string, ~onConfirm: string => result) => { let (isEditing, setIsEditing) = React.useState(() => false) let (text, setText) = React.useState(() => label) let (tempText, setTempText) = React.useState(() => label) let (errorMsg, setErrorMsg) = React.useState(() => None) let handleConfirm = _evt => { switch onConfirm(tempText) { | Ok() => setText(_ => tempText) setErrorMsg(_ => None) setIsEditing(_ => false) | Error(msg) => // Revert text and display error popup setTempText(_ => text) setErrorMsg(_ => Some(msg)) } } let handleCancel = _evt => { setTempText(_ => text) setErrorMsg(_ => None) setIsEditing(_ => false) } let dismissError = _evt => { setErrorMsg(_ => None) }
{if isEditing {
setTempText(_ => ReactEvent.Form.target(evt)["value"])} onKeyDown={evt => { let key = ReactEvent.Keyboard.key(evt) if key == "Enter" { handleConfirm(evt) } else if key == "Escape" { handleCancel(evt) } }} autoFocus=true />
{switch errorMsg { | Some(msg) =>
{React.string(msg)}
| None => React.null }}
} else { { setTempText(_ => text) setErrorMsg(_ => None) setIsEditing(_ => true) }}> }}
}