Massive/ListMenu.tsx

95 lines
2.1 KiB
TypeScript
Raw Normal View History

import { useState } from "react";
import { Divider, IconButton, Menu } from "react-native-paper";
import ConfirmDialog from "./ConfirmDialog";
2022-12-21 00:02:53 +00:00
export default function ListMenu({
onEdit,
onCopy,
onClear,
onDelete,
onSelect,
2022-12-21 00:02:53 +00:00
ids,
}: {
onEdit: () => void;
onCopy: () => void;
onClear: () => void;
onDelete: () => void;
onSelect: () => void;
ids?: number[];
2022-12-21 00:02:53 +00:00
}) {
const [showMenu, setShowMenu] = useState(false);
const [showRemove, setShowRemove] = useState(false);
2022-12-21 00:02:53 +00:00
const edit = () => {
setShowMenu(false);
onEdit();
};
2022-12-21 00:02:53 +00:00
const copy = () => {
setShowMenu(false);
onCopy();
};
2022-12-21 00:02:53 +00:00
const clear = () => {
setShowMenu(false);
onClear();
};
2022-12-21 00:02:53 +00:00
const remove = () => {
setShowMenu(false);
setShowRemove(false);
onDelete();
};
2022-12-21 00:02:53 +00:00
const select = () => {
onSelect();
};
2022-12-21 00:02:53 +00:00
return (
<Menu
visible={showMenu}
onDismiss={() => setShowMenu(false)}
anchor={<IconButton onPress={() => setShowMenu(true)} icon="more-vert" />}
2023-06-27 03:16:59 +00:00
>
<Menu.Item leadingIcon="done-all" title="Select all" onPress={select} />
2022-12-21 00:02:53 +00:00
<Menu.Item
leadingIcon="clear"
title="Clear"
2022-12-21 00:02:53 +00:00
onPress={clear}
disabled={ids?.length === 0}
/>
2022-12-24 00:10:40 +00:00
<Menu.Item
leadingIcon="edit"
title="Edit"
2022-12-24 00:10:40 +00:00
onPress={edit}
disabled={ids?.length === 0}
/>
2022-12-23 05:32:46 +00:00
<Menu.Item
leadingIcon="content-copy"
title="Copy"
2022-12-23 05:32:46 +00:00
onPress={copy}
disabled={ids?.length === 0}
/>
2022-12-21 00:02:53 +00:00
<Divider />
<Menu.Item
leadingIcon="delete"
2022-12-21 00:02:53 +00:00
onPress={() => setShowRemove(true)}
title="Delete"
2022-12-21 00:02:53 +00:00
/>
<ConfirmDialog
title={ids?.length === 0 ? "Delete all" : "Delete selected"}
2022-12-21 00:02:53 +00:00
show={showRemove}
setShow={setShowRemove}
onOk={remove}
2023-06-27 03:16:59 +00:00
onCancel={() => setShowMenu(false)}
>
{ids?.length === 0 ? (
<>This irreversibly deletes records from the app. Are you sure?</>
) : (
<>This will delete {ids?.length} record(s). Are you sure?</>
)}
2022-12-21 00:02:53 +00:00
</ConfirmDialog>
</Menu>
);
2022-12-21 00:02:53 +00:00
}