import { useState } from "react"; import { Env } from "../../models/Env"; import Highlight from 'react-highlight' import 'highlight.js/styles/far.css' import { Builder } from "../../builders"; import { Config } from "../../models/Config"; import { ConfigTemplate } from "./ConfigTemplate"; export function Content(props: { config: Config, env: Env, onTemplateSaved: (newContent: string) => void }) { const [selectTab, setTab] = useState(ContentType.Env); return ( <> setTab(id)} />
{selectTab == ContentType.Env ? () : ""} {selectTab == ContentType.Json ? () : ""} {selectTab == ContentType.Raw ? () : ""} {selectTab == ContentType.Test ? () : ""}
); } enum ContentType { Env = 0, Json = 1, Raw = 2, Test = 3 } function ContentTabs(props: { onSelected: (id: ContentType) => void }) { const [selectTab, setSelect] = useState(ContentType.Env); function clickHandler(type: ContentType) { setSelect(type); props.onSelected(type); } function isActive(type: ContentType): string { return type == selectTab ? " active" : " "; } return ( ) } function ContentRaw(props: { config: Config, env: Env }) { const envsXml = Builder.getEnvs(props.config.envs); const templateContent = props.config.template.content; const xml = ` ${envsXml} `; return ( <> {xml} ) } function ContentTest(props: { config: Config, env: Env }) { const [selectedEnvId, setSelectedEnvId] = useState(props.env.id); const selectedEnv = props.config.envs.find(e => e.id === selectedEnvId) ?? props.env; const filledTemplate = fillTemplate(props.config, selectedEnv); return ( <>
{filledTemplate} ) } function fillTemplate(config: Config, env: Env): string { const defaultEnv = config.envs.find(e => e.name === "DEFAULT"); const paramMap = new Map(); // First, load DEFAULT values as fallback if (defaultEnv) { for (const param of defaultEnv.params) { if (param.name && param.value !== undefined) { paramMap.set(param.name, param.value); } } } // Then, override with selected environment values (precedence) 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; } function ContentParams(props: { env: Env }) { const bldr = Builder.getEnv(props.env); return ( {bldr.build()} ) }