Massive/ListMenu.tsx

105 lines
2.4 KiB
TypeScript
Raw Permalink 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?: unknown[];
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 = () => {
2024-02-19 06:15:34 +00:00
setShowMenu(false);
onSelect();
};
2022-12-21 00:02:53 +00:00
return (
<>
{ids.length > 0 && (
<IconButton icon="delete" onPress={() => setShowRemove(true)} />
)}
<Menu
visible={showMenu}
onDismiss={() => setShowMenu(false)}
anchor={
<IconButton onPress={() => setShowMenu(true)} icon="dots-vertical" />
}
>
<Menu.Item leadingIcon="check-all" title="Select all" onPress={select} />
<Menu.Item
leadingIcon="close"
title="Clear"
onPress={clear}
disabled={ids?.length === 0}
/>
<Menu.Item
leadingIcon="pencil"
title="Edit"
onPress={edit}
disabled={ids?.length === 0}
/>
{onCopy && (
<Menu.Item
leadingIcon="content-copy"
title="Copy"
onPress={copy}
disabled={ids?.length === 0}
/>
)}
<Divider />
<Menu.Item
leadingIcon="delete"
onPress={() => setShowRemove(true)}
title="Delete"
/>
</Menu>
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} {ids?.length > 1 ? "records" : "record"}. Are you sure?</>
)}
2022-12-21 00:02:53 +00:00
</ConfirmDialog>
</>
);
2022-12-21 00:02:53 +00:00
}