import { useState } from "react"; import { useTranslation } from "react-i18next"; import { Modal, ModalVariant, Text, TextVariants, } from "@patternfly/react-core"; import { TableComposable, Tbody, Td, Th, Thead, Tr, } from "@patternfly/react-table"; import type { IndexedValidations } from "../../NewAttributeSettings"; import { AddValidatorRoleDialog } from "./AddValidatorRoleDialog"; import useToggle from "../../../utils/useToggle"; import { useServerInfo } from "../../../context/server-info/ServerInfoProvider"; import ComponentTypeRepresentation from "@keycloak/keycloak-admin-client/lib/defs/componentTypeRepresentation"; import ComponentRepresentation from "libs/keycloak-admin-client/lib/defs/componentRepresentation"; export type AddValidatorDialogProps = { selectedValidators: IndexedValidations[]; toggleDialog: () => void; onConfirm: (newValidator: ComponentRepresentation) => void; }; export const AddValidatorDialog = ({ selectedValidators, toggleDialog, onConfirm, }: AddValidatorDialogProps) => { const { t } = useTranslation("realm-settings"); const [selectedValidator, setSelectedValidator] = useState(); const allValidator: ComponentTypeRepresentation[] = useServerInfo().componentTypes?.["org.keycloak.validate.Validator"] || []; const [validators, setValidators] = useState( allValidator.filter( ({ id }) => !selectedValidators.map(({ key }) => key).includes(id) ) ); const [addValidatorRoleModalOpen, toggleModal] = useToggle(); return ( <> {addValidatorRoleModalOpen && ( { onConfirm(newValidator); setValidators( validators.filter(({ id }) => id !== newValidator.id) ); }} open={addValidatorRoleModalOpen} toggleDialog={toggleModal} selected={selectedValidator!} /> )} {validators.length !== 0 ? ( {t("validatorDialogColNames.colName")} {t("validatorDialogColNames.colDescription")} {validators.map((validator) => ( { setSelectedValidator(validator); toggleModal(); }} isHoverable > {validator.id} {validator.helpText} ))} ) : ( {t("realm-settings:emptyValidators")} )} ); };