import { useState } from 'react'; import { Tabs, TabPanel, CodeBlock } from '../../components/ui'; import { Env } from '../../models/Env'; import { Config } from '../../models/Config'; import { ConfigTemplateEditor } from './ConfigTemplate'; import { Builder } from '../../builders'; interface ContentProps { config: Config; env: Env; onTemplateSaved: (newContent: string) => void; } export function Content({ config, env, onTemplateSaved }: ContentProps) { const [activeTab, setActiveTab] = useState('env'); // Validate placeholders for warning badge const missingPlaceholders = config.validatePlaceholders(); const hasValidationWarnings = missingPlaceholders.length > 0; const tabs: Array<{ id: string; label: string; badge?: string | number; badgeVariant?: 'warning' | 'danger' }> = [ { id: 'env', label: 'Env' }, { id: 'template', label: 'Content Template', badge: hasValidationWarnings ? '!' : undefined, badgeVariant: hasValidationWarnings ? 'warning' : undefined, }, { id: 'raw', label: 'Raw Template' }, { id: 'test', label: 'Test-filled' }, ]; return (
); } function ContentParams({ env }: { env: Env }) { const xml = Builder.getEnv(env).build(); return (
); } function ContentRaw({ config }: { config: Config; env: Env }) { const envsXml = Builder.getEnvs(config.envs); const templateContent = config.template.content; const xml = ` ${envsXml} `; return (
); } function ContentTest({ config, env }: { config: Config; env: Env }) { const [selectedEnvId, setSelectedEnvId] = useState(env.id ?? 0); const selectedEnv = config.envs.find(e => e.id === selectedEnvId) ?? env; const filledTemplate = fillTemplate(config, selectedEnv); const selectOptions = config.envs.map((e) => ({ value: e.id ?? 0, label: e.name ?? 'Unknown', })); return (
); } function fillTemplate(config: Config, env: Env): string { const defaultEnv = config.envs.find((e) => e.name === 'DEFAULT'); const paramMap = new Map(); // Load DEFAULT values first if (defaultEnv) { for (const param of defaultEnv.params) { if (param.name && param.value !== undefined) { paramMap.set(param.name, param.value); } } } // Override with selected environment values for (const param of env.params) { if (param.name && param.value !== undefined) { paramMap.set(param.name, param.value); } } let filledTemplate = config.template.content; const placeholderRegex = /@(\w+)@/g; filledTemplate = filledTemplate.replace(placeholderRegex, (_, paramName) => { if (paramName === Config.ENV_NAME_PARAM) { return env.name ?? '--NO-VALUE--'; } return paramMap.get(paramName) ?? '--NO-VALUE--'; }); return filledTemplate; }