diff options
| author | Jay V <[email protected]> | 2025-09-16 17:35:43 -0400 |
|---|---|---|
| committer | Jay V <[email protected]> | 2025-09-16 19:39:36 -0400 |
| commit | 479cf2fa4f5f84e330ca4d02601d0d81234811d0 (patch) | |
| tree | cd6049212b8aa74fffbea42b2e597587f79d095c | |
| parent | 39c54f367f6c6db7f2f10c53a5495617c0c85e11 (diff) | |
| download | opencode-479cf2fa4f5f84e330ca4d02601d0d81234811d0.tar.gz opencode-479cf2fa4f5f84e330ca4d02601d0d81234811d0.zip | |
ignore: zen
3 files changed, 14 insertions, 6 deletions
diff --git a/cloud/app/src/component/workspace/billing-section.tsx b/cloud/app/src/component/workspace/billing-section.tsx index 457ba1392..c16208d31 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 061c2e72d..ebfd8e33a 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 d00d09da6..5c1077ab1 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={ <form action={setMonthlyLimit} method="post" data-slot="create-form"> <div data-slot="input-container"> - <input ref={(r) => (input = r)} data-component="input" name="limit" type="number" placeholder="50" /> + <input + required + ref={(r) => (input = r)} + data-component="input" + name="limit" + type="number" + placeholder="50" + /> <Show when={submission.result && submission.result.error}> {(err) => <div data-slot="form-error">{err()}</div>} </Show> |
