diff --git a/CHANGELOG.md b/CHANGELOG.md index 4902382a..fae2b59f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ non-ascii paths while adding files from "Connected file share" (issue #4428) - Deleted frames become restored if a user deletes frames from another job of the same task () - Wrong issue position when create a quick issue on a rotated shape () +- Extra rerenders of different pages with each click () - Skeleton points exported out of order in the COCO Keypoints format () - Changing an object causes current z layer to be set to the maximum () diff --git a/cvat-ui/src/components/resource-sorting-filtering/filtering.tsx b/cvat-ui/src/components/resource-sorting-filtering/filtering.tsx index 5a6800fb..de720f61 100644 --- a/cvat-ui/src/components/resource-sorting-filtering/filtering.tsx +++ b/cvat-ui/src/components/resource-sorting-filtering/filtering.tsx @@ -129,15 +129,6 @@ export default function ResourceFilterHOC( setRecentFilters(receiveRecentFilters()); setIsMounted(true); - const listener = (event: MouseEvent): void => { - const path: HTMLElement[] = event.composedPath() - .filter((el: EventTarget) => el instanceof HTMLElement) as HTMLElement[]; - if (path.some((el: HTMLElement) => el.id === 'root') && !path.some((el: HTMLElement) => el.classList.contains('ant-btn'))) { - onBuilderVisibleChange(false); - onRecentVisibleChange(false); - } - }; - try { if (value) { const tree = QbUtils.loadFromJsonLogic(JSON.parse(value), config); @@ -152,10 +143,26 @@ export default function ResourceFilterHOC( } catch (_: any) { // nothing to do } + }, []); + + useEffect(() => { + const listener = (event: MouseEvent): void => { + const path: HTMLElement[] = event.composedPath() + .filter((el: EventTarget) => el instanceof HTMLElement) as HTMLElement[]; + if (path.some((el: HTMLElement) => el.id === 'root') && !path.some((el: HTMLElement) => el.classList.contains('ant-btn'))) { + if (builderVisible) { + onBuilderVisibleChange(false); + } + + if (predefinedVisible) { + onRecentVisibleChange(false); + } + } + }; window.addEventListener('click', listener); return () => window.removeEventListener('click', listener); - }, []); + }, [builderVisible, predefinedVisible]); useEffect(() => { if (!isMounted) { diff --git a/cvat-ui/src/components/resource-sorting-filtering/sorting.tsx b/cvat-ui/src/components/resource-sorting-filtering/sorting.tsx index 58e2861c..fd305c2b 100644 --- a/cvat-ui/src/components/resource-sorting-filtering/sorting.tsx +++ b/cvat-ui/src/components/resource-sorting-filtering/sorting.tsx @@ -119,17 +119,22 @@ function SortingModalComponent(props: Props): JSX.Element { useEffect(() => { setIsMounted(true); + }, []); + + useEffect(() => { const listener = (event: MouseEvent): void => { const path: HTMLElement[] = event.composedPath() .filter((el: EventTarget) => el instanceof HTMLElement) as HTMLElement[]; if (path.some((el: HTMLElement) => el.id === 'root') && !path.some((el: HTMLElement) => el.classList.contains('ant-btn'))) { - onVisibleChange(false); + if (visible) { + onVisibleChange(false); + } } }; window.addEventListener('click', listener); return () => window.removeEventListener('click', listener); - }, []); + }, [visible]); useEffect(() => { if (!isMounted) return;