import { Box, Flex, FormControl, FormLabel, Icon, IconButton, Switch } from '@invoke-ai/ui-library'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import ParamControlAdapterModel from 'features/controlAdapters/components/parameters/ParamControlAdapterModel'; import { useControlAdapterIsEnabled } from 'features/controlAdapters/hooks/useControlAdapterIsEnabled'; import { useControlAdapterType } from 'features/controlAdapters/hooks/useControlAdapterType'; import { controlAdapterDuplicated, controlAdapterIsEnabledChanged, controlAdapterRemoved, } from 'features/controlAdapters/store/controlAdaptersSlice'; import { activeTabNameSelector } from 'features/ui/store/uiSelectors'; import type { ChangeEvent } from 'react'; import { memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { PiCaretUpBold, PiCopyBold, PiTrashSimpleBold } from 'react-icons/pi'; import { useToggle } from 'react-use'; import ControlAdapterImagePreview from './ControlAdapterImagePreview'; import ControlAdapterProcessorComponent from './ControlAdapterProcessorComponent'; import ControlAdapterShouldAutoConfig from './ControlAdapterShouldAutoConfig'; import ControlNetCanvasImageImports from './imports/ControlNetCanvasImageImports'; import { ParamControlAdapterBeginEnd } from './parameters/ParamControlAdapterBeginEnd'; import ParamControlAdapterControlMode from './parameters/ParamControlAdapterControlMode'; import ParamControlAdapterProcessorSelect from './parameters/ParamControlAdapterProcessorSelect'; import ParamControlAdapterResizeMode from './parameters/ParamControlAdapterResizeMode'; import ParamControlAdapterWeight from './parameters/ParamControlAdapterWeight'; const ControlAdapterConfig = (props: { id: string; number: number }) => { const { id, number } = props; const controlAdapterType = useControlAdapterType(id); const dispatch = useAppDispatch(); const { t } = useTranslation(); const activeTabName = useAppSelector(activeTabNameSelector); const isEnabled = useControlAdapterIsEnabled(id); const [isExpanded, toggleIsExpanded] = useToggle(false); const handleDelete = useCallback(() => { dispatch(controlAdapterRemoved({ id })); }, [id, dispatch]); const handleDuplicate = useCallback(() => { dispatch(controlAdapterDuplicated(id)); }, [id, dispatch]); const handleToggleIsEnabled = useCallback( (e: ChangeEvent) => { dispatch( controlAdapterIsEnabledChanged({ id, isEnabled: e.target.checked, }) ); }, [id, dispatch] ); if (!controlAdapterType) { return null; } return ( {t(`controlnet.${controlAdapterType}`, { number })} {activeTabName === 'unifiedCanvas' && } } /> } /> } /> {!isExpanded && ( )} {isExpanded && ( <> )} ); }; export default memo(ControlAdapterConfig);