diff --git a/components/dashboard/src/components/RepositoryFinder.tsx b/components/dashboard/src/components/RepositoryFinder.tsx index f7a4a203bf6e4d..946e131bf68883 100644 --- a/components/dashboard/src/components/RepositoryFinder.tsx +++ b/components/dashboard/src/components/RepositoryFinder.tsx @@ -31,7 +31,7 @@ export default function RepositoryFinder(props: RepositoryFinderProps) { setSuggestedContextURLs(urls); saveSearchData(urls); }); - }, [suggestedContextURLs]); + }, []); const getElements = useCallback( (searchString: string) => { diff --git a/components/dashboard/src/projects/Project.tsx b/components/dashboard/src/projects/Project.tsx index 7f8ba4ee305a26..690ae2eeed9dd4 100644 --- a/components/dashboard/src/projects/Project.tsx +++ b/components/dashboard/src/projects/Project.tsx @@ -21,6 +21,7 @@ import { openAuthorizeWindow } from "../provider-utils"; import Alert from "../components/Alert"; import { listAllProjects } from "../service/public-api"; import { UserContext } from "../user-context"; +import { StartWorkspaceModalContext } from "../workspaces/start-workspace-modal-context"; export default function () { const location = useLocation(); @@ -29,6 +30,7 @@ export default function () { const { teams } = useContext(TeamsContext); const { user } = useContext(UserContext); const team = getCurrentTeam(location, teams); + const { setStartWorkspaceModalProps } = useContext(StartWorkspaceModalContext); const match = useRouteMatch<{ team: string; resource: string }>("/(t/)?:team/:resource"); const projectSlug = match?.params?.resource; @@ -395,9 +397,11 @@ export default function () { menuEntries={[ { title: "New Workspace ...", - href: gitpodHostUrl - .withContext(`${branch.url}`, { showOptions: true }) - .toString(), + onClick: () => + setStartWorkspaceModalProps({ + contextUrl: branch.url, + allowContextUrlChange: true, + }), separator: true, }, prebuild?.status === "queued" || prebuild?.status === "building" diff --git a/components/dashboard/src/projects/ProjectListItem.tsx b/components/dashboard/src/projects/ProjectListItem.tsx index 7639a67edbf434..382bd70739a657 100644 --- a/components/dashboard/src/projects/ProjectListItem.tsx +++ b/components/dashboard/src/projects/ProjectListItem.tsx @@ -4,7 +4,7 @@ * See License.AGPL.txt in the project root for license information. */ -import { FunctionComponent, useMemo, useState } from "react"; +import { FunctionComponent, useContext, useMemo, useState } from "react"; import dayjs from "dayjs"; import { Project } from "@gitpod/gitpod-protocol"; import { Link } from "react-router-dom"; @@ -15,6 +15,7 @@ import { toRemoteURL } from "./render-utils"; import { prebuildStatusIcon } from "./Prebuilds"; import { gitpodHostUrl } from "../service/service"; import { useLatestProjectPrebuildQuery } from "../data/prebuilds/latest-project-prebuild-query"; +import { StartWorkspaceModalContext } from "../workspaces/start-workspace-modal-context"; type ProjectListItemProps = { project: Project; @@ -25,6 +26,7 @@ export const ProjectListItem: FunctionComponent = ({ proje const team = useCurrentTeam(); const [showRemoveModal, setShowRemoveModal] = useState(false); const { data: prebuild, isLoading } = useLatestProjectPrebuildQuery({ projectId: project.id }); + const { setStartWorkspaceModalProps } = useContext(StartWorkspaceModalContext); const teamOrUserSlug = useMemo(() => { return !!team ? "t/" + team.slug : "projects"; @@ -47,9 +49,11 @@ export const ProjectListItem: FunctionComponent = ({ proje }, { title: "New Workspace ...", - href: gitpodHostUrl - .withContext(`${project.cloneUrl}`, { showOptions: true }) - .toString(), + onClick: () => + setStartWorkspaceModalProps({ + contextUrl: project.cloneUrl, + allowContextUrlChange: true, + }), separator: true, }, { diff --git a/components/dashboard/src/workspaces/StartWorkspaceModal.tsx b/components/dashboard/src/workspaces/StartWorkspaceModal.tsx index 792989683d849c..606497dac3442e 100644 --- a/components/dashboard/src/workspaces/StartWorkspaceModal.tsx +++ b/components/dashboard/src/workspaces/StartWorkspaceModal.tsx @@ -17,6 +17,8 @@ export interface StartWorkspaceModalProps { ide?: string; workspaceClass?: string; contextUrl?: string; + // If contextUrl is provided, setting `allowContextUrlChange` to true will allow it to be changed still + allowContextUrlChange?: boolean; onClose?: () => void; } @@ -88,7 +90,10 @@ export function StartWorkspaceModal(props: StartWorkspaceModalProps) {
Start a new workspace with the following options.
- +
{errorIde &&
{errorIde}
}