Path: blob/main/components/dashboard/src/repositories/create/AddRepositoryModal.tsx
2501 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 { FC, useCallback, useState } from "react";7import Modal, { ModalBody, ModalFooter, ModalFooterAlert, ModalHeader } from "../../components/Modal";8import { SuggestedRepository } from "@gitpod/gitpod-protocol";9import RepositoryFinder from "../../components/RepositoryFinder";10import { InputField } from "../../components/forms/InputField";11import { AuthorizeGit, useNeedsGitAuthorization } from "../../components/AuthorizeGit";12import { useTemporaryState } from "../../hooks/use-temporary-value";13import { CreateConfigurationArgs, useCreateConfiguration } from "../../data/configurations/configuration-queries";14import type { Configuration } from "@gitpod/public-api/lib/gitpod/v1/configuration_pb";15import { LoadingButton } from "@podkit/buttons/LoadingButton";16import { Button } from "@podkit/buttons/Button";1718type Props = {19onCreated: (configuration: Configuration) => void;20onClose: () => void;21};2223export const ImportRepositoryModal: FC<Props> = ({ onClose, onCreated }) => {24const needsGitAuth = useNeedsGitAuthorization();25const [selectedRepo, setSelectedRepo] = useState<SuggestedRepository>();26const createConfiguration = useCreateConfiguration();27const [createErrorMsg, setCreateErrorMsg] = useTemporaryState("", 3000);2829const handleSubmit = useCallback(() => {30if (!selectedRepo) {31setCreateErrorMsg("Please select a repository");32return;33}3435const newProjectArgs: CreateConfigurationArgs = {36// leave the name empty to let the backend generate the name37name: "",38cloneUrl: selectedRepo.url,39};4041createConfiguration.mutate(newProjectArgs, {42onSuccess: onCreated,43});44}, [createConfiguration, onCreated, selectedRepo, setCreateErrorMsg]);4546const errorMessage =47createErrorMsg ||48(createConfiguration.isError &&49(createConfiguration.error?.message ?? "There was a problem importing your repository"));5051return (52<Modal visible onClose={onClose} onSubmit={handleSubmit}>53<ModalHeader>Add a repository</ModalHeader>54<ModalBody>55<div className="w-112 max-w-full">56{needsGitAuth ? (57<AuthorizeGit />58) : (59<>60<InputField className="mb-8 w-full">61<RepositoryFinder62selectedContextURL={selectedRepo?.url}63selectedConfigurationId={selectedRepo?.projectId}64onChange={setSelectedRepo}65excludeConfigurations66/>67</InputField>68</>69)}70</div>71</ModalBody>72<ModalFooter73alert={74errorMessage && (75<ModalFooterAlert type="danger" onClose={() => setCreateErrorMsg("")}>76{errorMessage}77</ModalFooterAlert>78)79}80>81<Button variant="secondary" onClick={onClose}>82Cancel83</Button>84<LoadingButton type="submit" loading={createConfiguration.isLoading}>85Add86</LoadingButton>87</ModalFooter>88</Modal>89);90};919293