diff --git a/cloud/app/src/component/workspace/billing-section.tsx b/cloud/app/src/component/workspace/billing-section.tsx index 457ba139..c16208d3 100644 --- a/cloud/app/src/component/workspace/billing-section.tsx +++ b/cloud/app/src/component/workspace/billing-section.tsx @@ -1,5 +1,5 @@ import { json, query, action, useParams, useAction, createAsync, useSubmission } from "@solidjs/router" -import { createEffect, createMemo, createSignal, For, Show } from "solid-js" +import { createMemo, Show } from "solid-js" import { Billing } from "@opencode/cloud-core/billing.js" import { withActor } from "~/context/auth.withActor" import { IconCreditCard } from "~/component/icon" diff --git a/cloud/app/src/component/workspace/monthly-limit-section.module.css b/cloud/app/src/component/workspace/monthly-limit-section.module.css index 061c2e72..ebfd8e33 100644 --- a/cloud/app/src/component/workspace/monthly-limit-section.module.css +++ b/cloud/app/src/component/workspace/monthly-limit-section.module.css @@ -84,7 +84,6 @@ [data-slot="form-error"] { color: var(--color-danger); font-size: var(--font-size-sm); - margin-top: var(--space-1); line-height: 1.4; } } diff --git a/cloud/app/src/component/workspace/monthly-limit-section.tsx b/cloud/app/src/component/workspace/monthly-limit-section.tsx index d00d09da..5c1077ab 100644 --- a/cloud/app/src/component/workspace/monthly-limit-section.tsx +++ b/cloud/app/src/component/workspace/monthly-limit-section.tsx @@ -15,13 +15,15 @@ const getBillingInfo = query(async (workspaceID: string) => { const setMonthlyLimit = action(async (form: FormData) => { "use server" const limit = form.get("limit")?.toString() - if (!limit) return { error: "Limit is required" } + if (!limit) return { error: "Limit is required." } + const numericLimit = parseInt(limit) + if (numericLimit < 0) return { error: "Set a valid monthly limit." } const workspaceID = form.get("workspaceID")?.toString() - if (!workspaceID) return { error: "Workspace ID is required" } + if (!workspaceID) return { error: "Workspace ID is required." } return json( await withActor( () => - Billing.setMonthlyLimit(parseInt(limit)) + Billing.setMonthlyLimit(numericLimit) .then((data) => ({ error: undefined, data })) .catch((e) => ({ error: e.message as string })), workspaceID, @@ -79,7 +81,14 @@ export function MonthlyLimitSection() { fallback={