handle generations coming in, fix pagination to use total from list query so it updates as that changes

This commit is contained in:
Mary Hipp 2024-06-20 15:15:46 -04:00 committed by psychedelicious
parent 5101dc4bef
commit c9c39c02b6
3 changed files with 133 additions and 944 deletions

View File

@ -9,7 +9,7 @@ import {
imageSelected, imageSelected,
isImageViewerOpenChanged, isImageViewerOpenChanged,
} from 'features/gallery/store/gallerySlice'; } from 'features/gallery/store/gallerySlice';
import { IMAGE_CATEGORIES } from 'features/gallery/store/types'; import { IMAGE_CATEGORIES, IMAGE_LIMIT } from 'features/gallery/store/types';
import { $nodeExecutionStates, upsertExecutionState } from 'features/nodes/hooks/useExecutionState'; import { $nodeExecutionStates, upsertExecutionState } from 'features/nodes/hooks/useExecutionState';
import { zNodeStatus } from 'features/nodes/types/invocation'; import { zNodeStatus } from 'features/nodes/types/invocation';
import { CANVAS_OUTPUT } from 'features/nodes/util/graph/constants'; import { CANVAS_OUTPUT } from 'features/nodes/util/graph/constants';
@ -63,9 +63,16 @@ export const addInvocationCompleteEventListener = (startAppListening: AppStartLi
{ {
board_id: imageDTO.board_id ?? 'none', board_id: imageDTO.board_id ?? 'none',
categories: IMAGE_CATEGORIES, categories: IMAGE_CATEGORIES,
offset: gallery.offset,
limit: gallery.limit,
is_intermediate: false
}, },
(draft) => { (draft) => {
imagesAdapter.addOne(draft, imageDTO); const updatedListLength = draft.items.unshift(imageDTO)
if (updatedListLength > IMAGE_LIMIT) {
draft.items.pop()
}
draft.total += 1;
} }
) )
); );

View File

@ -8,23 +8,13 @@ import { IMAGE_LIMIT } from "../store/types";
export const useGalleryPagination = () => { export const useGalleryPagination = () => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const { offset, galleryView, selectedBoardId } = useAppSelector((s) => s.gallery); const { offset } = useAppSelector((s) => s.gallery);
const queryArgs = useAppSelector(selectListImagesQueryArgs); const queryArgs = useAppSelector(selectListImagesQueryArgs);
const { count } = useListImagesQuery(queryArgs, { const { count, total } = useListImagesQuery(queryArgs, {
selectFromResult: ({ data }) => ({ count: data?.items.length ?? 0 }), selectFromResult: ({ data }) => ({ count: data?.items.length ?? 0, total: data?.total ?? 0 }),
}); });
const { data: assetsTotal } = useGetBoardAssetsTotalQuery(selectedBoardId);
const { data: imagesTotal } = useGetBoardImagesTotalQuery(selectedBoardId);
const total = useMemo(() => {
if (galleryView === 'images') {
return imagesTotal?.total ?? 0;
} else {
return assetsTotal?.total ?? 0;
}
}, [assetsTotal?.total, galleryView, imagesTotal?.total]);
console.log({ offset })
const currentPage = useMemo(() => Math.ceil(offset / IMAGE_LIMIT), [offset]); const currentPage = useMemo(() => Math.ceil(offset / IMAGE_LIMIT), [offset]);
const pages = useMemo(() => Math.ceil(total / IMAGE_LIMIT), [total]); const pages = useMemo(() => Math.ceil(total / IMAGE_LIMIT), [total]);
@ -44,6 +34,7 @@ export const useGalleryPagination = () => {
const goNext = useCallback(() => { const goNext = useCallback(() => {
dispatch(offsetChanged(offset + IMAGE_LIMIT)); dispatch(offsetChanged(offset + IMAGE_LIMIT));
}, [dispatch, offset]); }, [dispatch, offset]);
const goPrev = useCallback(() => { const goPrev = useCallback(() => {
dispatch(offsetChanged(Math.max(offset - IMAGE_LIMIT, 0))); dispatch(offsetChanged(Math.max(offset - IMAGE_LIMIT, 0)));
}, [dispatch, offset]); }, [dispatch, offset]);
@ -65,11 +56,10 @@ export const useGalleryPagination = () => {
// calculate the page buttons to display - current page with 3 around it // calculate the page buttons to display - current page with 3 around it
const pageButtons = useMemo(() => { const pageButtons = useMemo(() => {
const buttons = []; const buttons = [];
const maxPageButtons = 5; const maxPageButtons = 3;
let startPage = Math.max(currentPage - (Math.floor(maxPageButtons / 2)), 0); let startPage = Math.max(currentPage - (Math.floor(maxPageButtons / 2)), 0);
let endPage = Math.min(startPage + maxPageButtons - 1, pages - 1); let endPage = Math.min(startPage + maxPageButtons - 1, pages - 1);
console.log({ startPage })
if (endPage - startPage < maxPageButtons - 1) { if (endPage - startPage < maxPageButtons - 1) {
startPage = Math.max(endPage - maxPageButtons + 1, 0); startPage = Math.max(endPage - maxPageButtons + 1, 0);
} }

File diff suppressed because it is too large Load Diff