({
open,
secret,
isSubmitting,
returnFocusElement,
onClose,
onCreateSecret,
onUpdateSecret,
})
| 57 | export const SAVED_SECRET_VALUE_DISPLAY = "••••••••••••••••••••"; |
| 58 | |
| 59 | export const SecretDialog: FC<SecretDialogProps> = ({ |
| 60 | open, |
| 61 | secret, |
| 62 | isSubmitting, |
| 63 | returnFocusElement, |
| 64 | onClose, |
| 65 | onCreateSecret, |
| 66 | onUpdateSecret, |
| 67 | }) => { |
| 68 | const isEdit = Boolean(secret); |
| 69 | const initialValues = secret |
| 70 | ? { |
| 71 | name: secret.name, |
| 72 | value: "", |
| 73 | description: secret.description, |
| 74 | env_name: secret.env_name, |
| 75 | file_path: secret.file_path, |
| 76 | } |
| 77 | : emptyValues; |
| 78 | const [clearValueRequested, setClearValueRequested] = useState(false); |
| 79 | |
| 80 | const form = useFormik<SecretFormValues>({ |
| 81 | initialValues, |
| 82 | enableReinitialize: true, |
| 83 | validateOnMount: true, |
| 84 | validate: (values) => |
| 85 | isEdit ? {} : getCreateSecretRequiredFieldErrors(values), |
| 86 | onSubmit: async (values, helpers) => { |
| 87 | helpers.setStatus(undefined); |
| 88 | try { |
| 89 | if (secret) { |
| 90 | const request = buildUpdateUserSecretRequest(secret, values, { |
| 91 | clearValue: clearValueRequested, |
| 92 | }); |
| 93 | await onUpdateSecret(secret.name, request); |
| 94 | } else { |
| 95 | await onCreateSecret(buildCreateUserSecretRequest(values)); |
| 96 | } |
| 97 | setClearValueRequested(false); |
| 98 | helpers.resetForm(); |
| 99 | onClose(); |
| 100 | } catch (error) { |
| 101 | const formErrors = mapSecretApiErrorToFormErrors(error); |
| 102 | helpers.setErrors(formErrors.fieldErrors); |
| 103 | helpers.setTouched( |
| 104 | touchedFromFieldErrors(formErrors.fieldErrors), |
| 105 | false, |
| 106 | ); |
| 107 | helpers.setStatus(formErrors.formError); |
| 108 | } |
| 109 | }, |
| 110 | }); |
| 111 | |
| 112 | const closeDialog = () => { |
| 113 | setClearValueRequested(false); |
| 114 | form.resetForm(); |
| 115 | onClose(); |
| 116 | }; |
nothing calls this directly
no test coverage detected