revert fb8e77bb68
Local Build and Deploy / deploy (push) Successful in 1m11s

revert style: clean up code with prettier and eslint
This commit is contained in:
remco committed 2026-07-12 21:02:03 +02:00
1 parent 27de078f54
commit e85e4d74ea
378 files changed
+20710 -22428

No files matched your search

+2 -2
View File
@@ -1,4 +1,4 @@
import { Skeleton } from "@/components/ui/skeleton";
import { Skeleton } from '@/components/ui/skeleton'
export default function OnlineLoading() {
return (
@@ -24,5 +24,5 @@ export default function OnlineLoading() {
))}
</div>
</div>
);
)
}
+47 -43
View File
@@ -1,30 +1,34 @@
"use client";
'use client'
import { Pause, Play, RefreshCw } from "lucide-react";
import { useRouter } from "next/navigation";
import { useCallback, useEffect, useState } from "react";
import { DataTable } from "@/components/admin/data-table";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { getAvatarUrl } from "@/lib/imager";
import type { DataTableColumn, PaginatedResult } from "@/types";
import { Pause, Play, RefreshCw } from 'lucide-react'
import { useRouter } from 'next/navigation'
import { useCallback, useEffect, useState } from 'react'
import { DataTable } from '@/components/admin/data-table'
import { Badge } from '@/components/ui/badge'
import { Button } from '@/components/ui/button'
import { getAvatarUrl } from '@/lib/imager'
import type { DataTableColumn, PaginatedResult } from '@/types'
interface OnlineUserRow {
id: number;
username: string;
motto: string;
look: string;
id: number
username: string
motto: string
look: string
}
const columns: DataTableColumn<OnlineUserRow>[] = [
{ key: "id", label: "ID", sortable: true },
{ key: 'id', label: 'ID', sortable: true },
{
key: "username",
label: "Username",
key: 'username',
label: 'Username',
sortable: true,
render: (_, row) => (
<div className="flex items-center gap-2">
<img src={getAvatarUrl(row.look, { size: "s", headOnly: true })} alt="" className="h-8 w-8 rounded" />
<img
src={getAvatarUrl(row.look, { size: 's', headOnly: true })}
alt=""
className="h-8 w-8 rounded"
/>
<span className="font-medium">{row.username}</span>
<span className="relative flex h-2 w-2">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-[var(--admin-success)]/70 opacity-75" />
@@ -34,59 +38,59 @@ const columns: DataTableColumn<OnlineUserRow>[] = [
),
},
{
key: "motto",
label: "Motto",
render: (value) => <span className="max-w-[250px] truncate block">{String(value) || "-"}</span>,
key: 'motto',
label: 'Motto',
render: (value) => <span className="max-w-[250px] truncate block">{String(value) || '-'}</span>,
},
{
key: "look",
label: "Avatar",
key: 'look',
label: 'Avatar',
render: (_, row) => <img src={getAvatarUrl(row.look)} alt={row.username} className="h-16" />,
},
];
]
interface OnlineTableProps {
data: PaginatedResult<OnlineUserRow>;
data: PaginatedResult<OnlineUserRow>
}
const REFRESH_INTERVAL = 15_000; // 15 seconds
const REFRESH_INTERVAL = 15_000 // 15 seconds
export function OnlineTable({ data }: OnlineTableProps) {
const router = useRouter();
const [autoRefresh, setAutoRefresh] = useState(false);
const [lastUpdated, setLastUpdated] = useState(() => new Date());
const [isRefreshing, setIsRefreshing] = useState(false);
const router = useRouter()
const [autoRefresh, setAutoRefresh] = useState(false)
const [lastUpdated, setLastUpdated] = useState(() => new Date())
const [isRefreshing, setIsRefreshing] = useState(false)
const doRefresh = useCallback(() => {
setIsRefreshing(true);
router.refresh();
setLastUpdated(new Date());
setIsRefreshing(true)
router.refresh()
setLastUpdated(new Date())
// Small delay to show spinner
setTimeout(() => setIsRefreshing(false), 500);
}, [router]);
setTimeout(() => setIsRefreshing(false), 500)
}, [router])
useEffect(() => {
if (!autoRefresh) return;
const timer = setInterval(doRefresh, REFRESH_INTERVAL);
return () => clearInterval(timer);
}, [autoRefresh, doRefresh]);
if (!autoRefresh) return
const timer = setInterval(doRefresh, REFRESH_INTERVAL)
return () => clearInterval(timer)
}, [autoRefresh, doRefresh])
// Update lastUpdated when data changes
// biome-ignore lint/correctness/useExhaustiveDependencies: explicitly chosen here, see surrounding code
useEffect(() => {
setLastUpdated(new Date());
}, [data.total]);
setLastUpdated(new Date())
}, [data.total])
return (
<div className="space-y-4">
{/* Auto-refresh controls */}
<div className="flex items-center gap-3 text-sm">
<Button variant="outline" size="sm" onClick={doRefresh} disabled={isRefreshing}>
<RefreshCw className={`mr-1.5 h-3.5 w-3.5 ${isRefreshing ? "animate-spin" : ""}`} />
<RefreshCw className={`mr-1.5 h-3.5 w-3.5 ${isRefreshing ? 'animate-spin' : ''}`} />
Refresh
</Button>
<Button
variant={autoRefresh ? "default" : "outline"}
variant={autoRefresh ? 'default' : 'outline'}
size="sm"
onClick={() => setAutoRefresh(!autoRefresh)}
>
@@ -112,5 +116,5 @@ export function OnlineTable({ data }: OnlineTableProps) {
<DataTable data={data} columns={columns} searchPlaceholder="Search by username or motto..." />
</div>
);
)
}
+10 -10
View File
@@ -1,20 +1,20 @@
import { fetchAdminList } from "@/lib/admin-list";
import { PERMS } from "@/lib/permissions";
import { OnlineTable } from "./online-table";
import { fetchAdminList } from '@/lib/admin-list'
import { PERMS } from '@/lib/permissions'
import { OnlineTable } from './online-table'
export default async function OnlineUsersPage({
params: paramsPromise,
searchParams,
}: {
params: Promise<{ locale: string }>;
searchParams: Promise<Record<string, string>>;
params: Promise<{ locale: string }>
searchParams: Promise<Record<string, string>>
}) {
const result = await fetchAdminList(
{
permission: PERMS.USERS_VIEW,
model: "user",
searchFields: ["username", "motto"],
baseWhere: { online: "1" },
model: 'user',
searchFields: ['username', 'motto'],
baseWhere: { online: '1' },
defaultPerPage: 50,
select: {
id: true,
@@ -25,7 +25,7 @@ export default async function OnlineUsersPage({
},
paramsPromise,
searchParams,
);
)
return (
<div className="space-y-6">
@@ -44,5 +44,5 @@ export default async function OnlineUsersPage({
}}
/>
</div>
);
)
}