/* * Copyright (C) Contributors to the Suwayomi project * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import { useTranslation } from 'react-i18next'; import { BaseSyntheticEvent, ChangeEvent, useMemo, ForwardedRef } from 'react'; import Button from '@mui/material/Button'; import Checkbox from '@mui/material/Checkbox'; import IconButton from '@mui/material/IconButton'; import MoreVertIcon from '@mui/icons-material/MoreVert'; import { PopupState } from 'material-ui-popup-state/hooks'; import { bindTrigger } from 'material-ui-popup-state'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; import { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; export const MangaOptionButton = ({ id, selected, handleSelection, asCheckbox = false, popupState, ref, }: { id: number; selected?: boolean | null; handleSelection?: SelectableCollectionReturnType['handleSelection']; asCheckbox?: boolean; popupState: PopupState; ref?: ForwardedRef; }) => { const { t } = useTranslation(); const bindTriggerProps = useMemo(() => bindTrigger(popupState), [popupState]); const preventDefaultAction = (e: BaseSyntheticEvent) => { e.stopPropagation(); e.preventDefault(); }; const handleSelectionChange = (e: ChangeEvent, isSelected: boolean) => { preventDefaultAction(e); handleSelection?.(id, isSelected); }; if (!handleSelection) { return null; } const isSelected = selected !== null; if (isSelected) { if (!asCheckbox) { return null; } return ( ); } if (asCheckbox) { return ( ); } return ( ); };