mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat: Handle IP Adapter Image being reset on being deleted.
This commit is contained in:
committed by
Kent Keirsey
parent
b60b1e359e
commit
4dd289b337
@ -386,6 +386,14 @@ export const controlNetSlice = createSlice({
|
||||
) => {
|
||||
state.ipAdapterInfo.model = action.payload;
|
||||
},
|
||||
ipAdapterStateReset: (state) => {
|
||||
state.isIPAdapterEnabled = false;
|
||||
state.ipAdapterInfo = {
|
||||
adapterImage: null,
|
||||
model: null,
|
||||
weight: 1,
|
||||
};
|
||||
},
|
||||
},
|
||||
extraReducers: (builder) => {
|
||||
builder.addCase(controlNetImageProcessed, (state, action) => {
|
||||
@ -449,6 +457,7 @@ export const {
|
||||
ipAdapterImageChanged,
|
||||
ipAdapterWeightChanged,
|
||||
ipAdapterModelChanged,
|
||||
ipAdapterStateReset,
|
||||
} = controlNetSlice.actions;
|
||||
|
||||
export default controlNetSlice.reducer;
|
||||
|
@ -10,20 +10,20 @@ import {
|
||||
Text,
|
||||
} from '@chakra-ui/react';
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { stateSelector } from 'app/store/store';
|
||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
||||
import IAIButton from 'common/components/IAIButton';
|
||||
import IAISwitch from 'common/components/IAISwitch';
|
||||
import { setShouldConfirmOnDelete } from 'features/system/store/systemSlice';
|
||||
import { stateSelector } from 'app/store/store';
|
||||
import { some } from 'lodash-es';
|
||||
import { ChangeEvent, memo, useCallback, useRef } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { imageDeletionConfirmed } from '../store/actions';
|
||||
import { getImageUsage, selectImageUsage } from '../store/selectors';
|
||||
import { imageDeletionCanceled, isModalOpenChanged } from '../store/slice';
|
||||
import ImageUsageMessage from './ImageUsageMessage';
|
||||
import { ImageUsage } from '../store/types';
|
||||
import ImageUsageMessage from './ImageUsageMessage';
|
||||
|
||||
const selector = createSelector(
|
||||
[stateSelector, selectImageUsage],
|
||||
@ -42,6 +42,7 @@ const selector = createSelector(
|
||||
isCanvasImage: some(allImageUsage, (i) => i.isCanvasImage),
|
||||
isNodesImage: some(allImageUsage, (i) => i.isNodesImage),
|
||||
isControlNetImage: some(allImageUsage, (i) => i.isControlNetImage),
|
||||
isIPAdapterImage: some(allImageUsage, (i) => i.isIPAdapterImage),
|
||||
};
|
||||
|
||||
return {
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { ListItem, Text, UnorderedList } from '@chakra-ui/react';
|
||||
import { some } from 'lodash-es';
|
||||
import { memo } from 'react';
|
||||
import { ImageUsage } from '../store/types';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { ImageUsage } from '../store/types';
|
||||
|
||||
type Props = {
|
||||
imageUsage?: ImageUsage;
|
||||
@ -38,6 +38,9 @@ const ImageUsageMessage = (props: Props) => {
|
||||
{imageUsage.isControlNetImage && (
|
||||
<ListItem>{t('common.controlNet')}</ListItem>
|
||||
)}
|
||||
{imageUsage.isIPAdapterImage && (
|
||||
<ListItem>{t('common.ipAdapter')}</ListItem>
|
||||
)}
|
||||
{imageUsage.isNodesImage && (
|
||||
<ListItem>{t('common.nodeEditor')}</ListItem>
|
||||
)}
|
||||
|
@ -1,9 +1,9 @@
|
||||
import { createSelector } from '@reduxjs/toolkit';
|
||||
import { RootState } from 'app/store/store';
|
||||
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
||||
import { isInvocationNode } from 'features/nodes/types/types';
|
||||
import { some } from 'lodash-es';
|
||||
import { ImageUsage } from './types';
|
||||
import { isInvocationNode } from 'features/nodes/types/types';
|
||||
|
||||
export const getImageUsage = (state: RootState, image_name: string) => {
|
||||
const { generation, canvas, nodes, controlNet } = state;
|
||||
@ -27,11 +27,15 @@ export const getImageUsage = (state: RootState, image_name: string) => {
|
||||
c.controlImage === image_name || c.processedControlImage === image_name
|
||||
);
|
||||
|
||||
const isIPAdapterImage =
|
||||
controlNet.ipAdapterInfo.adapterImage?.image_name === image_name;
|
||||
|
||||
const imageUsage: ImageUsage = {
|
||||
isInitialImage,
|
||||
isCanvasImage,
|
||||
isNodesImage,
|
||||
isControlNetImage,
|
||||
isIPAdapterImage,
|
||||
};
|
||||
|
||||
return imageUsage;
|
||||
|
@ -10,4 +10,5 @@ export type ImageUsage = {
|
||||
isCanvasImage: boolean;
|
||||
isNodesImage: boolean;
|
||||
isControlNetImage: boolean;
|
||||
isIPAdapterImage: boolean;
|
||||
};
|
||||
|
@ -53,6 +53,7 @@ const DeleteBoardModal = (props: Props) => {
|
||||
isCanvasImage: some(allImageUsage, (i) => i.isCanvasImage),
|
||||
isNodesImage: some(allImageUsage, (i) => i.isNodesImage),
|
||||
isControlNetImage: some(allImageUsage, (i) => i.isControlNetImage),
|
||||
isIPAdapterImage: some(allImageUsage, (i) => i.isIPAdapterImage),
|
||||
};
|
||||
return { imageUsageSummary };
|
||||
}),
|
||||
|
Reference in New Issue
Block a user