import { useIsFetching } from '@tanstack/react-query'; import { t } from 'i18next'; import { RefObject } from 'react'; import { useTranslation } from 'react-i18next'; import { queryKeys } from '/@/renderer/api/query-keys'; import { SONG_TABLE_COLUMNS } from '/@/renderer/components/item-list/item-table-list/default-columns'; import { ItemListHandle } from '/@/renderer/components/item-list/types'; import { usePlayer } from '/@/renderer/features/player/context/player-context'; import { useRestoreQueue, useSaveQueue } from '/@/renderer/features/player/hooks/use-queue-restore'; import { ListConfigMenu, SONG_DISPLAY_TYPES, } from '/@/renderer/features/shared/components/list-config-menu'; import { SearchInput } from '/@/renderer/features/shared/components/search-input'; import { useCurrentServer, usePlayerStoreBase } from '/@/renderer/store'; import { hasFeature } from '/@/shared/api/utils'; import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { Group } from '/@/shared/components/group/group'; import { ServerFeature } from '/@/shared/types/features-types'; import { ItemListKey, ListDisplayType } from '/@/shared/types/types'; interface PlayQueueListOptionsProps { handleSearch: (value: string) => void; searchTerm?: string; tableRef: RefObject; type: ItemListKey; } export const PlayQueueListControls = ({ handleSearch, searchTerm, tableRef, type, }: PlayQueueListOptionsProps) => { const { t } = useTranslation(); const player = usePlayer(); const handleClearQueue = () => { player.clearQueue(); }; const handleJumpToCurrent = () => { const index = usePlayerStoreBase.getState().player.index; if (index !== -1) { tableRef.current?.scrollToIndex(index); } }; const handleShuffleQueue = () => { player.shuffleAll(); }; return ( handleSearch(e.target.value)} value={searchTerm} /> ); }; const QueueRestoreActions = () => { const server = useCurrentServer(); const supportsQueue = hasFeature(server, ServerFeature.SERVER_PLAY_QUEUE); const isFetching = useIsFetching({ queryKey: queryKeys.player.fetch({ type: 'queue' }) }); const { isPending: isSavingQueue, mutate: handleSaveQueue } = useSaveQueue(); const handleRestoreQueue = useRestoreQueue(); if (!supportsQueue) { return null; } return ( <> handleSaveQueue()} tooltip={{ label: t('player.saveQueueToServer', { postProcess: 'sentenceCase', }), }} variant="subtle" /> ); };