mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(ui): convert initial image to layer when starting canvas session
This commit is contained in:
parent
2006f84f6e
commit
2307a30892
@ -9,6 +9,7 @@ import { addBatchEnqueuedListener } from 'app/store/middleware/listenerMiddlewar
|
|||||||
import { addDeleteBoardAndImagesFulfilledListener } from 'app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted';
|
import { addDeleteBoardAndImagesFulfilledListener } from 'app/store/middleware/listenerMiddleware/listeners/boardAndImagesDeleted';
|
||||||
import { addBoardIdSelectedListener } from 'app/store/middleware/listenerMiddleware/listeners/boardIdSelected';
|
import { addBoardIdSelectedListener } from 'app/store/middleware/listenerMiddleware/listeners/boardIdSelected';
|
||||||
import { addBulkDownloadListeners } from 'app/store/middleware/listenerMiddleware/listeners/bulkDownload';
|
import { addBulkDownloadListeners } from 'app/store/middleware/listenerMiddleware/listeners/bulkDownload';
|
||||||
|
import { addCanvasSessionRequestedListener } from 'app/store/middleware/listenerMiddleware/listeners/canvasSessionRequested';
|
||||||
import { addControlAdapterPreprocessor } from 'app/store/middleware/listenerMiddleware/listeners/controlAdapterPreprocessor';
|
import { addControlAdapterPreprocessor } from 'app/store/middleware/listenerMiddleware/listeners/controlAdapterPreprocessor';
|
||||||
import { addEnqueueRequestedLinear } from 'app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear';
|
import { addEnqueueRequestedLinear } from 'app/store/middleware/listenerMiddleware/listeners/enqueueRequestedLinear';
|
||||||
import { addEnqueueRequestedNodes } from 'app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes';
|
import { addEnqueueRequestedNodes } from 'app/store/middleware/listenerMiddleware/listeners/enqueueRequestedNodes';
|
||||||
@ -89,6 +90,7 @@ addBatchEnqueuedListener(startAppListening);
|
|||||||
// addStagingAreaImageSavedListener(startAppListening);
|
// addStagingAreaImageSavedListener(startAppListening);
|
||||||
// addCommitStagingAreaImageListener(startAppListening);
|
// addCommitStagingAreaImageListener(startAppListening);
|
||||||
addStagingListeners(startAppListening);
|
addStagingListeners(startAppListening);
|
||||||
|
addCanvasSessionRequestedListener(startAppListening);
|
||||||
|
|
||||||
// Socket.IO
|
// Socket.IO
|
||||||
addGeneratorProgressEventListener(startAppListening);
|
addGeneratorProgressEventListener(startAppListening);
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
import type { AppStartListening } from 'app/store/middleware/listenerMiddleware';
|
||||||
|
import {
|
||||||
|
layerAdded,
|
||||||
|
layerImageAdded,
|
||||||
|
sessionRequested,
|
||||||
|
sessionStarted,
|
||||||
|
} from 'features/controlLayers/store/canvasV2Slice';
|
||||||
|
import { getImageDTO } from 'services/api/endpoints/images';
|
||||||
|
import { assert } from 'tsafe';
|
||||||
|
|
||||||
|
export const addCanvasSessionRequestedListener = (startAppListening: AppStartListening) => {
|
||||||
|
startAppListening({
|
||||||
|
actionCreator: sessionRequested,
|
||||||
|
effect: async (action, { getState, dispatch }) => {
|
||||||
|
const initialImageObject = getState().canvasV2.initialImage.imageObject;
|
||||||
|
if (initialImageObject) {
|
||||||
|
// We have an initial image that needs to be converted to a layer
|
||||||
|
dispatch(layerAdded());
|
||||||
|
const newLayer = getState().canvasV2.layers.entities[0];
|
||||||
|
assert(newLayer, 'Expected new layer to be created');
|
||||||
|
const imageDTO = await getImageDTO(initialImageObject.image.name);
|
||||||
|
assert(imageDTO, 'Unable to fetch initial image DTO');
|
||||||
|
dispatch(layerImageAdded({ id: newLayer.id, imageDTO }));
|
||||||
|
}
|
||||||
|
|
||||||
|
dispatch(sessionStarted());
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
@ -1,13 +1,12 @@
|
|||||||
import { Button } from '@invoke-ai/ui-library';
|
import { Button } from '@invoke-ai/ui-library';
|
||||||
import { useAppDispatch } from 'app/store/storeHooks';
|
import { useAppDispatch } from 'app/store/storeHooks';
|
||||||
import { sessionStarted } from 'features/controlLayers/store/canvasV2Slice';
|
import { sessionRequested } from 'features/controlLayers/store/canvasV2Slice';
|
||||||
import { memo, useCallback } from 'react';
|
import { memo, useCallback } from 'react';
|
||||||
|
|
||||||
export const NewSessionButton = memo(() => {
|
export const NewSessionButton = memo(() => {
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
|
|
||||||
const onClick = useCallback(() => {
|
const onClick = useCallback(() => {
|
||||||
dispatch(sessionStarted());
|
dispatch(sessionRequested());
|
||||||
}, [dispatch]);
|
}, [dispatch]);
|
||||||
|
|
||||||
return <Button onClick={onClick}>New</Button>;
|
return <Button onClick={onClick}>New</Button>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user