import { CheckIcon, ChevronDownIcon, ChevronRightIcon, DatabaseIcon, CopyIcon, LoaderCircleIcon, MoreHorizontalIcon, PencilLineIcon, PlusIcon, Trash2Icon, } from "lucide-react" import { useTranslation } from "react-i18next" import { Badge } from "@/components/ui/badge" import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { cn } from "@/lib/utils" import { providerStoreActions } from "@/store" import { ProviderActiveUploaderBadge, ProviderDefaultConfigBadge, } from "./provider-status-badges" import type { ProviderDraftConfigItem, ProviderUploaderConfigItem, ProviderUploaderSummary, } from "./types" type SidebarConfigItem = ProviderUploaderConfigItem | ProviderDraftConfigItem interface ProviderSidebarConfigItemRowProps { uploader: ProviderUploaderSummary config: SidebarConfigItem defaultConfigId: string | undefined isActiveUploader: boolean selectedConfigId: string | null canDeletePersistedConfig: boolean canCreateConfig: boolean onSelectConfig: (uploaderId: string, configId: string) => void onRenameIntent: (uploaderId: string, configId: string, configName: string) => void onCopyIntent: (uploaderId: string, configId: string, configName: string) => void onDeleteIntent: (uploaderId: string, configId: string) => void } interface ProviderSidebarUploaderSectionProps { uploader: ProviderUploaderSummary persistedConfigs: ProviderUploaderConfigItem[] visibleConfigs: SidebarConfigItem[] defaultConfigId: string | undefined isLoadingConfigs: boolean isActiveUploader: boolean isExpanded: boolean hasSearch: boolean canCreateConfig: boolean selectedConfigId: string | null onSelectUploader: (uploaderId: string) => void onSetDefaultUploader: (uploaderId: string) => Promise onSelectConfig: (uploaderId: string, configId: string) => void onCreateIntent: (uploaderId: string) => void onRenameIntent: (uploaderId: string, configId: string, configName: string) => void onCopyIntent: (uploaderId: string, configId: string, configName: string) => void onDeleteIntent: (uploaderId: string, configId: string) => void } function isDraftConfig(config: SidebarConfigItem): config is ProviderDraftConfigItem { return "_isDraft" in config && config._isDraft === true } function ProviderSidebarConfigItemRow({ uploader, config, defaultConfigId, isActiveUploader, selectedConfigId, canDeletePersistedConfig, canCreateConfig, onSelectConfig, onRenameIntent, onCopyIntent, onDeleteIntent, }: ProviderSidebarConfigItemRowProps) { const { t } = useTranslation() const isDraft = isDraftConfig(config) const isSelected = isActiveUploader && selectedConfigId === config._id const isDefault = !isDraft && defaultConfigId === config._id return (
onRenameIntent(uploader.id, config._id, config._configName)} > {t("CONFIG_RENAME")} {!isDraft ? ( onCopyIntent(uploader.id, config._id, config._configName)} > {t("COPY")} ) : null} onDeleteIntent(uploader.id, config._id)} > {t("DELETE")}
) } export function ProviderSidebarUploaderSection({ uploader, persistedConfigs, visibleConfigs, defaultConfigId, isLoadingConfigs, isActiveUploader, isExpanded, hasSearch, canCreateConfig, selectedConfigId, onSelectUploader, onSetDefaultUploader, onSelectConfig, onCreateIntent, onRenameIntent, onCopyIntent, onDeleteIntent, }: ProviderSidebarUploaderSectionProps) { const { t } = useTranslation() const canDeletePersistedConfig = persistedConfigs.length > 1 return (
onSetDefaultUploader(uploader.id)} > {t("SETTINGS_SET_DEFAULT_PICBED")}
{isExpanded ? (
{isLoadingConfigs ? (
) : null} {!isLoadingConfigs ? visibleConfigs.map((config) => ( )) : null} {!hasSearch ? ( canCreateConfig ? ( ) : ( {t("PROVIDER_CREATE_CONFIG_DISABLED_EMPTY_SCHEMA")} ) ) : null}
) : null}
) }