mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-06 11:34:59 -05:00
merge all canvas state reducers into one big slice (but with the logic split across files so it's not hell)
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 { layerAdded, 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(layerAdded());
|
|
}, [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';
|