mirror of
https://github.com/fosrl/pangolin.git
synced 2026-09-16 07:40:04 +02:00
add server side filter for server admin
This commit is contained in:
@@ -44,7 +44,6 @@ import {
|
||||
CredenzaClose
|
||||
} from "@app/components/Credenza";
|
||||
import CopyToClipboard from "@app/components/CopyToClipboard";
|
||||
import { Badge } from "./ui/badge";
|
||||
import {
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
@@ -123,6 +122,11 @@ export default function UsersTable({
|
||||
.optional()
|
||||
.catch(undefined);
|
||||
|
||||
const serverAdminFilterSchema = z
|
||||
.enum(["true", "false"])
|
||||
.optional()
|
||||
.catch(undefined);
|
||||
|
||||
function handleFilterChange(
|
||||
column: string,
|
||||
value: string | undefined | null
|
||||
@@ -310,19 +314,16 @@ export default function UsersTable({
|
||||
</>
|
||||
)}
|
||||
{row.original.serverAdmin && (
|
||||
<>
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<ShieldUserIcon className="text-primary size-5 flex-none" />
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
{t("serverAdmin")}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
{/* <Badge>{t("serverAdmin")}</Badge> */}
|
||||
</>
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<ShieldUserIcon className="text-primary size-4 flex-none" />
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>
|
||||
{t("serverAdmin")}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
)}
|
||||
</span>
|
||||
)
|
||||
@@ -431,6 +432,37 @@ export default function UsersTable({
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
accessorKey: "serverAdmin",
|
||||
friendlyName: t("serverAdmin"),
|
||||
header: () => (
|
||||
<ColumnFilterButton
|
||||
options={[
|
||||
{ value: "true", label: t("yes") },
|
||||
{ value: "false", label: t("no") }
|
||||
]}
|
||||
selectedValue={serverAdminFilterSchema.parse(
|
||||
searchParams.get("server_admin") ?? undefined
|
||||
)}
|
||||
onValueChange={(value) =>
|
||||
handleFilterChange("server_admin", value)
|
||||
}
|
||||
searchPlaceholder={t("searchPlaceholder")}
|
||||
emptyMessage={t("emptySearchOptions")}
|
||||
label={t("serverAdmin")}
|
||||
className="p-3"
|
||||
/>
|
||||
),
|
||||
cell: ({ row }) => (
|
||||
<span>
|
||||
{row.original.serverAdmin ? (
|
||||
<span>{t("yes")}</span>
|
||||
) : (
|
||||
<span>{t("no")}</span>
|
||||
)}
|
||||
</span>
|
||||
)
|
||||
},
|
||||
{
|
||||
id: "actions",
|
||||
enableHiding: false,
|
||||
@@ -459,7 +491,7 @@ export default function UsersTable({
|
||||
{t("generatePasswordResetCode")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{!r.serverAdmin && (
|
||||
{r.type === "internal" && !r.serverAdmin && (
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setPromoting(r);
|
||||
@@ -469,16 +501,18 @@ export default function UsersTable({
|
||||
{t("promoteServerAdmin")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{r.serverAdmin && r.id !== user.user.userId && (
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setDemoting(r);
|
||||
setIsDemoteModalOpen(true);
|
||||
}}
|
||||
>
|
||||
{t("demoteServerAdmin")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{r.type === "internal" &&
|
||||
r.serverAdmin &&
|
||||
r.id !== user.user.userId && (
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setDemoting(r);
|
||||
setIsDemoteModalOpen(true);
|
||||
}}
|
||||
>
|
||||
{t("demoteServerAdmin")}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setSelected(r);
|
||||
|
||||
Reference in New Issue
Block a user