Spaces:
Configuration error
Configuration error
| import React, { FormEvent } from 'react' | |
| import { useRecoilValue } from 'recoil' | |
| import { CursorArrowRaysIcon, GifIcon } from '@heroicons/react/24/outline' | |
| import { | |
| BoxModelIcon, | |
| ChevronRightIcon, | |
| FaceIcon, | |
| HobbyKnifeIcon, | |
| MixIcon, | |
| } from '@radix-ui/react-icons' | |
| import { useToggle } from 'react-use' | |
| import * as DropdownMenu from '@radix-ui/react-dropdown-menu' | |
| import { | |
| fileState, | |
| isProcessingState, | |
| serverConfigState, | |
| } from '../../store/Atoms' | |
| import emitter from '../../event' | |
| import Button from '../shared/Button' | |
| export enum PluginName { | |
| RemoveBG = 'RemoveBG', | |
| RealESRGAN = 'RealESRGAN', | |
| GFPGAN = 'GFPGAN', | |
| RestoreFormer = 'RestoreFormer', | |
| InteractiveSeg = 'InteractiveSeg', | |
| MakeGIF = 'MakeGIF', | |
| } | |
| const pluginMap = { | |
| [PluginName.RemoveBG]: { | |
| IconClass: HobbyKnifeIcon, | |
| showName: 'RemoveBG', | |
| }, | |
| [PluginName.RealESRGAN]: { | |
| IconClass: BoxModelIcon, | |
| showName: 'RealESRGAN 4x', | |
| }, | |
| [PluginName.GFPGAN]: { | |
| IconClass: FaceIcon, | |
| showName: 'GFPGAN', | |
| }, | |
| [PluginName.RestoreFormer]: { | |
| IconClass: FaceIcon, | |
| showName: 'RestoreFormer', | |
| }, | |
| [PluginName.InteractiveSeg]: { | |
| IconClass: CursorArrowRaysIcon, | |
| showName: 'Interactive Seg', | |
| }, | |
| [PluginName.MakeGIF]: { | |
| IconClass: GifIcon, | |
| showName: 'Make GIF', | |
| }, | |
| } | |
| const Plugins = () => { | |
| // const [open, toggleOpen] = useToggle(true) | |
| const serverConfig = useRecoilValue(serverConfigState) | |
| const file = useRecoilValue(fileState) | |
| const isProcessing = useRecoilValue(isProcessingState) | |
| const disabled = !file || isProcessing | |
| const onPluginClick = (pluginName: string) => { | |
| if (!disabled) { | |
| emitter.emit(pluginName) | |
| } | |
| } | |
| const onRealESRGANClick = (upscale: number) => { | |
| if (!disabled) { | |
| emitter.emit(PluginName.RealESRGAN, { upscale }) | |
| } | |
| } | |
| const renderRealESRGANPlugin = () => { | |
| return ( | |
| <DropdownMenu.Sub key="RealESRGAN"> | |
| <DropdownMenu.SubTrigger | |
| className="DropdownMenuSubTrigger" | |
| disabled={disabled} | |
| > | |
| <BoxModelIcon /> | |
| RealESRGAN | |
| <div className="RightSlot"> | |
| <ChevronRightIcon /> | |
| </div> | |
| </DropdownMenu.SubTrigger> | |
| <DropdownMenu.Portal> | |
| <DropdownMenu.SubContent className="DropdownMenuSubContent"> | |
| <DropdownMenu.Item | |
| className="DropdownMenuItem" | |
| onClick={() => onRealESRGANClick(2)} | |
| > | |
| upscale 2x | |
| </DropdownMenu.Item> | |
| <DropdownMenu.Item | |
| className="DropdownMenuItem" | |
| onClick={() => onRealESRGANClick(4)} | |
| disabled={disabled} | |
| > | |
| upscale 4x | |
| </DropdownMenu.Item> | |
| </DropdownMenu.SubContent> | |
| </DropdownMenu.Portal> | |
| </DropdownMenu.Sub> | |
| ) | |
| } | |
| const renderPlugins = () => { | |
| return serverConfig.plugins.map((plugin: string) => { | |
| const { IconClass } = pluginMap[plugin as PluginName] | |
| if (plugin === PluginName.RealESRGAN) { | |
| return renderRealESRGANPlugin() | |
| } | |
| return ( | |
| <DropdownMenu.Item | |
| key={plugin} | |
| className="DropdownMenuItem" | |
| onClick={() => onPluginClick(plugin)} | |
| disabled={disabled} | |
| > | |
| <IconClass style={{ width: 15 }} /> | |
| {plugin} | |
| </DropdownMenu.Item> | |
| ) | |
| }) | |
| } | |
| if (serverConfig.plugins.length === 0) { | |
| return null | |
| } | |
| return ( | |
| <DropdownMenu.Root modal={false}> | |
| <DropdownMenu.Trigger className="plugins"> | |
| <Button icon={<MixIcon />} /> | |
| </DropdownMenu.Trigger> | |
| <DropdownMenu.Portal> | |
| <DropdownMenu.Content | |
| className="DropdownMenuContent" | |
| side="bottom" | |
| align="start" | |
| sideOffset={5} | |
| onCloseAutoFocus={event => event.preventDefault()} | |
| > | |
| {renderPlugins()} | |
| </DropdownMenu.Content> | |
| </DropdownMenu.Portal> | |
| </DropdownMenu.Root> | |
| ) | |
| } | |
| export default Plugins | |