import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; import { Flex, Group, Stack } from '@mantine/core'; import { closeAllModals, openModal } from '@mantine/modals'; import debounce from 'lodash/debounce'; import { ChangeEvent, MutableRefObject } from 'react'; import { useTranslation } from 'react-i18next'; import { RiFileAddFill } from 'react-icons/ri'; import { LibraryItem, PlaylistListQuery, ServerType } from '/@/renderer/api/types'; import { Button, PageHeader, Paper, SearchInput, SpinnerIcon } from '/@/renderer/components'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; import { CreatePlaylistForm } from '/@/renderer/features/playlists/components/create-playlist-form'; import { PlaylistListHeaderFilters } from '/@/renderer/features/playlists/components/playlist-list-header-filters'; import { LibraryHeaderBar } from '/@/renderer/features/shared'; import { useContainerQuery } from '/@/renderer/hooks'; import { useDisplayRefresh } from '/@/renderer/hooks/use-display-refresh'; import { PlaylistListFilter, useCurrentServer } from '/@/renderer/store'; interface PlaylistListHeaderProps { gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; } export const PlaylistListHeader = ({ gridRef, itemCount, tableRef }: PlaylistListHeaderProps) => { const { t } = useTranslation(); const cq = useContainerQuery(); const server = useCurrentServer(); const handleCreatePlaylistModal = () => { openModal({ children: closeAllModals()} />, onClose: () => { tableRef?.current?.api?.purgeInfiniteCache(); }, size: server?.type === ServerType?.NAVIDROME ? 'xl' : 'sm', title: t('form.createPlaylist.title', { postProcess: 'sentenceCase' }), }); }; const { filter, refresh, search } = useDisplayRefresh({ gridRef, itemCount, itemType: LibraryItem.PLAYLIST, server, tableRef, }); const handleSearch = debounce((e: ChangeEvent) => { const updatedFilters = search(e) as PlaylistListFilter; refresh(updatedFilters); }, 500); return ( {t('page.playlistList.title', { postProcess: 'titleCase' })} {itemCount === null || itemCount === undefined ? ( ) : ( itemCount )} ); };