feat: add user-based conditional rendering for firearms and mod codes pages

This commit is contained in:
2026-04-14 11:57:43 +08:00
parent ac76150915
commit d6b8d12b2e
2 changed files with 50 additions and 29 deletions
+9
View File
@@ -1,6 +1,7 @@
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { Link } from "react-router-dom" import { Link } from "react-router-dom"
import { FirearmApi } from "@/api" import { FirearmApi } from "@/api"
import { useAppSelector } from "@/store"
import { Firearm, FirearmType } from "@/types" import { Firearm, FirearmType } from "@/types"
import { Button, Card, Col, Pagination, Row, Select, Tag, Typography } from "antd" import { Button, Card, Col, Pagination, Row, Select, Tag, Typography } from "antd"
@@ -23,6 +24,7 @@ function asDps(fireRate: number, damage: number) {
} }
export default function FirearmsPage() { export default function FirearmsPage() {
const user = useAppSelector((state) => state.auth.user)
const [page, setPage] = useState<number>(1) const [page, setPage] = useState<number>(1)
const [typeFilter, setTypeFilter] = useState<FirearmTypeFilter>(allTypeValue) const [typeFilter, setTypeFilter] = useState<FirearmTypeFilter>(allTypeValue)
const [firearms, setFirearms] = useState<Firearm[]>([]) const [firearms, setFirearms] = useState<Firearm[]>([])
@@ -66,6 +68,13 @@ export default function FirearmsPage() {
<Col key={firearm.id} xs={24} md={12} lg={8}> <Col key={firearm.id} xs={24} md={12} lg={8}>
<Card <Card
title={firearm.name} title={firearm.name}
extra={
user ? (
<Button type="link" size="small">
</Button>
) : null
}
variant="outlined" variant="outlined"
styles={{ styles={{
header: { minHeight: 56 }, header: { minHeight: 56 },
+41 -29
View File
@@ -2,11 +2,13 @@ import { useEffect, useMemo, useState } from "react"
import { Link, useSearchParams } from "react-router-dom" import { Link, useSearchParams } from "react-router-dom"
import { Button, Card, Col, Pagination, Row, Select, Space, Tag, Typography } from "antd" import { Button, Card, Col, Pagination, Row, Select, Space, Tag, Typography } from "antd"
import { ModificationApi, TagApi } from "@/api" import { ModificationApi, TagApi } from "@/api"
import { useAppSelector } from "@/store"
import { Modification } from "@/types" import { Modification } from "@/types"
const pageSize = 12 const pageSize = 12
export default function ModCodesPage() { export default function ModCodesPage() {
const user = useAppSelector((state) => state.auth.user)
const [searchParams] = useSearchParams() const [searchParams] = useSearchParams()
const firearmId = useMemo(() => searchParams.get("firearmId") || undefined, [searchParams]) const firearmId = useMemo(() => searchParams.get("firearmId") || undefined, [searchParams])
@@ -47,38 +49,41 @@ export default function ModCodesPage() {
return ( return (
<> <>
<div className="mb-4 flex items-center justify-between gap-4"> <div className="mb-4 flex items-start justify-between gap-4">
<Typography.Title level={4} className="mb-0!"> <Typography.Title level={4} className="mb-0!">
</Typography.Title> </Typography.Title>
<Space wrap> <div className="flex flex-wrap items-center justify-end gap-3">
<span></span> <Space wrap>
<Select<string[]> <span></span>
mode="multiple" <Select<string[]>
allowClear mode="multiple"
placeholder="请选择标签" allowClear
className="w-64" placeholder="请选择标签"
value={selectedTags} className="w-64"
options={tagOptions.map((tag) => ({ value: tag, label: tag }))} value={selectedTags}
onChange={(values) => { options={tagOptions.map((tag) => ({ value: tag, label: tag }))}
setSelectedTags(values) onChange={(values) => {
}} setSelectedTags(values)
/> }}
{firearmId && <Tag color="geekblue"> ID: {firearmId}</Tag>} />
{(firearmId || selectedTags.length > 0) && ( {firearmId && <Tag color="geekblue"> ID: {firearmId}</Tag>}
<Link to="/mod-codes"> {(firearmId || selectedTags.length > 0) && (
<Button <Link to="/mod-codes">
type="link" <Button
onClick={() => { type="link"
setSelectedTags([]) onClick={() => {
setPage(1) setSelectedTags([])
}} setPage(1)
> }}
>
</Button>
</Link> </Button>
)} </Link>
</Space> )}
</Space>
{user && <Button type="primary"></Button>}
</div>
</div> </div>
<div className="mb-6"> <div className="mb-6">
@@ -87,6 +92,13 @@ export default function ModCodesPage() {
<Col key={modification.id} xs={24} md={12} lg={8}> <Col key={modification.id} xs={24} md={12} lg={8}>
<Card <Card
title={modification.name} title={modification.name}
extra={
user ? (
<Button type="link" size="small">
</Button>
) : null
}
variant="outlined" variant="outlined"
styles={{ styles={{
header: { minHeight: 56 }, header: { minHeight: 56 },