diff --git a/web-admin/src/features/branches/BranchesSection.svelte b/web-admin/src/features/branches/BranchesSection.svelte index f52270d9112..ebdaf55268f 100644 --- a/web-admin/src/features/branches/BranchesSection.svelte +++ b/web-admin/src/features/branches/BranchesSection.svelte @@ -51,6 +51,7 @@ } from "lucide-svelte"; import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus"; import { onMount } from "svelte"; + import { featureFlags } from "@rilldata/web-common/features/feature-flags"; let { organization, project }: { organization: string; project: string } = $props(); @@ -70,7 +71,13 @@ query: { refetchInterval: (query) => { const deployments = query.state.data?.deployments; - if (deployments?.some((d) => isTransitoryStatus(d.status))) { + if ( + deployments?.some((d) => + isTransitoryStatus( + d.status ?? V1DeploymentStatus.DEPLOYMENT_STATUS_UNSPECIFIED, + ), + ) + ) { return 2000; } return false; @@ -82,12 +89,16 @@ let projectQuery = $derived( createAdminServiceGetProject(organization, project), ); + const { cloudEditing } = featureFlags; const startMutation = createAdminServiceStartDeployment(); const stopMutation = createAdminServiceStopDeployment(); const deleteMutation = createAdminServiceDeleteDeployment(); let primaryBranch = $derived($projectQuery.data?.project?.primaryBranch); let activeBranch = $derived(extractBranchFromPath(page.url.pathname)); + let canEditProject = $derived( + $cloudEditing && !!$projectQuery.data?.projectPermissions?.manageDev, + ); let userNameMap = $derived( new Map( @@ -424,7 +435,7 @@ - {#if deployment.editable} + {#if canEditProject && deployment.editable} { + const deployment = $proj.data?.deployment; + if (!deployment?.runtimeHost || !deployment.runtimeInstanceId) { + return undefined; + } + + return { + host: deployment.runtimeHost, + instanceId: deployment.runtimeInstanceId, + jwt: $proj.data?.jwt, + }; + }); + + let cloudEditingQuery = $derived( + createQuery({ + queryKey: [ + "project-card-cloud-editing", + organization, + project, + runtimeConfig?.host, + runtimeConfig?.instanceId, + ], + enabled: !!runtimeConfig, + queryFn: async () => { + if (!runtimeConfig) return false; + const flags = await getFeatureFlags(getRuntimeClient(runtimeConfig)); + return !!flags.cloudEditing; + }, + }), + ); + + let canEditProject = $derived( + !!$cloudEditingQuery.data && !!$proj.data?.projectPermissions?.manageDev, + ); + + $effect(() => { + if (!canEditProject) editProjectOpen = false; + }); -{#if $proj.data} +{#if $proj.data?.project} + {@const projectData = $proj.data.project}

(editProjectOpen = true)} onRename={() => (renameProjectOpen = true)} onDelete={() => (deleteProjectOpen = true)} @@ -65,7 +109,7 @@
- {#if $proj.data.project.public} + {#if projectData.public} {:else} @@ -73,7 +117,7 @@ This project is - {#if $proj.data.project.public} + {#if projectData.public} public {:else} private @@ -94,9 +138,11 @@ button={false} /> - +{#if canEditProject} + +{/if} diff --git a/web-admin/src/features/projects/ProjectCardActions.svelte b/web-admin/src/features/projects/ProjectCardActions.svelte index 31b6951b0f9..b8b223ac88d 100644 --- a/web-admin/src/features/projects/ProjectCardActions.svelte +++ b/web-admin/src/features/projects/ProjectCardActions.svelte @@ -10,6 +10,7 @@ organization, project, open = $bindable(false), + canEdit = false, onEdit, onRename, onDelete, @@ -17,7 +18,8 @@ organization: string; project: string; open?: boolean; - onEdit: () => void; + canEdit?: boolean; + onEdit?: () => void; onRename: () => void; onDelete: () => void; } = $props(); @@ -28,9 +30,11 @@ - - Edit - + {#if canEdit} + onEdit?.()}> + Edit + + {/if} Rename