Merge pull request #2532 from ecency/nt/fix-notifi-duplicate

doing an id based union of notifications while compiling list data
This commit is contained in:
Feruz M 2022-11-15 19:18:32 +05:30 committed by GitHub
commit b5aa293325
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,7 +5,7 @@ import {
useQueries,
useQueryClient,
} from '@tanstack/react-query';
import { useState } from 'react';
import { useEffect, useState } from 'react';
import { useIntl } from 'react-intl';
import bugsnapInstance from '../../config/bugsnag';
import { useAppDispatch, useAppSelector } from '../../hooks';
@ -15,13 +15,17 @@ import { getNotifications, markNotifications } from '../ecency/ecency';
import { NotificationFilters } from '../ecency/ecency.types';
import { markHiveNotifications } from '../hive/dhive';
import QUERIES from './queryKeys';
import { unionBy } from 'lodash';
const FETCH_LIMIT = 20;
export const useNotificationsQuery = (filter: NotificationFilters) => {
const [data, setData] = useState([]);
const [isRefreshing, setIsRefreshing] = useState(false);
const [pageParams, setPageParams] = useState(['']);
const _fetchNotifications = async (pageParam: string) => {
console.log('fetching page since:', pageParam);
const response = await getNotifications({ filter, since: pageParam, limit: FETCH_LIMIT });
@ -35,12 +39,19 @@ export const useNotificationsQuery = (filter: NotificationFilters) => {
return lastId;
};
const _onSuccess = () => {
const dataArrs = notificationQueries.map((query)=>query.data);
const _data = unionBy(...dataArrs, 'id')
setData(_data);
}
// query initialization
const notificationQueries = useQueries({
queries: pageParams.map((pageParam) => ({
queryKey: [QUERIES.NOTIFICATIONS.GET, filter, pageParam],
queryFn: () => _fetchNotifications(pageParam),
initialData: [],
onSuccess:_onSuccess
})),
});
@ -66,7 +77,7 @@ export const useNotificationsQuery = (filter: NotificationFilters) => {
};
return {
data: notificationQueries.flatMap((query) => query.data),
data,
isRefreshing,
isLoading: notificationQueries.lastItem.isLoading || notificationQueries.lastItem.isFetching,
fetchNextPage: _fetchNextPage,