/** @jsxImportSource @fluentui-react-native/framework-base */ import React from 'react'; import { Image, Platform, Pressable, View } from 'react-native'; import type { Slots, UseSlots } from '@fluentui-react-native/framework'; import type { LegacyFunctionComponent } from '@fluentui-react-native/framework-base'; import { compose } from '@fluentui-react-native/framework'; import { mergeProps } from '@fluentui-react-native/framework-base'; import { IconV1 as Icon } from '@fluentui-react-native/icon'; import { TextV1 as Text } from '@fluentui-react-native/text'; import { SvgXml } from 'react-native-svg'; import { stylingSettings } from './MenuItemRadio.styling'; import type { MenuItemRadioInfo, MenuItemRadioProps, MenuItemRadioSlotProps, MenuItemRadioType } from './MenuItemRadio.types'; import { menuItemRadioName } from './MenuItemRadio.types'; import { useMenuItemRadio } from './useMenuItemRadio'; import { getAccessibilityLabel, getTooltip } from '../MenuItem/MenuItem'; export const MenuItemRadio = compose({ displayName: menuItemRadioName, ...stylingSettings, slots: { root: Pressable, radioInnerCircle: View, radioButton: Pressable, checkmark: SvgXml, content: Text, iconPlaceholder: View, imgIcon: Image, fontOrSvgIcon: Icon, }, useRender: (userProps: MenuItemRadioProps, useSlots: UseSlots) => { const menuItem = useMenuItemRadio(userProps); const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer] || userProps[layer]); return menuItemRadioFinalRender(menuItem, Slots); }, }); export const menuItemRadioFinalRender = ( menuItem: MenuItemRadioInfo, Slots: Slots, ): LegacyFunctionComponent => { return (final: MenuItemRadioProps, ...children: React.ReactNode[]) => { const { accessibilityLabel, icon, tooltip, ...mergedProps } = mergeProps(menuItem.props, final); const checkmarkXml = ` `; const label = getAccessibilityLabel(accessibilityLabel, children[0]); const tooltipResult = getTooltip(tooltip, menuItem.state.hasTooltips, children[0]); return ( {Platform.OS === 'android' ? ( ) : ( )} {(icon || menuItem.state.hasIcons) && ( {icon && icon.source && } {icon && (icon.svgSource || icon.fontSource) && } )} {children && ( {children} )} ); }; };