import type { KeyboardEvent } from 'react'; import type { TFunction } from 'i18next'; import { Modal } from '@/components/ui/Modal'; import { Input } from '@/components/ui/Input'; import { Button } from '@/components/ui/Button'; import { ToggleSwitch } from '@/components/ui/ToggleSwitch'; import { IconTrash2 } from '@/components/ui/icons'; import type { AliasNode, SourceNode } from './ModelMappingDiagramTypes'; import styles from './ModelMappingDiagram.module.scss'; interface RenameAliasModalProps { open: boolean; t: TFunction; value: string; error: string; onChange: (value: string) => void; onClose: () => void; onSubmit: () => void; } export function RenameAliasModal({ open, t, value, error, onChange, onClose, onSubmit }: RenameAliasModalProps) { return ( } > onChange(e.target.value)} onKeyDown={(e: KeyboardEvent) => { if (e.key === 'Enter') onSubmit(); }} error={error} placeholder={t('oauth_model_alias.diagram_rename_placeholder')} autoFocus /> ); } interface AddAliasModalProps { open: boolean; t: TFunction; value: string; error: string; onChange: (value: string) => void; onClose: () => void; onSubmit: () => void; } export function AddAliasModal({ open, t, value, error, onChange, onClose, onSubmit }: AddAliasModalProps) { return ( } > onChange(e.target.value)} onKeyDown={(e: KeyboardEvent) => { if (e.key === 'Enter') onSubmit(); }} error={error} placeholder={t('oauth_model_alias.diagram_add_placeholder')} autoFocus /> ); } interface SettingsAliasModalProps { open: boolean; t: TFunction; alias: string | null; aliasNodes: AliasNode[]; onClose: () => void; onToggleFork: (provider: string, sourceModel: string, alias: string, fork: boolean) => void; onUnlink: (provider: string, sourceModel: string, alias: string) => void; } export function SettingsAliasModal({ open, t, alias, aliasNodes, onClose, onToggleFork, onUnlink }: SettingsAliasModalProps) { return ( {t('common.close')} } > {alias ? ( (() => { const node = aliasNodes.find((n) => n.alias === alias); if (!node || node.sources.length === 0) { return
{t('oauth_model_alias.diagram_settings_empty')}
; } return (
{node.sources.map((source) => { const entry = source.aliases.find((item) => item.alias === alias); const forkEnabled = entry?.fork === true; return (
{source.name} {alias}
{t('oauth_model_alias.alias_fork_label')} onToggleFork(source.provider, source.name, alias, value)} ariaLabel={t('oauth_model_alias.alias_fork_label')} />
); })}
); })() ) : null}
); } interface SettingsSourceModalProps { open: boolean; t: TFunction; source: SourceNode | null; onClose: () => void; onToggleFork: (provider: string, sourceModel: string, alias: string, fork: boolean) => void; onUnlink: (provider: string, sourceModel: string, alias: string) => void; } export function SettingsSourceModal({ open, t, source, onClose, onToggleFork, onUnlink }: SettingsSourceModalProps) { return ( {t('common.close')} } > {source ? ( source.aliases.length === 0 ? (
{t('oauth_model_alias.diagram_settings_empty')}
) : (
{source.aliases.map((entry) => (
{source.name} {entry.alias}
{t('oauth_model_alias.alias_fork_label')} onToggleFork(source.provider, source.name, entry.alias, value)} ariaLabel={t('oauth_model_alias.alias_fork_label')} />
))}
) ) : null}
); }