| import React, { ReactNode } from 'react' | |
| import { cycleSortDirection } from '../hooks/use-metric-order-by' | |
| import { SortDirection } from '../../types/query-api' | |
| import classNames from 'classnames' | |
| export const SortButton = ({ | |
| children, | |
| toggleSort, | |
| sortDirection | |
| }: { | |
| children: ReactNode | |
| toggleSort: () => void | |
| sortDirection: SortDirection | null | |
| }) => { | |
| const next = cycleSortDirection(sortDirection) | |
| return ( | |
| <button | |
| onClick={toggleSort} | |
| className={classNames( | |
| 'group', | |
| 'hover:text-gray-700 dark:hover:text-gray-200 transition-colors duration-100', | |
| 'relative' | |
| )} | |
| > | |
| {children} | |
| <span | |
| title={next.hint} | |
| className={classNames( | |
| 'absolute', | |
| 'rounded inline-block size-4', | |
| 'ml-1', | |
| { | |
| asc: 'rotate-180', | |
| desc: 'rotate-0' | |
| }[sortDirection ?? next.direction], | |
| !sortDirection && 'opacity-0', | |
| !sortDirection && 'group-hover:opacity-100', | |
| 'group-hover:bg-gray-100 dark:group-hover:bg-gray-900', | |
| 'transition-all duration-100' | |
| )} | |
| > | |
| ↓ | |
| </span> | |
| </button> | |
| ) | |
| } | |