fix(pages): scope order views to the active role

This commit is contained in:
zetaloop
2026-04-24 08:58:35 +08:00
parent 3b82602c38
commit ffb420f7e7
3 changed files with 120 additions and 81 deletions
+19 -6
View File
@@ -12,9 +12,17 @@ import { CheckCircle, Clock, DollarSign, ListOrdered, Star, TrendingUp, Users }
import Link from "next/link"
import { useEffect, useState } from "react"
function getOrderRole(role: "consumer" | "player" | "owner" | "admin") {
if (role === "consumer" || role === "player" || role === "owner") {
return role
}
return undefined
}
export default function DashboardPage() {
const { currentRole } = useAuthStore()
const { currentRole, user } = useAuthStore()
const isOwner = currentRole === "owner"
const orderRole = getOrderRole(currentRole)
const [player, setPlayer] = useState<Player | null>(null)
const [shop, setShop] = useState<Shop | null>(null)
@@ -28,8 +36,8 @@ export default function DashboardPage() {
Promise.all([listPlayers(), listShops(), listServices()])
.then(([players, shops, services]) => {
if (cancelled) return
setPlayer(players[0] ?? null)
setShop(shops[0] ?? null)
setPlayer(players.find((item) => item.user.id === user?.id) ?? null)
setShop(shops.find((item) => item.owner.id === user?.id) ?? null)
setServices(services)
})
.catch(() => {
@@ -42,14 +50,19 @@ export default function DashboardPage() {
return () => {
cancelled = true
}
}, [])
}, [user?.id])
useEffect(() => {
let cancelled = false
void (async () => {
try {
const orders = await Promise.resolve(listOrders())
if (!orderRole) {
setOrders([])
return
}
const orders = await Promise.resolve(listOrders({ role: orderRole }))
if (cancelled) return
setOrders(orders)
} catch {
@@ -61,7 +74,7 @@ export default function DashboardPage() {
return () => {
cancelled = true
}
}, [])
}, [orderRole])
const totalOrders = isOwner ? (shop?.totalOrders ?? 0) : (player?.totalOrders ?? 0)
const rating = isOwner ? (shop?.rating ?? 0) : (player?.rating ?? 0)