>(null);
+ const [hasFetched, setHasFetched] = useState(false);
+ useIntersection({
+ loadingRef,
+ onLoadMore: () => {
+ if (hasFetched) {
+ fetchMoreProgresses();
+ }
+ },
+ earlyReturn: sortedProgressLength === 0,
+ });
const reverseSortingOrder = () => {
if (sortedProgress && sortedProgressLength) {
const newSortedArr: ProgressDetailsData[] = [];
@@ -38,6 +58,7 @@ export default function ProgressCard({ taskProgress }: Props) {
: 1;
});
setSortedProgress({ data: sorted, order: 1 });
+ setHasFetched(true);
}
}, [taskProgress]);
@@ -82,9 +103,16 @@ export default function ProgressCard({ taskProgress }: Props) {
>
{sortedProgress && sortedProgressLength ? (
{cardsToShow}
+ ) : isFetchingProgress ? (
+ ''
) : (
'No Progress found'
)}
+ {devFlag && (
+
+ {isFetchingProgress && 'Loading...'}
+
+ )}
);
}
diff --git a/src/components/taskDetails/index.tsx b/src/components/taskDetails/index.tsx
index 54f118891..50766a0fb 100755
--- a/src/components/taskDetails/index.tsx
+++ b/src/components/taskDetails/index.tsx
@@ -69,16 +69,48 @@ const TaskDetails: FC = ({ taskID }) => {
const { isUserAuthorized } = useUserData();
const [isEditing, setIsEditing] = useState(false);
const [isOpen, setIsOpen] = useState(false);
+ const [page, setPage] = useState(0);
const [loading, setLoading] = useState(false);
+ const [progressesDataPaginated, setProgressesDataPaginated] = useState<
+ ProgressDetailsData[]
+ >([]);
const { data, isError, isLoading, isFetching, refetch } =
useGetTaskDetailsQuery(taskID);
const { data: extensionRequests } =
useGetExtensionRequestDetailsQuery(taskID);
- const { data: progressData, refetch: refetchProgress } =
- useGetProgressDetailsQuery({
- taskId: taskID,
- dev: isDev,
+ const {
+ data: progressData,
+ refetch: refetchProgress,
+ isFetching: isFetchingProgress,
+ } = useGetProgressDetailsQuery({
+ taskId: taskID,
+ dev: isDev,
+ size: 10,
+ page: page,
+ });
+
+ useEffect(() => {
+ setProgressesDataPaginated((prevProgressesDataPaginated) => {
+ if (progressData?.data) {
+ return [...prevProgressesDataPaginated, ...progressData.data];
+ }
+ return prevProgressesDataPaginated;
});
+ }, [progressData]);
+
+ const fetchMoreProgresses = () => {
+ if (progressData?.links?.next) {
+ const nextPageUrl = progressData.links.next;
+ const urlParams = new URLSearchParams(nextPageUrl.split('?')[1]);
+ const nextPage = parseInt(urlParams.get('page') || '0', 10);
+ setPage(nextPage);
+ }
+ };
+ useEffect(() => {
+ if (page > 0) {
+ refetchProgress();
+ }
+ }, [page, refetchProgress]);
const isExtensionRequestPending = Boolean(
extensionRequests?.allExtensionRequests.length
@@ -224,8 +256,10 @@ const TaskDetails: FC = ({ taskID }) => {
}
const shouldRenderParentContainer = () => !isLoading && !isError && data;
-
- const taskProgress: ProgressDetailsData[] = progressData?.data || [];
+ const progressDataToSend = isDev
+ ? progressesDataPaginated
+ : progressData?.data || [];
+ const taskProgress: ProgressDetailsData[] = progressDataToSend || [];
return (
@@ -271,7 +305,12 @@ const TaskDetails: FC = ({ taskID }) => {
taskDetailsData={taskDetailsData}
/>
-
+
;
message: string;
count: number;
+ links?: Links;
};
type Section = {