diff --git a/client/src/shared/ui/search-bar/search-bar.tsx b/client/src/shared/ui/search-bar/search-bar.tsx index e010e674..2c4fbfe7 100644 --- a/client/src/shared/ui/search-bar/search-bar.tsx +++ b/client/src/shared/ui/search-bar/search-bar.tsx @@ -49,18 +49,40 @@ export const SearchBar: FC = ({ initialFiltersState, onChange }) const [filterState, dispatch] = useFilterReducer(initialFiltersState); const [filterIndex, setFilterIndex] = useState(0); const [isModalOpened, setIsModalOpened] = useState(false); + const [isFilterOpened, setIsFilterOpened] = useState(false); useTrackFilterArr(filterState, onChange); const { filterArr } = filterState; - const onOpen = () => { + const onOpenModal = () => { setIsModalOpened(true); }; - const onClose = () => { + const onCloseModal = () => { setIsModalOpened(false); }; + const onOpenFilter = () => { + setIsFilterOpened(true); + }; + + const onCloseFilter = () => { + setIsFilterOpened(false); + }; + + const onOpenModalWithoutFilter = () => { + onCloseFilter(); + onOpenModal(); + }; + + const onOpenModalWithFilter = (value: string) => { + const newFilterIndex = filterArr.findIndex(filter => filter.value === value); + setFilterIndex(newFilterIndex); + + onOpenFilter(); + onOpenModal(); + }; + const isShowTagList = filterArr.some(item => { switch (item.type) { case 'text': @@ -79,7 +101,7 @@ export const SearchBar: FC = ({ initialFiltersState, onChange }) setFilterIndex, }} > - + = ({ initialFiltersState, onChange }) - + - + ); }; diff --git a/client/src/shared/ui/search-bar/ui/modal/modal.tsx b/client/src/shared/ui/search-bar/ui/modal/modal.tsx index e346ae23..260d6877 100644 --- a/client/src/shared/ui/search-bar/ui/modal/modal.tsx +++ b/client/src/shared/ui/search-bar/ui/modal/modal.tsx @@ -1,4 +1,4 @@ -import { FC, useState } from 'react'; +import { FC } from 'react'; import { useFilters } from '../../hooks'; import clsx from 'clsx'; import { CrossIcon } from '@/shared/assets'; @@ -11,15 +11,23 @@ import { clearAllFilters, clearFilter } from '../../actions'; interface ModalProps { isOpened: boolean; onClose: () => void; + isFilterOpened: boolean; + onOpenFilter: () => void; + onCloseFilter: () => void; } -export const Modal: FC = ({ isOpened, onClose }) => { +export const Modal: FC = ({ + isOpened, + onClose, + isFilterOpened, + onOpenFilter, + onCloseFilter, +}) => { const { filterArr, dispatch, filterIndex, setFilterIndex } = useFilters(); const currentFilter = filterArr[filterIndex]; - const [isFilterOpened, setIsFilterOpened] = useState(false); const handleOpenFilter = (index: number) => { - setIsFilterOpened(true); + onOpenFilter(); setFilterIndex(index); }; @@ -33,7 +41,7 @@ export const Modal: FC = ({ isOpened, onClose }) => { const handleRightButtonClick = () => { if (isFilterOpened) { - setIsFilterOpened(false); + onCloseFilter(); } else { onClose(); } diff --git a/client/src/shared/ui/search-bar/ui/tag-list/tag-list.tsx b/client/src/shared/ui/search-bar/ui/tag-list/tag-list.tsx index 6f0300b8..00c8aa22 100644 --- a/client/src/shared/ui/search-bar/ui/tag-list/tag-list.tsx +++ b/client/src/shared/ui/search-bar/ui/tag-list/tag-list.tsx @@ -13,11 +13,13 @@ import { interface TagListProps { isOnlyCurrentFilterTags?: boolean; isFilterMenu?: boolean; + onOpenFilter?: (value: string) => void; } export const TagList: FC = ({ isOnlyCurrentFilterTags = false, isFilterMenu = false, + onOpenFilter, }) => { const { filterArr, dispatch, filterIndex } = useFilters(); const currentFilter = filterArr[filterIndex]; @@ -81,7 +83,11 @@ export const TagList: FC = ({ )} -
  • +
  • onOpenFilter(filterItem.value) : undefined} + className={styles.checkbox_filter_tag_mobile} + key={filterItem.value} + > {filterItem.filterValue.length} {filterItem.value}