summaryrefslogtreecommitdiffhomepage
path: root/cloud/app/src/component/workspace/payment-section.tsx
diff options
context:
space:
mode:
authorJay V <[email protected]>2025-09-16 16:16:30 -0400
committerJay V <[email protected]>2025-09-16 16:16:30 -0400
commit4b1eca73eb64c62ebdf668eb18d587510066bd9d (patch)
tree19be45b8df61b5db1514887e4307c2bc17f6b19d /cloud/app/src/component/workspace/payment-section.tsx
parentfffcf69cd45ce98cee37b7bf455a81a69f0fe83c (diff)
downloadopencode-4b1eca73eb64c62ebdf668eb18d587510066bd9d.tar.gz
opencode-4b1eca73eb64c62ebdf668eb18d587510066bd9d.zip
ignore: zen
Diffstat (limited to 'cloud/app/src/component/workspace/payment-section.tsx')
-rw-r--r--cloud/app/src/component/workspace/payment-section.tsx56
1 files changed, 56 insertions, 0 deletions
diff --git a/cloud/app/src/component/workspace/payment-section.tsx b/cloud/app/src/component/workspace/payment-section.tsx
new file mode 100644
index 000000000..f802fa96a
--- /dev/null
+++ b/cloud/app/src/component/workspace/payment-section.tsx
@@ -0,0 +1,56 @@
+import { Billing } from "@opencode/cloud-core/billing.js"
+import { query, useParams, createAsync } from "@solidjs/router"
+import { For } from "solid-js"
+import { withActor } from "~/context/auth.withActor"
+import { formatDateUTC, formatDateForTable } from "./common"
+
+const getPaymentsInfo = query(async (workspaceID: string) => {
+ "use server"
+ return withActor(async () => {
+ return await Billing.payments()
+ }, workspaceID)
+}, "payment.list")
+
+export function PaymentSection() {
+ const params = useParams()
+ const payments = createAsync(() => getPaymentsInfo(params.id))
+
+ return (
+ payments() &&
+ payments()!.length > 0 && (
+ <section data-component="payments-section">
+ <div data-slot="section-title">
+ <h2>Payments History</h2>
+ <p>Recent payment transactions.</p>
+ </div>
+ <div data-slot="payments-table">
+ <table data-slot="payments-table-element">
+ <thead>
+ <tr>
+ <th>Date</th>
+ <th>Payment ID</th>
+ <th>Amount</th>
+ </tr>
+ </thead>
+ <tbody>
+ <For each={payments()!}>
+ {(payment) => {
+ const date = new Date(payment.timeCreated)
+ return (
+ <tr>
+ <td data-slot="payment-date" title={formatDateUTC(date)}>
+ {formatDateForTable(date)}
+ </td>
+ <td data-slot="payment-id">{payment.id}</td>
+ <td data-slot="payment-amount">${((payment.amount ?? 0) / 100000000).toFixed(2)}</td>
+ </tr>
+ )
+ }}
+ </For>
+ </tbody>
+ </table>
+ </div>
+ </section>
+ )
+ )
+}