chore(go): referral improvements (#28368)

This commit is contained in:
Victor Navarro 2026-05-19 20:26:38 +02:00 committed by GitHub
parent c449d3dc74
commit b20b569b0e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
29 changed files with 457 additions and 491 deletions

View File

@ -183,61 +183,8 @@
}
}
[data-slot="rewards-title"] {
display: flex;
flex-direction: column;
gap: var(--space-1);
padding-top: var(--space-2);
h2 {
margin: 0;
color: var(--color-text);
font-size: var(--font-size-md);
font-weight: 600;
line-height: 1.2;
letter-spacing: -0.03125rem;
}
p {
margin: 0;
color: var(--color-text-muted);
font-size: var(--font-size-sm);
line-height: 1.5;
}
}
[data-slot="referral-stats"] {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: var(--space-6);
@media (max-width: 30rem) {
grid-template-columns: 1fr;
gap: var(--space-4);
}
> div {
display: flex;
flex-direction: column;
gap: var(--space-2);
padding: var(--space-4);
border: 1px solid var(--color-border);
border-radius: var(--border-radius-sm);
}
span {
color: var(--color-text-muted);
font-size: var(--font-size-sm);
font-weight: 600;
text-transform: uppercase;
letter-spacing: -0.025rem;
}
strong {
color: var(--color-text);
font-size: var(--font-size-md);
font-weight: 600;
}
[data-component="go-referral-overview"] + [data-slot="section-title"] {
margin-top: var(--space-4);
}
[data-slot="referrals-table"] {
@ -296,17 +243,7 @@
&[data-slot="referral-source"] {
color: var(--color-text-secondary);
font-family: var(--font-sans);
span {
display: block;
}
[data-slot="referral-email"] {
margin-top: var(--space-1);
color: var(--color-text-muted);
line-height: 1.4;
white-space: normal;
}
white-space: nowrap;
}
&[data-slot="referral-action"] {

View File

@ -1,4 +1,4 @@
import { action, createAsync, json, query, useAction, useSubmission } from "@solidjs/router"
import { action, json, query, useAction, useSubmission } from "@solidjs/router"
import { createEffect, createMemo, createSignal, For, onCleanup, Show } from "solid-js"
import { getRequestEvent } from "solid-js/web"
import { Referral } from "@opencode-ai/console-core/referral.js"
@ -13,6 +13,7 @@ import "./go-referral.css"
type GoReferralSummary = Awaited<ReturnType<typeof Referral.summary>>
type GoReferralReward = GoReferralSummary["rewards"][number]
type GoLiteSubscription = Awaited<ReturnType<typeof queryLiteSubscription>>
type GoReferralUsagePreview = NonNullable<Awaited<ReturnType<typeof Referral.usagePreview>>>
type GoReferralUsagePreviewItem = GoReferralUsagePreview["rollingUsage"]
@ -57,17 +58,15 @@ function formatDate(value: string | Date, locale: string) {
return new Intl.DateTimeFormat(locale, { month: "short", day: "numeric", year: "numeric" }).format(new Date(value))
}
function rewardTitleKey(reward: GoReferralReward) {
if (reward.status === "pending" && reward.source === "invitee")
return "workspace.referral.reward.source.pendingInvitee" as const
if (reward.status === "pending") return "workspace.referral.reward.source.pendingInviter" as const
if (reward.status === "applied") return "workspace.referral.reward.source.applied" as const
return "workspace.referral.reward.source.available" as const
function rewardDescriptionKey(source: GoReferralReward["source"]) {
if (source === "invitee") return "workspace.referral.reward.description.invitee" as const
return "workspace.referral.reward.description.inviter" as const
}
function rewardPendingStatusKey(source: GoReferralReward["source"]) {
if (source === "invitee") return "workspace.referral.reward.status.pendingInvitee" as const
return "workspace.referral.reward.status.pendingInviter" as const
function rewardActionKey(reward: GoReferralReward, hasActiveGo: boolean) {
if (reward.status === "applied") return "workspace.referral.reward.action.applied" as const
if (reward.status === "pending" || !hasActiveGo) return "workspace.referral.reward.action.subscribeUnlock" as const
return "workspace.referral.reward.action.view" as const
}
function CopyInviteLink(props: { summary: GoReferralSummary }) {
@ -113,18 +112,21 @@ function CopyInviteLink(props: { summary: GoReferralSummary }) {
)
}
export function GoReferralSection(props: { workspaceID: string; summary: GoReferralSummary }) {
export function GoReferralSection(props: {
workspaceID: string
summary: GoReferralSummary
lite: GoLiteSubscription | undefined
}) {
const i18n = useI18n()
const language = useLanguage()
const apply = useAction(applyGoReferralReward)
const submission = useSubmission(applyGoReferralReward)
const [selected, setSelected] = createSignal<GoReferralReward>()
const [preview, setPreview] = createSignal<GoReferralUsagePreview | null>()
const lite = createAsync(() => queryLiteSubscription(props.workspaceID))
const displayPreview = createMemo(() => {
const loaded = preview()
if (loaded) return loaded
const current = lite()
const current = props.lite
if (!current) return emptyUsagePreview
return {
rollingUsage: currentUsagePreview(current.rollingUsage),
@ -158,92 +160,73 @@ export function GoReferralSection(props: { workspaceID: string; summary: GoRefer
}
return (
<section data-component="go-referral-section">
<div data-slot="section-title">
<h2>{i18n.t("workspace.referral.overview.title")}</h2>
<p>
{i18n.t("workspace.referral.overview.subtitle", {
reward: formatCurrency(props.summary.rewardAmount),
})}
</p>
</div>
<div data-component="go-referral-overview">
<div data-slot="referral-stats">
<div>
<span>{i18n.t("workspace.referral.stats.invites")}</span>
<strong>{props.summary.inviteCount}</strong>
</div>
<div>
<span>{i18n.t("workspace.referral.stats.earned")}</span>
<strong>{formatCurrency(props.summary.totalEarned)}</strong>
</div>
<div>
<span>{i18n.t("workspace.referral.stats.applied")}</span>
<strong>{formatCurrency(props.summary.totalApplied)}</strong>
</div>
</div>
<CopyInviteLink summary={props.summary} />
<div data-slot="instructions">
<ol>
<li>{i18n.t("workspace.referral.instructions.share")}</li>
<li>{i18n.t("workspace.referral.instructions.subscribe")}</li>
<li>{i18n.t("workspace.referral.instructions.claim")}</li>
</ol>
</div>
</div>
<Show
when={props.summary.rewards.length > 0}
fallback={<div data-component="empty-state">{i18n.t("workspace.referral.rewards.empty")}</div>}
>
<div data-slot="referrals-table">
<table data-slot="referrals-table-element">
<thead>
<tr>
<th>{i18n.t("workspace.referral.table.reward")}</th>
<th>{i18n.t("workspace.referral.table.referral")}</th>
<th>{i18n.t("workspace.referral.table.date")}</th>
<th></th>
</tr>
</thead>
<tbody>
<For each={props.summary.rewards}>
{(reward) => {
const applied = reward.status === "applied"
const pending = reward.status === "pending"
const earnedAt = () => formatDate(reward.timeCreated, language.tag(language.locale()))
return (
<tr data-status={reward.status} data-source={reward.source}>
<td data-slot="referral-amount">{formatCurrency(reward.amount)}</td>
<td data-slot="referral-source">
<span>{i18n.t(rewardTitleKey(reward))}</span>
<span data-slot="referral-email">{reward.email}</span>
</td>
<td data-slot="referral-date" title={earnedAt()}>
{earnedAt()}
</td>
<td data-slot="referral-action">
<button
type="button"
disabled={reward.status !== "available" || !props.summary.hasActiveGo || submission.pending}
onClick={() => setSelected(reward)}
>
<Show when={!applied} fallback={i18n.t("workspace.referral.reward.status.applied")}>
{pending
? i18n.t(rewardPendingStatusKey(reward.source))
: props.summary.hasActiveGo
? i18n.t("workspace.referral.apply.preview")
: i18n.t("workspace.referral.apply.noGo")}
</Show>
</button>
</td>
</tr>
)
}}
</For>
</tbody>
</table>
</div>
<>
<Show when={props.lite || props.summary.hasReferral}>
<section data-component="go-referral-section">
<Show when={props.lite}>
<div data-slot="section-title">
<h2>{i18n.t("workspace.referral.overview.title")}</h2>
<p>{i18n.t("workspace.referral.overview.subtitle")}</p>
</div>
<div data-component="go-referral-overview">
<CopyInviteLink summary={props.summary} />
<div data-slot="instructions">
<ol>
<li>{i18n.t("workspace.referral.instructions.share")}</li>
<li>{i18n.t("workspace.referral.instructions.subscribe")}</li>
<li>{i18n.t("workspace.referral.instructions.claim")}</li>
</ol>
</div>
</div>
</Show>
<Show when={props.summary.hasReferral}>
<div data-slot="section-title">
<h2>{i18n.t("workspace.referral.rewards.title")}</h2>
<p>{i18n.t("workspace.referral.rewards.description")}</p>
</div>
<div data-slot="referrals-table">
<table data-slot="referrals-table-element">
<thead>
<tr>
<th>{i18n.t("workspace.referral.table.reward")}</th>
<th>{i18n.t("workspace.referral.table.referral")}</th>
<th>{i18n.t("workspace.referral.table.date")}</th>
<th></th>
</tr>
</thead>
<tbody>
<For each={props.summary.rewards}>
{(reward) => {
const earnedAt = () => formatDate(reward.timeCreated, language.tag(language.locale()))
return (
<tr data-status={reward.status} data-source={reward.source}>
<td data-slot="referral-amount">{formatCurrency(reward.amount)}</td>
<td data-slot="referral-source">
{i18n.t(rewardDescriptionKey(reward.source), { email: reward.email ?? "" })}
</td>
<td data-slot="referral-date" title={earnedAt()}>
{earnedAt()}
</td>
<td data-slot="referral-action">
<button
type="button"
disabled={reward.status !== "available" || !props.lite || submission.pending}
onClick={() => setSelected(reward)}
>
{i18n.t(rewardActionKey(reward, !!props.lite))}
</button>
</td>
</tr>
)
}}
</For>
</tbody>
</table>
</div>
</Show>
</section>
</Show>
<Modal
open={!!selected()}
onClose={() => setSelected(undefined)}
@ -266,7 +249,7 @@ export function GoReferralSection(props: { workspaceID: string; summary: GoRefer
</div>
</div>
</Modal>
</section>
</>
)
}

View File

@ -662,32 +662,35 @@ export const dict = {
"workspace.referral.copyLink": "نسخ الرابط",
"workspace.referral.copied": "تم النسخ",
"workspace.referral.overview.title": "ادعُ أصدقاءك إلى Go",
"workspace.referral.overview.subtitle": "احصل على رصيد Go بقيمة $5 عند اشتراك صديق. وسيحصل هو أيضًا على $5.",
"workspace.referral.stats.invites": "الدعوات",
"workspace.referral.stats.earned": "المُكتسب",
"workspace.referral.stats.applied": "المُطبَّق",
"workspace.referral.instructions.share": "شارك رابط دعوتك",
"workspace.referral.instructions.subscribe": "يشترك صديقك في Go",
"workspace.referral.instructions.claim": "طبِّق رصيد $5 الخاص بك أدناه",
"workspace.referral.overview.title": "ادعُ أصدقاءك",
"workspace.referral.overview.subtitle": "احصل على $5 عند اشتراك صديق. وسيحصل هو أيضًا على $5.",
"workspace.referral.instructions.share": "شارك رابط الإحالة الخاص بك",
"workspace.referral.instructions.subscribe": "ينضم صديقك ويشترك في Go",
"workspace.referral.instructions.claim": "تحصلان كلاكما على رصيد استخدام بقيمة $5 لتطبيقه على حدود استخدام Go",
"workspace.referral.rewards.title": "مكافآت الإحالة",
"workspace.referral.rewards.description": "طبّق أرصدة الإحالة المتاحة على استخدامك لـ Go.",
"workspace.referral.rewards.subtitle": "تم تطبيق {{applied}} / {{total}} من المكافآت.",
"workspace.referral.rewards.empty": "لا توجد مكافآت إحالة بعد.",
"workspace.referral.table.reward": "المكافأة",
"workspace.referral.table.referral": "الوصف",
"workspace.referral.table.date": "التاريخ",
"workspace.referral.reward.description.inviter": "تمت دعوة {{email}}",
"workspace.referral.reward.description.invitee": "تمت دعوتك بواسطة {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "اشترك لإلغاء القفل",
"workspace.referral.reward.action.view": "عرض المكافأة",
"workspace.referral.reward.action.applied": "تم تطبيق المكافأة",
"workspace.referral.reward.source.pendingInviter": "بانتظار اشتراكه",
"workspace.referral.reward.source.pendingInvitee": "اشترك لإلغاء قفل المكافأة",
"workspace.referral.reward.source.available": "المكافأة جاهزة للتطبيق",
"workspace.referral.reward.source.applied": "تم تطبيق المكافأة",
"workspace.referral.reward.status.applied": "مُطبَّق",
"workspace.referral.reward.status.pendingInviter": "تطبيق",
"workspace.referral.reward.status.pendingInvitee": "تطبيق",
"workspace.referral.apply.noGo": "الاشتراك في Go",
"workspace.referral.apply.preview": "معاينة",
"workspace.referral.reward.status.applied": "تم تطبيق المكافأة",
"workspace.referral.reward.status.pendingInviter": "اشترك لإلغاء القفل",
"workspace.referral.reward.status.pendingInvitee": "اشترك لإلغاء القفل",
"workspace.referral.apply.noGo": "اشترك لإلغاء القفل",
"workspace.referral.apply.preview": "عرض المكافأة",
"workspace.referral.apply.action": "تطبيق",
"workspace.referral.apply.confirmTitle": "تطبيق مكافأة Go",
"workspace.referral.apply.confirmBody": "طبِّق {{amount}} لتقليل عدّادات استخدام Go الحالية في مساحة العمل هذه.",
"workspace.referral.apply.confirmTitle": "تطبيق المكافأة",
"workspace.referral.apply.confirmBody": "طبِّق {{amount}} لتقليل الاستخدام الحالي في مساحة العمل هذه.",
"workspace.referral.apply.confirmAction": "تطبيق",
"download.title": "OpenCode | تنزيل",

View File

@ -672,33 +672,35 @@ export const dict = {
"workspace.referral.copyLink": "Copiar link",
"workspace.referral.copied": "Copiado",
"workspace.referral.overview.title": "Convide amigos para o Go",
"workspace.referral.overview.subtitle": "Ganhe $5 em crédito Go quando um amigo assinar. Ele também ganha $5.",
"workspace.referral.stats.invites": "Convites",
"workspace.referral.stats.earned": "Ganhos",
"workspace.referral.stats.applied": "Aplicados",
"workspace.referral.instructions.share": "Compartilhe seu link de convite",
"workspace.referral.instructions.subscribe": "Seu amigo assina o Go",
"workspace.referral.instructions.claim": "Aplique seu crédito de $5 abaixo",
"workspace.referral.overview.title": "Convide amigos",
"workspace.referral.overview.subtitle": "Ganhe $5 quando um amigo assinar. Ele também ganha $5.",
"workspace.referral.instructions.share": "Compartilhe seu link de indicação",
"workspace.referral.instructions.subscribe": "Seu amigo entra e assina o Go",
"workspace.referral.instructions.claim": "Vocês dois ganham um crédito de uso de $5 para aplicar aos seus limites de uso do Go",
"workspace.referral.rewards.title": "Recompensas de indicação",
"workspace.referral.rewards.description": "Aplique os créditos de indicação disponíveis no seu uso do Go.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} recompensas aplicadas.",
"workspace.referral.rewards.empty": "Ainda não há recompensas de indicação.",
"workspace.referral.table.reward": "Recompensa",
"workspace.referral.table.referral": "Descrição",
"workspace.referral.table.date": "Data",
"workspace.referral.reward.description.inviter": "Convidou {{email}}",
"workspace.referral.reward.description.invitee": "Convidado por {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Assine para desbloquear",
"workspace.referral.reward.action.view": "Ver recompensa",
"workspace.referral.reward.action.applied": "Recompensa aplicada",
"workspace.referral.reward.source.pendingInviter": "Aguardando ele assinar",
"workspace.referral.reward.source.pendingInvitee": "Assine para desbloquear a recompensa",
"workspace.referral.reward.source.available": "Recompensa pronta para usar",
"workspace.referral.reward.source.applied": "Recompensa aplicada",
"workspace.referral.reward.status.applied": "Aplicada",
"workspace.referral.reward.status.pendingInviter": "Aplicar",
"workspace.referral.reward.status.pendingInvitee": "Aplicar",
"workspace.referral.apply.noGo": "Assinar Go",
"workspace.referral.apply.preview": "Visualizar",
"workspace.referral.reward.status.applied": "Recompensa aplicada",
"workspace.referral.reward.status.pendingInviter": "Assine para desbloquear",
"workspace.referral.reward.status.pendingInvitee": "Assine para desbloquear",
"workspace.referral.apply.noGo": "Assine para desbloquear",
"workspace.referral.apply.preview": "Ver recompensa",
"workspace.referral.apply.action": "Aplicar",
"workspace.referral.apply.confirmTitle": "Aplicar recompensa Go",
"workspace.referral.apply.confirmBody":
"Aplique {{amount}} para reduzir os contadores atuais de uso do Go deste workspace.",
"workspace.referral.apply.confirmTitle": "Aplicar recompensa",
"workspace.referral.apply.confirmBody": "Aplique {{amount}} para reduzir o uso atual deste workspace.",
"workspace.referral.apply.confirmAction": "Aplicar",
"download.title": "OpenCode | Baixar",

View File

@ -668,33 +668,35 @@ export const dict = {
"workspace.referral.copyLink": "Kopiér link",
"workspace.referral.copied": "Kopieret",
"workspace.referral.overview.title": "Inviter venner til Go",
"workspace.referral.overview.subtitle": "Få $5 i Go-kredit, når en ven abonnerer. De får også $5.",
"workspace.referral.stats.invites": "Invitationer",
"workspace.referral.stats.earned": "Optjent",
"workspace.referral.stats.applied": "Brugt",
"workspace.referral.instructions.share": "Del dit invitationslink",
"workspace.referral.instructions.subscribe": "Din ven abonnerer på Go",
"workspace.referral.instructions.claim": "Brug din $5-kredit nedenfor",
"workspace.referral.overview.title": "Inviter venner",
"workspace.referral.overview.subtitle": "Få $5, når en ven abonnerer. De får også $5.",
"workspace.referral.instructions.share": "Del dit henvisningslink",
"workspace.referral.instructions.subscribe": "Din ven tilmelder sig og abonnerer på Go",
"workspace.referral.instructions.claim": "I får begge $5 i forbrugskredit til at bruge på jeres Go-forbrugsgrænser",
"workspace.referral.rewards.title": "Henvisningsbelønninger",
"workspace.referral.rewards.description": "Brug tilgængelige henvisningskreditter på dit Go-forbrug.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} belønninger brugt.",
"workspace.referral.rewards.empty": "Ingen henvisningsbelønninger endnu.",
"workspace.referral.table.reward": "Belønning",
"workspace.referral.table.referral": "Beskrivelse",
"workspace.referral.table.date": "Dato",
"workspace.referral.reward.description.inviter": "Inviterede {{email}}",
"workspace.referral.reward.description.invitee": "Inviteret af {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Abonner for at låse op",
"workspace.referral.reward.action.view": "Vis belønning",
"workspace.referral.reward.action.applied": "Belønning brugt",
"workspace.referral.reward.source.pendingInviter": "Venter på, at de abonnerer",
"workspace.referral.reward.source.pendingInvitee": "Abonner for at låse belønningen op",
"workspace.referral.reward.source.available": "Belønning klar til brug",
"workspace.referral.reward.source.applied": "Belønning brugt",
"workspace.referral.reward.status.applied": "Brugt",
"workspace.referral.reward.status.pendingInviter": "Brug",
"workspace.referral.reward.status.pendingInvitee": "Brug",
"workspace.referral.apply.noGo": "Abonner på Go",
"workspace.referral.apply.preview": "Forhåndsvis",
"workspace.referral.reward.status.applied": "Belønning brugt",
"workspace.referral.reward.status.pendingInviter": "Abonner for at låse op",
"workspace.referral.reward.status.pendingInvitee": "Abonner for at låse op",
"workspace.referral.apply.noGo": "Abonner for at låse op",
"workspace.referral.apply.preview": "Vis belønning",
"workspace.referral.apply.action": "Brug",
"workspace.referral.apply.confirmTitle": "Brug Go-belønning",
"workspace.referral.apply.confirmBody":
"Brug {{amount}} til at reducere dette workspaces nuværende Go-forbrugstællere.",
"workspace.referral.apply.confirmTitle": "Brug belønning",
"workspace.referral.apply.confirmBody": "Brug {{amount}} til at reducere dette workspaces nuværende forbrug.",
"workspace.referral.apply.confirmAction": "Brug",
"download.title": "OpenCode | Download",

View File

@ -671,33 +671,36 @@ export const dict = {
"workspace.referral.copyLink": "Link kopieren",
"workspace.referral.copied": "Kopiert",
"workspace.referral.overview.title": "Freunde zu Go einladen",
"workspace.referral.overview.subtitle": "Erhalte $5 Go-Guthaben, wenn ein Freund abonniert. Er bekommt ebenfalls $5.",
"workspace.referral.stats.invites": "Einladungen",
"workspace.referral.stats.earned": "Verdient",
"workspace.referral.stats.applied": "Eingelöst",
"workspace.referral.instructions.share": "Teile deinen Einladungslink",
"workspace.referral.instructions.subscribe": "Dein Freund abonniert Go",
"workspace.referral.instructions.claim": "Löse unten dein $5-Guthaben ein",
"workspace.referral.overview.title": "Freunde einladen",
"workspace.referral.overview.subtitle": "Erhalte $5, wenn ein Freund abonniert. Er bekommt ebenfalls $5.",
"workspace.referral.instructions.share": "Teile deinen Empfehlungslink",
"workspace.referral.instructions.subscribe": "Dein Freund tritt bei und abonniert Go",
"workspace.referral.instructions.claim": "Ihr erhaltet beide ein Nutzungsguthaben von $5, das ihr auf eure Go-Nutzungslimits anrechnen könnt",
"workspace.referral.rewards.title": "Empfehlungsbelohnungen",
"workspace.referral.rewards.description": "Verfügbare Empfehlungsguthaben auf deine Go-Nutzung anwenden.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} Belohnungen eingelöst.",
"workspace.referral.rewards.empty": "Noch keine Empfehlungsbelohnungen.",
"workspace.referral.table.reward": "Belohnung",
"workspace.referral.table.referral": "Beschreibung",
"workspace.referral.table.date": "Datum",
"workspace.referral.reward.description.inviter": "{{email}} eingeladen",
"workspace.referral.reward.description.invitee": "Eingeladen von {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Abonnieren zum Freischalten",
"workspace.referral.reward.action.view": "Belohnung ansehen",
"workspace.referral.reward.action.applied": "Belohnung eingelöst",
"workspace.referral.reward.source.pendingInviter": "Warten auf das Abo des Freundes",
"workspace.referral.reward.source.pendingInvitee": "Abonnieren, um Belohnung freizuschalten",
"workspace.referral.reward.source.available": "Belohnung kann eingelöst werden",
"workspace.referral.reward.source.applied": "Belohnung eingelöst",
"workspace.referral.reward.status.applied": "Eingelöst",
"workspace.referral.reward.status.pendingInviter": "Einlösen",
"workspace.referral.reward.status.pendingInvitee": "Einlösen",
"workspace.referral.apply.noGo": "Go abonnieren",
"workspace.referral.apply.preview": "Vorschau",
"workspace.referral.reward.status.applied": "Belohnung eingelöst",
"workspace.referral.reward.status.pendingInviter": "Abonnieren zum Freischalten",
"workspace.referral.reward.status.pendingInvitee": "Abonnieren zum Freischalten",
"workspace.referral.apply.noGo": "Abonnieren zum Freischalten",
"workspace.referral.apply.preview": "Belohnung ansehen",
"workspace.referral.apply.action": "Einlösen",
"workspace.referral.apply.confirmTitle": "Go-Belohnung einlösen",
"workspace.referral.apply.confirmTitle": "Belohnung einlösen",
"workspace.referral.apply.confirmBody":
"Löse {{amount}} ein, um die aktuellen Go-Nutzungszähler dieses Workspace zu reduzieren.",
"Löse {{amount}} ein, um die aktuelle Nutzung dieses Workspace zu reduzieren.",
"workspace.referral.apply.confirmAction": "Einlösen",
"download.title": "OpenCode | Download",

View File

@ -664,32 +664,35 @@ export const dict = {
"workspace.referral.copyLink": "Copy Link",
"workspace.referral.copied": "Copied",
"workspace.referral.overview.title": "Invite friends to Go",
"workspace.referral.overview.subtitle": "Earn $5 in Go credit when a friend subscribes. Theyll get $5 too.",
"workspace.referral.stats.invites": "Invites",
"workspace.referral.stats.earned": "Earned",
"workspace.referral.stats.applied": "Applied",
"workspace.referral.instructions.share": "Share your invite link",
"workspace.referral.instructions.subscribe": "Your friend subscribes to Go",
"workspace.referral.instructions.claim": "Apply your $5 credit below",
"workspace.referral.overview.title": "Invite friends",
"workspace.referral.overview.subtitle": "Earn $5 when a friend subscribes. Theyll get $5 too.",
"workspace.referral.instructions.share": "Share your referral link",
"workspace.referral.instructions.subscribe": "Your friend joins and subscribes to Go",
"workspace.referral.instructions.claim": "You both get a $5 usage credit to apply toward your Go usage limits",
"workspace.referral.rewards.title": "Referral rewards",
"workspace.referral.rewards.description": "Apply available referral credits toward your Go usage.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} rewards applied.",
"workspace.referral.rewards.empty": "No referral rewards yet.",
"workspace.referral.table.reward": "Reward",
"workspace.referral.table.referral": "Description",
"workspace.referral.table.date": "Date",
"workspace.referral.reward.description.inviter": "Invited {{email}}",
"workspace.referral.reward.description.invitee": "Invited by {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Subscribe to unlock",
"workspace.referral.reward.action.view": "View Reward",
"workspace.referral.reward.action.applied": "Reward Applied",
"workspace.referral.reward.source.pendingInviter": "Waiting for them to subscribe",
"workspace.referral.reward.source.pendingInvitee": "Subscribe to unlock reward",
"workspace.referral.reward.source.available": "Reward ready to apply",
"workspace.referral.reward.source.applied": "Reward applied",
"workspace.referral.reward.status.applied": "Applied",
"workspace.referral.reward.status.pendingInviter": "Apply",
"workspace.referral.reward.status.pendingInvitee": "Apply",
"workspace.referral.apply.noGo": "Subscribe to Go",
"workspace.referral.apply.preview": "Preview",
"workspace.referral.reward.status.applied": "Reward Applied",
"workspace.referral.reward.status.pendingInviter": "Subscribe to unlock",
"workspace.referral.reward.status.pendingInvitee": "Subscribe to unlock",
"workspace.referral.apply.noGo": "Subscribe to unlock",
"workspace.referral.apply.preview": "View Reward",
"workspace.referral.apply.action": "Apply",
"workspace.referral.apply.confirmTitle": "Apply Go reward",
"workspace.referral.apply.confirmBody": "Apply {{amount}} to reduce this workspace's current Go usage counters.",
"workspace.referral.apply.confirmTitle": "Apply reward",
"workspace.referral.apply.confirmBody": "Apply {{amount}} to reduce this workspace's current usage.",
"workspace.referral.apply.confirmAction": "Apply",
"download.title": "OpenCode | Download",

View File

@ -672,33 +672,35 @@ export const dict = {
"workspace.referral.copyLink": "Copiar enlace",
"workspace.referral.copied": "Copiado",
"workspace.referral.overview.title": "Invita amigos a Go",
"workspace.referral.overview.subtitle": "Gana $5 de crédito Go cuando un amigo se suscriba. Él también recibirá $5.",
"workspace.referral.stats.invites": "Invitaciones",
"workspace.referral.stats.earned": "Ganado",
"workspace.referral.stats.applied": "Aplicado",
"workspace.referral.instructions.share": "Comparte tu enlace de invitación",
"workspace.referral.instructions.subscribe": "Tu amigo se suscribe a Go",
"workspace.referral.instructions.claim": "Aplica tu crédito de $5 abajo",
"workspace.referral.overview.title": "Invita amigos",
"workspace.referral.overview.subtitle": "Gana $5 cuando un amigo se suscriba. Él también recibirá $5.",
"workspace.referral.instructions.share": "Comparte tu enlace de referido",
"workspace.referral.instructions.subscribe": "Tu amigo se une y se suscribe a Go",
"workspace.referral.instructions.claim": "Ambos reciben un crédito de uso de $5 para aplicar a sus límites de uso de Go",
"workspace.referral.rewards.title": "Recompensas por referidos",
"workspace.referral.rewards.description": "Aplica los créditos por referidos disponibles a tu uso de Go.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} recompensas aplicadas.",
"workspace.referral.rewards.empty": "Aún no hay recompensas por referidos.",
"workspace.referral.table.reward": "Recompensa",
"workspace.referral.table.referral": "Descripción",
"workspace.referral.table.date": "Fecha",
"workspace.referral.reward.description.inviter": "Invitaste a {{email}}",
"workspace.referral.reward.description.invitee": "Invitado por {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Suscríbete para desbloquear",
"workspace.referral.reward.action.view": "Ver recompensa",
"workspace.referral.reward.action.applied": "Recompensa aplicada",
"workspace.referral.reward.source.pendingInviter": "Esperando a que se suscriba",
"workspace.referral.reward.source.pendingInvitee": "Suscríbete para desbloquear la recompensa",
"workspace.referral.reward.source.available": "Recompensa lista para aplicar",
"workspace.referral.reward.source.applied": "Recompensa aplicada",
"workspace.referral.reward.status.applied": "Aplicada",
"workspace.referral.reward.status.pendingInviter": "Aplicar",
"workspace.referral.reward.status.pendingInvitee": "Aplicar",
"workspace.referral.apply.noGo": "Suscribirse a Go",
"workspace.referral.apply.preview": "Vista previa",
"workspace.referral.reward.status.applied": "Recompensa aplicada",
"workspace.referral.reward.status.pendingInviter": "Suscríbete para desbloquear",
"workspace.referral.reward.status.pendingInvitee": "Suscríbete para desbloquear",
"workspace.referral.apply.noGo": "Suscríbete para desbloquear",
"workspace.referral.apply.preview": "Ver recompensa",
"workspace.referral.apply.action": "Aplicar",
"workspace.referral.apply.confirmTitle": "Aplicar recompensa de Go",
"workspace.referral.apply.confirmBody":
"Aplica {{amount}} para reducir los contadores actuales de uso de Go de este workspace.",
"workspace.referral.apply.confirmTitle": "Aplicar recompensa",
"workspace.referral.apply.confirmBody": "Aplica {{amount}} para reducir el uso actual de este workspace.",
"workspace.referral.apply.confirmAction": "Aplicar",
"download.title": "OpenCode | Descargar",

View File

@ -678,33 +678,35 @@ export const dict = {
"workspace.referral.copyLink": "Copier le lien",
"workspace.referral.copied": "Copié",
"workspace.referral.overview.title": "Inviter des amis sur Go",
"workspace.referral.overview.subtitle": "Gagnez $5 de crédit Go lorsqu'un ami s'abonne. Il recevra également $5.",
"workspace.referral.stats.invites": "Invitations",
"workspace.referral.stats.earned": "Gagné",
"workspace.referral.stats.applied": "Utilisé",
"workspace.referral.instructions.share": "Partagez votre lien d'invitation",
"workspace.referral.instructions.subscribe": "Votre ami s'abonne à Go",
"workspace.referral.instructions.claim": "Utilisez votre crédit de $5 ci-dessous",
"workspace.referral.overview.title": "Inviter des amis",
"workspace.referral.overview.subtitle": "Gagnez $5 lorsqu'un ami s'abonne. Il recevra également $5.",
"workspace.referral.instructions.share": "Partagez votre lien de parrainage",
"workspace.referral.instructions.subscribe": "Votre ami rejoint et s'abonne à Go",
"workspace.referral.instructions.claim": "Vous recevez tous les deux un crédit d'utilisation de $5 à appliquer à vos limites d'utilisation Go",
"workspace.referral.rewards.title": "Récompenses de parrainage",
"workspace.referral.rewards.description": "Utilisez les crédits de parrainage disponibles pour votre utilisation de Go.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} récompenses utilisées.",
"workspace.referral.rewards.empty": "Aucune récompense de parrainage pour l'instant.",
"workspace.referral.table.reward": "Récompense",
"workspace.referral.table.referral": "Description",
"workspace.referral.table.date": "Date",
"workspace.referral.reward.description.inviter": "Vous avez invité {{email}}",
"workspace.referral.reward.description.invitee": "Invité par {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Abonnez-vous pour débloquer",
"workspace.referral.reward.action.view": "Voir la récompense",
"workspace.referral.reward.action.applied": "Récompense utilisée",
"workspace.referral.reward.source.pendingInviter": "En attente de son abonnement",
"workspace.referral.reward.source.pendingInvitee": "Abonnez-vous pour débloquer la récompense",
"workspace.referral.reward.source.available": "Récompense prête à utiliser",
"workspace.referral.reward.source.applied": "Récompense utilisée",
"workspace.referral.reward.status.applied": "Utilisée",
"workspace.referral.reward.status.pendingInviter": "Utiliser",
"workspace.referral.reward.status.pendingInvitee": "Utiliser",
"workspace.referral.apply.noGo": "S'abonner à Go",
"workspace.referral.apply.preview": "Aperçu",
"workspace.referral.reward.status.applied": "Récompense utilisée",
"workspace.referral.reward.status.pendingInviter": "Abonnez-vous pour débloquer",
"workspace.referral.reward.status.pendingInvitee": "Abonnez-vous pour débloquer",
"workspace.referral.apply.noGo": "Abonnez-vous pour débloquer",
"workspace.referral.apply.preview": "Voir la récompense",
"workspace.referral.apply.action": "Utiliser",
"workspace.referral.apply.confirmTitle": "Utiliser la récompense Go",
"workspace.referral.apply.confirmBody":
"Utilisez {{amount}} pour réduire les compteurs d'utilisation Go actuels de ce workspace.",
"workspace.referral.apply.confirmTitle": "Utiliser la récompense",
"workspace.referral.apply.confirmBody": "Utilisez {{amount}} pour réduire l'utilisation actuelle de ce workspace.",
"workspace.referral.apply.confirmAction": "Utiliser",
"download.title": "OpenCode | Téléchargement",

View File

@ -670,33 +670,35 @@ export const dict = {
"workspace.referral.copyLink": "Copia link",
"workspace.referral.copied": "Copiato",
"workspace.referral.overview.title": "Invita amici su Go",
"workspace.referral.overview.subtitle": "Guadagna $5 di credito Go quando un amico si abbona. Anche lui riceverà $5.",
"workspace.referral.stats.invites": "Inviti",
"workspace.referral.stats.earned": "Guadagnato",
"workspace.referral.stats.applied": "Utilizzato",
"workspace.referral.instructions.share": "Condividi il tuo link di invito",
"workspace.referral.instructions.subscribe": "Il tuo amico si abbona a Go",
"workspace.referral.instructions.claim": "Usa il tuo credito di $5 qui sotto",
"workspace.referral.overview.title": "Invita amici",
"workspace.referral.overview.subtitle": "Guadagna $5 quando un amico si abbona. Anche lui riceverà $5.",
"workspace.referral.instructions.share": "Condividi il tuo link di referral",
"workspace.referral.instructions.subscribe": "Il tuo amico si iscrive e si abbona a Go",
"workspace.referral.instructions.claim": "Entrambi ricevete un credito di utilizzo di $5 da applicare ai vostri limiti di utilizzo Go",
"workspace.referral.rewards.title": "Premi referral",
"workspace.referral.rewards.description": "Applica i crediti referral disponibili al tuo utilizzo di Go.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} premi utilizzati.",
"workspace.referral.rewards.empty": "Nessun premio referral ancora.",
"workspace.referral.table.reward": "Premio",
"workspace.referral.table.referral": "Descrizione",
"workspace.referral.table.date": "Data",
"workspace.referral.reward.description.inviter": "Hai invitato {{email}}",
"workspace.referral.reward.description.invitee": "Invitato da {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Abbonati per sbloccare",
"workspace.referral.reward.action.view": "Vedi premio",
"workspace.referral.reward.action.applied": "Premio utilizzato",
"workspace.referral.reward.source.pendingInviter": "In attesa che si abboni",
"workspace.referral.reward.source.pendingInvitee": "Abbonati per sbloccare il premio",
"workspace.referral.reward.source.available": "Premio pronto da utilizzare",
"workspace.referral.reward.source.applied": "Premio utilizzato",
"workspace.referral.reward.status.applied": "Utilizzato",
"workspace.referral.reward.status.pendingInviter": "Utilizza",
"workspace.referral.reward.status.pendingInvitee": "Utilizza",
"workspace.referral.apply.noGo": "Abbonati a Go",
"workspace.referral.apply.preview": "Anteprima",
"workspace.referral.reward.status.applied": "Premio utilizzato",
"workspace.referral.reward.status.pendingInviter": "Abbonati per sbloccare",
"workspace.referral.reward.status.pendingInvitee": "Abbonati per sbloccare",
"workspace.referral.apply.noGo": "Abbonati per sbloccare",
"workspace.referral.apply.preview": "Vedi premio",
"workspace.referral.apply.action": "Utilizza",
"workspace.referral.apply.confirmTitle": "Utilizza premio Go",
"workspace.referral.apply.confirmBody":
"Utilizza {{amount}} per ridurre i contatori di utilizzo Go attuali di questo workspace.",
"workspace.referral.apply.confirmTitle": "Utilizza premio",
"workspace.referral.apply.confirmBody": "Utilizza {{amount}} per ridurre l'utilizzo attuale di questo workspace.",
"workspace.referral.apply.confirmAction": "Utilizza",
"download.title": "OpenCode | Download",

View File

@ -670,34 +670,35 @@ export const dict = {
"workspace.referral.copyLink": "リンクをコピー",
"workspace.referral.copied": "コピーしました",
"workspace.referral.overview.title": "友達を Go に招待",
"workspace.referral.overview.subtitle":
"友達がサブスクライブすると $5 分の Go クレジットを獲得。友達にも $5 が付与されます。",
"workspace.referral.stats.invites": "招待",
"workspace.referral.stats.earned": "獲得",
"workspace.referral.stats.applied": "適用済み",
"workspace.referral.instructions.share": "招待リンクをシェア",
"workspace.referral.instructions.subscribe": "友達が Go にサブスクライブ",
"workspace.referral.instructions.claim": "下の $5 クレジットを適用",
"workspace.referral.overview.title": "友達を招待",
"workspace.referral.overview.subtitle": "友達がサブスクライブすると $5 を獲得。友達にも $5 が付与されます。",
"workspace.referral.instructions.share": "リファラルリンクをシェア",
"workspace.referral.instructions.subscribe": "友達が参加して Go にサブスクライブ",
"workspace.referral.instructions.claim": "二人とも $5 の利用クレジットを獲得し、Go の利用上限に充当できます",
"workspace.referral.rewards.title": "リファラル特典",
"workspace.referral.rewards.description": "利用可能なリファラルクレジットを Go の利用に適用します。",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} 件の特典を適用済み。",
"workspace.referral.rewards.empty": "リファラル特典はまだありません。",
"workspace.referral.table.reward": "特典",
"workspace.referral.table.referral": "説明",
"workspace.referral.table.date": "日付",
"workspace.referral.reward.description.inviter": "{{email}} を招待しました",
"workspace.referral.reward.description.invitee": "{{email}} に招待されました",
"workspace.referral.reward.action.subscribeUnlock": "サブスクライブしてアンロック",
"workspace.referral.reward.action.view": "特典を表示",
"workspace.referral.reward.action.applied": "特典を適用済み",
"workspace.referral.reward.source.pendingInviter": "友達のサブスクライブ待ち",
"workspace.referral.reward.source.pendingInvitee": "サブスクライブして特典をアンロック",
"workspace.referral.reward.source.available": "特典は適用可能です",
"workspace.referral.reward.source.applied": "特典を適用済み",
"workspace.referral.reward.status.applied": "適用済み",
"workspace.referral.reward.status.pendingInviter": "適用",
"workspace.referral.reward.status.pendingInvitee": "適用",
"workspace.referral.apply.noGo": "Goを購読する",
"workspace.referral.apply.preview": "プレビュー",
"workspace.referral.reward.status.applied": "特典を適用済み",
"workspace.referral.reward.status.pendingInviter": "サブスクライブしてアンロック",
"workspace.referral.reward.status.pendingInvitee": "サブスクライブしてアンロック",
"workspace.referral.apply.noGo": "サブスクライブしてアンロック",
"workspace.referral.apply.preview": "特典を表示",
"workspace.referral.apply.action": "適用",
"workspace.referral.apply.confirmTitle": "Go 特典を適用",
"workspace.referral.apply.confirmBody":
"{{amount}} を適用して、このワークスペースの現在の Go 使用カウンターを減らします。",
"workspace.referral.apply.confirmTitle": "特典を適用",
"workspace.referral.apply.confirmBody": "{{amount}} を適用して、このワークスペースの現在の使用量を減らします。",
"workspace.referral.apply.confirmAction": "適用",
"download.title": "OpenCode | ダウンロード",

View File

@ -662,32 +662,35 @@ export const dict = {
"workspace.referral.copyLink": "링크 복사",
"workspace.referral.copied": "복사됨",
"workspace.referral.overview.title": "친구를 Go에 초대",
"workspace.referral.overview.subtitle": "친구가 구독하면 $5의 Go 크레딧을 받으세요. 친구도 $5를 받습니다.",
"workspace.referral.stats.invites": "초대",
"workspace.referral.stats.earned": "획득",
"workspace.referral.stats.applied": "사용",
"workspace.referral.instructions.share": "초대 링크 공유",
"workspace.referral.instructions.subscribe": "친구가 Go를 구독",
"workspace.referral.instructions.claim": "아래에서 $5 크레딧 사용",
"workspace.referral.overview.title": "친구 초대",
"workspace.referral.overview.subtitle": "친구가 구독하면 $5를 받으세요. 친구도 $5를 받습니다.",
"workspace.referral.instructions.share": "추천 링크 공유",
"workspace.referral.instructions.subscribe": "친구가 가입하고 Go를 구독",
"workspace.referral.instructions.claim": "두 분 모두 $5 사용 크레딧을 받아 Go 사용 한도에 적용할 수 있습니다",
"workspace.referral.rewards.title": "추천 보상",
"workspace.referral.rewards.description": "사용 가능한 추천 크레딧을 Go 사용량에 적용합니다.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}}개 보상 사용됨.",
"workspace.referral.rewards.empty": "아직 추천 보상이 없습니다.",
"workspace.referral.table.reward": "보상",
"workspace.referral.table.referral": "설명",
"workspace.referral.table.date": "날짜",
"workspace.referral.reward.description.inviter": "{{email}} 초대됨",
"workspace.referral.reward.description.invitee": "{{email}}님이 초대",
"workspace.referral.reward.action.subscribeUnlock": "구독하여 잠금 해제",
"workspace.referral.reward.action.view": "보상 보기",
"workspace.referral.reward.action.applied": "보상 사용됨",
"workspace.referral.reward.source.pendingInviter": "친구의 구독을 기다리는 중",
"workspace.referral.reward.source.pendingInvitee": "구독하여 보상 잠금 해제",
"workspace.referral.reward.source.available": "보상 사용 가능",
"workspace.referral.reward.source.applied": "보상 사용됨",
"workspace.referral.reward.status.applied": "사용됨",
"workspace.referral.reward.status.pendingInviter": "사용",
"workspace.referral.reward.status.pendingInvitee": "사용",
"workspace.referral.apply.noGo": "Go 구독하기",
"workspace.referral.apply.preview": "미리 보기",
"workspace.referral.reward.status.applied": "보상 사용됨",
"workspace.referral.reward.status.pendingInviter": "구독하여 잠금 해제",
"workspace.referral.reward.status.pendingInvitee": "구독하여 잠금 해제",
"workspace.referral.apply.noGo": "구독하여 잠금 해제",
"workspace.referral.apply.preview": "보상 보기",
"workspace.referral.apply.action": "사용",
"workspace.referral.apply.confirmTitle": "Go 보상 사용",
"workspace.referral.apply.confirmBody": "{{amount}}를 사용하여 이 워크스페이스의 현재 Go 사용 카운터를 줄입니다.",
"workspace.referral.apply.confirmTitle": "보상 사용",
"workspace.referral.apply.confirmBody": "{{amount}}를 사용하여 이 워크스페이스의 현재 사용량을 줄입니다.",
"workspace.referral.apply.confirmAction": "사용",
"download.title": "OpenCode | 다운로드",

View File

@ -669,33 +669,35 @@ export const dict = {
"workspace.referral.copyLink": "Kopier lenke",
"workspace.referral.copied": "Kopiert",
"workspace.referral.overview.title": "Inviter venner til Go",
"workspace.referral.overview.subtitle": "Få $5 i Go-kreditt når en venn abonnerer. De får også $5.",
"workspace.referral.stats.invites": "Invitasjoner",
"workspace.referral.stats.earned": "Opptjent",
"workspace.referral.stats.applied": "Brukt",
"workspace.referral.instructions.share": "Del invitasjonslenken din",
"workspace.referral.instructions.subscribe": "Vennen din abonnerer på Go",
"workspace.referral.instructions.claim": "Bruk $5-kreditten din nedenfor",
"workspace.referral.overview.title": "Inviter venner",
"workspace.referral.overview.subtitle": "Få $5 når en venn abonnerer. De får også $5.",
"workspace.referral.instructions.share": "Del henvisningslenken din",
"workspace.referral.instructions.subscribe": "Vennen din blir med og abonnerer på Go",
"workspace.referral.instructions.claim": "Dere får begge $5 i brukskreditt å bruke på Go-bruksgrensene deres",
"workspace.referral.rewards.title": "Henvisningsbelønninger",
"workspace.referral.rewards.description": "Bruk tilgjengelige henvisningskreditter på Go-bruken din.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} belønninger brukt.",
"workspace.referral.rewards.empty": "Ingen henvisningsbelønninger ennå.",
"workspace.referral.table.reward": "Belønning",
"workspace.referral.table.referral": "Beskrivelse",
"workspace.referral.table.date": "Dato",
"workspace.referral.reward.description.inviter": "Inviterte {{email}}",
"workspace.referral.reward.description.invitee": "Invitert av {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Abonner for å låse opp",
"workspace.referral.reward.action.view": "Vis belønning",
"workspace.referral.reward.action.applied": "Belønning brukt",
"workspace.referral.reward.source.pendingInviter": "Venter på at de abonnerer",
"workspace.referral.reward.source.pendingInvitee": "Abonner for å låse opp belønningen",
"workspace.referral.reward.source.available": "Belønning klar til bruk",
"workspace.referral.reward.source.applied": "Belønning brukt",
"workspace.referral.reward.status.applied": "Brukt",
"workspace.referral.reward.status.pendingInviter": "Bruk",
"workspace.referral.reward.status.pendingInvitee": "Bruk",
"workspace.referral.apply.noGo": "Abonner på Go",
"workspace.referral.apply.preview": "Forhåndsvis",
"workspace.referral.reward.status.applied": "Belønning brukt",
"workspace.referral.reward.status.pendingInviter": "Abonner for å låse opp",
"workspace.referral.reward.status.pendingInvitee": "Abonner for å låse opp",
"workspace.referral.apply.noGo": "Abonner for å låse opp",
"workspace.referral.apply.preview": "Vis belønning",
"workspace.referral.apply.action": "Bruk",
"workspace.referral.apply.confirmTitle": "Bruk Go-belønning",
"workspace.referral.apply.confirmBody":
"Bruk {{amount}} for å redusere dette workspacets nåværende Go-forbrukstellere.",
"workspace.referral.apply.confirmTitle": "Bruk belønning",
"workspace.referral.apply.confirmBody": "Bruk {{amount}} for å redusere dette workspacets nåværende forbruk.",
"workspace.referral.apply.confirmAction": "Bruk",
"download.title": "OpenCode | Last ned",

View File

@ -670,33 +670,35 @@ export const dict = {
"workspace.referral.copyLink": "Kopiuj link",
"workspace.referral.copied": "Skopiowano",
"workspace.referral.overview.title": "Zaproś znajomych do Go",
"workspace.referral.overview.subtitle": "Zdobądź $5 kredytu Go, gdy znajomy się zasubskrybuje. On też dostanie $5.",
"workspace.referral.stats.invites": "Zaproszenia",
"workspace.referral.stats.earned": "Zdobyte",
"workspace.referral.stats.applied": "Wykorzystane",
"workspace.referral.instructions.share": "Udostępnij swój link z zaproszeniem",
"workspace.referral.instructions.subscribe": "Twój znajomy subskrybuje Go",
"workspace.referral.instructions.claim": "Wykorzystaj swój kredyt $5 poniżej",
"workspace.referral.overview.title": "Zaproś znajomych",
"workspace.referral.overview.subtitle": "Zdobądź $5, gdy znajomy się zasubskrybuje. On też dostanie $5.",
"workspace.referral.instructions.share": "Udostępnij swój link polecający",
"workspace.referral.instructions.subscribe": "Twój znajomy dołącza i subskrybuje Go",
"workspace.referral.instructions.claim": "Oboje otrzymujecie kredyt $5 do wykorzystania na limity użycia Go",
"workspace.referral.rewards.title": "Nagrody za polecenia",
"workspace.referral.rewards.description": "Wykorzystaj dostępne środki za polecenia na swoje użycie Go.",
"workspace.referral.rewards.subtitle": "Wykorzystano {{applied}} / {{total}} nagród.",
"workspace.referral.rewards.empty": "Brak nagród za polecenia.",
"workspace.referral.table.reward": "Nagroda",
"workspace.referral.table.referral": "Opis",
"workspace.referral.table.date": "Data",
"workspace.referral.reward.description.inviter": "Zaproszono {{email}}",
"workspace.referral.reward.description.invitee": "Zaproszony przez {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Subskrybuj, aby odblokować",
"workspace.referral.reward.action.view": "Zobacz nagrodę",
"workspace.referral.reward.action.applied": "Nagroda wykorzystana",
"workspace.referral.reward.source.pendingInviter": "Oczekiwanie na jego subskrypcję",
"workspace.referral.reward.source.pendingInvitee": "Subskrybuj, aby odblokować nagrodę",
"workspace.referral.reward.source.available": "Nagroda gotowa do wykorzystania",
"workspace.referral.reward.source.applied": "Nagroda wykorzystana",
"workspace.referral.reward.status.applied": "Wykorzystana",
"workspace.referral.reward.status.pendingInviter": "Wykorzystaj",
"workspace.referral.reward.status.pendingInvitee": "Wykorzystaj",
"workspace.referral.apply.noGo": "Subskrybuj Go",
"workspace.referral.apply.preview": "Podgląd",
"workspace.referral.reward.status.applied": "Nagroda wykorzystana",
"workspace.referral.reward.status.pendingInviter": "Subskrybuj, aby odblokować",
"workspace.referral.reward.status.pendingInvitee": "Subskrybuj, aby odblokować",
"workspace.referral.apply.noGo": "Subskrybuj, aby odblokować",
"workspace.referral.apply.preview": "Zobacz nagrodę",
"workspace.referral.apply.action": "Wykorzystaj",
"workspace.referral.apply.confirmTitle": "Wykorzystaj nagrodę Go",
"workspace.referral.apply.confirmBody":
"Wykorzystaj {{amount}}, aby zmniejszyć aktualne liczniki użycia Go w tym workspace.",
"workspace.referral.apply.confirmTitle": "Wykorzystaj nagrodę",
"workspace.referral.apply.confirmBody": "Wykorzystaj {{amount}}, aby zmniejszyć aktualne użycie w tym workspace.",
"workspace.referral.apply.confirmAction": "Wykorzystaj",
"download.title": "OpenCode | Pobierz",

View File

@ -676,33 +676,35 @@ export const dict = {
"workspace.referral.copyLink": "Копировать ссылку",
"workspace.referral.copied": "Скопировано",
"workspace.referral.overview.title": "Пригласите друзей в Go",
"workspace.referral.overview.subtitle": "Получите $5 кредита Go, когда друг оформит подписку. Он тоже получит $5.",
"workspace.referral.stats.invites": "Приглашения",
"workspace.referral.stats.earned": "Заработано",
"workspace.referral.stats.applied": "Использовано",
"workspace.referral.instructions.share": "Поделитесь своей ссылкой-приглашением",
"workspace.referral.instructions.subscribe": "Ваш друг оформляет подписку на Go",
"workspace.referral.instructions.claim": "Используйте свой кредит $5 ниже",
"workspace.referral.overview.title": "Пригласите друзей",
"workspace.referral.overview.subtitle": "Получите $5, когда друг оформит подписку. Он тоже получит $5.",
"workspace.referral.instructions.share": "Поделитесь своей реферальной ссылкой",
"workspace.referral.instructions.subscribe": "Ваш друг присоединяется и оформляет подписку на Go",
"workspace.referral.instructions.claim": "Вы оба получаете кредит на использование $5, который можно применить к лимитам использования Go",
"workspace.referral.rewards.title": "Реферальные награды",
"workspace.referral.rewards.description": "Используйте доступные реферальные кредиты для оплаты использования Go.",
"workspace.referral.rewards.subtitle": "Использовано {{applied}} / {{total}} наград.",
"workspace.referral.rewards.empty": "Реферальных наград пока нет.",
"workspace.referral.table.reward": "Награда",
"workspace.referral.table.referral": "Описание",
"workspace.referral.table.date": "Дата",
"workspace.referral.reward.description.inviter": "Приглашён {{email}}",
"workspace.referral.reward.description.invitee": "Приглашены пользователем {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "Оформите подписку для разблокировки",
"workspace.referral.reward.action.view": "Посмотреть награду",
"workspace.referral.reward.action.applied": "Награда использована",
"workspace.referral.reward.source.pendingInviter": "Ожидание его подписки",
"workspace.referral.reward.source.pendingInvitee": "Подпишитесь, чтобы разблокировать награду",
"workspace.referral.reward.source.available": "Награда готова к применению",
"workspace.referral.reward.source.applied": "Награда использована",
"workspace.referral.reward.status.applied": "Использована",
"workspace.referral.reward.status.pendingInviter": "Применить",
"workspace.referral.reward.status.pendingInvitee": "Применить",
"workspace.referral.apply.noGo": "Подписаться на Go",
"workspace.referral.apply.preview": редпросмотр",
"workspace.referral.reward.status.applied": "Награда использована",
"workspace.referral.reward.status.pendingInviter": "Оформите подписку для разблокировки",
"workspace.referral.reward.status.pendingInvitee": "Оформите подписку для разблокировки",
"workspace.referral.apply.noGo": "Оформите подписку для разблокировки",
"workspace.referral.apply.preview": осмотреть награду",
"workspace.referral.apply.action": "Применить",
"workspace.referral.apply.confirmTitle": "Применить награду Go",
"workspace.referral.apply.confirmBody":
"Используйте {{amount}}, чтобы уменьшить текущие счётчики использования Go этого workspace.",
"workspace.referral.apply.confirmTitle": "Применить награду",
"workspace.referral.apply.confirmBody": "Используйте {{amount}}, чтобы уменьшить текущее использование этого workspace.",
"workspace.referral.apply.confirmAction": "Применить",
"download.title": "OpenCode | Скачать",

View File

@ -665,32 +665,35 @@ export const dict = {
"workspace.referral.copyLink": "คัดลอกลิงก์",
"workspace.referral.copied": "คัดลอกแล้ว",
"workspace.referral.overview.title": "ชวนเพื่อนมาใช้ Go",
"workspace.referral.overview.subtitle": "รับเครดิต Go $5 เมื่อเพื่อนสมัครสมาชิก เพื่อนก็จะได้รับ $5 เช่นกัน",
"workspace.referral.stats.invites": "คำเชิญ",
"workspace.referral.stats.earned": "ได้รับ",
"workspace.referral.stats.applied": "ใช้แล้ว",
"workspace.referral.instructions.share": "แชร์ลิงก์เชิญของคุณ",
"workspace.referral.instructions.subscribe": "เพื่อนของคุณสมัครสมาชิก Go",
"workspace.referral.instructions.claim": "ใช้เครดิต $5 ของคุณด้านล่าง",
"workspace.referral.overview.title": "ชวนเพื่อน",
"workspace.referral.overview.subtitle": "รับ $5 เมื่อเพื่อนสมัครสมาชิก เพื่อนก็จะได้รับ $5 เช่นกัน",
"workspace.referral.instructions.share": "แชร์ลิงก์แนะนำของคุณ",
"workspace.referral.instructions.subscribe": "เพื่อนของคุณเข้าร่วมและสมัครสมาชิก Go",
"workspace.referral.instructions.claim": "คุณทั้งคู่จะได้รับเครดิตการใช้งาน $5 เพื่อใช้กับขีดจำกัดการใช้งาน Go",
"workspace.referral.rewards.title": "รางวัลการแนะนำ",
"workspace.referral.rewards.description": "ใช้เครดิตการแนะนำที่มีอยู่กับการใช้งาน Go ของคุณ",
"workspace.referral.rewards.subtitle": "ใช้แล้ว {{applied}} / {{total}} รางวัล",
"workspace.referral.rewards.empty": "ยังไม่มีรางวัลการแนะนำ",
"workspace.referral.table.reward": "รางวัล",
"workspace.referral.table.referral": "คำอธิบาย",
"workspace.referral.table.date": "วันที่",
"workspace.referral.reward.description.inviter": "เชิญ {{email}}",
"workspace.referral.reward.description.invitee": "ได้รับเชิญจาก {{email}}",
"workspace.referral.reward.action.subscribeUnlock": "สมัครสมาชิกเพื่อปลดล็อก",
"workspace.referral.reward.action.view": "ดูรางวัล",
"workspace.referral.reward.action.applied": "ใช้รางวัลแล้ว",
"workspace.referral.reward.source.pendingInviter": "รอเพื่อนสมัครสมาชิก",
"workspace.referral.reward.source.pendingInvitee": "สมัครสมาชิกเพื่อปลดล็อกรางวัล",
"workspace.referral.reward.source.available": "รางวัลพร้อมใช้งาน",
"workspace.referral.reward.source.applied": "ใช้รางวัลแล้ว",
"workspace.referral.reward.status.applied": "ใช้แล้ว",
"workspace.referral.reward.status.pendingInviter": "ใช้",
"workspace.referral.reward.status.pendingInvitee": "ใช้",
"workspace.referral.apply.noGo": "สมัครสมาชิก Go",
"workspace.referral.apply.preview": "ดูตัวอย่าง",
"workspace.referral.reward.status.applied": "ใช้รางวัลแล้ว",
"workspace.referral.reward.status.pendingInviter": "สมัครสมาชิกเพื่อปลดล็อก",
"workspace.referral.reward.status.pendingInvitee": "สมัครสมาชิกเพื่อปลดล็อก",
"workspace.referral.apply.noGo": "สมัครสมาชิกเพื่อปลดล็อก",
"workspace.referral.apply.preview": "ดูรางวัล",
"workspace.referral.apply.action": "ใช้",
"workspace.referral.apply.confirmTitle": "ใช้รางวัล Go",
"workspace.referral.apply.confirmBody": "ใช้ {{amount}} เพื่อลดตัวนับการใช้งาน Go ปัจจุบันของ workspace นี้",
"workspace.referral.apply.confirmTitle": "ใช้รางวัล",
"workspace.referral.apply.confirmBody": "ใช้ {{amount}} เพื่อลดการใช้งานปัจจุบันของ workspace นี้",
"workspace.referral.apply.confirmAction": "ใช้",
"download.title": "OpenCode | ดาวน์โหลด",

View File

@ -672,33 +672,35 @@ export const dict = {
"workspace.referral.copyLink": "Bağlantıyı Kopyala",
"workspace.referral.copied": "Kopyalandı",
"workspace.referral.overview.title": "Arkadaşlarını Go'ya davet et",
"workspace.referral.overview.subtitle": "Bir arkadaşın abone olduğunda $5 Go kredisi kazan. O da $5 alacak.",
"workspace.referral.stats.invites": "Davetler",
"workspace.referral.stats.earned": "Kazanılan",
"workspace.referral.stats.applied": "Kullanılan",
"workspace.referral.instructions.share": "Davet bağlantını paylaş",
"workspace.referral.instructions.subscribe": "Arkadaşın Go'ya abone olur",
"workspace.referral.instructions.claim": "Aşağıdaki $5 kredini kullan",
"workspace.referral.overview.title": "Arkadaşlarını davet et",
"workspace.referral.overview.subtitle": "Bir arkadaşın abone olduğunda $5 kazan. O da $5 alacak.",
"workspace.referral.instructions.share": "Referans bağlantını paylaş",
"workspace.referral.instructions.subscribe": "Arkadaşın katılır ve Go'ya abone olur",
"workspace.referral.instructions.claim": "İkiniz de Go kullanım limitlerinize uygulamak için $5 kullanım kredisi alırsınız",
"workspace.referral.rewards.title": "Davet ödülleri",
"workspace.referral.rewards.description": "Mevcut davet kredilerini Go kullanımınıza uygulayın.",
"workspace.referral.rewards.subtitle": "{{applied}} / {{total}} ödül kullanıldı.",
"workspace.referral.rewards.empty": "Henüz davet ödülü yok.",
"workspace.referral.table.reward": "Ödül",
"workspace.referral.table.referral": "Açıklama",
"workspace.referral.table.date": "Tarih",
"workspace.referral.reward.description.inviter": "{{email}} davet edildi",
"workspace.referral.reward.description.invitee": "{{email}} tarafından davet edildi",
"workspace.referral.reward.action.subscribeUnlock": "Kilidi açmak için abone ol",
"workspace.referral.reward.action.view": "Ödülü Görüntüle",
"workspace.referral.reward.action.applied": "Ödül Kullanıldı",
"workspace.referral.reward.source.pendingInviter": "Abone olması bekleniyor",
"workspace.referral.reward.source.pendingInvitee": "Ödülün kilidini açmak için abone ol",
"workspace.referral.reward.source.available": "Ödül kullanıma hazır",
"workspace.referral.reward.source.applied": "Ödül kullanıldı",
"workspace.referral.reward.status.applied": "Kullanıldı",
"workspace.referral.reward.status.pendingInviter": "Kullan",
"workspace.referral.reward.status.pendingInvitee": "Kullan",
"workspace.referral.apply.noGo": "Go'ya Abone Ol",
"workspace.referral.apply.preview": nizleme",
"workspace.referral.reward.status.applied": "Ödül Kullanıldı",
"workspace.referral.reward.status.pendingInviter": "Kilidi açmak için abone ol",
"workspace.referral.reward.status.pendingInvitee": "Kilidi açmak için abone ol",
"workspace.referral.apply.noGo": "Kilidi açmak için abone ol",
"workspace.referral.apply.preview": dülü Görüntüle",
"workspace.referral.apply.action": "Kullan",
"workspace.referral.apply.confirmTitle": "Go ödülünü kullan",
"workspace.referral.apply.confirmBody":
"Bu workspace'in mevcut Go kullanım sayaçlarını azaltmak için {{amount}} kullan.",
"workspace.referral.apply.confirmTitle": "Ödülü kullan",
"workspace.referral.apply.confirmBody": "Bu workspace'in mevcut kullanımını azaltmak için {{amount}} kullan.",
"workspace.referral.apply.confirmAction": "Kullan",
"download.title": "OpenCode | İndir",

View File

@ -645,32 +645,35 @@ export const dict = {
"workspace.referral.copyLink": "复制链接",
"workspace.referral.copied": "已复制",
"workspace.referral.overview.title": "邀请好友使用 Go",
"workspace.referral.overview.subtitle": "好友订阅后,您可获得 $5 Go 抵用金,对方也可获得 $5。",
"workspace.referral.stats.invites": "邀请",
"workspace.referral.stats.earned": "已获得",
"workspace.referral.stats.applied": "已使用",
"workspace.referral.instructions.share": "分享您的邀请链接。",
"workspace.referral.instructions.subscribe": "好友订阅 Go。",
"workspace.referral.instructions.claim": "在下方使用您的 $5 抵用金。",
"workspace.referral.overview.title": "邀请好友",
"workspace.referral.overview.subtitle": "好友订阅后,您可获得 $5对方也可获得 $5。",
"workspace.referral.instructions.share": "分享您的推荐链接。",
"workspace.referral.instructions.subscribe": "好友加入并订阅 Go。",
"workspace.referral.instructions.claim": "你们都将获得 $5 使用额度,可用于您的 Go 使用限额。",
"workspace.referral.rewards.title": "邀请奖励",
"workspace.referral.rewards.description": "将可用的邀请积分应用到您的 Go 用量。",
"workspace.referral.rewards.subtitle": "已使用 {{applied}} / {{total}} 个奖励。",
"workspace.referral.rewards.empty": "暂无邀请奖励。",
"workspace.referral.table.reward": "奖励",
"workspace.referral.table.referral": "描述",
"workspace.referral.table.date": "日期",
"workspace.referral.reward.description.inviter": "已邀请 {{email}}",
"workspace.referral.reward.description.invitee": "由 {{email}} 邀请",
"workspace.referral.reward.action.subscribeUnlock": "订阅以解锁",
"workspace.referral.reward.action.view": "查看奖励",
"workspace.referral.reward.action.applied": "奖励已使用",
"workspace.referral.reward.source.pendingInviter": "等待对方订阅",
"workspace.referral.reward.source.pendingInvitee": "订阅即可解锁奖励",
"workspace.referral.reward.source.available": "奖励可使用",
"workspace.referral.reward.source.applied": "奖励已使用",
"workspace.referral.reward.status.applied": "已使用",
"workspace.referral.reward.status.pendingInviter": "等待订阅",
"workspace.referral.reward.status.pendingInvitee": "订阅解锁",
"workspace.referral.apply.noGo": "订阅 Go",
"workspace.referral.apply.preview": "预览",
"workspace.referral.reward.status.applied": "奖励已使用",
"workspace.referral.reward.status.pendingInviter": "订阅以解锁",
"workspace.referral.reward.status.pendingInvitee": "订阅解锁",
"workspace.referral.apply.noGo": "订阅以解锁",
"workspace.referral.apply.preview": "查看奖励",
"workspace.referral.apply.action": "使用",
"workspace.referral.apply.confirmTitle": "使用 Go 奖励",
"workspace.referral.apply.confirmBody": "使用 {{amount}} 抵扣当前工作区的 Go 用量计数。",
"workspace.referral.apply.confirmTitle": "使用奖励",
"workspace.referral.apply.confirmBody": "使用 {{amount}} 抵扣当前工作区的用量。",
"workspace.referral.apply.confirmAction": "使用",
"download.title": "OpenCode | 下载",

View File

@ -645,32 +645,35 @@ export const dict = {
"workspace.referral.copyLink": "複製連結",
"workspace.referral.copied": "已複製",
"workspace.referral.overview.title": "邀請朋友使用 Go",
"workspace.referral.overview.subtitle": "朋友訂閱後,您可獲得 $5 Go 抵用金,對方也可獲得 $5。",
"workspace.referral.stats.invites": "邀請",
"workspace.referral.stats.earned": "已獲得",
"workspace.referral.stats.applied": "已使用",
"workspace.referral.instructions.share": "分享您的邀請連結。",
"workspace.referral.instructions.subscribe": "朋友訂閱 Go。",
"workspace.referral.instructions.claim": "在下方使用您的 $5 抵用金。",
"workspace.referral.overview.title": "邀請朋友",
"workspace.referral.overview.subtitle": "朋友訂閱後,您可獲得 $5對方也可獲得 $5。",
"workspace.referral.instructions.share": "分享您的推薦連結。",
"workspace.referral.instructions.subscribe": "朋友加入並訂閱 Go。",
"workspace.referral.instructions.claim": "你們都將獲得 $5 使用額度,可用於您的 Go 使用限額。",
"workspace.referral.rewards.title": "邀請獎勵",
"workspace.referral.rewards.description": "將可用的邀請點數套用至您的 Go 使用量。",
"workspace.referral.rewards.subtitle": "已使用 {{applied}} / {{total}} 個獎勵。",
"workspace.referral.rewards.empty": "暫無邀請獎勵。",
"workspace.referral.table.reward": "獎勵",
"workspace.referral.table.referral": "描述",
"workspace.referral.table.date": "日期",
"workspace.referral.reward.description.inviter": "已邀請 {{email}}",
"workspace.referral.reward.description.invitee": "由 {{email}} 邀請",
"workspace.referral.reward.action.subscribeUnlock": "訂閱以解鎖",
"workspace.referral.reward.action.view": "查看獎勵",
"workspace.referral.reward.action.applied": "獎勵已使用",
"workspace.referral.reward.source.pendingInviter": "等待對方訂閱",
"workspace.referral.reward.source.pendingInvitee": "訂閱即可解鎖獎勵",
"workspace.referral.reward.source.available": "獎勵可使用",
"workspace.referral.reward.source.applied": "獎勵已使用",
"workspace.referral.reward.status.applied": "已使用",
"workspace.referral.reward.status.pendingInviter": "等待訂閱",
"workspace.referral.reward.status.pendingInvitee": "訂閱解鎖",
"workspace.referral.apply.noGo": "訂閱 Go",
"workspace.referral.apply.preview": "預覽",
"workspace.referral.reward.status.applied": "獎勵已使用",
"workspace.referral.reward.status.pendingInviter": "訂閱以解鎖",
"workspace.referral.reward.status.pendingInvitee": "訂閱解鎖",
"workspace.referral.apply.noGo": "訂閱以解鎖",
"workspace.referral.apply.preview": "查看獎勵",
"workspace.referral.apply.action": "使用",
"workspace.referral.apply.confirmTitle": "使用 Go 獎勵",
"workspace.referral.apply.confirmBody": "使用 {{amount}} 抵扣目前工作區的 Go 用量計數。",
"workspace.referral.apply.confirmTitle": "使用獎勵",
"workspace.referral.apply.confirmBody": "使用 {{amount}} 抵扣目前工作區的用量。",
"workspace.referral.apply.confirmAction": "使用",
"download.title": "OpenCode | 下載",

View File

@ -1,5 +1,5 @@
import "./index.css"
import { createAsync, query, useLocation } from "@solidjs/router"
import { createAsync, query } from "@solidjs/router"
import { Title, Meta } from "@solidjs/meta"
import { For, createMemo, createSignal, onCleanup, onMount } from "solid-js"
//import { HttpHeader } from "@solidjs/start"
@ -224,15 +224,8 @@ function LimitsGraph(props: { href: string }) {
}
export default function Home() {
const location = useLocation()
const workspaceID = createAsync(() => checkLoggedIn())
const referralCode = createMemo(() => new URLSearchParams(location.search).get("ref") ?? undefined)
const subscribeUrl = createMemo(() => {
const code = referralCode()
const referral = code ? `?ref=${encodeURIComponent(code)}` : ""
if (workspaceID()) return `/workspace/${workspaceID()}/go${referral}`
return `/auth${referral}`
})
const subscribeUrl = createMemo(() => (workspaceID() ? `/workspace/${workspaceID()}/go` : "/auth"))
const i18n = useI18n()
const language = useLanguage()
return (

View File

@ -4,13 +4,14 @@ import { IconGo } from "~/component/icon"
import { GoReferralSection, queryGoReferral } from "~/component/go-referral"
import { useI18n } from "~/context/i18n"
import { useLanguage } from "~/context/language"
import { LiteSection } from "./lite-section"
import { LiteSection, queryLiteSubscription } from "./lite-section"
export default function () {
const params = useParams()
const i18n = useI18n()
const language = useLanguage()
const referral = createAsync(() => queryGoReferral(params.id!))
const lite = createAsync(() => queryLiteSubscription(params.id!))
return (
<div data-page="workspace-[id]">
@ -28,13 +29,9 @@ export default function () {
</section>
<div data-slot="sections">
<LiteSection />
<LiteSection lite={lite()} />
<Show when={referral()} fallback={<section>{i18n.t("workspace.lite.loading")}</section>}>
{(summary) => (
<Show when={summary().hasActiveGo || summary().rewards.length > 0}>
<GoReferralSection workspaceID={params.id!} summary={summary()} />
</Show>
)}
{(summary) => <GoReferralSection workspaceID={params.id!} summary={summary()} lite={lite()} />}
</Show>
</div>
</div>

View File

@ -68,6 +68,8 @@ export const queryLiteSubscription = query(async (workspaceID: string) => {
}, workspaceID)
}, "lite.subscription.get")
type LiteSubscription = Awaited<ReturnType<typeof queryLiteSubscription>>
const createLiteCheckoutUrl = action(
async (workspaceID: string, successUrl: string, cancelUrl: string, method?: "alipay" | "upi") => {
"use server"
@ -147,13 +149,12 @@ function LiteUsageItem(props: { label: string; usage: { usagePercent: number; re
)
}
export function LiteSection() {
export function LiteSection(props: { lite: LiteSubscription | undefined }) {
const params = useParams()
const i18n = useI18n()
const language = useLanguage()
const billingInfo = createAsync(() => queryBillingInfo(params.id!))
const isBlack = createMemo(() => billingInfo()?.subscriptionID || billingInfo()?.timeSubscriptionBooked)
const lite = createAsync(() => queryLiteSubscription(params.id!))
const sessionAction = useAction(createSessionUrl)
const sessionSubmission = useSubmission(createSessionUrl)
const checkoutAction = useAction(createLiteCheckoutUrl)
@ -193,7 +194,7 @@ export function LiteSection() {
<p data-slot="other-message">{i18n.t("workspace.lite.black.message")}</p>
</section>
</Show>
<Show when={!isBlack() && lite() && lite()!.mine && lite()!}>
<Show when={!isBlack() && props.lite && props.lite.mine && props.lite}>
{(sub) => (
<section class={styles.root}>
<div data-slot="section-title">
@ -235,12 +236,12 @@ export function LiteSection() {
</section>
)}
</Show>
<Show when={!isBlack() && lite() && !lite()!.mine}>
<Show when={!isBlack() && props.lite && !props.lite.mine}>
<section class={styles.root}>
<p data-slot="other-message">{i18n.t("workspace.lite.other.message")}</p>
</section>
</Show>
<Show when={!isBlack() && lite() === null}>
<Show when={!isBlack() && props.lite === null}>
<section class={styles.root}>
<p data-slot="promo-description">
<For

View File

@ -1,5 +1,5 @@
import { z } from "zod"
import { and, desc, eq, isNull, sql, Database } from "./drizzle"
import { and, asc, eq, isNull, sql, Database } from "./drizzle"
import { Actor } from "./actor"
import { Identifier } from "./identifier"
import { LiteTable } from "./schema/billing.sql"
@ -68,7 +68,7 @@ export namespace Referral {
const accountID = Actor.account()
const code = await ensureCode(workspaceID)
const rows = await Database.use(async (tx) => {
const [rewards, invites, inviteeReferrals, inviteeRewards, lite] = await Promise.all([
const [rewards, invites, inviteeReferral, inviteeRewards] = await Promise.all([
tx
.select({
referralID: ReferralRewardTable.referralID,
@ -91,8 +91,7 @@ export namespace Referral {
isNull(ReferralRewardTable.timeDeleted),
isNull(ReferralTable.timeDeleted),
),
)
.orderBy(desc(ReferralRewardTable.timeCreated)),
),
tx
.select({ id: ReferralTable.id, inviteeEmail: AuthTable.subject, timeCreated: ReferralTable.timeCreated })
.from(ReferralTable)
@ -102,13 +101,23 @@ export namespace Referral {
)
.where(and(eq(ReferralTable.workspaceID, workspaceID), isNull(ReferralTable.timeDeleted))),
tx
.select({ id: ReferralTable.id, inviteeEmail: AuthTable.subject, timeCreated: ReferralTable.timeCreated })
.select({ id: ReferralTable.id, inviterEmail: AuthTable.subject, timeCreated: ReferralTable.timeCreated })
.from(ReferralTable)
.innerJoin(
AuthTable,
and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")),
.leftJoin(
UserTable,
and(
eq(UserTable.workspaceID, ReferralTable.workspaceID),
eq(UserTable.role, "admin"),
isNull(UserTable.timeDeleted),
),
)
.where(and(eq(ReferralTable.inviteeAccountID, accountID), isNull(ReferralTable.timeDeleted))),
.leftJoin(
AuthTable,
and(eq(AuthTable.accountID, UserTable.accountID), eq(AuthTable.provider, "email")),
)
.where(and(eq(ReferralTable.inviteeAccountID, accountID), isNull(ReferralTable.timeDeleted)))
.orderBy(asc(UserTable.timeCreated))
.then((rows) => rows.find((row) => row.inviterEmail) ?? rows[0]),
tx
.select({ referralID: ReferralRewardTable.referralID })
.from(ReferralRewardTable)
@ -120,27 +129,25 @@ export namespace Referral {
isNull(ReferralTable.timeDeleted),
),
),
tx
.select({ id: LiteTable.id })
.from(LiteTable)
.where(and(eq(LiteTable.workspaceID, workspaceID), isNull(LiteTable.timeDeleted)))
.then((result) => result[0]),
])
return { inviteeReferrals, inviteeRewards, invites, lite, rewards }
return { inviteeReferral, inviteeRewards, invites, rewards }
})
const rewardReferralIDs = new Set(rows.rewards.map((reward) => reward.referralID))
const inviteeRewardReferralIDs = new Set(rows.inviteeRewards.map((reward) => reward.referralID))
const rewards = rows.rewards.map((reward) => ({
id: reward.referralID,
source: reward.workspaceID === reward.referralWorkspaceID ? ("inviter" as const) : ("invitee" as const),
status: reward.timeApplied ? ("applied" as const) : ("available" as const),
email: reward.inviteeEmail,
amount: microCentsToCents(reward.amount),
timeCreated: reward.timeCreated,
timeApplied: reward.timeApplied,
}))
const rewards = rows.rewards.map((reward) => {
const source = reward.workspaceID === reward.referralWorkspaceID ? ("inviter" as const) : ("invitee" as const)
return {
id: reward.referralID,
source,
status: reward.timeApplied ? ("applied" as const) : ("available" as const),
email: source === "invitee" ? (rows.inviteeReferral?.inviterEmail ?? null) : reward.inviteeEmail,
amount: microCentsToCents(reward.amount),
timeCreated: reward.timeCreated,
timeApplied: reward.timeApplied,
}
})
const pending = [
...rows.invites
.filter((referral) => !rewardReferralIDs.has(referral.id))
@ -153,28 +160,27 @@ export namespace Referral {
timeCreated: referral.timeCreated,
timeApplied: null,
})),
...rows.inviteeReferrals
.filter((referral) => !inviteeRewardReferralIDs.has(referral.id))
.map((referral) => ({
id: `${referral.id}:invitee`,
source: "invitee" as const,
status: "pending" as const,
email: referral.inviteeEmail,
amount: microCentsToCents(REWARD_AMOUNT),
timeCreated: referral.timeCreated,
timeApplied: null,
})),
...(rows.inviteeReferral && !inviteeRewardReferralIDs.has(rows.inviteeReferral.id)
? [
{
id: `${rows.inviteeReferral.id}:invitee`,
source: "invitee" as const,
status: "pending" as const,
email: rows.inviteeReferral.inviterEmail,
amount: microCentsToCents(REWARD_AMOUNT),
timeCreated: rows.inviteeReferral.timeCreated,
timeApplied: null,
},
]
: []),
]
const allRewards = [...pending, ...rewards].sort(
(a, b) => new Date(b.timeCreated).getTime() - new Date(a.timeCreated).getTime(),
)
return {
referralCode: code.code,
inviteCount: allRewards.length,
hasActiveGo: !!rows.lite,
hasReferral: allRewards.length > 0,
rewardAmount: microCentsToCents(REWARD_AMOUNT),
totalEarned: rewards.reduce((total, reward) => total + reward.amount, 0),
totalApplied: rewards.filter((reward) => reward.timeApplied).reduce((total, reward) => total + reward.amount, 0),
rewards: allRewards,
}
})

View File

@ -296,6 +296,7 @@ declare module "sst" {
"AuthStorage": cloudflare.KVNamespace
"Bucket": cloudflare.R2Bucket
"EnterpriseStorage": cloudflare.R2Bucket
"GatewayKv": cloudflare.KVNamespace
"LogProcessor": cloudflare.Service
"Stat": cloudflare.Service
"ZenData": cloudflare.R2Bucket

View File

@ -296,6 +296,7 @@ declare module "sst" {
"AuthStorage": cloudflare.KVNamespace
"Bucket": cloudflare.R2Bucket
"EnterpriseStorage": cloudflare.R2Bucket
"GatewayKv": cloudflare.KVNamespace
"LogProcessor": cloudflare.Service
"Stat": cloudflare.Service
"ZenData": cloudflare.R2Bucket

View File

@ -296,6 +296,7 @@ declare module "sst" {
"AuthStorage": cloudflare.KVNamespace
"Bucket": cloudflare.R2Bucket
"EnterpriseStorage": cloudflare.R2Bucket
"GatewayKv": cloudflare.KVNamespace
"LogProcessor": cloudflare.Service
"Stat": cloudflare.Service
"ZenData": cloudflare.R2Bucket

View File

@ -296,6 +296,7 @@ declare module "sst" {
"AuthStorage": cloudflare.KVNamespace
"Bucket": cloudflare.R2Bucket
"EnterpriseStorage": cloudflare.R2Bucket
"GatewayKv": cloudflare.KVNamespace
"LogProcessor": cloudflare.Service
"Stat": cloudflare.Service
"ZenData": cloudflare.R2Bucket

View File

@ -296,6 +296,7 @@ declare module "sst" {
"AuthStorage": cloudflare.KVNamespace
"Bucket": cloudflare.R2Bucket
"EnterpriseStorage": cloudflare.R2Bucket
"GatewayKv": cloudflare.KVNamespace
"LogProcessor": cloudflare.Service
"Stat": cloudflare.Service
"ZenData": cloudflare.R2Bucket

4
sst-env.d.ts vendored
View File

@ -106,6 +106,10 @@ declare module "sst" {
"type": "sst.sst.Secret"
"value": string
}
"GatewayKv": {
"namespaceId": string
"type": "sst.cloudflare.Kv"
}
"HONEYCOMB_API_KEY": {
"type": "sst.sst.Secret"
"value": string