From 549ec3d1e78b7c1212c5312a9a3ab025146bc237 Mon Sep 17 00:00:00 2001 From: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com> Date: Sat, 21 Sep 2024 01:01:36 +0100 Subject: [PATCH 1/2] Add InputRole as a drop down selector --- packages/lib/src/config/definitions.ts | 1 + packages/web_ui/src/bootstrap.tsx | 2 ++ packages/web_ui/src/components/InputRole.tsx | 30 ++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 packages/web_ui/src/components/InputRole.tsx diff --git a/packages/lib/src/config/definitions.ts b/packages/lib/src/config/definitions.ts index b50eeaa3..8c80f808 100644 --- a/packages/lib/src/config/definitions.ts +++ b/packages/lib/src/config/definitions.ts @@ -157,6 +157,7 @@ export class ControllerConfig extends classes.Config { "controller.default_role_id": { title: "Default role", description: "ID of role assigned by default to new users.", + inputComponent: "role", type: "number", optional: true, initialValue: 1, diff --git a/packages/web_ui/src/bootstrap.tsx b/packages/web_ui/src/bootstrap.tsx index be280ecf..36c018f4 100644 --- a/packages/web_ui/src/bootstrap.tsx +++ b/packages/web_ui/src/bootstrap.tsx @@ -7,6 +7,7 @@ import * as lib from "@clusterio/lib"; import App from "./components/App"; import BaseWebPlugin, { InputComponent } from "./BaseWebPlugin"; +import InputRole from "./components/InputRole"; import InputModPack from "./components/InputModPack"; import { Control, ControlConnector } from "./util/websocket"; @@ -109,6 +110,7 @@ async function loadPlugins(pluginInfos: lib.PluginWebpackEnvInfo[], control: Con function inputComponentsFromPlugins(plugins: Map) { const inputComponents: Record = { "mod_pack": InputModPack, + "role": InputRole, }; for (let [pluginName, plugin] of plugins) { for (const [name, Component] of Object.entries(plugin.inputComponents)) { diff --git a/packages/web_ui/src/components/InputRole.tsx b/packages/web_ui/src/components/InputRole.tsx new file mode 100644 index 00000000..94712e54 --- /dev/null +++ b/packages/web_ui/src/components/InputRole.tsx @@ -0,0 +1,30 @@ +import React, { useContext, useEffect, useState } from "react"; +import { Select } from "antd"; + +import * as lib from "@clusterio/lib"; + +import ControlContext from "./ControlContext"; +import { notifyErrorHandler } from "../util/notify"; +import { InputComponentProps } from "../BaseWebPlugin"; + +export default function InputRole(props: InputComponentProps) { + let control = useContext(ControlContext); + let [roles, setRoles] = useState([]); + + useEffect(() => { + control.send(new lib.RoleListRequest()).then(newRoles => { + setRoles(newRoles); + }).catch(notifyErrorHandler("Error fetching role list")); + }, []); + + return