{"version":3,"file":"renderer.mjs","sources":["../../src/components/renderer.tsx"],"sourcesContent":["import React, { useRef, MutableRefObject, ReactElement } from \"react\"\nimport { StyleProp, ViewStyle, View } from \"react-native\"\nimport { WebView } from \"react-native-webview\"\nimport { Payload } from \"@mxenabled/widget-post-message-definitions\"\n\nimport { Props, useSsoUrl } from \"../sso\"\nimport { loadUrlInBrowser, LoadUrlInBrowserProps } from \"./load_url_in_browser\"\nimport { makeRequestInterceptor } from \"./request_interceptor\"\nimport { useFullscreenStyles } from \"./screen_dimensions\"\nimport { sdkVersion } from \"../version\"\n\nexport type StylingProps = {\n  style?: StyleProp<ViewStyle>\n  webViewStyle?: StyleProp<ViewStyle>\n}\n\ntype MaybeWebViewRef = MutableRefObject<WebView | null>\ntype BaseProps<Configuration> = Props<Configuration> & StylingProps & LoadUrlInBrowserProps\n\nexport function useWidgetRenderer<Configuration>(\n  props: BaseProps<Configuration>,\n  dispatchEvent: (url: string, callbacks: BaseProps<Configuration>) => Payload | undefined,\n): ReactElement {\n  const [_ref, elem] = useWidgetRendererWithRef(props, dispatchEvent)\n  return elem\n}\n\nexport function useWidgetRendererWithRef<Configuration>(\n  props: BaseProps<Configuration>,\n  dispatchEvent: (url: string, callbacks: BaseProps<Configuration>) => Payload | undefined,\n): [MaybeWebViewRef, ReactElement] {\n  const ref = useRef<WebView>(null)\n  const url = useSsoUrl(props)\n  const fullscreenStyles = useFullscreenStyles()\n  const style = props.style || fullscreenStyles\n\n  if (!url) {\n    return [ref, <View style={style} />]\n  }\n\n  const scheme = props.uiMessageWebviewUrlScheme || \"mx\"\n  const handler = makeRequestInterceptor(url, scheme, {\n    onIntercept: (url) => {\n      dispatchEvent(url, props)\n    },\n    onLoadUrlInBrowser: (url) => {\n      loadUrlInBrowser(url, props)\n    },\n  })\n\n  const setReactNativeSDKVersionOnWindow = `\n    window.MXReactNativeSDKVersion = \"${sdkVersion}\";\n  `\n\n  return [\n    ref,\n    <View testID=\"widget_view\" style={style}>\n      <WebView\n        testID=\"widget_webview\"\n        style={props.webViewStyle}\n        ref={ref}\n        scrollEnabled={true}\n        source={{ uri: url }}\n        originWhitelist={[\"*\"]}\n        cacheMode=\"LOAD_NO_CACHE\"\n        injectedJavaScriptBeforeContentLoaded={setReactNativeSDKVersionOnWindow}\n        javaScriptEnabled={true}\n        domStorageEnabled={true}\n        incognito={true}\n        onShouldStartLoadWithRequest={handler}\n        onError={props.onWebViewError}\n      />\n    </View>,\n  ]\n}\n"],"names":["useWidgetRenderer","props","dispatchEvent","_ref","elem","useWidgetRendererWithRef","ref","useRef","url","useSsoUrl","fullscreenStyles","useFullscreenStyles","style","React","View","scheme","handler","makeRequestInterceptor","loadUrlInBrowser","setReactNativeSDKVersionOnWindow","sdkVersion","WebView"],"mappings":";;;;;;;;;AAmBO,SAASA,EACdC,GACAC,GACc;AACd,QAAM,CAACC,GAAMC,CAAI,IAAIC,EAAyBJ,GAAOC,CAAa;AAClE,SAAOE;AACT;AAEO,SAASC,EACdJ,GACAC,GACiC;AACjC,QAAMI,IAAMC,EAAgB,IAAI,GAC1BC,IAAMC,EAAUR,CAAK,GACrBS,IAAmBC,EAAA,GACnBC,IAAQX,EAAM,SAASS;AAE7B,MAAI,CAACF;AACH,WAAO,CAACF,GAAK,gBAAAO,EAAA,cAACC,GAAA,EAAK,OAAAF,GAAc,CAAE;AAGrC,QAAMG,IAASd,EAAM,6BAA6B,MAC5Ce,IAAUC,EAAuBT,GAAKO,GAAQ;AAAA,IAClD,aAAa,CAACP,MAAQ;AACpB,MAAAN,EAAcM,GAAKP,CAAK;AAAA,IAC1B;AAAA,IACA,oBAAoB,CAACO,MAAQ;AAC3B,MAAAU,EAAiBV,GAAKP,CAAK;AAAA,IAC7B;AAAA,EAAA,CACD,GAEKkB,IAAmC;AAAA,wCACHC,CAAU;AAAA;AAGhD,SAAO;AAAA,IACLd;AAAA,IACA,gBAAAO,EAAA,cAACC,GAAA,EAAK,QAAO,eAAc,OAAAF,EAAA,GACzB,gBAAAC,EAAA;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAOpB,EAAM;AAAA,QACb,KAAAK;AAAA,QACA,eAAe;AAAA,QACf,QAAQ,EAAE,KAAKE,EAAA;AAAA,QACf,iBAAiB,CAAC,GAAG;AAAA,QACrB,WAAU;AAAA,QACV,uCAAuCW;AAAA,QACvC,mBAAmB;AAAA,QACnB,mBAAmB;AAAA,QACnB,WAAW;AAAA,QACX,8BAA8BH;AAAA,QAC9B,SAASf,EAAM;AAAA,MAAA;AAAA,IAAA,CAEnB;AAAA,EAAA;AAEJ;"}