mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-04 20:35:00 -05:00
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { Button, Menu, MenuButton, MenuItem, MenuList } from '@invoke-ai/ui-library';
|
|
import { useAppDispatch } from 'app/store/storeHooks';
|
|
import { useAddCALayer, useAddIPALayer } from 'features/controlLayers/hooks/addLayerHooks';
|
|
import { rasterLayerAdded, rgAdded } from 'features/controlLayers/store/canvasV2Slice';
|
|
import { memo, useCallback } from 'react';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { PiPlusBold } from 'react-icons/pi';
|
|
|
|
export const AddLayerButton = memo(() => {
|
|
const { t } = useTranslation();
|
|
const dispatch = useAppDispatch();
|
|
const [addCALayer, isAddCALayerDisabled] = useAddCALayer();
|
|
const [addIPALayer, isAddIPALayerDisabled] = useAddIPALayer();
|
|
const addRGLayer = useCallback(() => {
|
|
dispatch(rgAdded());
|
|
}, [dispatch]);
|
|
const addRasterLayer = useCallback(() => {
|
|
dispatch(rasterLayerAdded({ isSelected: true }));
|
|
}, [dispatch]);
|
|
|
|
return (
|
|
<Menu>
|
|
<MenuButton
|
|
as={Button}
|
|
leftIcon={<PiPlusBold />}
|
|
variant="ghost"
|
|
data-testid="control-layers-add-layer-menu-button"
|
|
>
|
|
{t('controlLayers.addLayer')}
|
|
</MenuButton>
|
|
<MenuList>
|
|
<MenuItem icon={<PiPlusBold />} onClick={addRGLayer}>
|
|
{t('controlLayers.regionalGuidanceLayer')}
|
|
</MenuItem>
|
|
<MenuItem icon={<PiPlusBold />} onClick={addRasterLayer}>
|
|
{t('controlLayers.rasterLayer')}
|
|
</MenuItem>
|
|
<MenuItem icon={<PiPlusBold />} onClick={addCALayer} isDisabled={isAddCALayerDisabled}>
|
|
{t('controlLayers.globalControlAdapterLayer')}
|
|
</MenuItem>
|
|
<MenuItem icon={<PiPlusBold />} onClick={addIPALayer} isDisabled={isAddIPALayerDisabled}>
|
|
{t('controlLayers.globalIPAdapterLayer')}
|
|
</MenuItem>
|
|
</MenuList>
|
|
</Menu>
|
|
);
|
|
});
|
|
|
|
AddLayerButton.displayName = 'AddLayerButton';
|