Path: blob/main/components/dashboard/src/repositories/detail/variables/ConfigurationAddVariableModal.tsx
2502 views
/**1* Copyright (c) 2023 Gitpod GmbH. All rights reserved.2* Licensed under the GNU Affero General Public License (AGPL).3* See License.AGPL.txt in the project root for license information.4*/56import { useCallback, useState } from "react";7import { LoadingButton } from "@podkit/buttons/LoadingButton";8import Modal, { ModalHeader, ModalBody, ModalFooter, ModalFooterAlert } from "../../../components/Modal";9import { CheckboxInputField } from "../../../components/forms/CheckboxInputField";10import { Button } from "@podkit/buttons/Button";11import { EnvironmentVariableAdmission } from "@gitpod/public-api/lib/gitpod/v1/envvar_pb";12import { useCreateConfigurationVariable } from "../../../data/configurations/configuration-queries";13import { useToast } from "../../../components/toasts/Toasts";14import { TextInputField } from "../../../components/forms/TextInputField";1516type Props = {17configurationId: string;18onClose: () => void;19};20export const AddVariableModal = ({ configurationId, onClose }: Props) => {21const { toast } = useToast();2223const [name, setName] = useState("");24const [value, setValue] = useState("");25const [admission, setAdmission] = useState<EnvironmentVariableAdmission>(EnvironmentVariableAdmission.EVERYWHERE);26const createVariable = useCreateConfigurationVariable();2728const addVariable = useCallback(() => {29createVariable.mutateAsync(30{31configurationId,32name,33value,34admission,35},36{37onSuccess: () => {38toast("Variable added");39onClose();40},41},42);43}, [createVariable, configurationId, name, value, admission, onClose, toast]);4445return (46<Modal visible onClose={onClose} onSubmit={addVariable}>47<ModalHeader>Add a variable</ModalHeader>48<ModalBody>49<div className="mt-8">50<TextInputField51label="Name"52autoComplete={"off"}53className="w-full"54value={name}55placeholder="Variable name"56onChange={(name) => setName(name)}57autoFocus58required59/>60</div>61<div className="mt-4">62<TextInputField63label="Value"64autoComplete={"off"}65className="w-full"66value={value}67placeholder="Variable value"68onChange={(value) => setValue(value)}69required70/>71</div>72<CheckboxInputField73label="Only use this variable in Prebuilds"74hint="This will hide the variable in the workspace, however, it may still appear in system logs."75checked={admission === EnvironmentVariableAdmission.PREBUILD}76onChange={(checked) =>77setAdmission(78checked ? EnvironmentVariableAdmission.PREBUILD : EnvironmentVariableAdmission.EVERYWHERE,79)80}81/>82</ModalBody>83<ModalFooter84alert={85createVariable.isError ? (86<ModalFooterAlert type="danger">87{String(createVariable.error).replace(/Error: Request \w+ failed with message: /, "")}88</ModalFooterAlert>89) : null90}91>92<Button variant="secondary" onClick={onClose}>93Cancel94</Button>95<LoadingButton type="submit" loading={createVariable.isLoading}>96Add Variable97</LoadingButton>98</ModalFooter>99</Modal>100);101};102103104