ぼざクリタグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

32 lines
946 B

  1. import { useLocation } from 'react-router-dom'
  2. import PrefetchLink from '@/components/PrefetchLink'
  3. export default <T extends string,>({ by, label, currentOrder, defaultDirection }: {
  4. by: T
  5. label: string
  6. currentOrder: `${ T }:${ 'asc' | 'desc' }`
  7. defaultDirection: Record<T, 'asc' | 'desc'> }) => {
  8. const [fld, dir] = currentOrder.split (':')
  9. const location = useLocation ()
  10. const qs = new URLSearchParams (location.search)
  11. const nextDir =
  12. (by === fld)
  13. ? (dir === 'asc' ? 'desc' : 'asc')
  14. : (defaultDirection[by] || 'desc')
  15. qs.set ('order', `${ by }:${ nextDir }`)
  16. qs.set ('page', '1')
  17. return (
  18. <PrefetchLink
  19. className="text-inherit visited:text-inherit hover:text-inherit"
  20. to={`${ location.pathname }?${ qs.toString () }`}>
  21. <span className="font-bold">
  22. {label}
  23. {by === fld && (dir === 'asc' ? ' ▲' : ' ▼')}
  24. </span>
  25. </PrefetchLink>)
  26. }