import { Linking, Share } from 'react-native'; import type { FunctionRegistry, NavigationRegistry } from '../types'; const onNavigationHandle = ( navigation: { routeName?: string; params?: any; type?: string }, navigationRegistry: NavigationRegistry ) => { if (navigation && navigation.routeName) { const { routeName, params, type } = navigation; switch (type) { case 'navigate': if (routeName) { navigationRegistry.navigate(routeName, params); } else { console.warn('Route name required for navigate action'); } break; case 'push': if (routeName) { navigationRegistry.push(routeName, params); } else { console.warn('Route name required for push action'); } break; case 'goBack': navigationRegistry.goBack(); break; default: console.warn('Unknown navigation type:', type); } } }; export const onClick = ({ clickAction, functionRegistry, navigationRegistry, dataItem, }: { clickAction?: { actionType?: string; actionValue?: string; navigation?: { routeName?: string; params?: any; type?: string; }; shareOption?: { message?: string; url?: string; title?: string; }; } | null; functionRegistry?: FunctionRegistry; navigationRegistry?: NavigationRegistry; dataItem?: Record; }) => { switch (clickAction?.actionType) { case 'link': // Handle link action Linking.canOpenURL(clickAction?.actionValue || '').then((supported) => { if (supported) { Linking.openURL(clickAction?.actionValue || ''); } else { } }); break; case 'navigate': // Handle navigate action if (navigationRegistry && clickAction.navigation) { onNavigationHandle(clickAction.navigation, navigationRegistry); } break; case 'share': // Handle share action Share.share({ message: clickAction?.shareOption?.message || '', url: clickAction?.shareOption?.url || '', title: clickAction?.shareOption?.title || '', }); break; case 'props': // Handle props action - execute function from function registry if (clickAction?.actionValue && functionRegistry) { const functionName = clickAction.actionValue; const functionToCall = functionRegistry[functionName]; if (functionToCall) { // Get custom props for this element // const elementProps = section.properties?.customProps || {}; const args = [{}, dataItem || {}]; // Call the registered function functionToCall(...args); } else { console.warn( `Function "${functionName}" not found in function registry` ); } } break; default: { // Handle default action } } };