From 4a77dd98caf852f3562ff1cfe534a6829686eb43 Mon Sep 17 00:00:00 2001 From: Konsti Wohlwend Date: Fri, 26 Jun 2026 17:30:14 -0700 Subject: [PATCH] Show config file paths instead of project cards on /projects for RDEs (#1676) --- .../projects/page-client.tsx | 160 +++++++++++++++++- .../development-environment/projects/route.ts | 23 +++ .../remote-development-environment/manager.ts | 11 ++ 3 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 apps/dashboard/src/app/api/development-environment/projects/route.ts diff --git a/apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx b/apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx index 86df52e5b..00b708c90 100644 --- a/apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx +++ b/apps/dashboard/src/app/(main)/(protected)/(outside-dashboard)/projects/page-client.tsx @@ -1,12 +1,13 @@ 'use client'; +import { Link } from "@/components/link"; import { ProjectCard } from "@/components/project-card"; import { useRouter } from "@/components/router"; import { SearchBar } from "@/components/search-bar"; import { Button, Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, Input, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Skeleton, Typography, toast } from "@/components/ui"; import { getPublicEnvVar } from "@/lib/env"; import { hexclaveAppInternalsSymbol } from "@/lib/hexclave-app-internals"; -import { GearIcon } from "@phosphor-icons/react"; +import { FileCode, GearIcon } from "@phosphor-icons/react"; import { AdminOwnedProject, Team, useStackApp, useUser } from "@hexclave/next"; import { isPaidPlan } from "@hexclave/shared/dist/plans"; import { projectOnboardingStatusValues, strictEmailSchema, yupObject, type ProjectOnboardingStatus } from "@hexclave/shared/dist/schema-fields"; @@ -15,6 +16,7 @@ import { captureError, throwErr } from "@hexclave/shared/dist/utils/errors"; import { runAsynchronously, runAsynchronouslyWithAlert, wait } from "@hexclave/shared/dist/utils/promises"; import { useQueryState } from "@hexclave/shared/dist/utils/react"; import { stringCompare } from "@hexclave/shared/dist/utils/strings"; +import { urlString } from "@hexclave/shared/dist/utils/urls"; import { Suspense, useCallback, useEffect, useMemo, useState } from "react"; import * as yup from "yup"; import { inviteUser, listInvitations, revokeInvitation } from "./actions"; @@ -58,11 +60,12 @@ function isProjectOnboardingStatus(value: unknown): value is ProjectOnboardingSt export default function PageClient() { const isPreview = getPublicEnvVar("NEXT_PUBLIC_STACK_IS_PREVIEW") === "true"; + const isRemoteDevelopmentEnvironment = getPublicEnvVar("NEXT_PUBLIC_STACK_IS_REMOTE_DEVELOPMENT_ENVIRONMENT") === "true"; return ( <> - {isPreview ? : } + {isPreview ? : isRemoteDevelopmentEnvironment ? : }