From bc8b4c200c48cc88a4aac4a355c98a673a284130 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Tue, 22 Aug 2023 01:25:21 -0700 Subject: [PATCH] Resetting inclusion/exclusion fields with filters --- components/common/MentionTableField/index.tsx | 4 ++++ components/common/MentionTypeahead/index.tsx | 18 ++++++++---------- components/filters/FilterModal/index.tsx | 17 +++++++++++++---- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/components/common/MentionTableField/index.tsx b/components/common/MentionTableField/index.tsx index 41463780..9d023819 100644 --- a/components/common/MentionTableField/index.tsx +++ b/components/common/MentionTableField/index.tsx @@ -1,5 +1,6 @@ import TableField from '~components/common/TableField' import MentionTypeahead from '../MentionTypeahead' +import Typeahead from 'react-bootstrap-typeahead/types/core/Typeahead' interface Props extends React.DetailedHTMLProps< @@ -11,6 +12,7 @@ interface Props placeholder?: string inclusions: MentionItem[] exclusions: MentionItem[] + typeaheadRef: React.Ref onUpdate: (content: MentionItem[]) => void } @@ -20,6 +22,7 @@ const MentionTableField = ({ placeholder, inclusions, exclusions, + typeaheadRef, ...props }: Props) => { return ( @@ -31,6 +34,7 @@ const MentionTableField = ({ label={label} > { +const MentionTypeahead = React.forwardRef(function Typeahead( + { label, description, placeholder, inclusions, exclusions, ...props }: Props, + forwardedRef +) { const { t } = useTranslation('common') const locale = getCookie('NEXT_LOCALE') ? (getCookie('NEXT_LOCALE') as string) @@ -159,6 +157,7 @@ const MentionTypeahead = ({ return ( (option as MentionItem).name[locale]} defaultSelected={inclusions} filterBy={() => true} - minLength={3} onSearch={handleSearch} options={options} useCache={false} @@ -181,6 +179,6 @@ const MentionTypeahead = ({ onChange={(selected) => props.onUpdate(selected as MentionItem[])} /> ) -} +}) export default MentionTypeahead diff --git a/components/filters/FilterModal/index.tsx b/components/filters/FilterModal/index.tsx index 1ca28cd6..1bd5d2df 100644 --- a/components/filters/FilterModal/index.tsx +++ b/components/filters/FilterModal/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useRef, useState } from 'react' import { getCookie, setCookie } from 'cookies-next' import { useRouter } from 'next/router' import { Trans, useTranslation } from 'react-i18next' @@ -10,16 +10,16 @@ import DialogContent from '~components/common/DialogContent' import Button from '~components/common/Button' import InputTableField from '~components/common/InputTableField' +import MentionTableField from '~components/common/MentionTableField' import SelectTableField from '~components/common/SelectTableField' import SliderTableField from '~components/common/SliderTableField' import SwitchTableField from '~components/common/SwitchTableField' import SelectItem from '~components/common/SelectItem' import type { DialogProps } from '@radix-ui/react-dialog' +import Typeahead from 'react-bootstrap-typeahead/types/core/Typeahead' import styles from './index.module.scss' -import MentionTableField from '~components/common/MentionTableField' -import classNames from 'classnames' interface Props extends DialogProps { defaultFilterSet: FilterSet @@ -43,6 +43,8 @@ const FilterModal = (props: Props) => { // Refs const headerRef = React.createRef() const footerRef = React.createRef() + const inclusionRef = useRef(null) + const exclusionRef = useRef(null) // States const [open, setOpen] = useState(false) @@ -88,7 +90,6 @@ const FilterModal = (props: Props) => { useEffect(() => { if (props.open !== undefined) { setOpen(props.open) - // When should we reset the filter state? } }) @@ -160,6 +161,12 @@ const FilterModal = (props: Props) => { setUserQuality(props.defaultFilterSet.user_quality) setNameQuality(props.defaultFilterSet.name_quality) setOriginalOnly(props.defaultFilterSet.original) + + setInclusions([]) + inclusionRef.current?.clear() + + setExclusions([]) + exclusionRef.current?.clear() } function openChange() { @@ -413,6 +420,7 @@ const FilterModal = (props: Props) => { exclusions={exclusions} placeholder={t('modals.filters.placeholders.inclusion')} label={t('modals.filters.labels.inclusion')} + typeaheadRef={inclusionRef} onUpdate={storeInclusions} /> ) @@ -424,6 +432,7 @@ const FilterModal = (props: Props) => { exclusions={inclusions} placeholder={t('modals.filters.placeholders.exclusion')} label={t('modals.filters.labels.exclusion')} + typeaheadRef={exclusionRef} onUpdate={storeExclusions} /> )