1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/common/Sort.tsx

55 lines
1.6 KiB
TypeScript
Raw Normal View History

import React, { FC, useCallback, useEffect, useRef } from 'react';
2022-08-06 01:36:13 +03:00
import IconButtonElement from '../../elements/IconButtonElement';
2022-10-27 00:59:46 +03:00
import { ViewQuerySettings } from '../../types/interface';
2022-08-06 01:36:13 +03:00
2022-10-14 02:07:54 +03:00
interface SortProps {
2022-08-21 03:09:22 +03:00
getSortMenuOptions: () => {
name: string;
value: string;
2022-10-21 21:47:54 +03:00
}[];
2022-10-27 00:59:46 +03:00
viewQuerySettings: ViewQuerySettings;
setViewQuerySettings: React.Dispatch<React.SetStateAction<ViewQuerySettings>>;
2022-08-06 01:36:13 +03:00
}
2022-10-21 21:47:54 +03:00
const Sort: FC<SortProps> = ({
getSortMenuOptions,
2022-10-27 00:59:46 +03:00
viewQuerySettings,
setViewQuerySettings
2022-10-21 21:47:54 +03:00
}) => {
2022-08-06 01:36:13 +03:00
const element = useRef<HTMLDivElement>(null);
const showSortMenu = useCallback(() => {
2022-10-27 00:59:46 +03:00
import('../sortmenu/sortmenu').then(({default: SortMenu}) => {
const sortMenu = new SortMenu();
sortMenu.show({
2022-10-27 00:59:46 +03:00
settings: viewQuerySettings,
2022-10-21 21:47:54 +03:00
sortOptions: getSortMenuOptions(),
2022-10-27 00:59:46 +03:00
setSortValues: setViewQuerySettings
});
});
2022-10-27 00:59:46 +03:00
}, [getSortMenuOptions, viewQuerySettings, setViewQuerySettings]);
2022-08-06 01:36:13 +03:00
useEffect(() => {
const btnSort = element.current?.querySelector('.btnSort');
btnSort?.addEventListener('click', showSortMenu);
return () => {
btnSort?.removeEventListener('click', showSortMenu);
};
}, [showSortMenu]);
2022-08-06 01:36:13 +03:00
return (
<div ref={element}>
<IconButtonElement
is='paper-icon-button-light'
className='btnSort autoSize'
title='Sort'
icon='material-icons sort_by_alpha'
/>
</div>
);
};
export default Sort;