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/AlphaPickerContainer.tsx

60 lines
2 KiB
TypeScript
Raw Normal View History

import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
2022-10-27 00:59:46 +03:00
import AlphaPicker from '../alphaPicker/alphaPicker';
import { ViewQuerySettings } from '../../types/interface';
2022-08-06 01:36:13 +03:00
2022-10-14 02:07:54 +03:00
interface AlphaPickerContainerProps {
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-27 00:59:46 +03:00
const AlphaPickerContainer: FC<AlphaPickerContainerProps> = ({ viewQuerySettings, setViewQuerySettings }) => {
2022-08-06 01:36:13 +03:00
const [ alphaPicker, setAlphaPicker ] = useState<AlphaPicker>();
const element = useRef<HTMLDivElement>(null);
2022-10-27 00:59:46 +03:00
alphaPicker?.updateControls(viewQuerySettings);
2022-08-06 01:36:13 +03:00
2022-08-21 03:09:22 +03:00
const onAlphaPickerChange = useCallback((e) => {
const newValue = (e as CustomEvent).detail.value;
2022-10-27 00:59:46 +03:00
let updatedValue: React.SetStateAction<ViewQuerySettings>;
2022-08-21 03:09:22 +03:00
if (newValue === '#') {
2023-01-24 20:26:21 +01:00
updatedValue = {
NameLessThan: 'A',
NameStartsWith: undefined
};
2022-08-21 03:09:22 +03:00
} else {
2023-01-24 20:26:21 +01:00
updatedValue = {
NameLessThan: undefined,
NameStartsWith: newValue
};
2022-08-21 03:09:22 +03:00
}
2022-10-27 00:59:46 +03:00
setViewQuerySettings((prevState) => ({
2022-10-21 21:47:54 +03:00
...prevState,
StartIndex: 0,
...updatedValue
}));
2022-10-27 00:59:46 +03:00
}, [setViewQuerySettings]);
2022-08-21 03:09:22 +03:00
2022-08-06 01:36:13 +03:00
useEffect(() => {
const alphaPickerElement = element.current;
2022-08-06 01:36:13 +03:00
2022-08-21 03:09:22 +03:00
setAlphaPicker(new AlphaPicker({
element: alphaPickerElement,
valueChangeEvent: 'click'
}));
2022-08-06 01:36:13 +03:00
if (alphaPickerElement) {
2022-08-21 03:09:22 +03:00
alphaPickerElement.addEventListener('alphavaluechanged', onAlphaPickerChange);
2022-08-06 01:36:13 +03:00
}
return () => {
alphaPickerElement?.removeEventListener('alphavaluechanged', onAlphaPickerChange);
};
2022-08-21 03:09:22 +03:00
}, [onAlphaPickerChange]);
2022-08-06 01:36:13 +03:00
return (
<div ref={element} className='alphaPicker alphaPicker-fixed alphaPicker-fixed-right alphaPicker-vertical alphabetPicker-right' />
2022-08-06 01:36:13 +03:00
);
};
export default AlphaPickerContainer;