let currentUserIdState = Recoil.atom({key: "currentUserId", default: "bloodyowl"}) type user = { id: string, username: string, avatar: string, } let getUserMock = (~id) => Js.Promise.make((~resolve, ~reject as _) => { let _ = Js.Global.setTimeout(() => resolve(. { id: id, username: "User " ++ id, avatar: j`https://avatars.githubusercontent.com/$id?size=64`, //avatars.githubusercontent.com/$id?size=64|j}, }) , 1000) }) let userState = Recoil.asyncSelector({ key: "currentUser", get: ({get}) => { let id = get(currentUserIdState) getUserMock(~id) }, }) module UserIdPicker = { @react.component let make = () => { let currentUserId = Recoil.useRecoilValue(currentUserIdState) let (inputValue, setInputValue) = React.useState(() => currentUserId) let setCurrentUserIdState = Recoil.useSetRecoilState(currentUserIdState) let setUserId = () => { setInputValue(_ => "") setCurrentUserIdState(_ => inputValue) } let onChange = event => { let value = (event->ReactEvent.Form.target)["value"] setInputValue(_ => value) }
{"Type a GitHub username and press Enter"->React.string}
if event->ReactEvent.Keyboard.key == "Enter" { setUserId() }} />