"use client"; import { CodeBlock, Pre } from "fumadocs-ui/components/codeblock"; import defaultMdxComponents from "fumadocs-ui/mdx"; import { BarChartBigIcon, BlocksIcon, SailboatIcon, TerminalSquareIcon, } from "lucide-react"; import { useEffect, useState } from "react"; import PresetsBuilderSection from "./builder-sections/presets"; import CKANVersionBuilderSection from "./builder-sections/ckan-version"; import CKANExtensionsBuilderSection from "./builder-sections/ckan-extensions"; import FeaturesBuilderSection from "./builder-sections/features"; export type Config = { preset: string | undefined; ckanVersion: string; extensions: string[]; features: string[]; }; export const selectedCardClasses = "bg-blue-100 dark:bg-blue-950 border-blue-300 dark:border-blue-900 border-2"; export default function Builder() { const { Card, Cards } = defaultMdxComponents; const [command, setCommand] = useState("./ckan-devstaller"); const [config, setConfig] = useState({ preset: "ckan-only", ckanVersion: "2.11.3", extensions: [], features: [], }); // Update command string when user changes configuration useEffect(() => { let presetString = ""; if (config.extensions.length === 0 && config.features.length === 0) presetString = ` \\\n--preset ckan-only`; else if ( config.ckanVersion === "2.11.3" && config.extensions.includes("DataPusher+") && config.extensions.includes("ckanext-scheming") && config.extensions.includes("DataStore") && config.features.includes("enable-ssh") ) presetString = ` \\\n--preset dathere-default`; const ckanVersionString = `--ckan-version ${config.ckanVersion}`; const extensionsString = config.extensions.length > 0 ? ` \\\n--extensions ${config.extensions.join(" ")}` : undefined; const featuresString = config.features.length > 0 ? ` \\\n--features ${config.features.join(" ")}` : undefined; setCommand( `./ckan-devstaller${presetString} \\ ${ckanVersionString}${extensionsString ? extensionsString : ""}${featuresString ? featuresString : ""}`, ); }, [config]); return (

ckan-devstaller command

{command}

Selected configuration

CKAN version: {config.ckanVersion}

{config.extensions.length > 0 && ( <> Extensions:
    {config.extensions.map((extension) => (
  • {extension}
  • ))}
)} {config.features.length > 0 && ( <> Features:
    {config.features.map((feature) => (
  • {feature}
  • ))}
)}

Configuration options

); }