import React from 'react'; import { Platform, StyleSheet, Text } from 'react-native'; function useChildren(inputChildren: React.ReactNode) { return React.useMemo(() => { const children: React.ReactNode[] = []; React.Children.forEach(inputChildren, (child) => { if (child == null || typeof child === 'boolean') { } else if (typeof child === 'string' || typeof child === 'number') { // Wrap text in a Text component. let message = `Invalid raw text as a child of View: "${child}"${ child === '' ? ` [empty string]` : '' }.`; message += ' Wrap the text contents with a Text element or remove it.'; console.warn(message); children.push( Unwrapped text: "{child}" ); } else if ('type' in child && typeof child?.type === 'string' && Platform.OS !== 'web') { // Disallow untransformed react-dom elements on native. throw new Error(`Using unsupported React DOM element: <${child.type} />`); } else { children.push(child); } }); return children; }, [inputChildren]); } /** Extend a view with a `children` filter that asserts more helpful warnings/errors. */ export function createDevView>(View: TView) { return React.forwardRef(({ children, ...props }: any, forwardedRef: React.Ref) => { return ; }); } const styles = StyleSheet.create({ error: { backgroundColor: 'firebrick', color: 'white', }, });