import React, { useCallback } from 'react'; import { View, StyleProp, ViewStyle } from 'react-native'; import RenderHTML, { RenderHTMLProps } from 'react-native-render-html'; import UIDisplayLoadingAtom from './UIDisplayLoadingAtom'; import useOnLinkPress from '../hooks/useOnLinkPress'; import { useColorRoles } from '../theme/colorSystem'; import { SYSTEM_FONTS } from '../constants'; import { useMemo } from 'react'; function renderRemoteLoadingView() { return ; } const defaultTextProps = { selectable: true }; const UIHtmlDisplayMolecule = React.memo( ({ renderHtmlProps, contentWidth, style }: { contentWidth: number; renderHtmlProps: RenderHTMLProps; style?: StyleProp; }) => { const onSelectUri = useOnLinkPress(); const onLinkPress = useCallback( (e, uri) => onSelectUri(uri), [onSelectUri] ); const { surface, softDivider } = useColorRoles(); const baseStyle = useMemo( () => ({ color: surface.content, backgroundColor: surface.background, ...renderHtmlProps.baseStyle }), [renderHtmlProps.baseStyle, surface.background, surface.content] ); const sharedProps = { contentWidth, ...(renderHtmlProps as any), renderersProps: useMemo( () => ({ ...renderHtmlProps.renderersProps, a: { onPress: onLinkPress, ...renderHtmlProps.renderersProps?.a }, img: { enableExperimentalPercentWidth: true, ...renderHtmlProps.renderersProps?.img } }), [onLinkPress, renderHtmlProps.renderersProps] ), defaultTextProps }; const mergedTagsStyles = useMemo( () => ({ ...sharedProps.tagsStyles, hr: { marginTop: 16, marginBottom: 16, ...sharedProps.tagsStyles?.hr, height: 1, backgroundColor: softDivider }, html: {} }), [sharedProps.tagsStyles, softDivider] ); const renderHtml = ( ); return {renderHtml}; } ); export default UIHtmlDisplayMolecule;