keycloak-scim/js/apps/admin-ui/src/realm-settings/AddMessageBundleModal.tsx
2023-09-14 11:01:15 +02:00

112 lines
2.8 KiB
TypeScript

import {
Button,
ButtonVariant,
Form,
FormGroup,
Modal,
ModalVariant,
ValidatedOptions,
} from "@patternfly/react-core";
import { SubmitHandler, UseFormReturn } from "react-hook-form";
import { useTranslation } from "react-i18next";
import type { KeyValueType } from "../components/key-value-form/key-value-convert";
import { KeycloakTextInput } from "../components/keycloak-text-input/KeycloakTextInput";
type AddMessageBundleModalProps = {
id?: string;
form: UseFormReturn<BundleForm>;
save: SubmitHandler<BundleForm>;
handleModalToggle: () => void;
};
export type BundleForm = {
key: string;
value: string;
messageBundle: KeyValueType;
};
export const AddMessageBundleModal = ({
handleModalToggle,
save,
form: {
register,
handleSubmit,
formState: { errors },
},
}: AddMessageBundleModalProps) => {
const { t } = useTranslation();
return (
<Modal
variant={ModalVariant.small}
title={t("addMessageBundle")}
isOpen
onClose={handleModalToggle}
actions={[
<Button
data-testid="add-bundle-confirm-button"
key="confirm"
variant="primary"
type="submit"
form="bundle-form"
>
{t("create")}
</Button>,
<Button
id="modal-cancel"
data-testid="cancel"
key="cancel"
variant={ButtonVariant.link}
onClick={() => {
handleModalToggle();
}}
>
{t("cancel")}
</Button>,
]}
>
<Form id="bundle-form" isHorizontal onSubmit={handleSubmit(save)}>
<FormGroup
label={t("key")}
name="key"
fieldId="key-id"
helperTextInvalid={t("required")}
validated={
errors.key ? ValidatedOptions.error : ValidatedOptions.default
}
isRequired
>
<KeycloakTextInput
data-testid="key-input"
autoFocus
id="key-id"
validated={
errors.key ? ValidatedOptions.error : ValidatedOptions.default
}
{...register("key", { required: true })}
/>
</FormGroup>
<FormGroup
label={t("value")}
name="add-value"
fieldId="value-id"
helperTextInvalid={t("required")}
validated={
errors.value ? ValidatedOptions.error : ValidatedOptions.default
}
isRequired
>
<KeycloakTextInput
data-testid="value-input"
id="value-id"
validated={
errors.value ? ValidatedOptions.error : ValidatedOptions.default
}
{...register("value", { required: true })}
/>
</FormGroup>
</Form>
</Modal>
);
};