react-native-ios-context-menu/example/src/examples/ContextMenuViewTest05.tsx
Dominic Go 6344ffdeba 💫 Example - Updated Example/Test Components
Summary: Updated components from `example/src/examples` to use the new API's.
2021-12-25 18:06:21 +08:00

159 lines
4.4 KiB
TypeScript

import * as React from 'react';
import { StyleSheet, View, Text, ScrollView } from 'react-native';
import { ContextMenuView } from 'react-native-ios-context-menu';
import type { ContextMenuExampleProps } from './SharedExampleTypes';
import { ContextMenuCard } from '../components/ContextMenuCard';
import * as Helpers from '../functions/helpers';
type EventItem = {
timestamp: string;
type: string;
};
export function ContextMenuViewTest05(props: ContextMenuExampleProps) {
const [events, setEvents] = React.useState<Array<EventItem>>([]);
const hasEvents = (events.length > 0);
const recentEvents = events.slice(-15);
const handleEvent = (eventName: string) => {
const date = new Date();
const h = Helpers.pad(date.getHours ());
const m = Helpers.pad(date.getMinutes());
const s = Helpers.pad(date.getSeconds());
const ms = Helpers.pad(date.getMilliseconds(), 3);
setEvents((prevValue) => ([ ...prevValue, {
timestamp: `${h}:${m}:${s}.${ms}`,
type: eventName
}]));
};
return (
<ContextMenuView
style={props.style}
menuConfig={{
menuTitle: 'ContextMenuViewTest05',
menuItems: [{
actionKey : 'key-01',
actionTitle: 'Action #1',
icon: {
type: 'IMAGE_SYSTEM',
imageValue: {
systemName: 'folder',
},
}
}, {
actionKey : 'key-02' ,
actionTitle: 'Action #2',
icon: {
type: 'IMAGE_SYSTEM',
imageValue: {
systemName: 'dial.fill',
},
}
}, {
actionKey : 'key-03' ,
actionTitle: 'Action #3',
icon: {
type: 'IMAGE_SYSTEM',
imageValue: {
systemName: 'archivebox.fill',
},
}
}],
}}
onMenuWillShow ={() => handleEvent('onMenuWillShow' )}
onMenuWillHide ={() => handleEvent('onMenuWillHide' )}
onMenuWillCancel ={() => handleEvent('onMenuWillCancel' )}
onMenuDidShow ={() => handleEvent('onMenuDidShow' )}
onMenuDidHide ={() => handleEvent('onMenuDidHide' )}
onMenuDidCancel ={() => handleEvent('onMenuDidCancel' )}
onPressMenuItem ={() => handleEvent('onPressMenuItem' )}
onPressMenuPreview={() => handleEvent('onPressMenuPreview')}
>
<ContextMenuCard
index={props.index}
title={'ContextMenuViewTest05'}
subtitle={'context menu events'}
description={[
`Test for logging the menu events`
]}
>
{hasEvents? (
<ScrollView
contentContainerStyle={styles.eventContainer}
>
{recentEvents.map((item, index) => (
<View
key={`event-${item.timestamp}-${item.type}`}
style={styles.eventListItemContainer}
>
<Text style={styles.eventItemIndexText}>
{`${Helpers.pad(events.length - index, 3)}`}
</Text>
<Text style={styles.eventItemTimestampText}>
{`${item.timestamp}`}
</Text>
<Text style={styles.eventItemTypeText}>
{item.type}
</Text>
</View>
))}
</ScrollView>
):(
<View style={[styles.eventContainer, styles.eventContainerEmpty]}>
<Text style={styles.eventEmptyText}>
{'No Events To Show'}
</Text>
</View>
)}
</ContextMenuCard>
</ContextMenuView>
);
};
const styles = StyleSheet.create({
eventContainer: {
marginTop: 15,
height: 100,
backgroundColor: 'rgba(255,255,255,0.3)',
borderRadius: 10,
paddingHorizontal: 12,
paddingVertical: 7,
},
eventContainerEmpty: {
alignItems: 'center',
justifyContent: 'center',
},
eventEmptyText: {
fontWeight: '600',
fontSize: 16,
color: 'rgba(0,0,0,0.4)',
},
eventListItemContainer: {
flexDirection: 'row',
},
eventItemIndexText: {
fontVariant: ['tabular-nums'],
fontWeight: '600',
color: 'rgba(0,0,0,0.3)',
},
eventItemTimestampText: {
fontVariant: ['tabular-nums'],
marginLeft: 12,
fontWeight: '300',
color: 'rgba(0,0,0,0.75)',
},
eventItemTypeText: {
marginLeft: 12,
fontWeight: '400',
color: 'rgba(0,0,0,0.9)',
},
});