mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-16 16:35:05 -05:00
multi-select actions include:
- drag to board to move all to that board
- right click to add all to board or delete all
backend changes:
- add routes for changing board for list of image names, deleting list of images
- change image-specific routes to `images/i/{image_name}` to not clobber other routes (like `images/upload`, `images/delete`)
- subclass pydantic `BaseModel` as `BaseModelExcludeNull`, which excludes null values when calling `dict()` on the model. this fixes inconsistent types related to JSON parsing null values into `null` instead of `undefined`
- remove `board_id` from `remove_image_from_board`
frontend changes:
- multi-selection stuff uses `ImageDTO[]` as payloads, for dnd and other mutations. this gives us access to image `board_id`s when hitting routes, and enables efficient cache updates.
- consolidate change board and delete image modals to handle single and multiples
- board totals are now re-fetched on mutation and not kept in sync manually - was way too tedious to do this
- fixed warning about nested `<p>` elements
- closes #4088 , need to handle case when `autoAddBoardId` is `"none"`
- add option to show gallery image delete button on every gallery image
frontend refactors/organisation:
- make typegen script js instead of ts
- enable `noUncheckedIndexedAccess` to help avoid bugs when indexing into arrays, many small changes needed to satisfy TS after this
- move all image-related endpoints into `endpoints/images.ts`, its a big file now, but this fixes a number of circular dependency issues that were otherwise felt impossible to resolve
22 lines
732 B
TypeScript
22 lines
732 B
TypeScript
import { useAppSelector } from 'app/store/storeHooks';
|
|
import { BoardId } from 'features/gallery/store/types';
|
|
import { useMemo } from 'react';
|
|
import {
|
|
useGetBoardAssetsTotalQuery,
|
|
useGetBoardImagesTotalQuery,
|
|
} from '../endpoints/boards';
|
|
|
|
export const useBoardTotal = (board_id: BoardId) => {
|
|
const galleryView = useAppSelector((state) => state.gallery.galleryView);
|
|
|
|
const { data: totalImages } = useGetBoardImagesTotalQuery(board_id);
|
|
const { data: totalAssets } = useGetBoardAssetsTotalQuery(board_id);
|
|
|
|
const currentViewTotal = useMemo(
|
|
() => (galleryView === 'images' ? totalImages : totalAssets),
|
|
[galleryView, totalAssets, totalImages]
|
|
);
|
|
|
|
return { totalImages, totalAssets, currentViewTotal };
|
|
};
|