useFilesBucketsShortcuts.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { PermissionAction } from '@supabase/shared-types/out/constants'
  2. import { Dispatch, RefObject, SetStateAction } from 'react'
  3. import { STORAGE_BUCKET_SORT } from '../Storage.constants'
  4. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  5. import { SHORTCUT_IDS } from '@/state/shortcuts/registry'
  6. import { useShortcut } from '@/state/shortcuts/useShortcut'
  7. interface UseFilesBucketsShortcutsParams {
  8. searchInputRef: RefObject<HTMLInputElement | null>
  9. setFilterString: Dispatch<SetStateAction<string>>
  10. sortBucket: STORAGE_BUCKET_SORT
  11. setSortBucket: (value: STORAGE_BUCKET_SORT) => void
  12. setCreateVisible: (value: boolean) => void
  13. onRefresh: () => void
  14. }
  15. export function useFilesBucketsShortcuts({
  16. searchInputRef,
  17. setFilterString,
  18. sortBucket,
  19. setSortBucket,
  20. setCreateVisible,
  21. onRefresh,
  22. }: UseFilesBucketsShortcutsParams) {
  23. const { can: canCreateBuckets } = useAsyncCheckPermissions(PermissionAction.STORAGE_WRITE, '*')
  24. useShortcut(
  25. SHORTCUT_IDS.LIST_PAGE_FOCUS_SEARCH,
  26. () => {
  27. searchInputRef.current?.focus()
  28. searchInputRef.current?.select()
  29. },
  30. { label: 'Search buckets' }
  31. )
  32. useShortcut(SHORTCUT_IDS.LIST_PAGE_NEW_ITEM, () => setCreateVisible(true), {
  33. label: 'Create new bucket',
  34. enabled: canCreateBuckets,
  35. })
  36. useShortcut(SHORTCUT_IDS.LIST_PAGE_RESET_FILTERS, () => {
  37. setFilterString('')
  38. })
  39. useShortcut(SHORTCUT_IDS.STORAGE_BUCKETS_REFRESH, onRefresh)
  40. useShortcut(
  41. SHORTCUT_IDS.STORAGE_BUCKETS_CLEAR_SORT,
  42. () => setSortBucket(STORAGE_BUCKET_SORT.CREATED_AT),
  43. { enabled: sortBucket !== STORAGE_BUCKET_SORT.CREATED_AT }
  44. )
  45. }