import { Menu, MenuButton, MenuItem, MenuList } from '@invoke-ai/ui-library'; import { useAppStore } from 'app/store/nanostores/store'; import { useAppSelector } from 'app/store/storeHooks'; import { SubMenuButtonContent, useSubMenu } from 'common/hooks/useSubMenu'; import { NewLayerIcon } from 'features/controlLayers/components/common/icons'; import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy'; import { selectIsFLUX, selectIsSD3 } from 'features/controlLayers/store/paramsSlice'; import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer'; import { useImageDTOContext } from 'features/gallery/contexts/ImageDTOContext'; import { sentImageToCanvas } from 'features/gallery/store/actions'; import { createNewCanvasEntityFromImage, newCanvasFromImage } from 'features/imageActions/actions'; import { toast } from 'features/toast/toast'; import { setActiveTab } from 'features/ui/store/uiSlice'; import { memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { PiFileBold, PiPlusBold } from 'react-icons/pi'; export const ImageMenuItemNewFromImageSubMenu = memo(() => { const { t } = useTranslation(); const subMenu = useSubMenu(); const store = useAppStore(); const imageDTO = useImageDTOContext(); const imageViewer = useImageViewer(); const isBusy = useCanvasIsBusy(); const isFLUX = useAppSelector(selectIsFLUX); const isSD3 = useAppSelector(selectIsSD3); const onClickNewCanvasWithRasterLayerFromImage = useCallback(() => { const { dispatch, getState } = store; newCanvasFromImage({ imageDTO, type: 'raster_layer', dispatch, getState }); dispatch(setActiveTab('canvas')); imageViewer.close(); toast({ id: 'SENT_TO_CANVAS', title: t('toast.sentToCanvas'), status: 'success', }); }, [imageDTO, imageViewer, store, t]); const onClickNewCanvasWithControlLayerFromImage = useCallback(() => { const { dispatch, getState } = store; newCanvasFromImage({ imageDTO, type: 'control_layer', dispatch, getState }); dispatch(setActiveTab('canvas')); imageViewer.close(); toast({ id: 'SENT_TO_CANVAS', title: t('toast.sentToCanvas'), status: 'success', }); }, [imageDTO, imageViewer, store, t]); const onClickNewRasterLayerFromImage = useCallback(() => { const { dispatch, getState } = store; createNewCanvasEntityFromImage({ imageDTO, type: 'raster_layer', dispatch, getState }); dispatch(sentImageToCanvas()); dispatch(setActiveTab('canvas')); imageViewer.close(); toast({ id: 'SENT_TO_CANVAS', title: t('toast.sentToCanvas'), status: 'success', }); }, [imageDTO, imageViewer, store, t]); const onClickNewControlLayerFromImage = useCallback(() => { const { dispatch, getState } = store; createNewCanvasEntityFromImage({ imageDTO, type: 'control_layer', dispatch, getState }); dispatch(sentImageToCanvas()); dispatch(setActiveTab('canvas')); imageViewer.close(); toast({ id: 'SENT_TO_CANVAS', title: t('toast.sentToCanvas'), status: 'success', }); }, [imageDTO, imageViewer, store, t]); const onClickNewInpaintMaskFromImage = useCallback(() => { const { dispatch, getState } = store; createNewCanvasEntityFromImage({ imageDTO, type: 'inpaint_mask', dispatch, getState }); dispatch(sentImageToCanvas()); dispatch(setActiveTab('canvas')); imageViewer.close(); toast({ id: 'SENT_TO_CANVAS', title: t('toast.sentToCanvas'), status: 'success', }); }, [imageDTO, imageViewer, store, t]); const onClickNewRegionalGuidanceFromImage = useCallback(() => { const { dispatch, getState } = store; createNewCanvasEntityFromImage({ imageDTO, type: 'regional_guidance', dispatch, getState }); dispatch(sentImageToCanvas()); dispatch(setActiveTab('canvas')); imageViewer.close(); toast({ id: 'SENT_TO_CANVAS', title: t('toast.sentToCanvas'), status: 'success', }); }, [imageDTO, imageViewer, store, t]); return ( }>
); }); ImageMenuItemNewFromImageSubMenu.displayName = 'ImageMenuItemNewFromImageSubMenu';