import type { AgGridReact as AgGridReactType } from '@ag-grid-community/react/lib/agGridReact'; import { Flex, Group, Stack } from '@mantine/core'; import debounce from 'lodash/debounce'; import { ChangeEvent, MutableRefObject } from 'react'; import { useTranslation } from 'react-i18next'; import { useListStoreByKey } from '../../../store/list.store'; import { LibraryItem } from '/@/renderer/api/types'; import { PageHeader, SearchInput } from '/@/renderer/components'; import { useListContext } from '/@/renderer/context/list-context'; import { FilterBar, LibraryHeaderBar } from '/@/renderer/features/shared'; import { SongListHeaderFilters } from '/@/renderer/features/songs/components/song-list-header-filters'; import { useContainerQuery } from '/@/renderer/hooks'; import { useListFilterRefresh } from '/@/renderer/hooks/use-list-filter-refresh'; import { SongListFilter, useCurrentServer, useListStoreActions } from '/@/renderer/store'; import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; import { ListDisplayType } from '/@/renderer/types'; import { VirtualInfiniteGridRef } from '/@/renderer/components/virtual-grid'; interface SongListHeaderProps { gridRef: MutableRefObject; itemCount?: number; tableRef: MutableRefObject; title?: string; } export const SongListHeader = ({ gridRef, title, itemCount, tableRef }: SongListHeaderProps) => { const { t } = useTranslation(); const server = useCurrentServer(); const { pageKey, handlePlay, customFilters } = useListContext(); const { setFilter, setTablePagination } = useListStoreActions(); const { display, filter } = useListStoreByKey({ key: pageKey }); const cq = useContainerQuery(); const { handleRefreshTable, handleRefreshGrid } = useListFilterRefresh({ itemType: LibraryItem.SONG, server, }); const handleSearch = debounce((e: ChangeEvent) => { const searchTerm = e.target.value === '' ? undefined : e.target.value; const updatedFilters = setFilter({ data: { searchTerm }, itemType: LibraryItem.SONG, key: pageKey, }) as SongListFilter; const filterWithCustom = { ...updatedFilters, ...customFilters, }; if (display === ListDisplayType.TABLE || display === ListDisplayType.TABLE_PAGINATED) { handleRefreshTable(tableRef, filterWithCustom); setTablePagination({ data: { currentPage: 0 }, key: pageKey }); } else { handleRefreshGrid(gridRef, filterWithCustom); } }, 500); const playButtonBehavior = usePlayButtonBehavior(); return ( handlePlay?.({ playType: playButtonBehavior })} /> {title || t('page.trackList.title', { postProcess: 'titleCase' })} {itemCount} ); };