mirror of
https://github.com/Sonarr/Sonarr.git
synced 2026-04-19 21:46:43 -04:00
Convert Form Components to TypeScript
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import classNames from 'classnames';
|
||||
import React, { SyntheticEvent, useCallback } from 'react';
|
||||
import Icon from 'Components/Icon';
|
||||
import Link from 'Components/Link/Link';
|
||||
import { icons } from 'Helpers/Props';
|
||||
import CheckInput from '../CheckInput';
|
||||
import styles from './EnhancedSelectInputOption.css';
|
||||
|
||||
function handleCheckPress() {
|
||||
// CheckInput requires a handler. Swallow the change event because onPress will already handle it via event propagation.
|
||||
}
|
||||
|
||||
export interface EnhancedSelectInputOptionProps {
|
||||
className?: string;
|
||||
id: string | number;
|
||||
depth?: number;
|
||||
isSelected: boolean;
|
||||
isDisabled?: boolean;
|
||||
isHidden?: boolean;
|
||||
isMultiSelect?: boolean;
|
||||
isMobile: boolean;
|
||||
children: React.ReactNode;
|
||||
onSelect: (...args: unknown[]) => unknown;
|
||||
}
|
||||
|
||||
function EnhancedSelectInputOption({
|
||||
className = styles.option,
|
||||
id,
|
||||
depth = 0,
|
||||
isSelected,
|
||||
isDisabled = false,
|
||||
isHidden = false,
|
||||
isMultiSelect = false,
|
||||
isMobile,
|
||||
children,
|
||||
onSelect,
|
||||
}: EnhancedSelectInputOptionProps) {
|
||||
const handlePress = useCallback(
|
||||
(event: SyntheticEvent) => {
|
||||
event.preventDefault();
|
||||
|
||||
onSelect(id);
|
||||
},
|
||||
[id, onSelect]
|
||||
);
|
||||
|
||||
return (
|
||||
<Link
|
||||
className={classNames(
|
||||
className,
|
||||
isSelected && !isMultiSelect && styles.isSelected,
|
||||
isDisabled && !isMultiSelect && styles.isDisabled,
|
||||
isHidden && styles.isHidden,
|
||||
isMobile && styles.isMobile
|
||||
)}
|
||||
component="div"
|
||||
isDisabled={isDisabled}
|
||||
onPress={handlePress}
|
||||
>
|
||||
{depth !== 0 && <div style={{ width: `${depth * 20}px` }} />}
|
||||
|
||||
{isMultiSelect && (
|
||||
<CheckInput
|
||||
className={styles.optionCheckInput}
|
||||
containerClassName={styles.optionCheck}
|
||||
name={`select-${id}`}
|
||||
value={isSelected}
|
||||
isDisabled={isDisabled}
|
||||
onChange={handleCheckPress}
|
||||
/>
|
||||
)}
|
||||
|
||||
{children}
|
||||
|
||||
{isMobile && (
|
||||
<div className={styles.iconContainer}>
|
||||
<Icon name={isSelected ? icons.CHECK_CIRCLE : icons.CIRCLE_OUTLINE} />
|
||||
</div>
|
||||
)}
|
||||
</Link>
|
||||
);
|
||||
}
|
||||
|
||||
export default EnhancedSelectInputOption;
|
||||
Reference in New Issue
Block a user