mirror of
https://github.com/Radarr/Radarr.git
synced 2026-04-21 22:05:43 -04:00
d99a7e9b8a
(cherry picked from commit e1cbc4a78249881de96160739a50c0a399ea4313) Closes #10378 Fixed: Links tooltip closing too quickly (cherry picked from commit 0b9a212f33381d07ff67e2453753aaab64cc8041) Closes #10400 Fixed: Movie links not opening on iOS (cherry picked from commit f20ac9dc348e1f5ded635f12ab925d982b1b8957) Closes #10425
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import classNames from 'classnames';
|
|
import React, { SyntheticEvent, useCallback, useMemo } from 'react';
|
|
import SpinnerIconButton from 'Components/Link/SpinnerIconButton';
|
|
import { icons } from 'Helpers/Props';
|
|
import translate from 'Utilities/String/translate';
|
|
import styles from './MonitorToggleButton.css';
|
|
|
|
interface MonitorToggleButtonProps {
|
|
className?: string;
|
|
monitored: boolean;
|
|
size?: number;
|
|
isDisabled?: boolean;
|
|
isSaving?: boolean;
|
|
onPress: (value: boolean, options: { shiftKey: boolean }) => unknown;
|
|
}
|
|
|
|
function MonitorToggleButton(props: MonitorToggleButtonProps) {
|
|
const {
|
|
className = styles.toggleButton,
|
|
monitored,
|
|
isDisabled = false,
|
|
isSaving = false,
|
|
size,
|
|
onPress,
|
|
...otherProps
|
|
} = props;
|
|
|
|
const iconName = monitored ? icons.MONITORED : icons.UNMONITORED;
|
|
|
|
const title = useMemo(() => {
|
|
if (isDisabled) {
|
|
return 'Cannot toggle monitored state when movie is unmonitored';
|
|
}
|
|
|
|
if (monitored) {
|
|
return translate('ToggleMonitoredToUnmonitored');
|
|
}
|
|
|
|
return translate('ToggleUnmonitoredToMonitored');
|
|
}, [monitored, isDisabled]);
|
|
|
|
const handlePress = useCallback(
|
|
(event: SyntheticEvent<HTMLLinkElement, MouseEvent>) => {
|
|
const shiftKey = event.nativeEvent.shiftKey;
|
|
|
|
onPress(!monitored, { shiftKey });
|
|
},
|
|
[monitored, onPress]
|
|
);
|
|
|
|
return (
|
|
<SpinnerIconButton
|
|
className={classNames(className, isDisabled && styles.isDisabled)}
|
|
name={iconName}
|
|
size={size}
|
|
title={title}
|
|
isDisabled={isDisabled}
|
|
isSpinning={isSaving}
|
|
{...otherProps}
|
|
onPress={handlePress}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export default MonitorToggleButton;
|