import { useToaster, type ButtonProps, Button, Dialog, Layout, Heading, FontVariation, Container, Formik, FormikForm, FormInput, Intent, FlexExpander, Icon } from '@harness/uicore' import { useModalHook } from '@harness/use-modal' import React from 'react' import { useMutate } from 'restful-react' import * as yup from 'yup' import { useStrings } from 'framework/strings' import type { OpenapiCreateSecretRequest, TypesSecret } from 'services/code' import { getErrorMessage } from 'utils/Utils' interface SecretFormData { value: string description: string name: string } const formInitialValues: SecretFormData = { value: '', description: '', name: '' } export interface NewSecretModalButtonProps extends Omit { space: string modalTitle: string submitButtonTitle?: string cancelButtonTitle?: string onSubmit: (data: TypesSecret) => void } export const NewSecretModalButton: React.FC = ({ space, modalTitle, submitButtonTitle, cancelButtonTitle, onSubmit, ...props }) => { const ModalComponent: React.FC = () => { const { getString } = useStrings() const { showError } = useToaster() const { mutate: createSecret, loading } = useMutate({ verb: 'POST', path: `/api/v1/secrets` }) const handleSubmit = async (formData: SecretFormData) => { try { const payload: OpenapiCreateSecretRequest = { space_ref: space, data: formData.value, description: formData.description, uid: formData.name } const response = await createSecret(payload) hideModal() onSubmit(response) } catch (exception) { showError(getErrorMessage(exception), 0, getString('secrets.failedToCreate')) } } return ( {modalTitle} ) } const [openModal, hideModal] = useModalHook(ModalComponent, [onSubmit]) return