feat(me): show actionable personal tasks with unavailable states
This commit is contained in:
1 parent
d9ea93a2e7
commit
a537c55793
9 files changed
+435
-12
No files matched your search
@@ -13,6 +13,7 @@ import { auth } from "@/lib/auth";
|
||||
import { avatarImageUrl, slugify } from "@/lib/format";
|
||||
import { loadUserDashboard } from "@/lib/services/user-dashboard";
|
||||
import CopyReferralButton from "./CopyReferralButton";
|
||||
import DashboardTasks from "./DashboardTasks";
|
||||
import styles from "./dashboard.module.css";
|
||||
|
||||
export async function generateMetadata() {
|
||||
@@ -96,9 +97,13 @@ export default async function MePage({
|
||||
: null;
|
||||
const referralTotal = Math.max(
|
||||
0,
|
||||
Number(referralsRows[0]?.referralsTotal ?? 0),
|
||||
Number(referralsRows?.[0]?.referralsTotal ?? 0),
|
||||
);
|
||||
const canClaim = referralTotal >= needed;
|
||||
const canClaim =
|
||||
referralsRows !== null &&
|
||||
referralTotal >= needed &&
|
||||
rewardAmount > 0 &&
|
||||
rewardKind !== null;
|
||||
const remaining = Math.max(0, needed - referralTotal);
|
||||
const onlineFriends = friends.filter((friend) => friend.online === "1");
|
||||
const date = (value: number) =>
|
||||
@@ -195,6 +200,10 @@ export default async function MePage({
|
||||
))}
|
||||
</nav>
|
||||
{alertRaw && <p className={styles.feedback}>{alertRaw}</p>}
|
||||
<DashboardTasks
|
||||
userId={userId}
|
||||
rewardAvailable={referralsRows === null ? null : canClaim}
|
||||
/>
|
||||
<section aria-label={t("wallet")} className={styles.wallet}>
|
||||
{wallet.map((currency) => (
|
||||
<SurfaceCard key={currency.kind} className={styles.currency}>
|
||||
@@ -334,6 +343,7 @@ export default async function MePage({
|
||||
</div>
|
||||
<aside className={styles.stack}>
|
||||
<SurfaceCard title={t("referrals")} bodyClassName="p-5">
|
||||
<div id="referral-reward" />
|
||||
<p>{t("referralHint")}</p>
|
||||
<div className={styles.progressLabel}>
|
||||
<strong>
|
||||
@@ -369,7 +379,11 @@ export default async function MePage({
|
||||
className={styles.referralInput}
|
||||
/>
|
||||
<CopyReferralButton value={referralLink} />
|
||||
{canClaim ? (
|
||||
{referralsRows === null ? (
|
||||
<p role="status" className="muted">
|
||||
{t("tasks.rewardUnavailable")}
|
||||
</p>
|
||||
) : canClaim ? (
|
||||
<form action={claimReferral} className={styles.claim}>
|
||||
<button type="submit" className="btn btn-primary">
|
||||
{t("claim")}
|
||||
|
||||
Reference in new issue
Block a user