Massive/PlanItem.tsx

47 lines
1.2 KiB
TypeScript
Raw Normal View History

import React, {useContext, useState} from 'react';
2022-07-08 02:59:19 +00:00
import {GestureResponderEvent} from 'react-native';
import {List, Menu} from 'react-native-paper';
import {DatabaseContext} from './App';
2022-07-06 05:40:53 +00:00
import {Plan} from './plan';
export default function PlanItem({
item,
setPlan,
2022-07-06 05:40:53 +00:00
onRemove,
}: {
item: Plan;
setPlan: (plan: Plan) => void;
2022-07-06 05:40:53 +00:00
onRemove: () => void;
}) {
const [show, setShow] = useState(false);
2022-07-08 02:59:19 +00:00
const [anchor, setAnchor] = useState({x: 0, y: 0});
const db = useContext(DatabaseContext);
2022-07-06 05:40:53 +00:00
const remove = async () => {
await db.executeSql(`DELETE FROM plans WHERE id = ?`, [item.id]);
setShow(false);
onRemove();
};
2022-07-08 02:59:19 +00:00
const longPress = (e: GestureResponderEvent) => {
setAnchor({x: e.nativeEvent.pageX, y: e.nativeEvent.pageY});
setShow(true);
};
2022-07-06 05:40:53 +00:00
return (
<>
<List.Item
2022-07-08 02:59:19 +00:00
onPress={() => setPlan(item)}
2022-07-07 04:17:55 +00:00
title={item.days.replace(/,/g, ', ')}
description={item.workouts.replace(/,/g, ', ')}
2022-07-08 02:59:19 +00:00
onLongPress={longPress}
2022-07-06 05:40:53 +00:00
right={() => (
2022-07-08 02:59:19 +00:00
<Menu anchor={anchor} visible={show} onDismiss={() => setShow(false)}>
2022-07-06 05:40:53 +00:00
<Menu.Item icon="trash" onPress={remove} title="Delete" />
</Menu>
)}
/>
</>
);
}