import classNames from 'classnames'; import { memo, useCallback, useMemo } from 'react'; import { useActiveEnvironment } from '../hooks/useActiveEnvironment'; import { useEnvironments } from '../hooks/useEnvironments'; import type { ButtonProps } from './core/Button'; import { Button } from './core/Button'; import type { DropdownItem } from './core/Dropdown'; import { Dropdown } from './core/Dropdown'; import { Icon } from './core/Icon'; import { useDialog } from './DialogContext'; import { EnvironmentEditDialog } from './EnvironmentEditDialog'; type Props = { className?: string; } & Pick; export const EnvironmentActionsDropdown = memo(function EnvironmentActionsDropdown({ className, ...buttonProps }: Props) { const environments = useEnvironments(); const [activeEnvironment, setActiveEnvironmentId] = useActiveEnvironment(); const dialog = useDialog(); const showEnvironmentDialog = useCallback(() => { dialog.toggle({ id: 'environment-editor', noPadding: true, size: 'lg', className: 'h-[80vh]', render: () => , }); }, [dialog, activeEnvironment]); const items: DropdownItem[] = useMemo( () => [ ...environments.map( (e) => ({ key: e.id, label: e.name, leftSlot: e.id === activeEnvironment?.id ? : , onSelect: async () => { if (e.id !== activeEnvironment?.id) { setActiveEnvironmentId(e.id); } else { setActiveEnvironmentId(null); } }, }), [activeEnvironment?.id], ), ...((environments.length > 0 ? [{ type: 'separator', label: 'Environments' }] : []) as DropdownItem[]), { key: 'edit', label: 'Manage Environments', hotKeyAction: 'environmentEditor.toggle', leftSlot: , onSelect: showEnvironmentDialog, }, ], [activeEnvironment?.id, environments, setActiveEnvironmentId, showEnvironmentDialog], ); return ( ); });