2022-10-30 02:34:17 +00:00
|
|
|
import React, {useCallback, useState} from 'react';
|
|
|
|
import {GestureResponderEvent, ListRenderItemInfo, View} from 'react-native';
|
|
|
|
import {List, Menu, RadioButton} from 'react-native-paper';
|
2022-10-30 02:23:22 +00:00
|
|
|
import {useColor} from './color';
|
|
|
|
import CountMany from './count-many';
|
2022-10-30 02:34:17 +00:00
|
|
|
import {deleteFirst} from './set.service';
|
2022-10-30 02:23:22 +00:00
|
|
|
|
|
|
|
interface Props extends ListRenderItemInfo<CountMany> {
|
|
|
|
onSelect: (index: number) => void;
|
|
|
|
selected: number;
|
2022-10-30 02:34:17 +00:00
|
|
|
onUndo: () => void;
|
2022-10-30 02:23:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export default function StartPlanItem(props: Props) {
|
2022-10-30 02:34:17 +00:00
|
|
|
const {index, item, onSelect, selected, onUndo} = props;
|
2022-10-30 02:23:22 +00:00
|
|
|
const {color} = useColor();
|
2022-10-30 02:34:17 +00:00
|
|
|
const [anchor, setAnchor] = useState({x: 0, y: 0});
|
|
|
|
const [showMenu, setShowMenu] = useState(false);
|
|
|
|
|
|
|
|
const undo = useCallback(async () => {
|
|
|
|
await deleteFirst(item.name);
|
|
|
|
setShowMenu(false);
|
|
|
|
onUndo();
|
|
|
|
}, [setShowMenu, item.name, onUndo]);
|
|
|
|
|
|
|
|
const longPress = useCallback(
|
|
|
|
(e: GestureResponderEvent) => {
|
|
|
|
setAnchor({x: e.nativeEvent.pageX, y: e.nativeEvent.pageY});
|
|
|
|
setShowMenu(true);
|
|
|
|
},
|
|
|
|
[setShowMenu, setAnchor],
|
|
|
|
);
|
2022-10-30 02:23:22 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<List.Item
|
2022-10-30 02:34:17 +00:00
|
|
|
onLongPress={longPress}
|
2022-10-30 02:23:22 +00:00
|
|
|
title={item.name}
|
|
|
|
description={item.total.toString()}
|
|
|
|
onPress={() => onSelect(index)}
|
|
|
|
left={() => (
|
|
|
|
<View style={{alignItems: 'center', justifyContent: 'center'}}>
|
|
|
|
<RadioButton
|
|
|
|
onPress={() => onSelect(index)}
|
|
|
|
value={index.toString()}
|
|
|
|
status={selected === index ? 'checked' : 'unchecked'}
|
|
|
|
color={color}
|
|
|
|
/>
|
|
|
|
</View>
|
|
|
|
)}
|
2022-10-30 02:34:17 +00:00
|
|
|
right={() => (
|
|
|
|
<>
|
|
|
|
<Menu
|
|
|
|
anchor={anchor}
|
|
|
|
visible={showMenu}
|
|
|
|
onDismiss={() => setShowMenu(false)}>
|
|
|
|
<Menu.Item icon="undo" onPress={undo} title="Undo" />
|
|
|
|
</Menu>
|
|
|
|
</>
|
|
|
|
)}
|
2022-10-30 02:23:22 +00:00
|
|
|
/>
|
|
|
|
);
|
|
|
|
}
|