import { useQueryClient } from "@tanstack/react-query"; import { useState } from "react"; import apiService from "../../API/apiService"; import { useAppContext } from "../../context/AppContext"; import useAlertError from "../../hooks/useAlertError"; import useCustomSearchParams from "../../hooks/useCustomSearchParams"; import useNavigateWithSearchParams from "../../hooks/useNavigateWithSearchParams"; import Spinner from "../Spinner"; import Modal from "./Modal"; interface FormKeys { name: string; url: string; username: string; password: string; } type AddRepositoryModalProps = { isOpen: boolean; onClose: () => void; }; function AddRepositoryModal({ isOpen, onClose }: AddRepositoryModalProps) { const { searchParamsObject: { repo_url, repo_name }, } = useCustomSearchParams(); const [formData, setFormData] = useState({ name: repo_name ?? "", url: repo_url ?? "", username: "", password: "", }); const [isLoading, setIsLoading] = useState(false); const alertError = useAlertError(); const { setSelectedRepo } = useAppContext(); const navigate = useNavigateWithSearchParams(); const queryClient = useQueryClient(); const addRepository = async () => { const body = new FormData(); body.append("name", formData.name ?? ""); body.append("url", formData.url ?? ""); body.append("username", formData.username ?? ""); body.append("password", formData.password ?? ""); setIsLoading(true); try { await apiService.fetchWithDefaults("/api/helm/repositories", { method: "POST", body, }); setIsLoading(false); onClose(); await queryClient.invalidateQueries({ queryKey: ["helm", "repositories"], }); setSelectedRepo(formData.name || ""); const path = `/repository/${formData.name}`; await navigate(path, { replace: true, }); } catch (err) { alertError.setShowErrorModal({ title: "Failed to add repo", msg: err instanceof Error ? err.message : String(err), }); } finally { setIsLoading(false); setFormData({ name: "", url: "", username: "", password: "", }); onClose(); } }; const handleAddRepository = () => { void addRepository(); }; return ( } >
); } export default AddRepositoryModal;