Type UsersTable columns instead of any

UsersTable declared its columns as any[], which masked a few type
mismatches. Type them as ColumnType<lib.UserDetails>[] (matching
InstanceList) and fix what surfaced: the Roles column and onFilterUser
value types (antd keys include bigint) and useUserFilter's filterDropdown
prop type (FilterDropdownProps instead of a hand-written string[] shape).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
bbassieandClaude Opus 4.8 committed 2026-06-25 00:55:47 +00:00
1 parent 82629a57c6
commit 4e94092730
2 files changed
+6 -10

No files matched your search

@@ -79,7 +79,7 @@ function matchesTriState(value: boolean, filter?: boolean) {
}
export function onFilterUser(
value: string | number | boolean,
value: boolean | React.Key,
record: UserDetails
) {
const filter = decodeFilter(String(value));
@@ -126,14 +126,9 @@ export function useUserFilter(withStatus?: boolean) {
setSelectedKeys,
confirm,
clearFilters,
}: {
selectedKeys: string[];
setSelectedKeys: (keys: string[]) => void;
confirm: FilterDropdownProps["confirm"];
clearFilters: FilterDropdownProps["clearFilters"];
}) {
}: FilterDropdownProps) {
const filter: UserFilter = selectedKeys[0]
? decodeFilter(selectedKeys[0])
? decodeFilter(String(selectedKeys[0]))
: {};
function update(next: Partial<UserFilter>) {
@@ -2,6 +2,7 @@ import React from "react";
import { Table, Tag } from "antd";
import { SearchOutlined } from "@ant-design/icons";
import { useNavigate } from "react-router-dom";
import type { ColumnType } from "antd/es/table/interface";
import * as lib from "@clusterio/lib";
@@ -91,7 +92,7 @@ export default function UsersTable(
}
}
const columns: any[] = [
const columns: ColumnType<lib.UserDetails>[] = [
{
title: "Name",
key: "name",
@@ -112,7 +113,7 @@ export default function UsersTable(
key: "roles",
filters: roleFilters,
filterMultiple: true,
onFilter: (value: string | number | boolean, record: lib.UserDetails) => (
onFilter: (value: boolean | React.Key, record: lib.UserDetails) => (
record.roleIds.has(Number(value))
),
render: (_: any, user: lib.UserDetails) => (