import { useEffect, useState } from "react"; import { faArrowUpRightFromSquare, faBookOpen } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNavigate, useRouterState } from "@tanstack/react-router"; import { TSecretScanningDataSourceForm } from "@app/components/secret-scanning/forms/schemas"; import { Modal, ModalContent } from "@app/components/v2"; import { SecretScanningDataSource, TSecretScanningDataSource } from "@app/hooks/api/secretScanningV2"; import { SecretScanningDataSourceForm } from "./forms"; import { SecretScanningDataSourceModalHeader } from "./SecretScanningDataSourceModalHeader"; import { SecretScanningDataSourceSelect } from "./SecretScanningDataSourceSelect"; type Props = { isOpen: boolean; onOpenChange: (isOpen: boolean) => void; }; type ContentProps = { onComplete: (dataSource: TSecretScanningDataSource) => void; selectedDataSource: SecretScanningDataSource | null; setSelectedDataSource: (selectedDataSource: SecretScanningDataSource | null) => void; initialFormData?: Partial; onCancel: () => void; }; const Content = ({ setSelectedDataSource, selectedDataSource, onCancel, ...props }: ContentProps) => { if (selectedDataSource) { return ( ); } return ; }; export const CreateSecretScanningDataSourceModal = ({ onOpenChange, isOpen, ...props }: Props) => { const [selectedDataSource, setSelectedDataSource] = useState( null ); const [initialFormData, setInitialFormData] = useState>(); const { location: { search: { connectionId, connectionName, ...search }, pathname } } = useRouterState(); const navigate = useNavigate(); useEffect(() => { if (connectionId && connectionName) { const storedFormData = localStorage.getItem("secretScanningDataSourceFormData"); if (!storedFormData) return; let form: Partial = {}; try { form = JSON.parse(storedFormData) as TSecretScanningDataSourceForm; } catch { return; } finally { localStorage.removeItem("secretScanningDataSourceFormData"); } onOpenChange(true); setSelectedDataSource(form.type ?? null); setInitialFormData({ ...form, connection: { id: connectionId, name: connectionName } }); navigate({ to: pathname, search }); } }, [connectionId, connectionName]); const resetModal = () => { setSelectedDataSource(null); setInitialFormData(undefined); }; return ( { if (!open) { resetModal(); } onOpenChange(open); }} > ) : (
Add Data Source
Docs
) } className={selectedDataSource ? "max-w-2xl" : "max-w-3xl"} subTitle={ selectedDataSource ? undefined : "Select a data source to configure secret scanning for." } bodyClassName="overflow-visible" > { resetModal(); onOpenChange(false); }} onCancel={resetModal} selectedDataSource={selectedDataSource} setSelectedDataSource={setSelectedDataSource} initialFormData={initialFormData} {...props} />
); };