@expcluster/permission-groups 7.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/controller.ts +434 -0
- package/dist/browser/messages.d.ts +527 -0
- package/dist/browser/messages.d.ts.map +1 -0
- package/dist/browser/messages.js +561 -0
- package/dist/browser/messages.js.map +1 -0
- package/dist/browser/package.json +49 -0
- package/dist/browser/tsconfig.browser.tsbuildinfo +1 -0
- package/dist/browser/web/components/AssignmentForm.d.ts +7 -0
- package/dist/browser/web/components/AssignmentForm.d.ts.map +1 -0
- package/dist/browser/web/components/AssignmentForm.js +29 -0
- package/dist/browser/web/components/AssignmentForm.js.map +1 -0
- package/dist/browser/web/components/AssignmentsTable.d.ts +2 -0
- package/dist/browser/web/components/AssignmentsTable.d.ts.map +1 -0
- package/dist/browser/web/components/AssignmentsTable.js +61 -0
- package/dist/browser/web/components/AssignmentsTable.js.map +1 -0
- package/dist/browser/web/components/DeleteConfirm.d.ts +6 -0
- package/dist/browser/web/components/DeleteConfirm.d.ts.map +1 -0
- package/dist/browser/web/components/DeleteConfirm.js +7 -0
- package/dist/browser/web/components/DeleteConfirm.js.map +1 -0
- package/dist/browser/web/components/GroupForm.d.ts +5 -0
- package/dist/browser/web/components/GroupForm.d.ts.map +1 -0
- package/dist/browser/web/components/GroupForm.js +22 -0
- package/dist/browser/web/components/GroupForm.js.map +1 -0
- package/dist/browser/web/components/GroupViewPage.d.ts +2 -0
- package/dist/browser/web/components/GroupViewPage.d.ts.map +1 -0
- package/dist/browser/web/components/GroupViewPage.js +161 -0
- package/dist/browser/web/components/GroupViewPage.js.map +1 -0
- package/dist/browser/web/components/GroupsTable.d.ts +2 -0
- package/dist/browser/web/components/GroupsTable.d.ts.map +1 -0
- package/dist/browser/web/components/GroupsTable.js +29 -0
- package/dist/browser/web/components/GroupsTable.js.map +1 -0
- package/dist/browser/web/components/RoleMappingForm.d.ts +7 -0
- package/dist/browser/web/components/RoleMappingForm.d.ts.map +1 -0
- package/dist/browser/web/components/RoleMappingForm.js +32 -0
- package/dist/browser/web/components/RoleMappingForm.js.map +1 -0
- package/dist/browser/web/components/RoleMappingsTable.d.ts +2 -0
- package/dist/browser/web/components/RoleMappingsTable.d.ts.map +1 -0
- package/dist/browser/web/components/RoleMappingsTable.js +64 -0
- package/dist/browser/web/components/RoleMappingsTable.js.map +1 -0
- package/dist/browser/web/index.d.ts +13 -0
- package/dist/browser/web/index.d.ts.map +1 -0
- package/dist/browser/web/index.js +60 -0
- package/dist/browser/web/index.js.map +1 -0
- package/dist/node/controller.d.ts +37 -0
- package/dist/node/controller.d.ts.map +1 -0
- package/dist/node/controller.js +372 -0
- package/dist/node/controller.js.map +1 -0
- package/dist/node/index.d.ts +10 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +196 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/instance.d.ts +40 -0
- package/dist/node/instance.d.ts.map +1 -0
- package/dist/node/instance.js +155 -0
- package/dist/node/instance.js.map +1 -0
- package/dist/node/messages.d.ts +527 -0
- package/dist/node/messages.d.ts.map +1 -0
- package/dist/node/messages.js +620 -0
- package/dist/node/messages.js.map +1 -0
- package/dist/node/tsconfig.node.tsbuildinfo +1 -0
- package/dist/web/manifest.json +10 -0
- package/dist/web/static/exp_groups.afefd90b210f7c8e0df2.js +543 -0
- package/dist/web/static/index_ts.f7d30aa0c13ff0be393a.js +22 -0
- package/dist/web/static/main.c2178975889c1c720e80.js +653 -0
- package/dist/web/static/messages_ts.65a81c17fb37953c5d68.js +22 -0
- package/dist/web/static/package_json.aab0d3f37da0567c250c.js +22 -0
- package/dist/web/static/vendors-node_modules_pnpm_ant-design_icons_6_2_3_rea_94b50600dfe79448cabf92d130d83059_node_mo-c79f54.cf768c64b40c811ce6c9.js +273 -0
- package/dist/web/static/vendors-node_modules_pnpm_sinclair_typebox_0_30_4_node_modules_sinclair_typebox_typebox_js.7fa46fac84f2e9324e54.js +22 -0
- package/dist/web/static/web_index_tsx-webpack_sharing_consume_default_react.b4766180f4d467b7b24f.js +102 -0
- package/index.ts +183 -0
- package/instance.ts +171 -0
- package/messages.ts +692 -0
- package/module/control.lua +438 -0
- package/module/globals.lua +11 -0
- package/module/module.json +12 -0
- package/module/module_exports.lua +3 -0
- package/package.json +47 -0
- package/tsconfig.browser.json +4 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +5 -0
- package/web/components/AssignmentForm.tsx +74 -0
- package/web/components/AssignmentsTable.tsx +111 -0
- package/web/components/DeleteConfirm.tsx +16 -0
- package/web/components/GroupForm.tsx +45 -0
- package/web/components/GroupViewPage.tsx +287 -0
- package/web/components/GroupsTable.tsx +49 -0
- package/web/components/RoleMappingForm.tsx +106 -0
- package/web/components/RoleMappingsTable.tsx +107 -0
- package/web/index.tsx +108 -0
- package/webpack.config.js +34 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as messages from "../../messages";
|
|
2
|
+
export default function AssignmentForm({ open, setOpen, initial }: {
|
|
3
|
+
open: boolean;
|
|
4
|
+
setOpen: (open: boolean) => void;
|
|
5
|
+
initial?: messages.AssignmentRecord;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=AssignmentForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssignmentForm.d.ts","sourceRoot":"","sources":["../../../../web/components/AssignmentForm.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAClE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,QAAQ,CAAC,gBAAgB,CAAC;CACpC,2CA8DA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useEffect } from "react";
|
|
3
|
+
import { Modal, Form, Select } from "antd";
|
|
4
|
+
import { ControlContext, useUsers } from "@clusterio/web_ui";
|
|
5
|
+
import * as messages from "../../messages";
|
|
6
|
+
export default function AssignmentForm({ open, setOpen, initial }) {
|
|
7
|
+
const control = useContext(ControlContext);
|
|
8
|
+
const plugin = control.plugins.get("exp_groups");
|
|
9
|
+
const [groups] = plugin.useGroups();
|
|
10
|
+
const [users] = useUsers();
|
|
11
|
+
const [form] = Form.useForm();
|
|
12
|
+
function submit(values) {
|
|
13
|
+
if (initial) {
|
|
14
|
+
control.send(new messages.AssignmentUpdateRequest(new messages.AssignmentRecord(values.name, values.groupId)));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
control.send(new messages.AssignmentCreateRequest(values.name, values.groupId));
|
|
18
|
+
}
|
|
19
|
+
setOpen(false);
|
|
20
|
+
}
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (open) {
|
|
23
|
+
form.resetFields();
|
|
24
|
+
form.setFieldsValue(initial);
|
|
25
|
+
}
|
|
26
|
+
}, [open, initial]);
|
|
27
|
+
return _jsx(Modal, { title: initial ? "Edit Assignment" : "Create Assignment", open: open, onCancel: () => setOpen(false), onOk: () => form.submit(), children: _jsxs(Form, { form: form, onFinish: submit, children: [_jsx(Form.Item, { name: "name", label: "Player", rules: [{ required: true }], children: _jsx(Select, { disabled: Boolean(initial), showSearch: true, children: [...users.values()].map(u => (_jsx(Select.Option, { value: u.name, children: u.name }, u.name))) }) }), _jsx(Form.Item, { name: "groupId", label: "Group", rules: [{ required: true }], children: _jsx(Select, { children: [...groups.values()].map(g => (_jsx(Select.Option, { value: g.id, children: g.name }, g.id))) }) })] }) });
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=AssignmentForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssignmentForm.js","sourceRoot":"","sources":["../../../../web/components/AssignmentForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssignmentsTable.d.ts","sourceRoot":"","sources":["../../../../web/components/AssignmentsTable.tsx"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CAiGvC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState, useRef } from "react";
|
|
3
|
+
import { Table, Button, Space, Input } from "antd";
|
|
4
|
+
import { EditOutlined, SearchOutlined } from "@ant-design/icons";
|
|
5
|
+
import { ControlContext, useAccount } from "@clusterio/web_ui";
|
|
6
|
+
import { AssignmentDeleteRequest } from "../../messages";
|
|
7
|
+
import AssignmentForm from "./AssignmentForm";
|
|
8
|
+
import DeletedConfirm from "./DeleteConfirm";
|
|
9
|
+
const strcmp = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" }).compare;
|
|
10
|
+
export default function AssignmentsTable() {
|
|
11
|
+
const control = useContext(ControlContext);
|
|
12
|
+
const plugin = control.plugins.get("exp_groups");
|
|
13
|
+
const account = useAccount();
|
|
14
|
+
const searchInput = useRef(null);
|
|
15
|
+
const [assignments, assignmentsSynced] = plugin.useAssignments();
|
|
16
|
+
const [groups, groupsSynced] = plugin.useGroups();
|
|
17
|
+
const [editing, setEditing] = useState();
|
|
18
|
+
const [open, setOpen] = useState(false);
|
|
19
|
+
const assignmentsArray = [...assignments.values()];
|
|
20
|
+
const groupFilters = [...groups.values()]
|
|
21
|
+
.filter(group => assignmentsArray.some(assignment => assignment.groupId === group.id))
|
|
22
|
+
.map(group => ({ text: group.name, value: group.id }));
|
|
23
|
+
return _jsxs(_Fragment, { children: [_jsx(Table, { columns: [
|
|
24
|
+
{
|
|
25
|
+
title: "Player",
|
|
26
|
+
dataIndex: "name",
|
|
27
|
+
sorter: (a, b) => strcmp(a.name, b.name),
|
|
28
|
+
filterIcon: (filtered) => (_jsx(SearchOutlined, { style: { color: filtered ? "#1677ff" : undefined } })),
|
|
29
|
+
onFilter: (value, record) => (record.name.toLowerCase().includes(String(value).toLowerCase())),
|
|
30
|
+
filterDropdownProps: {
|
|
31
|
+
onOpenChange: (open) => open && setTimeout(() => searchInput.current?.select(), 100),
|
|
32
|
+
},
|
|
33
|
+
filterDropdown: ({ selectedKeys, setSelectedKeys, confirm, clearFilters }) => (_jsx("div", { style: { padding: 4 }, onKeyDown: (e) => e.stopPropagation(), children: _jsx(Input.Search, { allowClear: true, ref: searchInput, placeholder: "Search username", value: selectedKeys[0], onChange: (e) => setSelectedKeys([e.target.value]), onSearch: () => confirm({ closeDropdown: false }), onClear: () => {
|
|
34
|
+
clearFilters?.({ closeDropdown: false });
|
|
35
|
+
confirm({ closeDropdown: true });
|
|
36
|
+
} }) })),
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: "Group",
|
|
40
|
+
width: "40%",
|
|
41
|
+
filters: groupFilters,
|
|
42
|
+
onFilter: (value, record) => (record.groupId === value),
|
|
43
|
+
render: (_, a) => (groups.get(a.groupId)?.name ?? a.groupId),
|
|
44
|
+
},
|
|
45
|
+
...(account.hasAnyPermission("exp_groups.assignment.update", "exp_groups.assignment.delete") ? [{
|
|
46
|
+
title: "Actions",
|
|
47
|
+
width: "10%",
|
|
48
|
+
render: (_, record) => (_jsxs(Space, { children: [account.hasPermission("exp_groups.assignment.update") &&
|
|
49
|
+
_jsx(Button, { icon: _jsx(EditOutlined, {}), onClick: () => {
|
|
50
|
+
setEditing(record);
|
|
51
|
+
setOpen(true);
|
|
52
|
+
} }), account.hasPermission("exp_groups.assignment.delete") && _jsx(DeletedConfirm, { onConfirm: () => control.send(new AssignmentDeleteRequest(record.name)) })] })),
|
|
53
|
+
}] : []),
|
|
54
|
+
], dataSource: assignmentsArray, loading: !assignmentsSynced || !groupsSynced, rowKey: (a) => a.name, pagination: {
|
|
55
|
+
defaultPageSize: 50,
|
|
56
|
+
showSizeChanger: true,
|
|
57
|
+
pageSizeOptions: ["10", "20", "50", "100", "200"],
|
|
58
|
+
showTotal: (total) => `${total} Assignments`,
|
|
59
|
+
} }), _jsx(AssignmentForm, { open: open, setOpen: setOpen, initial: editing })] });
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=AssignmentsTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssignmentsTable.js","sourceRoot":"","sources":["../../../../web/components/AssignmentsTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteConfirm.d.ts","sourceRoot":"","sources":["../../../../web/components/DeleteConfirm.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,gBAAgB,CAAA;CAAE,2CAUpG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Popconfirm } from "antd";
|
|
3
|
+
import { DeleteOutlined } from "@ant-design/icons";
|
|
4
|
+
export default function DeletedConfirm(props) {
|
|
5
|
+
return _jsx(Popconfirm, { title: "Delete?", okText: "Delete", okButtonProps: { danger: true }, onConfirm: props.onConfirm, placement: props.placement, children: _jsx(Button, { danger: true, icon: _jsx(DeleteOutlined, {}) }) });
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=DeleteConfirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteConfirm.js","sourceRoot":"","sources":["../../../../web/components/DeleteConfirm.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAA8D;IACjG,OAAO,KAAC,UAAU,IACd,KAAK,EAAC,SAAS,EACf,MAAM,EAAC,QAAQ,EACrB,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EACzB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,YAE1B,KAAC,MAAM,IAAC,MAAM,QAAC,IAAI,EAAE,KAAC,cAAc,KAAG,GAAI,GAClC,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupForm.d.ts","sourceRoot":"","sources":["../../../../web/components/GroupForm.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACpD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACjC,2CAkCA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useEffect } from "react";
|
|
3
|
+
import { Modal, Form, Input, Switch } from "antd";
|
|
4
|
+
import { useNavigate } from "react-router-dom";
|
|
5
|
+
import { ControlContext } from "@clusterio/web_ui";
|
|
6
|
+
import * as messages from "../../messages";
|
|
7
|
+
export default function GroupForm({ open, setOpen }) {
|
|
8
|
+
const control = useContext(ControlContext);
|
|
9
|
+
const navigate = useNavigate();
|
|
10
|
+
const [form] = Form.useForm();
|
|
11
|
+
async function submit(values) {
|
|
12
|
+
const group = await control.send(new messages.GroupCreateRequest(values.name, new messages.GroupPermissions(Boolean(values.isBlacklist), [])));
|
|
13
|
+
navigate(`/permission_groups/${group.id}/view`);
|
|
14
|
+
setOpen(false);
|
|
15
|
+
}
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (open)
|
|
18
|
+
form.resetFields();
|
|
19
|
+
}, [open]);
|
|
20
|
+
return _jsx(Modal, { title: "Create Group", open: open, onCancel: () => setOpen(false), onOk: () => form.submit(), children: _jsxs(Form, { form: form, onFinish: submit, children: [_jsx(Form.Item, { name: "name", label: "Name", rules: [{ required: true }], children: _jsx(Input, {}) }), _jsx(Form.Item, { name: "isBlacklist", label: "Grant all by default", valuePropName: "checked", children: _jsx(Switch, {}) })] }) });
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=GroupForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupForm.js","sourceRoot":"","sources":["../../../../web/components/GroupForm.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAGhD;IACA,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE9B,KAAK,UAAU,MAAM,CAAC,MAAW;QAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAC/D,MAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAC3E,CAAC,CAAC;QACH,QAAQ,CAAC,sBAAsB,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,IAAI;YAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,KAAC,KAAK,IACZ,KAAK,EAAC,cAAc,EACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,YAEzB,MAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aACjC,KAAC,IAAI,CAAC,IAAI,IAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAC9D,KAAC,KAAK,KAAG,GACE,EAEZ,KAAC,IAAI,CAAC,IAAI,IAAC,IAAI,EAAC,aAAa,EAAC,KAAK,EAAC,sBAAsB,EAAC,aAAa,EAAC,SAAS,YACjF,KAAC,MAAM,KAAG,GACC,IACN,GACA,CAAC;AACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupViewPage.d.ts","sourceRoot":"","sources":["../../../../web/components/GroupViewPage.tsx"],"names":[],"mappings":"AAkCA,MAAM,CAAC,OAAO,UAAU,aAAa,4CA4PpC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { useNavigate, useParams } from "react-router-dom";
|
|
4
|
+
import { Button, Checkbox, Input, Space, Spin, Alert } from "antd";
|
|
5
|
+
import { ControlContext, useAccount, useDefaultModPack, PageLayout, PageHeader, notifyErrorHandler } from "@clusterio/web_ui";
|
|
6
|
+
import DeletedConfirm from "./DeleteConfirm";
|
|
7
|
+
import * as messages from "../../messages";
|
|
8
|
+
const DOMAIN_MAPPING = {
|
|
9
|
+
"Admin": ["admin", "cheat", "permission", "infinity", "editor", "spawn"],
|
|
10
|
+
"Building & Crafting": ["mining", "build", "craft", "deconstruct", "rotate", "entity"],
|
|
11
|
+
"Inventory": ["inventory", "stack", "cursor", "slot", "quick_bar", "item", "equipment"],
|
|
12
|
+
"Blueprints": ["blueprint", "copy", "paste", "undo", "redo", "upgrade"],
|
|
13
|
+
"Trains": ["train", "station", "schedule", "interrupt", "rolling_stock"],
|
|
14
|
+
"Circuit Network": ["combinator", "circuit", "signal", "wire", "cable", "speaker", "display_panel"],
|
|
15
|
+
"GUI": ["gui", "open"],
|
|
16
|
+
"Pins & Alerts": ["pin", "alert", "tag"],
|
|
17
|
+
"Logistics": ["logistic", "filter", "request"],
|
|
18
|
+
"Space": ["space", "surface", "planet", "rocket"],
|
|
19
|
+
"Toggles": ["toggle", "switch", "swap", "set"],
|
|
20
|
+
};
|
|
21
|
+
function getDomain(name) {
|
|
22
|
+
const n = name.toLowerCase();
|
|
23
|
+
for (const [domain, keywords] of Object.entries(DOMAIN_MAPPING)) {
|
|
24
|
+
if (keywords.some(k => n.includes(k)))
|
|
25
|
+
return domain;
|
|
26
|
+
}
|
|
27
|
+
return "Other";
|
|
28
|
+
}
|
|
29
|
+
export default function GroupViewPage() {
|
|
30
|
+
const control = useContext(ControlContext);
|
|
31
|
+
const plugin = control.plugins.get("exp_groups");
|
|
32
|
+
const navigate = useNavigate();
|
|
33
|
+
const account = useAccount();
|
|
34
|
+
const { id } = useParams();
|
|
35
|
+
const groupId = Number(id);
|
|
36
|
+
const [groups, synced] = plugin.useGroups();
|
|
37
|
+
const group = groups.get(groupId);
|
|
38
|
+
const [name, setName] = useState("");
|
|
39
|
+
const defaultModPack = useDefaultModPack();
|
|
40
|
+
const [definesJson, setDefinesJson] = useState(null);
|
|
41
|
+
const [permissionState, setPermissionState] = useState({});
|
|
42
|
+
const [baselineState, setBaselineState] = useState({});
|
|
43
|
+
const [search, setSearch] = useState("");
|
|
44
|
+
const canUpdate = Boolean(account.hasPermission("exp_groups.group.update"));
|
|
45
|
+
const canDelete = Boolean(account.hasPermission("exp_groups.group.delete"));
|
|
46
|
+
// fetch defines
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!defaultModPack?.exportManifest?.assets?.defines)
|
|
49
|
+
return;
|
|
50
|
+
if (definesJson)
|
|
51
|
+
return;
|
|
52
|
+
const assetName = defaultModPack.exportManifest.assets.defines;
|
|
53
|
+
(async () => {
|
|
54
|
+
const response = await fetch(`${staticRoot}${assetName}`);
|
|
55
|
+
const json = await response.json();
|
|
56
|
+
setDefinesJson(json.input_action ?? {});
|
|
57
|
+
})().catch(notifyErrorHandler("Failed to load permissions"));
|
|
58
|
+
}, [defaultModPack]);
|
|
59
|
+
// initialise permissions
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
if (!group || !definesJson)
|
|
62
|
+
return;
|
|
63
|
+
if (Object.keys(permissionState).length)
|
|
64
|
+
return;
|
|
65
|
+
const { isBlacklist, permissions } = group.permissions;
|
|
66
|
+
const base = Object.fromEntries(Object.keys(definesJson).map(p => [
|
|
67
|
+
p, isBlacklist !== permissions.includes(p)
|
|
68
|
+
]));
|
|
69
|
+
setPermissionState(base);
|
|
70
|
+
setBaselineState(base);
|
|
71
|
+
}, [group, definesJson]);
|
|
72
|
+
// sync name
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (group)
|
|
75
|
+
setName(group.name);
|
|
76
|
+
}, [group]);
|
|
77
|
+
// derived data
|
|
78
|
+
const allPermissions = useMemo(() => (Object.keys(definesJson ?? {})), [definesJson]);
|
|
79
|
+
const filtered = useMemo(() => allPermissions.filter(p => p.toLowerCase().includes(search.toLowerCase())), [allPermissions, search]);
|
|
80
|
+
const grouped = useMemo(() => {
|
|
81
|
+
const map = new Map();
|
|
82
|
+
for (const p of filtered) {
|
|
83
|
+
const domain = getDomain(p);
|
|
84
|
+
if (!map.has(domain))
|
|
85
|
+
map.set(domain, []);
|
|
86
|
+
map.get(domain).push(p);
|
|
87
|
+
}
|
|
88
|
+
const sorted = [...map.entries()].sort(([a], [b]) => a.localeCompare(b));
|
|
89
|
+
for (const [, perms] of sorted) {
|
|
90
|
+
perms.sort((a, b) => a.localeCompare(b));
|
|
91
|
+
}
|
|
92
|
+
return sorted;
|
|
93
|
+
}, [filtered]);
|
|
94
|
+
const permissionChanged = Object.keys(permissionState).some(k => permissionState[k] !== baselineState[k]);
|
|
95
|
+
const metaChanged = group ? name !== group.name : false;
|
|
96
|
+
const edited = permissionChanged || metaChanged;
|
|
97
|
+
function applyChanges() {
|
|
98
|
+
if (!group)
|
|
99
|
+
return;
|
|
100
|
+
const whitelist = [];
|
|
101
|
+
const blacklist = [];
|
|
102
|
+
for (const [perm, enabled] of Object.entries(permissionState)) {
|
|
103
|
+
if (enabled)
|
|
104
|
+
whitelist.push(perm);
|
|
105
|
+
else
|
|
106
|
+
blacklist.push(perm);
|
|
107
|
+
}
|
|
108
|
+
const isBlacklist = blacklist.length < whitelist.length;
|
|
109
|
+
const permissions = isBlacklist ? blacklist : whitelist;
|
|
110
|
+
control.send(new messages.GroupUpdateRequest(new messages.GroupRecord(group.id, name, new messages.GroupPermissions(isBlacklist, permissions))))
|
|
111
|
+
.then(() => setBaselineState(permissionState))
|
|
112
|
+
.catch(notifyErrorHandler("Error applying changes"));
|
|
113
|
+
}
|
|
114
|
+
function revertChanges() {
|
|
115
|
+
if (!group)
|
|
116
|
+
return;
|
|
117
|
+
setPermissionState(baselineState);
|
|
118
|
+
setName(group.name);
|
|
119
|
+
}
|
|
120
|
+
if (!synced) {
|
|
121
|
+
return _jsx(PageLayout, { nav: [{ name: "exp_groups" }, { name: String(groupId) }], children: _jsx(Spin, {}) });
|
|
122
|
+
}
|
|
123
|
+
if (!group) {
|
|
124
|
+
return _jsx(PageLayout, { nav: [{ name: "exp_groups" }, { name: String(groupId) }], children: _jsx(PageHeader, { title: "Group not found" }) });
|
|
125
|
+
}
|
|
126
|
+
return _jsxs(PageLayout, { nav: [{ name: "Permission Groups", path: "/permission_groups" }, { name: group.name }], children: [_jsx(PageHeader, { title: group.name, extra: _jsx(Space, { wrap: true, children: canDelete && _jsx(DeletedConfirm, { placement: "bottomRight", onConfirm: async () => {
|
|
127
|
+
control.send(new messages.GroupDeleteRequest(group.id));
|
|
128
|
+
navigate(`/permission_groups`);
|
|
129
|
+
} }) }) }), edited && (_jsxs("div", { style: {
|
|
130
|
+
position: "fixed",
|
|
131
|
+
bottom: 24,
|
|
132
|
+
left: "50%",
|
|
133
|
+
transform: "translateX(-50%)",
|
|
134
|
+
background: "#2a1912",
|
|
135
|
+
borderRadius: 8,
|
|
136
|
+
padding: "10px 14px",
|
|
137
|
+
display: "flex",
|
|
138
|
+
gap: 12,
|
|
139
|
+
zIndex: 1000,
|
|
140
|
+
}, children: [_jsx("span", { children: "You have unsaved changes" }), _jsxs(Space, { children: [_jsx(Button, { onClick: revertChanges, children: "Revert" }), _jsx(Button, { type: "primary", onClick: applyChanges, children: "Apply" })] })] })), _jsxs("div", { style: { marginBottom: 16, display: "flex", gap: 12 }, children: [_jsx("label", { style: { width: 110 }, children: "Name" }), _jsx(Input, { value: name, disabled: !canUpdate, onChange: e => setName(e.target.value) })] }), _jsx("h3", { children: "Permissions" }), !defaultModPack?.exportManifest?.assets?.defines && (_jsx(Alert, { type: "warning", message: "Missing export", description: "An export of the default mod pack is required to modify permissions.", style: { marginBottom: 16 }, showIcon: true })), defaultModPack?.exportManifest?.assets?.defines && !definesJson && _jsx(Spin, {}), definesJson && _jsxs(_Fragment, { children: [_jsx(Input.Search, { placeholder: "Search permissions", allowClear: true, onChange: e => setSearch(e.target.value), style: { marginBottom: 16 } }), _jsx(Space, { direction: "vertical", style: { width: "100%" }, children: grouped.map(([groupName, permissions]) => (_jsxs("div", { style: { border: "1px solid #424242", padding: 12, borderRadius: 6 }, children: [_jsxs(Space, { style: { width: "100%", justifyContent: "space-between" }, children: [_jsx("strong", { children: groupName }), _jsxs(Space, { children: [_jsx(Button, { size: "small", disabled: !canUpdate, onClick: () => {
|
|
141
|
+
setPermissionState(prev => {
|
|
142
|
+
const next = { ...prev };
|
|
143
|
+
for (const p of permissions)
|
|
144
|
+
next[p] = true;
|
|
145
|
+
return next;
|
|
146
|
+
});
|
|
147
|
+
}, children: "Select all" }), _jsx(Button, { size: "small", disabled: !canUpdate, onClick: () => {
|
|
148
|
+
setPermissionState(prev => {
|
|
149
|
+
const next = { ...prev };
|
|
150
|
+
for (const p of permissions)
|
|
151
|
+
next[p] = false;
|
|
152
|
+
return next;
|
|
153
|
+
});
|
|
154
|
+
}, children: "Clear" })] })] }), _jsx("div", { style: {
|
|
155
|
+
marginTop: 12,
|
|
156
|
+
display: "grid",
|
|
157
|
+
gridTemplateColumns: "repeat(auto-fill, minmax(250px, 1fr))",
|
|
158
|
+
gap: 8,
|
|
159
|
+
}, children: permissions.map(p => (_jsx(Checkbox, { checked: permissionState[p], disabled: !canUpdate, onChange: e => setPermissionState(prev => ({ ...prev, [p]: e.target.checked })), children: p }, p))) })] }, groupName))) })] })] });
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=GroupViewPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupViewPage.js","sourceRoot":"","sources":["../../../../web/components/GroupViewPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupsTable.d.ts","sourceRoot":"","sources":["../../../../web/components/GroupsTable.tsx"],"names":[],"mappings":"AAYA,MAAM,CAAC,OAAO,UAAU,WAAW,4CAoClC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState } from "react";
|
|
3
|
+
import { Table } from "antd";
|
|
4
|
+
import { useNavigate } from "react-router-dom";
|
|
5
|
+
import { ControlContext } from "@clusterio/web_ui";
|
|
6
|
+
import GroupForm from "./GroupForm";
|
|
7
|
+
const strcmp = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" }).compare;
|
|
8
|
+
export default function GroupsTable() {
|
|
9
|
+
const control = useContext(ControlContext);
|
|
10
|
+
const plugin = control.plugins.get("exp_groups");
|
|
11
|
+
const navigate = useNavigate();
|
|
12
|
+
const [groups, synced] = plugin.useGroups();
|
|
13
|
+
const [open, setOpen] = useState(false);
|
|
14
|
+
return _jsxs(_Fragment, { children: [_jsx(Table, { columns: [
|
|
15
|
+
{
|
|
16
|
+
title: "Name",
|
|
17
|
+
dataIndex: "name",
|
|
18
|
+
sorter: (a, b) => strcmp(a.name, b.name),
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
title: "Permissions",
|
|
22
|
+
width: "50%",
|
|
23
|
+
render: (_, g) => (`${g.permissions.permissions.length} ${g.permissions.isBlacklist ? "Disallowed" : "Allowed"}`),
|
|
24
|
+
},
|
|
25
|
+
], dataSource: [...groups.values()], loading: !synced, rowKey: (g) => g.id, pagination: false, onRow: (g) => ({
|
|
26
|
+
onClick: () => navigate(`/permission_groups/${g.id}/view`),
|
|
27
|
+
}) }), _jsx(GroupForm, { open: open, setOpen: setOpen })] });
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=GroupsTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupsTable.js","sourceRoot":"","sources":["../../../../web/components/GroupsTable.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;AAE5F,MAAM,CAAC,OAAO,UAAU,WAAW;IAClC,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAc,CAAC;IAC9D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAE5C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,8BACN,KAAC,KAAK,IACL,OAAO,EAAE;oBACR;wBACC,KAAK,EAAE,MAAM;wBACb,SAAS,EAAE,MAAM;wBACjB,MAAM,EAAE,CAAC,CAAM,EAAE,CAAc,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;qBAC1D;oBACD;wBACC,KAAK,EAAE,aAAa;wBACpB,KAAK,EAAE,KAAK;wBACZ,MAAM,EAAE,CAAC,CAAM,EAAE,CAAc,EAAE,EAAE,CAAC,CACnC,GAAG,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAC7F;qBACD;iBACD,EACD,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAChC,OAAO,EAAE,CAAC,MAAM,EAChB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EACnB,UAAU,EAAE,KAAK,EACjB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACd,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,OAAO,CAAC;iBAC1D,CAAC,GACD,EAEF,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAI,IACzC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RoleMappingRecord } from "../../messages";
|
|
2
|
+
export default function RoleMappingForm({ open, setOpen, initial }: {
|
|
3
|
+
open: boolean;
|
|
4
|
+
setOpen: (open: boolean) => void;
|
|
5
|
+
initial?: RoleMappingRecord;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=RoleMappingForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleMappingForm.d.ts","sourceRoot":"","sources":["../../../../web/components/RoleMappingForm.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAsD,MAAM,gBAAgB,CAAC;AAGvG,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACnE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC5B,2CA8FA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useEffect } from "react";
|
|
3
|
+
import { Modal, Form, Select, InputNumber, Switch, Alert } from "antd";
|
|
4
|
+
import { ControlContext, useRoles } from "@clusterio/web_ui";
|
|
5
|
+
import { RoleMappingRecord, RoleMappingCreateRequest, RoleMappingUpdateRequest } from "../../messages";
|
|
6
|
+
export default function RoleMappingForm({ open, setOpen, initial }) {
|
|
7
|
+
const control = useContext(ControlContext);
|
|
8
|
+
const plugin = control.plugins.get("exp_groups");
|
|
9
|
+
const [groups] = plugin.useGroups();
|
|
10
|
+
const [roles] = useRoles();
|
|
11
|
+
const [form] = Form.useForm();
|
|
12
|
+
function submit(values) {
|
|
13
|
+
if (initial) {
|
|
14
|
+
control.send(new RoleMappingUpdateRequest(new RoleMappingRecord(initial.id, new Set(values.roleIds), values.groupId, values.priority, values.enabled)));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
control.send(new RoleMappingCreateRequest(values.roleIds, values.groupId, values.priority, values.enabled));
|
|
18
|
+
}
|
|
19
|
+
setOpen(false);
|
|
20
|
+
}
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (open) {
|
|
23
|
+
form.resetFields();
|
|
24
|
+
form.setFieldsValue({
|
|
25
|
+
...initial,
|
|
26
|
+
roleIds: initial ? [...initial.roleIds] : [],
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}, [open, initial]);
|
|
30
|
+
return _jsxs(Modal, { title: initial ? "Edit Role Mapping" : "Create Role Mapping", open: open, onCancel: () => setOpen(false), onOk: () => form.submit(), children: [_jsx(Alert, { type: "info", showIcon: true, message: "How role mappings work", style: { marginBottom: 16 }, description: _jsxs("ul", { style: { paddingLeft: 16, margin: 0 }, children: [_jsx("li", { children: "Manual assignments always take priority." }), _jsx("li", { children: "Mappings are checked in priority order (highest first)." }), _jsxs("li", { children: ["A mapping applies only if the user has ", _jsx("b", { children: "all listed roles" }), "."] }), _jsx("li", { children: "The first matching mapping assigns the group." }), _jsx("li", { children: "If none match, the player is given all permissions." })] }) }), _jsxs(Form, { form: form, onFinish: submit, children: [_jsx(Form.Item, { name: "groupId", label: "Group", rules: [{ required: true }], children: _jsx(Select, { children: [...groups.values()].map(g => (_jsx(Select.Option, { value: g.id, children: g.name }, g.id))) }) }), _jsx(Form.Item, { name: "roleIds", label: "Roles", rules: [{ required: true }], children: _jsx(Select, { mode: "multiple", children: [...roles.values()].map(r => (_jsx(Select.Option, { value: r.id, children: r.name }, r.id))) }) }), _jsx(Form.Item, { name: "priority", label: "Priority", initialValue: 100, children: _jsx(InputNumber, { style: { width: "100%" } }) }), _jsx(Form.Item, { name: "enabled", label: "Enabled", valuePropName: "checked", initialValue: true, children: _jsx(Switch, {}) })] })] });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=RoleMappingForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleMappingForm.js","sourceRoot":"","sources":["../../../../web/components/RoleMappingForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleMappingsTable.d.ts","sourceRoot":"","sources":["../../../../web/components/RoleMappingsTable.tsx"],"names":[],"mappings":"AAWA,MAAM,CAAC,OAAO,UAAU,iBAAiB,4CA+FxC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState } from "react";
|
|
3
|
+
import { Table, Button, Space, Tag } from "antd";
|
|
4
|
+
import { EditOutlined } from "@ant-design/icons";
|
|
5
|
+
import { ControlContext, useAccount, useRoles } from "@clusterio/web_ui";
|
|
6
|
+
import { RoleMappingDeleteRequest } from "../../messages";
|
|
7
|
+
import RoleMappingForm from "./RoleMappingForm";
|
|
8
|
+
import DeletedConfirm from "./DeleteConfirm";
|
|
9
|
+
export default function RoleMappingsTable() {
|
|
10
|
+
const control = useContext(ControlContext);
|
|
11
|
+
const plugin = control.plugins.get("exp_groups");
|
|
12
|
+
const account = useAccount();
|
|
13
|
+
const [roleMappings, roleMappingsSynced] = plugin.useRoleMappings();
|
|
14
|
+
const [groups, groupsSynced] = plugin.useGroups();
|
|
15
|
+
const [roles, rolesSynced] = useRoles();
|
|
16
|
+
const [editing, setEditing] = useState();
|
|
17
|
+
const [open, setOpen] = useState(false);
|
|
18
|
+
const roleMappingArray = [...roleMappings.values()];
|
|
19
|
+
const roleFilters = [...roles.values()]
|
|
20
|
+
.filter(role => roleMappingArray.some(mapping => mapping.roleIds.has(role.id)))
|
|
21
|
+
.map(role => ({ text: role.name, value: role.id }));
|
|
22
|
+
const groupFilters = [...groups.values()]
|
|
23
|
+
.filter(group => roleMappingArray.some(mapping => mapping.groupId === group.id))
|
|
24
|
+
.map(group => ({ text: group.name, value: group.id }));
|
|
25
|
+
return _jsxs(_Fragment, { children: [_jsx(Table, { columns: [
|
|
26
|
+
{
|
|
27
|
+
title: "Priority",
|
|
28
|
+
dataIndex: "priority",
|
|
29
|
+
width: "10%",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
title: "Roles",
|
|
33
|
+
filters: roleFilters,
|
|
34
|
+
onFilter: (value, record) => (record.roleIds.has(value)),
|
|
35
|
+
render: (_, record) => ([...record.roleIds].map(id => _jsx(Tag, { children: roles.get(id)?.name ?? id }, id))),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
title: "Group",
|
|
39
|
+
width: "30%",
|
|
40
|
+
filters: groupFilters,
|
|
41
|
+
onFilter: (value, record) => (record.groupId === value),
|
|
42
|
+
render: (_, record) => (groups.get(record.groupId)?.name ?? record.groupId),
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: "Enabled",
|
|
46
|
+
width: "10%",
|
|
47
|
+
filters: [
|
|
48
|
+
{ text: "Enabled", value: true },
|
|
49
|
+
{ text: "Disabled", value: false },
|
|
50
|
+
],
|
|
51
|
+
onFilter: (value, record) => (record.enabled === value),
|
|
52
|
+
render: (_, record) => (record.enabled ? "Yes" : "No"),
|
|
53
|
+
},
|
|
54
|
+
...(account.hasAnyPermission("exp_groups.role_mapping.update", "exp_groups.role_mapping.delete") ? [{
|
|
55
|
+
title: "Actions",
|
|
56
|
+
width: "10%",
|
|
57
|
+
render: (_, record) => (_jsxs(Space, { children: [account.hasPermission("exp_groups.role_mapping.update") && _jsx(Button, { icon: _jsx(EditOutlined, {}), onClick: () => {
|
|
58
|
+
setEditing(record);
|
|
59
|
+
setOpen(true);
|
|
60
|
+
} }), account.hasPermission("exp_groups.role_mapping.delete") && _jsx(DeletedConfirm, { onConfirm: () => control.send(new RoleMappingDeleteRequest(record.id)) })] })),
|
|
61
|
+
}] : []),
|
|
62
|
+
], dataSource: roleMappingArray.sort((a, b) => b.priority - a.priority), loading: !roleMappingsSynced || !groupsSynced || !rolesSynced, rowKey: (m) => m.id, pagination: false }), _jsx(RoleMappingForm, { open: open, setOpen: setOpen, initial: editing })] });
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=RoleMappingsTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleMappingsTable.js","sourceRoot":"","sources":["../../../../web/components/RoleMappingsTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseWebPlugin } from "@clusterio/web_ui";
|
|
2
|
+
import * as messages from "../messages";
|
|
3
|
+
import * as lib from "@clusterio/lib";
|
|
4
|
+
export declare class WebPlugin extends BaseWebPlugin {
|
|
5
|
+
groups: lib.MapSubscriber<messages.GroupUpdatedEvent, number, messages.GroupRecord>;
|
|
6
|
+
assignments: lib.MapSubscriber<messages.ManualAssignmentUpdatedEvent, string, messages.AssignmentRecord>;
|
|
7
|
+
roleMappings: lib.MapSubscriber<messages.RoleMappingUpdatedEvent, number, messages.RoleMappingRecord>;
|
|
8
|
+
init(): Promise<void>;
|
|
9
|
+
useGroups(): readonly [ReadonlyMap<number, Readonly<messages.GroupRecord>>, boolean, Error | null];
|
|
10
|
+
useAssignments(): readonly [ReadonlyMap<string, Readonly<messages.AssignmentRecord>>, boolean, Error | null];
|
|
11
|
+
useRoleMappings(): readonly [ReadonlyMap<number, Readonly<messages.RoleMappingRecord>>, boolean, Error | null];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../web/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAqD,MAAM,mBAAmB,CAAC;AAGrG,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AA8DtC,qBAAa,SAAU,SAAQ,aAAa;IAC3C,MAAM,8EAAmE;IACzE,WAAW,8FAA8E;IACzF,YAAY,0FAAyE;IAE/E,IAAI;IAqBV,SAAS;IAKT,cAAc;IAKd,eAAe;CAIf"}
|