2022-10-05 02:44:28 +03:00
|
|
|
import React, { FC, useCallback, useEffect, useRef, useState } from 'react';
|
2022-08-06 01:36:13 +03:00
|
|
|
import AlphaPicker from '../../components/alphaPicker/alphaPicker';
|
2022-10-14 02:07:54 +03:00
|
|
|
import { QueryI } from './interface';
|
2022-08-06 01:36:13 +03:00
|
|
|
|
2022-10-14 02:07:54 +03:00
|
|
|
interface AlphaPickerContainerProps {
|
|
|
|
getQuery: () => QueryI;
|
|
|
|
setQuery: React.Dispatch<React.SetStateAction<QueryI>>;
|
2022-10-05 02:44:28 +03:00
|
|
|
}
|
2022-08-06 01:36:13 +03:00
|
|
|
|
2022-10-14 02:07:54 +03:00
|
|
|
const AlphaPickerContainer: FC<AlphaPickerContainerProps> = ({ getQuery, setQuery }) => {
|
2022-08-06 01:36:13 +03:00
|
|
|
const [ alphaPicker, setAlphaPicker ] = useState<AlphaPicker>();
|
|
|
|
const element = useRef<HTMLDivElement>(null);
|
2022-10-05 02:44:28 +03:00
|
|
|
const query = getQuery();
|
2022-08-06 01:36:13 +03:00
|
|
|
|
|
|
|
alphaPicker?.updateControls(query);
|
|
|
|
|
2022-08-21 03:09:22 +03:00
|
|
|
const onAlphaPickerChange = useCallback((e) => {
|
|
|
|
const newValue = (e as CustomEvent).detail.value;
|
2022-10-05 02:44:28 +03:00
|
|
|
let updatedValue;
|
2022-08-21 03:09:22 +03:00
|
|
|
if (newValue === '#') {
|
2022-10-05 02:44:28 +03:00
|
|
|
updatedValue = {NameLessThan: 'A'};
|
2022-08-21 03:09:22 +03:00
|
|
|
} else {
|
2022-10-05 02:44:28 +03:00
|
|
|
updatedValue = {NameStartsWith: newValue};
|
2022-08-21 03:09:22 +03:00
|
|
|
}
|
2022-10-14 02:07:54 +03:00
|
|
|
|
|
|
|
setQuery({StartIndex: 0, ...updatedValue});
|
|
|
|
}, [setQuery]);
|
2022-08-21 03:09:22 +03:00
|
|
|
|
2022-08-06 01:36:13 +03:00
|
|
|
useEffect(() => {
|
2022-10-05 02:44:28 +03:00
|
|
|
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
|
|
|
}
|
2022-10-05 02:44:28 +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 (
|
2022-10-05 02:44:28 +03:00
|
|
|
<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;
|