Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import { onNavigate } from "$app/navigation";
import type { V1OrganizationPermissions } from "@rilldata/web-admin/client";
import BillingBannerManagerForAdmins from "@rilldata/web-admin/features/billing/banner/BillingBannerManagerForAdmins.svelte";
import BillingBannerManagerForViewers from "@rilldata/web-admin/features/billing/banner/BillingBannerManagerForViewers.svelte";
import { BillingBannerID } from "@rilldata/web-common/components/banner/constants";
import { eventBus } from "@rilldata/web-common/lib/event-bus/event-bus";

Expand All @@ -20,6 +19,4 @@

{#if organizationPermissions.manageOrg}
<BillingBannerManagerForAdmins {organization} />
{:else if organizationPermissions.readOrg && organizationPermissions.readProjects}
<BillingBannerManagerForViewers {organization} />
{/if}

This file was deleted.

39 changes: 4 additions & 35 deletions web-admin/src/features/billing/issues/useBillingIssueMessage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
isTeamPlan,
} from "@rilldata/web-admin/features/billing/plans/utils";
import { useCategorisedOrganizationBillingIssues } from "@rilldata/web-admin/features/billing/selectors";
import { areAllProjectsHibernating } from "@rilldata/web-admin/features/organizations/selectors";
import type { BannerMessage } from "@rilldata/web-common/lib/event-bus/events";
import { derived } from "svelte/store";

Expand All @@ -32,32 +31,20 @@ export function useBillingIssueMessage(organization: string) {
[
createAdminServiceGetOrganization(organization),
useCategorisedOrganizationBillingIssues(organization),
areAllProjectsHibernating(organization),
],
([orgResp, categorisedIssuesResp, allProjectsHibernatingResp]) => {
if (
orgResp.isLoading ||
categorisedIssuesResp.isLoading ||
allProjectsHibernatingResp.isLoading
) {
([orgResp, categorisedIssuesResp]) => {
if (orgResp.isLoading || categorisedIssuesResp.isLoading) {
return {
isFetching: true,
isLoading: true,
error: undefined,
};
}
if (
orgResp.error ||
categorisedIssuesResp.error ||
allProjectsHibernatingResp.error
) {
if (orgResp.error || categorisedIssuesResp.error) {
return {
isFetching: false,
isLoading: false,
error:
orgResp.error ??
categorisedIssuesResp.error ??
allProjectsHibernatingResp.error,
error: orgResp.error ?? categorisedIssuesResp.error,
};
}

Expand Down Expand Up @@ -100,24 +87,6 @@ export function useBillingIssueMessage(organization: string) {
};
}

if (allProjectsHibernatingResp.data) {
return {
isFetching: false,
isLoading: false,
error: undefined,
data: <BillingIssueMessage>{
type: "default",
title: "Your org’s projects are hibernating.",
description: "",
iconType: "sleep",
cta: {
type: "wake-projects",
text: "Wake projects",
},
},
};
}

return {
isFetching: false,
isLoading: false,
Expand Down
19 changes: 0 additions & 19 deletions web-admin/src/features/organizations/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,7 @@ import {
type V1GetOrganizationResponse,
type V1Organization,
} from "@rilldata/web-admin/client";
import { listProjectsForOrgQueryOptions } from "@rilldata/web-admin/features/projects/list-projects-query-options";
import { queryClient } from "@rilldata/web-common/lib/svelte-query/globalQueryClient";
import type { FetchQueryOptions } from "@tanstack/query-core";
import { createQuery } from "@tanstack/svelte-query";

export function areAllProjectsHibernating(organization: string) {
return createQuery({
...listProjectsForOrgQueryOptions(organization),
select: (data) =>
data.projects?.length &&
data.projects.every((p) => !p.primaryDeploymentId),
});
}

export async function fetchAllProjectsHibernating(organization: string) {
const projectsResp = await queryClient.fetchQuery(
listProjectsForOrgQueryOptions(organization),
);
return projectsResp.projects?.every((p) => !p.primaryDeploymentId) ?? false;
}

function normalizeOrganization(
organization: string | V1Organization | undefined,
Expand Down
10 changes: 0 additions & 10 deletions web-admin/src/routes/[organization]/+page.svelte
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
<script lang="ts">
import { page } from "$app/stores";
import ContentContainer from "@rilldata/web-common/components/layout/ContentContainer.svelte";
import OrganizationHibernating from "@rilldata/web-admin/features/organizations/hibernating/OrganizationHibernating.svelte";
import { areAllProjectsHibernating } from "@rilldata/web-admin/features/organizations/selectors";
import { createAdminServiceGetOrganization } from "../../client";
import { listProjectsForOrgQueryOptions } from "@rilldata/web-admin/features/projects/list-projects-query-options";
import { createQuery } from "@tanstack/svelte-query";
Expand All @@ -11,8 +9,6 @@
import { Button } from "@rilldata/web-common/components/button";
import { projectWelcomeEnabled } from "@rilldata/web-admin/features/welcome/project/welcome-status.ts";

export let data;
$: ({ organizationPermissions } = data);
$: ({
params: { organization: orgName },
} = $page);
Expand All @@ -22,7 +18,6 @@
...listProjectsForOrgQueryOptions(orgName),
enabled: !!$org.data?.organization,
});
$: allProjectsHibernating = areAllProjectsHibernating(orgName);

$: title = $org.data?.organization?.displayName || orgName;
</script>
Expand All @@ -49,11 +44,6 @@
</Button>
</div>
{/if}
{:else if $allProjectsHibernating.data}
<OrganizationHibernating
organization={orgName}
{organizationPermissions}
/>
{:else}
<div class="flex flex-col gap-y-8">
<OrganizationHero {title} />
Expand Down
24 changes: 2 additions & 22 deletions web-admin/src/routes/[organization]/[project]/+layout.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,18 @@
import { type RpcStatus } from "@rilldata/web-admin/client";
import { hasBlockerIssues } from "@rilldata/web-admin/features/billing/selectors";
import { extractBranchFromPath } from "@rilldata/web-admin/features/branches/branch-utils.ts";
import { maybeRedirectToEditableDeployment } from "@rilldata/web-admin/features/branches/deployment-utils.ts";
import { isEditPage } from "@rilldata/web-admin/features/navigation/nav-utils.ts";
import { fetchAllProjectsHibernating } from "@rilldata/web-admin/features/organizations/selectors";
import { error, redirect } from "@sveltejs/kit";
import { isAxiosError } from "axios";
import { error } from "@sveltejs/kit";

export const load = async ({
params: { organization, project },
parent,
route,
url,
}) => {
const { organizationPermissions, issues } = await parent();
const { organizationPermissions } = await parent();

if (!organizationPermissions.manageOrg) return;

let projectHibernating = false;
try {
projectHibernating = await fetchAllProjectsHibernating(organization);
} catch (e) {
if (!isAxiosError<RpcStatus>(e) || !e.response) {
throw error(500, "Error fetching projects for the organization");
}

throw error(e.response.status, e.response.data.message);
}

// if all projects were hibernated due to a blocker issue on org then take the user to projects page
if (hasBlockerIssues(issues) && projectHibernating) {
throw redirect(307, `/${organization}`);
}

// Edit pages handle their own branch routing; everything below is non-edit only.
if (isEditPage({ route })) return;

Expand Down
Loading