mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-15 11:45:28 -05:00
85 lines
3.2 KiB
TypeScript
85 lines
3.2 KiB
TypeScript
import { useAppSelector } from 'app/store/storeHooks';
|
|
import { useIsRegionFocused } from 'common/hooks/focus';
|
|
import { useAssertSingleton } from 'common/hooks/useAssertSingleton';
|
|
import { selectIsStaging } from 'features/controlLayers/store/canvasStagingAreaSlice';
|
|
import { useImageActions } from 'features/gallery/hooks/useImageActions';
|
|
import { selectLastSelectedImage } from 'features/gallery/store/gallerySelectors';
|
|
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
|
|
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
|
|
import { memo } from 'react';
|
|
import type { ImageDTO } from 'services/api/types';
|
|
|
|
export const GlobalImageHotkeys = memo(() => {
|
|
useAssertSingleton('GlobalImageHotkeys');
|
|
const imageDTO = useAppSelector(selectLastSelectedImage);
|
|
|
|
if (!imageDTO) {
|
|
return null;
|
|
}
|
|
|
|
return <GlobalImageHotkeysInternal imageDTO={imageDTO} />;
|
|
});
|
|
|
|
GlobalImageHotkeys.displayName = 'GlobalImageHotkeys';
|
|
|
|
const GlobalImageHotkeysInternal = memo(({ imageDTO }: { imageDTO: ImageDTO }) => {
|
|
const isGalleryFocused = useIsRegionFocused('gallery');
|
|
const isViewerFocused = useIsRegionFocused('viewer');
|
|
const imageActions = useImageActions(imageDTO);
|
|
const isStaging = useAppSelector(selectIsStaging);
|
|
const isUpscalingEnabled = useFeatureStatus('upscaling');
|
|
|
|
useRegisteredHotkeys({
|
|
id: 'loadWorkflow',
|
|
category: 'viewer',
|
|
callback: imageActions.loadWorkflow,
|
|
options: { enabled: isGalleryFocused || isViewerFocused },
|
|
dependencies: [imageActions.loadWorkflow, isGalleryFocused, isViewerFocused],
|
|
});
|
|
useRegisteredHotkeys({
|
|
id: 'recallAll',
|
|
category: 'viewer',
|
|
callback: imageActions.recallAll,
|
|
options: { enabled: !isStaging && (isGalleryFocused || isViewerFocused) },
|
|
dependencies: [imageActions.recallAll, isStaging, isGalleryFocused, isViewerFocused],
|
|
});
|
|
useRegisteredHotkeys({
|
|
id: 'recallSeed',
|
|
category: 'viewer',
|
|
callback: imageActions.recallSeed,
|
|
options: { enabled: isGalleryFocused || isViewerFocused },
|
|
dependencies: [imageActions.recallSeed, isGalleryFocused, isViewerFocused],
|
|
});
|
|
useRegisteredHotkeys({
|
|
id: 'recallPrompts',
|
|
category: 'viewer',
|
|
callback: imageActions.recallPrompts,
|
|
options: { enabled: isGalleryFocused || isViewerFocused },
|
|
dependencies: [imageActions.recallPrompts, isGalleryFocused, isViewerFocused],
|
|
});
|
|
useRegisteredHotkeys({
|
|
id: 'remix',
|
|
category: 'viewer',
|
|
callback: imageActions.remix,
|
|
options: { enabled: isGalleryFocused || isViewerFocused },
|
|
dependencies: [imageActions.remix, isGalleryFocused, isViewerFocused],
|
|
});
|
|
useRegisteredHotkeys({
|
|
id: 'useSize',
|
|
category: 'viewer',
|
|
callback: imageActions.recallSize,
|
|
options: { enabled: !isStaging && (isGalleryFocused || isViewerFocused) },
|
|
dependencies: [imageActions.recallSize, isStaging, isGalleryFocused, isViewerFocused],
|
|
});
|
|
useRegisteredHotkeys({
|
|
id: 'runPostprocessing',
|
|
category: 'viewer',
|
|
callback: imageActions.upscale,
|
|
options: { enabled: isUpscalingEnabled && isViewerFocused },
|
|
dependencies: [isUpscalingEnabled, imageDTO, isViewerFocused],
|
|
});
|
|
return null;
|
|
});
|
|
|
|
GlobalImageHotkeysInternal.displayName = 'GlobalImageHotkeysInternal';
|