import React, { useCallback } from 'react'; import DeploymentOptions from './DeploymentOptions'; import DomainConfiguration from './DomainConfiguration'; import { Toast } from '../shared/Toast'; import { TemplatePreview } from '../shared/TemplatePreview'; // Custom hooks import useDeploymentConfig from '../../hooks/useDeploymentConfig'; import useDomainConfig from '../../hooks/useDomainConfig'; import useDnsVerification from '../../hooks/useDnsVerification'; import useToast from '../../hooks/useToast'; import useFormValidation from '../../hooks/useFormValidation'; /** * Main DomainSetupForm component * @param {Object} props - Component props * @param {string} props.defaultSubdomain - Default SiliconPin subdomain * @returns {JSX.Element} - Rendered component */ export const DomainSetupForm = ({ defaultSubdomain }) => { // Initialize hooks for different concerns const { toast, showToast } = useToast(); // Deployment configuration const deploymentConfig = useDeploymentConfig(); // DNS verification (depends on domain config for reset logic) const dnsVerificationHook = useDnsVerification(showToast); const { dnsVerified, checkDnsConfig, resetAllDnsVerification } = dnsVerificationHook; // Domain configuration (needs DNS reset function) const domainConfig = useDomainConfig({}, resetAllDnsVerification); // Pass the domain config to DNS verification hook for dependency tracking // This is done after initialization to avoid circular dependencies dnsVerificationHook.domainConfig = domainConfig.config; // Form validation based on domain and DNS state const { formValid } = useFormValidation( domainConfig.config, domainConfig.validation, dnsVerified ); // Form submission handler const handleSubmit = useCallback((e) => { e.preventDefault(); if (domainConfig.useCustomDomain && !formValid) { showToast('Please complete domain validation and DNS verification before deploying.'); return; } // In a real app, this would submit the form data to the server console.log({ deploymentType: deploymentConfig.type, appType: deploymentConfig.appType, sampleWebAppType: deploymentConfig.sampleWebAppType, sourceType: deploymentConfig.sourceType, repoUrl: deploymentConfig.repoUrl, deploymentKey: deploymentConfig.deploymentKey, useSubdomain: domainConfig.useSubdomain, useCustomDomain: domainConfig.useCustomDomain, customDomain: domainConfig.customDomain, customSubdomain: domainConfig.customSubdomain, domainType: domainConfig.domainType, dnsMethod: domainConfig.dnsMethod }); showToast('Form submitted successfully!'); }, [ formValid, showToast, deploymentConfig, domainConfig ]); return (
{/* Deployment Options Section */} {/* Domain Configuration Section */} {/* Form Submit Button */}
); }; export default DomainSetupForm;