mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(ui): restore save/copy/download/merge functionality
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
import { RootState } from 'app/store/store';
|
||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||
import IAIIconButton from 'common/components/IAIIconButton';
|
||||
import { canvasCopiedToClipboard } from 'features/canvas/store/actions';
|
||||
import { isStagingSelector } from 'features/canvas/store/canvasSelectors';
|
||||
import { mergeAndUploadCanvas } from 'features/canvas/store/thunks/mergeAndUploadCanvas';
|
||||
import { getCanvasBaseLayer } from 'features/canvas/util/konvaInstanceProvider';
|
||||
import { useHotkeys } from 'react-hotkeys-hook';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@ -16,10 +16,6 @@ export default function UnifiedCanvasCopyToClipboard() {
|
||||
(state: RootState) => state.system.isProcessing
|
||||
);
|
||||
|
||||
const shouldCropToBoundingBoxOnSave = useAppSelector(
|
||||
(state: RootState) => state.canvas.shouldCropToBoundingBoxOnSave
|
||||
);
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
const { t } = useTranslation();
|
||||
|
||||
@ -36,13 +32,7 @@ export default function UnifiedCanvasCopyToClipboard() {
|
||||
);
|
||||
|
||||
const handleCopyImageToClipboard = () => {
|
||||
dispatch(
|
||||
mergeAndUploadCanvas({
|
||||
cropVisible: shouldCropToBoundingBoxOnSave ? false : true,
|
||||
cropToBoundingBox: shouldCropToBoundingBoxOnSave,
|
||||
shouldCopy: true,
|
||||
})
|
||||
);
|
||||
dispatch(canvasCopiedToClipboard());
|
||||
};
|
||||
|
||||
return (
|
||||
|
@ -1,8 +1,7 @@
|
||||
import { RootState } from 'app/store/store';
|
||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||
import IAIIconButton from 'common/components/IAIIconButton';
|
||||
import { canvasDownloadedAsImage } from 'features/canvas/store/actions';
|
||||
import { isStagingSelector } from 'features/canvas/store/canvasSelectors';
|
||||
import { mergeAndUploadCanvas } from 'features/canvas/store/thunks/mergeAndUploadCanvas';
|
||||
import { getCanvasBaseLayer } from 'features/canvas/util/konvaInstanceProvider';
|
||||
import { useHotkeys } from 'react-hotkeys-hook';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@ -16,14 +15,6 @@ export default function UnifiedCanvasDownloadImage() {
|
||||
|
||||
const isStaging = useAppSelector(isStagingSelector);
|
||||
|
||||
const isProcessing = useAppSelector(
|
||||
(state: RootState) => state.system.isProcessing
|
||||
);
|
||||
|
||||
const shouldCropToBoundingBoxOnSave = useAppSelector(
|
||||
(state: RootState) => state.canvas.shouldCropToBoundingBoxOnSave
|
||||
);
|
||||
|
||||
useHotkeys(
|
||||
['shift+d'],
|
||||
() => {
|
||||
@ -33,18 +24,13 @@ export default function UnifiedCanvasDownloadImage() {
|
||||
enabled: () => !isStaging,
|
||||
preventDefault: true,
|
||||
},
|
||||
[canvasBaseLayer, isProcessing]
|
||||
[canvasBaseLayer]
|
||||
);
|
||||
|
||||
const handleDownloadAsImage = () => {
|
||||
dispatch(
|
||||
mergeAndUploadCanvas({
|
||||
cropVisible: shouldCropToBoundingBoxOnSave ? false : true,
|
||||
cropToBoundingBox: shouldCropToBoundingBoxOnSave,
|
||||
shouldDownload: true,
|
||||
})
|
||||
);
|
||||
dispatch(canvasDownloadedAsImage());
|
||||
};
|
||||
|
||||
return (
|
||||
<IAIIconButton
|
||||
aria-label={`${t('unifiedCanvas.downloadAsImage')} (Shift+D)`}
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { RootState } from 'app/store/store';
|
||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||
import IAIIconButton from 'common/components/IAIIconButton';
|
||||
import { canvasMerged } from 'features/canvas/store/actions';
|
||||
import { isStagingSelector } from 'features/canvas/store/canvasSelectors';
|
||||
import { mergeAndUploadCanvas } from 'features/canvas/store/thunks/mergeAndUploadCanvas';
|
||||
import { getCanvasBaseLayer } from 'features/canvas/util/konvaInstanceProvider';
|
||||
@ -30,12 +31,7 @@ export default function UnifiedCanvasMergeVisible() {
|
||||
);
|
||||
|
||||
const handleMergeVisible = () => {
|
||||
dispatch(
|
||||
mergeAndUploadCanvas({
|
||||
cropVisible: false,
|
||||
shouldSetAsInitialImage: true,
|
||||
})
|
||||
);
|
||||
dispatch(canvasMerged());
|
||||
};
|
||||
return (
|
||||
<IAIIconButton
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { RootState } from 'app/store/store';
|
||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
||||
import IAIIconButton from 'common/components/IAIIconButton';
|
||||
import { canvasSavedToGallery } from 'features/canvas/store/actions';
|
||||
import { isStagingSelector } from 'features/canvas/store/canvasSelectors';
|
||||
import { mergeAndUploadCanvas } from 'features/canvas/store/thunks/mergeAndUploadCanvas';
|
||||
import { getCanvasBaseLayer } from 'features/canvas/util/konvaInstanceProvider';
|
||||
import { useHotkeys } from 'react-hotkeys-hook';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@ -14,9 +14,6 @@ export default function UnifiedCanvasSaveToGallery() {
|
||||
const isProcessing = useAppSelector(
|
||||
(state: RootState) => state.system.isProcessing
|
||||
);
|
||||
const shouldCropToBoundingBoxOnSave = useAppSelector(
|
||||
(state: RootState) => state.canvas.shouldCropToBoundingBoxOnSave
|
||||
);
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
const { t } = useTranslation();
|
||||
@ -34,14 +31,9 @@ export default function UnifiedCanvasSaveToGallery() {
|
||||
);
|
||||
|
||||
const handleSaveToGallery = () => {
|
||||
dispatch(
|
||||
mergeAndUploadCanvas({
|
||||
cropVisible: shouldCropToBoundingBoxOnSave ? false : true,
|
||||
cropToBoundingBox: shouldCropToBoundingBoxOnSave,
|
||||
shouldSaveToGallery: true,
|
||||
})
|
||||
);
|
||||
dispatch(canvasSavedToGallery());
|
||||
};
|
||||
|
||||
return (
|
||||
<IAIIconButton
|
||||
aria-label={`${t('unifiedCanvas.saveToGallery')} (Shift+S)`}
|
||||
|
Reference in New Issue
Block a user