123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import React, { useRef, useEffect, MutableRefObject } from 'react';
- import { useTranslation } from 'react-i18next';
- import Button from '../Button';
- import Portal from '../Portal';
- import {
- Wrapper,
- InputWrapper,
- Input,
- ResultInfo,
- ArrowButton,
- } from './styled';
- type Props = {
- matchesTotal: number;
- current: number;
- onEnter: (val: string) => void;
- onPrev: () => void;
- onNext: () => void;
- isActive?: boolean;
- close: () => void;
- };
- const Search: React.FC<Props> = ({
- matchesTotal = 0,
- current = 0,
- onPrev,
- onNext,
- onEnter,
- isActive = false,
- close,
- }: Props) => {
- const { t } = useTranslation('toolbar');
- const inputRef = useRef(null) as MutableRefObject<any>;
- const handleKeyDown = (e: React.KeyboardEvent): void => {
- if (e.keyCode === 13 && inputRef.current.value) {
- onEnter(inputRef.current.value);
- }
- };
- useEffect(() => {
- if (isActive) {
- inputRef.current.focus();
- } else {
- inputRef.current.value = '';
- }
- }, [isActive]);
- return (
- <Portal>
- <Wrapper open={isActive}>
- <InputWrapper>
- <Input
- ref={inputRef}
- placeholder={t('searchDocument')}
- onKeyDown={handleKeyDown}
- />
- <ResultInfo>
- {matchesTotal ? `${current} / ${matchesTotal}` : ''}
- </ResultInfo>
- </InputWrapper>
- <ArrowButton variant="top" onClick={onPrev} />
- <ArrowButton variant="bottom" onClick={onNext} />
- <Button
- appearance="primary"
- style={{ marginLeft: '16px' }}
- onClick={close}
- >
- {t('close')}
- </Button>
- </Wrapper>
- </Portal>
- );
- };
- export default Search;
|