import React, { useEffect } from 'react'; import { type ContentItem } from '../types'; import { FormInput } from './FormInput'; import { FormSelect } from './FormSelect'; import { FormCheckbox } from './FormCheckbox'; import { FormRadio } from './FormRadio'; import { FormTextarea } from './FormTextarea'; import { ActivityIndicator, Text, TouchableOpacity } from 'react-native'; import { getLayoutStyles, getTextStyles, getViewStyles, } from '../utils/styleKeys'; import type { ContentViewItem } from '../store/contentModel'; import Resync from 'resync-javascript'; import Icon from '../ContentItem/icon'; interface FormRendererProps { element: ContentItem; contentItem: ContentViewItem; value: any; onChange: (value: any) => void; onBlur?: () => void; onSubmit?: () => void; error?: string; touched?: boolean; disabled?: boolean; loading?: boolean; } export const FormRenderer: React.FC = ({ element, contentItem, value, onChange, onBlur, onSubmit, error, touched, disabled, loading, }) => { const type = element.elementType; useEffect(() => { if (element?.event && contentItem?.content?.id) { if (element.eventConfig?.action === 'view') { Resync.logEvent({ eventId: element.event?.eventId || '', logId: element.eventConfig?.logId || '', }); if (contentItem?.logAnalytics && element.eventConfig?.logId) { contentItem.logAnalytics(element.eventConfig?.logId, { itemId: element?.itemId, contentViewId: contentItem?.content?.id, ...element.eventConfig, }); } } } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); switch (type) { case 'input': return ( ); case 'select': return ( ); case 'checkbox': return ( ); case 'radio': return ( ); case 'textarea': return ( ); case 'submit': const submit = () => { if ( element.eventConfig?.action === 'click' && contentItem?.content?.id ) { Resync.logEvent({ eventId: element.event?.eventId || '', logId: element.eventConfig?.logId || '', }); if (contentItem?.logAnalytics && element.eventConfig?.logId) { contentItem.logAnalytics(element.eventConfig?.logId, { itemId: element?.itemId, ...element.eventConfig, contentViewId: contentItem?.content?.id, metadata: value, }); } } onSubmit?.(); }; return ( {loading ? ( ) : ( <> {/* @ts-ignore */} {element?.data?.icon?.name && // @ts-ignore element?.data?.properties?.iconPosition === 'left' && ( )} {/* @ts-ignore */} {element?.data?.properties?.textContent} {/* @ts-ignore */} {element?.data?.icon?.name && // @ts-ignore element?.data?.properties?.iconPosition === 'right' && ( )} )} ); default: console.warn(`Unsupported form element type: ${type}`); return null; } };