import React, { useState, useEffect, ReactElement, useContext } from "react"; import { useErrorHandler } from "react-error-boundary"; import { Alert, AlertVariant, Form, FormGroup, ModalVariant, Select, SelectOption, SelectVariant, Stack, StackItem, TextArea, } from "@patternfly/react-core"; import FileSaver from "file-saver"; import { ConfirmDialogModal } from "../confirm-dialog/ConfirmDialog"; import { HelpItem } from "../help-enabler/HelpItem"; import { useTranslation } from "react-i18next"; import { useServerInfo } from "../../context/server-info/ServerInfoProvider"; import { useAdminClient, asyncStateFetch, } from "../../context/auth/AdminClient"; import { HelpContext } from "../help-enabler/HelpHeader"; export type DownloadDialogProps = { id: string; protocol?: string; }; type DownloadDialogModalProps = DownloadDialogProps & { open: boolean; toggleDialog: () => void; }; export const useDownloadDialog = ( props: DownloadDialogProps ): [() => void, () => ReactElement] => { const [show, setShow] = useState(false); function toggleDialog() { setShow((show) => !show); } const Dialog = () => ( ); return [toggleDialog, Dialog]; }; export const DownloadDialog = ({ id, open, toggleDialog, protocol = "openid-connect", }: DownloadDialogModalProps) => { const adminClient = useAdminClient(); const handleError = useErrorHandler(); const { t } = useTranslation("common"); const { enabled } = useContext(HelpContext); const serverInfo = useServerInfo(); const configFormats = serverInfo.clientInstallations![protocol]; const [selected, setSelected] = useState( configFormats[configFormats.length - 1].id ); const [snippet, setSnippet] = useState(""); const [openType, setOpenType] = useState(false); useEffect(() => { return asyncStateFetch( async () => { const snippet = await adminClient.clients.getInstallationProviders({ id, providerId: selected, }); if (typeof snippet === "string") { return snippet; } else { return JSON.stringify(snippet, undefined, 3); } }, (snippet) => setSnippet(snippet), handleError ); }, [selected]); return ( { const config = configFormats.find((config) => config.id === selected)!; FileSaver.saveAs( new Blob([snippet], { type: config.mediaType }), config.filename ); }} open={open} toggleDialog={toggleDialog} variant={ModalVariant.medium} >
{enabled && ( { configFormats.find( (configFormat) => configFormat.id === selected )?.helpText } )} } > } >