1
0
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:
Mark McDowall
2024-10-26 14:54:23 -07:00
committed by GitHub
parent c114e2ddb7
commit 682d2b4e1b
158 changed files with 5225 additions and 6112 deletions
@@ -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;