import React, { ReactNode } from 'react'; import { View, ActivityIndicator } from 'react-native'; import { IMGElementContainer, IMGElementContentError, useIMGElementProps, useIMGElementState, CustomBlockRenderer, IMGElementStateLoading, IMGElementStateSuccess } from 'react-native-render-html'; import { UIRenderHtmlCardProps } from '../../toolkit/toolkit-types'; const html = ''; function IMGElementContentLoading({ dimensions, altColor }: IMGElementStateLoading | IMGElementStateSuccess) { return ( ); } const Renderer: CustomBlockRenderer = function CustomImageRenderer(props) { const imgElementProps = useIMGElementProps(props); const state = useIMGElementState(imgElementProps); let content: ReactNode = false; if (state.type === 'error') { content = React.createElement(IMGElementContentError, state); // } else if (state.type === 'success') { // content = React.createElement(IMGElementContentSuccess, state); } else { content = React.createElement(IMGElementContentLoading, state as any); } return ( {content} ); }; const imgElementContentLoadingSrc = `function IMGElementContentLoading({ dimensions, altColor }) { const loadingStyles = { justifyContent: 'center', alignItems: 'center' }; return ( ); }`; const customImageRendererSrc = `function CustomImageRenderer( props ) { const imgElementProps = useIMGElementProps(props); const state = useIMGElementState(imgElementProps); let content: ReactNode = false; if (state.type === 'error') { content = React.createElement(IMGElementContentError, state); } else { content = React.createElement(IMGElementContentLoading, state); } return ( {content} ); }`; const customImageRendererConfig: UIRenderHtmlCardProps = { title: 'A Custom Tag Example', caption: 'A Custom image renderer which renders a spinner on "loading" and "success" states.', props: { source: { html }, renderers: { img: Renderer } }, config: { importStatements: [ { package: 'react-native', named: ['View', 'ActivityIndicator'] }, { package: 'react-native-render-html', named: [ 'IMGElementContainer', 'IMGElementContentError', 'IMGElementContentSuccess', 'useIMGElementProps', 'useIMGElementState' ] } ], fnSrcMap: { IMGElementContentLoading: imgElementContentLoadingSrc, CustomImageRenderer: customImageRendererSrc } } }; export default customImageRendererConfig;