import React, { useContext, useState, useEffect, ReactElement } from "react"; 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 { HttpClientContext } from "../../context/http-service/HttpClientContext"; import { RealmContext } from "../../context/realm-context/RealmContext"; import { HelpItem } from "../help-enabler/HelpItem"; import { useTranslation } from "react-i18next"; import { useServerInfo } from "../../context/server-info/ServerInfoProvider"; 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 httpClient = useContext(HttpClientContext)!; const { realm } = useContext(RealmContext); 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(() => { let isMounted = true; (async () => { const response = await httpClient.doGet( `/admin/realms/${realm}/clients/${id}/installation/providers/${selected}` ); if (isMounted) { setSnippet(await response.text()); } })(); return () => { isMounted = false; }; }, [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 } )} } > } >