/** @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 { 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 type { LegacyFunctionComponent } from '@fluentui-react-native/framework-base'; import { stylingSettings } from './MenuItemCheckbox.styling'; import type { MenuItemCheckboxProps, MenuItemCheckboxSlotProps, MenuItemCheckboxInfo, MenuItemCheckboxType, } from './MenuItemCheckbox.types'; import { menuItemCheckboxName } from './MenuItemCheckbox.types'; import { useMenuItemCheckbox } from './useMenuItemCheckbox'; import { getAccessibilityLabel, getTooltip } from '../MenuItem/MenuItem'; export const MenuItemCheckbox = compose({ displayName: menuItemCheckboxName, ...stylingSettings, slots: { root: Pressable, ...(Platform.OS === 'android' && { checkbox: Pressable }), checkmark: SvgXml, content: Text, iconPlaceholder: View, imgIcon: Image, fontOrSvgIcon: Icon, }, useRender: (userProps: MenuItemCheckboxProps, useSlots: UseSlots) => { const menuItem = useMenuItemCheckbox(userProps); const Slots = useSlots(userProps, (layer): boolean => menuItem.state[layer] || userProps[layer]); return menuItemFinalRender(menuItem, Slots); }, }); export const menuItemFinalRender = ( menuItem: MenuItemCheckboxInfo, Slots: Slots, ): LegacyFunctionComponent => { return (final: MenuItemCheckboxProps, ...children: React.ReactNode[]) => { const { accessibilityLabel, icon, tooltip, ...mergedProps } = mergeProps(menuItem.props, final); const checkmarkXml = ` `; const androidCheckmarkPath = ` `; 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} )} ); }; };