MCPcopy
hub / github.com/opactorai/Claudable / CreateProjectModal

Function CreateProjectModal

components/modals/CreateProjectModal.tsx:118–989  ·  view source on GitHub ↗
({ open, onClose, onCreated, onOpenGlobalSettings }: CreateProjectModalProps)

Source from the content-addressed store, hash-verified

116}
117
118export default function CreateProjectModal({ open, onClose, onCreated, onOpenGlobalSettings }: CreateProjectModalProps) {
119 const [projectName, setProjectName] = useState('');
120 const [prompt, setPrompt] = useState('');
121 const [selectedCLI, setSelectedCLI] = useState<string>('claude');
122 const [selectedModel, setSelectedModel] = useState<string>(DEFAULT_MODEL_ID);
123 // Fallback is removed but kept for backward compatibility
124 const [fallbackEnabled, setFallbackEnabled] = useState(false);
125 const [useDefaultSettings, setUseDefaultSettings] = useState(true);
126 const [loading, setLoading] = useState(false);
127 const [initializationStep, setInitializationStep] = useState('');
128 const [showInitialization, setShowInitialization] = useState(false);
129 const [initializingProjectId, setInitializingProjectId] = useState<string | null>(null);
130 const [globalSettings, setGlobalSettings] = useState<GlobalSettings | null>(null);
131 const [enabledCLIs, setEnabledCLIs] = useState<CLIOption[]>([]);
132 const [cliStatus, setCLIStatus] = useState<CLIStatus>(() => createCliStatusFallback());
133 const [imageUrl, setImageUrl] = useState('');
134 const [websiteUrl, setWebsiteUrl] = useState('');
135 const [imageError, setImageError] = useState('');
136 const [showImageInput, setShowImageInput] = useState(false);
137 const [showWebsiteInput, setShowWebsiteInput] = useState(false);
138 const [showCLIDropdown, setShowCLIDropdown] = useState(false);
139 const [showModelDropdown, setShowModelDropdown] = useState(false);
140 const router = useRouter();
141
142 const loadGlobalSettings = useCallback(async () => {
143 try {
144 const [settingsResponse, cliStatuses] = await Promise.all([
145 fetch(`${API_BASE}/api/settings/global`),
146 fetchCliStatusSnapshot(),
147 ]);
148
149 setCLIStatus(cliStatuses);
150
151 let settings: GlobalSettings | null = null;
152 if (settingsResponse.ok) {
153 settings = await settingsResponse.json();
154 if (settings?.cli_settings) {
155 for (const [cli, config] of Object.entries(settings.cli_settings)) {
156 if (config && typeof config === 'object' && 'model' in config && config.model) {
157 config.model = sanitizeModel(cli, config.model as string);
158 }
159 }
160 }
161 setGlobalSettings(settings);
162 }
163
164 if (settings) {
165 const enabled = CLI_OPTIONS.filter((cli) => {
166 const isEnabled = settings.cli_settings?.[cli.id]?.enabled !== false;
167 const isInstalled = cliStatuses[cli.id]?.installed !== false;
168 const isAvailable = cli.enabled !== false;
169 return isEnabled && isInstalled && isAvailable;
170 });
171
172 const effectiveCLIs = enabled.length > 0 ? enabled : CLI_OPTIONS.filter((cli) => cli.enabled !== false);
173 setEnabledCLIs(effectiveCLIs);
174
175 const defaultCLI = settings.default_cli || 'claude';

Callers

nothing calls this directly

Calls 6

createCliStatusFallbackFunction · 0.90
fetchCliStatusSnapshotFunction · 0.90
loadGlobalSettingsFunction · 0.85
handleCLIChangeFunction · 0.85
sanitizeModelFunction · 0.70
handleModelChangeFunction · 0.70

Tested by

no test coverage detected