import * as React from 'react'; import { StyleSheet, View, Text, Switch } from 'react-native'; import { ContextMenuView, WrapperView, type MenuPreviewConfig } from 'react-native-ios-context-menu'; import type { ExampleItemProps } from './SharedExampleTypes'; import { ContextMenuCard } from '../components/ContextMenuCard'; export function ContextMenuViewTest07(props: ExampleItemProps) { const [counter, setCounter] = React.useState(0); const [targetViewID, setTargetViewID] = React.useState(null); const [isResizeAnimated, setIsResizeAnimated] = React.useState(false); const [togglePreviewType, setTogglePreviewType] = React.useState(false); const [togglePreviewSize, setTogglePreviewSize] = React.useState(false); const [toggleBgTransparent, setToggleBgTransparent] = React.useState(false); const [toggleTargetViewID, setToggleTargetViewID] = React.useState(false); const [togglePreferredCommitStyle, setTogglePreferredCommitStyle] = React.useState(false); const intervalRef = React.useRef(); React.useEffect(() => { return () => { if(!intervalRef.current) return; clearInterval(intervalRef.current!); }; }, []); const previewConfig: MenuPreviewConfig = { previewType: (togglePreviewType? 'CUSTOM' : 'DEFAULT'), previewSize: (togglePreviewSize? 'STRETCH' : 'INHERIT'), preferredCommitStyle: (togglePreferredCommitStyle? 'pop' : 'dismiss'), backgroundColor: (toggleBgTransparent ? 'white' : 'rgba(255,255,255,0.5)'), isResizeAnimated, ...(toggleTargetViewID && { viewIdentifier: { viewID: targetViewID!, }, }), }; return ( 0) && { actionKey : 'reset', actionTitle : `Reset Counter`, menuAttributes: ['destructive'], icon: { type: 'IMAGE_SYSTEM', imageValue: { systemName: 'trash', }, } }], }} previewConfig={previewConfig} renderPreview={() => ( {'Hello World'} {(counter % 2 === 0) && ( {`Counter: ${counter}`} )} )} onMenuWillShow={() => { intervalRef.current = setInterval(() => { setCounter((prevValue) => (prevValue + 1)); }, 1000); }} onMenuWillHide={() => { if(!intervalRef.current) return; clearInterval(intervalRef.current); }} onPressMenuItem={({nativeEvent}) => { switch (nativeEvent.actionKey) { case 'add': setCounter((prevValue) => (prevValue + 100)); break; case 'reset': setCounter(0); break; }; }} > {toggleTargetViewID && ( { setTargetViewID(nativeEvent.viewID); }} > {'Target View'} )} {'previewType'} {'Value: '} {previewConfig.previewType} { setTogglePreviewType(flag); }} /> {'previewSize'} {'Value: '} {previewConfig.previewSize} { setTogglePreviewSize(flag); }} /> {'backgroundColor'} {'Value: '} {previewConfig.backgroundColor} { setToggleBgTransparent(flag); }} /> {'isResizeAnimated'} {'Value: '} {previewConfig.isResizeAnimated? 'true' : 'false'} { setIsResizeAnimated(flag); }} /> {'preferredCommitStyle'} {'Value: '} {previewConfig.preferredCommitStyle} { setTogglePreferredCommitStyle(flag) }} /> {'targetViewID'} {'Value: '} {previewConfig.viewIdentifier?.viewID} { setToggleTargetViewID(flag); }} /> ); }; const styles = StyleSheet.create({ rowContainer: { flexDirection: 'row', marginVertical: 10, alignItems: 'center', }, textRowContainer: { flex: 1, }, textRowTitle: { fontSize: 16, fontWeight: '400' }, textRowSubtitle: { color: 'rgba(0,0,0,0.6)' }, textRowSubtitleLabel: { fontWeight: 'bold' }, targetViewContainer: { padding: 15, backgroundColor: 'rgba(255,255,255,0.5)', borderRadius: 10, marginVertical: 10, alignItems: 'center', }, targetViewText: { fontSize: 16, fontWeight: '400', }, previewContainer: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 20 }, previewTitleText: { fontWeight: '700', fontSize: 32 }, previewCounterText: { fontWeight: '700', fontSize: 32, marginTop: 10 }, });