import React, { useContext, useState } from "react"; import { Table, Button, Space, Tag } from "antd"; import { EditOutlined } from "@ant-design/icons"; import { ControlContext, useAccount, useRoles } from "@clusterio/web_ui"; import { RoleMappingRecord, RoleMappingDeleteRequest } from "../../messages"; import type { WebPlugin } from ".."; import RoleMappingForm from "./RoleMappingForm"; import DeletedConfirm from "./DeleteConfirm"; export default function RoleMappingsTable() { const control = useContext(ControlContext); const plugin = control.plugins.get("exp_groups") as WebPlugin; const account = useAccount(); const [roleMappings, roleMappingsSynced] = plugin.useRoleMappings(); const [groups, groupsSynced] = plugin.useGroups(); const [roles, rolesSynced] = useRoles(); const [editing, setEditing] = useState(); const [open, setOpen] = useState(false); const roleMappingArray = [...roleMappings.values()]; const roleFilters = [...roles.values()] .filter(role => roleMappingArray.some(mapping => mapping.roleIds.has(role.id))) .map(role => ({ text: role.name, value: role.id })); const groupFilters = [...groups.values()] .filter(group => roleMappingArray.some(mapping => mapping.groupId === group.id)) .map(group => ({ text: group.name, value: group.id })) return <> ( record.roleIds.has(value as number) ), render: (_: any, record: RoleMappingRecord) => ( [...record.roleIds].map(id => {roles.get(id)?.name ?? id}) ), }, { title: "Group", width: "30%", filters: groupFilters, onFilter: (value, record: RoleMappingRecord) => ( record.groupId === value ), render: (_: any, record: RoleMappingRecord) => ( groups.get(record.groupId)?.name ?? record.groupId ), }, { title: "Enabled", width: "10%", filters: [ { text: "Enabled", value: true }, { text: "Disabled", value: false }, ], onFilter: (value, record: RoleMappingRecord) => ( record.enabled === value ), render: (_: any, record: RoleMappingRecord) => ( record.enabled ? "Yes" : "No" ), }, ...(account.hasAnyPermission( "exp_groups.role_mapping.update", "exp_groups.role_mapping.delete", ) ? [{ title: "Actions", width: "10%", render: (_: any, record: any) => ( {account.hasPermission("exp_groups.role_mapping.update") &&