From d5070192c406f041c483ba671260e76ce0ef3071 Mon Sep 17 00:00:00 2001 From: SejoB Date: Sat, 28 Dec 2024 13:25:36 +0100 Subject: [PATCH 1/2] fix filter selecting issue --- .../molecules/NewsFlashFilterPanel.tsx | 9 ++++++-- src/store/news-flash-store.ts | 21 ++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/components/molecules/NewsFlashFilterPanel.tsx b/src/components/molecules/NewsFlashFilterPanel.tsx index ddcb08a4..0d4794fd 100644 --- a/src/components/molecules/NewsFlashFilterPanel.tsx +++ b/src/components/molecules/NewsFlashFilterPanel.tsx @@ -12,12 +12,13 @@ import { useStore } from 'store/storeConfig'; import { SourceFilterEnum } from 'models/SourceFilter'; import { Typography } from 'components/atoms'; import { useTranslation } from 'react-i18next'; +import { useNavigate } from 'react-router-dom'; const useStyles = makeStyles({ image: { maxWidth: '50px', maxHeight: '35px', - mixBlendMode: "multiply" + mixBlendMode: 'multiply', }, button: { height: '50px', @@ -48,6 +49,7 @@ const NewsFlashFilterPanel: FC = () => { const classes = useStyles(); const { t } = useTranslation(); const store: RootStore = useStore(); + const navigate = useNavigate(); const { newsFlashStore } = store; const getLogoByFilter = (type: SourceFilterEnum) => { @@ -76,7 +78,10 @@ const NewsFlashFilterPanel: FC = () => { className={classnames(classes.button, { [classes.active]: newsFlashStore.newsFlashActiveFilter === filter, })} - onClick={() => newsFlashStore.setActiveNewsFlashFilter(filter)} + onClick={() => { + newsFlashStore.setActiveNewsFlashFilter(filter); + navigate(''); + }} key={filter} > {filter === SourceFilterEnum.all ? ( diff --git a/src/store/news-flash-store.ts b/src/store/news-flash-store.ts index 7a547593..38474019 100644 --- a/src/store/news-flash-store.ts +++ b/src/store/news-flash-store.ts @@ -102,11 +102,11 @@ export default class NewsFlashStore { this.newsFlashCollection.data = []; }); } - this.filterNewsFlashCollection(); + this.filterNewsFlashCollection(undefined,true); } } - async filterNewsFlashCollection(direction: Direction = Direction.NEXT) { + async filterNewsFlashCollection (direction: Direction = Direction.NEXT, isFiltering: boolean = false) { runInAction(() => (this.newsFlashLoading = true)); if (this.newsFlashActiveFilter in LOCAL_FILTERS) { @@ -117,11 +117,18 @@ export default class NewsFlashStore { this.newsFlashLoading = false; }); } else { - const queryParams: IFetchNewsQueryParams = { - pageNumber: - direction === Direction.NEXT ? this.newsFlashLastNextPage + 1 : Math.max(this.newsFlashLastPrevPage - 1, 1), - }; - + const queryParams: IFetchNewsQueryParams = {}; + if (!isFiltering) { + queryParams.pageNumber = + direction === Direction.NEXT ? this.newsFlashLastNextPage + 1 : Math.max(this.newsFlashLastPrevPage - 1, 1); + } else { + queryParams.pageNumber = 1; + runInAction(() => { + this.newsFlashPageNumber = 1; + this.newsFlashLastNextPage = 1; + this.newsFlashLastPrevPage = 1; + }); + } if (this.newsFlashActiveFilter === 'critical') { queryParams['critical'] = true; } else { From 8b30d11e4e0d75b673bafff00cfe77338e91bc66 Mon Sep 17 00:00:00 2001 From: SejoB Date: Sat, 28 Dec 2024 14:19:01 +0100 Subject: [PATCH 2/2] fix scrolling to prev page issue --- src/components/organisms/News.tsx | 36 +++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/components/organisms/News.tsx b/src/components/organisms/News.tsx index b5a05456..279bd902 100644 --- a/src/components/organisms/News.tsx +++ b/src/components/organisms/News.tsx @@ -1,4 +1,4 @@ -import { FC, useRef } from 'react'; +import { FC, useEffect, useRef } from 'react'; import { Typography } from 'components/atoms'; import { Box, makeStyles } from '@material-ui/core'; import { useStore } from 'store/storeConfig'; @@ -41,10 +41,26 @@ const News: FC = ({ onScroll }) => { newsLoading: newsFlashStore.newsFlashLoading, }); + const isNotFirstPage = newsFlashStore.newsFlashLastPrevPage > 1; + const selectedItemIsFirst = newsId && newsFlashStore.newsFlashCollection.data[0]?.id === +newsId; + const shouldShowSpacer = isNotFirstPage && selectedItemIsFirst; + + useEffect(() => { + if (shouldShowSpacer && containerRef.current) { + // Use setTimeout to ensure DOM has updated + setTimeout(() => { + if (containerRef.current) { + containerRef.current.scrollTop = 100; + } + }, 0); + } + }, [shouldShowSpacer, newsFlashStore.newsFlashCollection.data]); + return (
{gpsId && } {street && city && } + {shouldShowSpacer &&
} {newsFlashStore.newsFlashCollection.data.length > 0 ? ( newsFlashStore.newsFlashCollection.data.map((news, index) => { const isFirst = index === 0; @@ -52,12 +68,18 @@ const News: FC = ({ onScroll }) => { const selectedItem = news.id === +newsId ? selectedItemRef : undefined; return ( -
- -
+ <> +
+ +
+ ); }) ) : (