Skip to content

Instantly share code, notes, and snippets.

@fakenickels
Last active July 15, 2020 15:12
Show Gist options
  • Save fakenickels/b575bc2acc1c7a07fbf06fbe5030aa31 to your computer and use it in GitHub Desktop.
Save fakenickels/b575bc2acc1c7a07fbf06fbe5030aa31 to your computer and use it in GitHub Desktop.
[@bs.module "react-native-camera"] [@react.component]
external make:
(
~onBarCodeRead: {. "data": string} => unit=?,
~captureAudio: bool,
~ref: 'ref=?,
~style: ReactNative.Style.t=?,
~children: React.element=?
) =>
React.element =
"RNCamera";
let makeProps = (~captureAudio=false) => makeProps(~captureAudio);
type api = {
takePictureAsync:
'a.
Js.t({..} as 'a) =>
Promise.rejectable(Belt_Result.t(string, 'a), Promise.never),
resumePreview: unit => unit,
pausePreview: unit => unit,
};
let useCameraRef = () => {
let cameraRef = React.useRef(None);
let takePictureAsync = config => {
switch (cameraRef->React.Ref.current) {
| Some(r) =>
let promise: Promise.Js.t({. "base64": string}, _) =
ReasonReact.refToJsObj(r)##takePictureAsync(config);
promise->Promise.Js.toResult->Promise.mapOk(result => {result##base64});
| None => Promise.resolved(failwith("Error"))
};
};
let resumePreview = () => {
switch (cameraRef->React.Ref.current) {
| Some(r) => ReasonReact.refToJsObj(r)##resumePreview()
| None => ()
};
};
let pausePreview = () => {
switch (cameraRef->React.Ref.current) {
| Some(r) => ReasonReact.refToJsObj(r)##pausePreview()
| None => ()
};
};
(cameraRef, {takePictureAsync, resumePreview, pausePreview});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment