1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-20 21:54:58 -04:00

Convert Table to TypeScript

This commit is contained in:
Mark McDowall
2025-01-06 16:48:33 -08:00
parent 0fdeb05663
commit 699120a8fd
57 changed files with 959 additions and 1239 deletions
@@ -0,0 +1,60 @@
import React, { useCallback } from 'react';
import Icon from 'Components/Icon';
import Link from 'Components/Link/Link';
import { icons, sortDirections } from 'Helpers/Props';
import { SortDirection } from 'Helpers/Props/sortDirections';
import styles from './VirtualTableHeaderCell.css';
interface VirtualTableHeaderCellProps {
className?: string;
name: string;
isSortable?: boolean;
sortKey?: string;
fixedSortDirection?: SortDirection;
sortDirection?: string;
children?: React.ReactNode;
onSortPress?: (name: string, sortDirection?: SortDirection) => void;
}
function VirtualTableHeaderCell({
className = styles.headerCell,
name,
isSortable = false,
sortKey,
sortDirection,
fixedSortDirection,
children,
onSortPress,
...otherProps
}: VirtualTableHeaderCellProps) {
const isSorting = isSortable && sortKey === name;
const sortIcon =
sortDirection === sortDirections.ASCENDING
? icons.SORT_ASCENDING
: icons.SORT_DESCENDING;
const handlePress = useCallback(() => {
if (fixedSortDirection) {
onSortPress?.(name, fixedSortDirection);
} else {
onSortPress?.(name);
}
}, [name, fixedSortDirection, onSortPress]);
return isSortable ? (
<Link
component="div"
className={className}
onPress={handlePress}
{...otherProps}
>
{children}
{isSorting ? <Icon name={sortIcon} className={styles.sortIcon} /> : null}
</Link>
) : (
<div className={className}>{children}</div>
);
}
export default VirtualTableHeaderCell;