diff --git a/packages/master/web/basename.jsx b/packages/master/web/basename.jsx index 99b8468a..a44e5ff7 100644 --- a/packages/master/web/basename.jsx +++ b/packages/master/web/basename.jsx @@ -1,6 +1,6 @@ // Calculate basedir of application based on current location and // the provided web_root from master server. -const location = new URL(window.web_root, document.location) +const location = new URL(window.web_root, document.location); const basename = location.pathname !== "/" ? location.pathname : ""; export default basename; diff --git a/packages/master/web/components/data-table.jsx b/packages/master/web/components/data-table.jsx index ef2791b5..7c3239cf 100644 --- a/packages/master/web/components/data-table.jsx +++ b/packages/master/web/components/data-table.jsx @@ -1,6 +1,6 @@ import React, { Component } from "react"; import { Collapse, Row, Col, Modal, Table, Form, Input, Button, Popover } from "antd"; -import PlusOutlined from "@ant-design/icons/PlusOutlined" +import PlusOutlined from "@ant-design/icons/PlusOutlined"; import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; import notify from "../util/notify"; @@ -21,7 +21,7 @@ const { Panel } = Collapse; class DataTable extends Component { constructor(props) { super(props); - if (!this.props.DataFunction) throw new Error("DataFunction not defined") + if (!this.props.DataFunction) throw new Error("DataFunction not defined"); this.state = { pagination: { pageSize: 100, @@ -32,11 +32,11 @@ class DataTable extends Component { tableData: [], showEditModal: false, record: {}, - } + }; } componentDidMount() { - this.getData() + this.getData(); } async getData(pagination, filters, sorter) { @@ -51,12 +51,12 @@ class DataTable extends Component { } sorter = {} */ - pagination = pagination || this.state.pagination - filters = filters || this.state.filters - sorter = sorter || this.state.sorter + pagination = pagination || this.state.pagination; + filters = filters || this.state.filters; + sorter = sorter || this.state.sorter; // console.log(pagination, filters, sorter) - let data = await this.props.DataFunction() + let data = await this.props.DataFunction(); // await fetchApi(this.state.dataUrl, "post", { // database: this.props.Database, // table: this.props.Table, @@ -66,14 +66,14 @@ class DataTable extends Component { // sorter, // recordIdField: this.props.RecordIdField || "Id", // Sort by this // }) - console.log(data) - data = data || {} + console.log(data); + data = data || {}; this.setState({ tableData: this.props.CustomDataFilterFunction ? this.props.CustomDataFilterFunction(data) : data, pagination: { ...pagination, ...data.pagination }, sorter, filters, - }) + }); } showEditModal(record, index) { @@ -81,40 +81,40 @@ class DataTable extends Component { this.setState({ record: record, showEditModal: true, - }) + }); } hideEditModal() { this.setState({ showEditModal: false, inserting: false, record: {} - }) + }); } async onEditFinish(values) { - console.log("Finished editing", values) + console.log("Finished editing", values); if (this.state.inserting) { // Create new record - var status = {} - await this.props.AddRecord.insert(values) + var status = {}; + await this.props.AddRecord.insert(values); } else { // Edit existing record, capable of doing sparse updates - var status = {} - await this.props.Editable.insert(values) + var status = {}; + await this.props.Editable.insert(values); } this.setState({ showEditModal: false, inserting: false, record: {}, - }) + }); // Force refresh of data - this.getData() + this.getData(); } async deleteRecord(record) { - delete record.key + delete record.key; // Delete "null" values as they seem to cause deletes to fail silently when the value is null and field type is float for (let key in record) { - if (record[key] === null) delete record[key] + if (record[key] === null) delete record[key]; } - var status = {} + var status = {}; // await fetchApi(`/api/${this.props.Server}/tableData/record`, "delete", { // database: this.props.Database, // table: this.props.Table, @@ -122,13 +122,13 @@ class DataTable extends Component { // record, // }, undefined, true) - console.log("Deleted record", status) + console.log("Deleted record", status); - if (status.ok) notify("success", status.msg, "success") - if (!status.ok) notify("error", status.msg, "error") + if (status.ok) notify("success", status.msg, "success"); + if (!status.ok) notify("error", status.msg, "error"); // Force refresh of data - this.getData() + this.getData(); } render() { let tableProps = { @@ -141,31 +141,31 @@ class DataTable extends Component { */ let externalOnRow = { ...(this.props.TableProps && this.props.TableProps.onRow && this.props.TableProps.onRow(record, rowIndex)), - } + }; return { onClick: event => { if (event.target.type !== "button") { - console.log("onRow", record, rowIndex) - if (this.props.Editable) this.showEditModal(record, rowIndex) - if (externalOnRow.onClick) externalOnRow.onClick(event) + console.log("onRow", record, rowIndex); + if (this.props.Editable) this.showEditModal(record, rowIndex); + if (externalOnRow.onClick) externalOnRow.onClick(event); } }, onDoubleClick: event => { - if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event) + if (externalOnRow.onDoubleClick) externalOnRow.onDoubleClick(event); }, onContextMenu: event => { - if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event) + if (externalOnRow.onContextMenu) externalOnRow.onContextMenu(event); }, onMouseEnter: event => { - if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event) + if (externalOnRow.onMouseEnter) externalOnRow.onMouseEnter(event); }, onMouseLeave: event => { - if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event) + if (externalOnRow.onMouseLeave) externalOnRow.onMouseLeave(event); }, - } + }; } - } - let columns = this.props.columns || this.inferColumns(this.state.tableData) + }; + let columns = this.props.columns || this.inferColumns(this.state.tableData); if (this.props.DeleteRecord && !columns.find(x => x.dataIndex === "notInUse")) columns.push({ // Add delete button on the right dataIndex: "notInUse", @@ -176,7 +176,7 @@ class DataTable extends Component { type="primary" danger onClick={() => { - this.deleteRecord(record) + this.deleteRecord(record); }} > Slett permanent @@ -188,7 +188,7 @@ class DataTable extends Component { - }) + }); return <> @@ -207,7 +207,7 @@ class DataTable extends Component { return { ...x, // Add a 4th parameter to the stock render function with all of our table data render: x.render ? (...originalParams) => x.render(...originalParams, this.state.tableData) : undefined - } + }; })} dataSource={this.state.tableData} pagination={this.state.pagination.total > 10 ? this.state.pagination : false} @@ -245,12 +245,12 @@ class DataTable extends Component { (this.state.inserting && this.props.AddRecord && this.props.AddRecord.fields) // Use externally supplied form input fields || this.props.columns.filter && this.props.columns.filter(x => x.dataIndex !== "notInUse") // Generate input fields from external columns || this.inferColumns(this.state.tableData)).map(col => { // Generate input fields from autogenerated columns (only works with existing data) - console.log(this.state.record) + console.log(this.state.record); return {col.renderEdit && col.renderEdit(this.state.record[col.dataIndex], this.state.record, undefined /* Non spec compliant, is supposed to be index of record */, this.state.tableData) || } - + ; }) } @@ -261,24 +261,24 @@ class DataTable extends Component { } - + ; } inferColumns(data) { // Look at the data and find columns and how to display them. Can be overridden by props.Columns if more customization is needed - let columns = [] + let columns = []; data.forEach(row => { Object.keys(row).filter(x => x !== "key").forEach(key => { - let existing = columns.find(col => col.key === key) + let existing = columns.find(col => col.key === key); if (!existing) { columns.push({ key: key, title: key, dataIndex: key, - }) + }); } - }) - }) - return columns + }); + }); + return columns; } } diff --git a/packages/master/web/index.jsx b/packages/master/web/index.jsx index 0cb7c8c5..5e08dc22 100644 --- a/packages/master/web/index.jsx +++ b/packages/master/web/index.jsx @@ -1,7 +1,7 @@ -import "./index.css" +import "./index.css"; -import React from "react" -import ReactDOM from "react-dom" +import React from "react"; +import ReactDOM from "react-dom"; import App from "./components/App"; diff --git a/packages/master/web/layout/index.jsx b/packages/master/web/layout/index.jsx index 5a2900ca..6685dae3 100644 --- a/packages/master/web/layout/index.jsx +++ b/packages/master/web/layout/index.jsx @@ -5,7 +5,7 @@ import { Route, Link, withRouter } from "react-router-dom"; import React, { Component } from "react"; import { Dashboard } from "../pages/dashboard"; import { InstancesTable } from "../pages/instances/instancesTable"; -import { SlavesTable } from "../pages/slaves/slavesTable" +import { SlavesTable } from "../pages/slaves/slavesTable"; import { UsersTable } from "../pages/users/usersTable"; import { RolesTable } from "../pages/roles/rolesTable"; import { PermissionsTable } from "../pages/permissions/permissionsTable"; @@ -35,7 +35,7 @@ class SiteLayout extends Component { } onCollapse() { - this.setState({ collapsed: !this.state.collapsed }) + this.setState({ collapsed: !this.state.collapsed }); } titleCase(text) { @@ -44,10 +44,10 @@ class SiteLayout extends Component { replaceParametersInUrl({ endpoint, params }) { let path = endpoint; - console.log("endpoint", params) + console.log("endpoint", params); Object.keys(params).forEach(key => { - path = path.replace(":" + key, params[key]) - }) + path = path.replace(":" + key, params[key]); + }); return path; } diff --git a/packages/master/web/pages/dashboard.jsx b/packages/master/web/pages/dashboard.jsx index 7fcf6c94..7862eca7 100644 --- a/packages/master/web/pages/dashboard.jsx +++ b/packages/master/web/pages/dashboard.jsx @@ -1,10 +1,10 @@ -import React, {Component} from "react" +import React, {Component} from "react"; export class Dashboard extends Component { constructor(props){ - super(props) + super(props); } render(){ - return

Dashboard

+ return

Dashboard

; } } \ No newline at end of file diff --git a/packages/master/web/pages/instances/instance.jsx b/packages/master/web/pages/instances/instance.jsx index 81024e50..83aa6b2b 100644 --- a/packages/master/web/pages/instances/instance.jsx +++ b/packages/master/web/pages/instances/instance.jsx @@ -1,5 +1,5 @@ -import React, { Component } from "react" -import { Card, Button, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space } from "antd" +import React, { Component } from "react"; +import { Card, Button, Popover, Select, Divider, Input, Form, Col, Row, Checkbox, Space } from "antd"; import { listSlaves, listInstances, @@ -12,146 +12,146 @@ import { getInstanceConfig, setInstanceConfigField, sendRcon, -} from "../../util/wslink" -import DataTable from "../../components/data-table" -import notify from "../../util/notify" -import DeleteOutlined from "@ant-design/icons/DeleteOutlined" -import EditOutlined from "@ant-design/icons/EditOutlined" -import PlusOutlined from "@ant-design/icons/PlusOutlined" +} from "../../util/wslink"; +import DataTable from "../../components/data-table"; +import notify from "../../util/notify"; +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; +import EditOutlined from "@ant-design/icons/EditOutlined"; +import PlusOutlined from "@ant-design/icons/PlusOutlined"; -const { Option } = Select +const { Option } = Select; export class InstanceView extends Component { constructor(props) { - super(props) + super(props); this.state = { instance: {}, slaves: [], logLines: [{ message: "Logviewer. Follows the latest logs if you scroll to the bottom. Does not store logs past the lifetime of this tab" }], - } - this.messagesEndRef = React.createRef() + }; + this.messagesEndRef = React.createRef(); } navigate(url) { this.props.history.push(url); } async componentDidMount() { - let id = this.props.match.params.id + let id = this.props.match.params.id; - await this.getData() + await this.getData(); await setInstanceOutputSubscriptions({ instance_id: Number(id), - }) + }); window.instanceOutputEventHandler = ({ instance_id, output }) => { if (instance_id === Number(id)) { this.setState({ logLines: [...this.state.logLines, output], - }) + }); } // Automatically scroll to bottom on new line. // this.messagesEndRef.current.scrollIntoView({ behavior: 'smooth' }) - } + }; } async getData() { - let id = this.props.match.params.id + let id = this.props.match.params.id; - let instances = await listInstances() - let slaves = await listSlaves() + let instances = await listInstances(); + let slaves = await listSlaves(); this.setState({ instance: instances.find(x => x.id === Number(id)), slaves, - }) + }); - let config = await getInstanceConfig({ instance_id: Number(id) }) - console.log(config) + let config = await getInstanceConfig({ instance_id: Number(id) }); + console.log(config); this.setState({ config - }) + }); } async start() { this.setState({ starting: true, - }) + }); try { await startInstance({ instance_id: this.state.instance.id, save: null, - }) + }); } catch (e) { - notify("Error starting instance", "error", e.message) + notify("Error starting instance", "error", e.message); return this.setState({ starting: false, - }) + }); } - notify("Instance started") + notify("Instance started"); this.setState({ starting: false, - }) - this.getData() + }); + this.getData(); } async stop() { this.setState({ stopping: true, - }) + }); try { await stopInstance({ instance_id: this.state.instance.id, - }) + }); } catch (e) { - notify("Error stopping instance", "error", e.message) + notify("Error stopping instance", "error", e.message); return this.setState({ stopping: false, - }) + }); } - notify("Instance stopped") + notify("Instance stopped"); this.setState({ stopping: false, - }) - this.getData() + }); + this.getData(); } async createSave() { this.setState({ creatingSave: true, - }) + }); try { await createSave({ instance_id: this.state.instance.id, - }) + }); } catch (e) { - notify("Error creating save", "error", e.message) + notify("Error creating save", "error", e.message); return this.setState({ creatingSave: false, - }) + }); } - notify("Save created", "success") + notify("Save created", "success"); this.setState({ creatingSave: false, - }) + }); } async onConfigEditFinish(values) { - console.log("Completed config edit with", values) + console.log("Completed config edit with", values); for (let k in values) { if (values[k] !== this.getInstanceConfigAsKvObject(this.state.config)[k]) { - let value = values[k] - if (typeof value === "boolean") value = value.toString() - console.log("Setting", k, value) + let value = values[k]; + if (typeof value === "boolean") value = value.toString(); + console.log("Setting", k, value); await setInstanceConfigField({ instance_id: this.state.instance.id, field: k, value: value, - }) + }); } } - notify("Set configuration fields", "success") + notify("Set configuration fields", "success"); this.setState({ editingConfig: false - }) - this.getData() + }); + this.getData(); } render() { - console.log(this.state) - let { instance, slaves } = this.state + console.log(this.state); + let { instance, slaves } = this.state; let slave = slaves && slaves.find(x => x.id === instance.assigned_slave); return

{instance.name}

@@ -184,9 +184,9 @@ export class InstanceView extends Component { width: "200px" }} onChange={async newSlaveId => { - let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }) - notify("Assigned to slave", "success") - this.getData() + let result = await assignInstance({ instance_id: instance.id, slave_id: newSlaveId }); + notify("Assigned to slave", "success"); + this.getData(); }} > {this.state.slaves.map(slave =>
+ ; } getInstanceConfigAsKvObject(config) { - let object = {} + let object = {}; for (let group of config.serialized_config.groups) { for (let fieldName in group.fields) { - object[group.name + "." + fieldName] = group.fields[fieldName] + object[group.name + "." + fieldName] = group.fields[fieldName]; } } - return object + return object; } renderConfig(config) { const layout = { @@ -316,33 +316,33 @@ export class InstanceView extends Component { )} - + ; } } function renderDisplayField(value) { if (typeof value === "object") { - return JSON.stringify(value) + return JSON.stringify(value); } if (typeof value === "boolean") { - return + return ; } - return value.toString() + return value.toString(); } function renderFormField(value) { if (typeof value === "object") { - return + return ; } if (typeof value === "boolean") { - return + return ; } - return + return ; } class ObjectInput extends Component { constructor(props) { - super(props) - console.log(this.props) + super(props); + console.log(this.props); /* value: { auto_pause: false, @@ -351,26 +351,26 @@ class ObjectInput extends Component { id: "factorio.settings", onChange: f() */ - this.state = {} + this.state = {}; } onChange(e, key) { if (e.target.type === "checkbox") { // if (e.target.checked !== undefined) { // Its a checkbox, set value to true/false - let value = { ...this.props.value } - value[key] = e.target.checked || false - this.props.onChange(value) + let value = { ...this.props.value }; + value[key] = e.target.checked || false; + this.props.onChange(value); } else if (e.target.type === "text") { // } else if (e.target.value !== undefined) { // its probably a text input - let value = { ...this.props.value } - value[key] = e.target.value || "" - this.props.onChange(value) + let value = { ...this.props.value }; + value[key] = e.target.value || ""; + this.props.onChange(value); } } render() { - let { value } = this.props - let ret = [] + let { value } = this.props; + let ret = []; for (let key in value) { if (typeof value[key] === "boolean") { ret.push( {key} - ) + ); } else if (typeof value[key] === "string") { ret.push(
this.onChange(e, key)} />
- ) + ); } } ret.push( this.setState({ newInput: e.target.value })} /> } @@ -414,16 +414,16 @@ class ObjectInput extends Component { > Add property - ) - return {ret} + ); + return {ret}; } } class ConfigFormItem extends Component { constructor(props) { - super(props) + super(props); } render() { - let { field, group, editingConfig } = this.props + let { field, group, editingConfig } = this.props; return + ; } } diff --git a/packages/master/web/pages/instances/instancesTable.jsx b/packages/master/web/pages/instances/instancesTable.jsx index d73e4f88..dbdecdc6 100644 --- a/packages/master/web/pages/instances/instancesTable.jsx +++ b/packages/master/web/pages/instances/instancesTable.jsx @@ -1,12 +1,12 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, createInstance } from "../../util/wslink" -import DataTable from "../../components/data-table" -const config = require("@clusterio/lib/config") +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, createInstance } from "../../util/wslink"; +import DataTable from "../../components/data-table"; +const config = require("@clusterio/lib/config"); export class InstancesTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -23,11 +23,11 @@ export class InstancesTable extends Component { insert: async args => { let instanceConfig = new config.InstanceConfig(); await instanceConfig.init(); - console.log("Base config", instanceConfig) + console.log("Base config", instanceConfig); instanceConfig.set("instance.name", args.name); let serialized_config = instanceConfig.serialize(); - let response = await createInstance(serialized_config) - console.log("Created instance", response) + let response = await createInstance(serialized_config); + console.log("Created instance", response); } }} DataFunction={listInstances} @@ -35,12 +35,12 @@ export class InstancesTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/instances/${record.id}/view`) + this.navigate(`/instances/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/permissions/permissionsTable.jsx b/packages/master/web/pages/permissions/permissionsTable.jsx index 8bcf995c..cb24533c 100644 --- a/packages/master/web/pages/permissions/permissionsTable.jsx +++ b/packages/master/web/pages/permissions/permissionsTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, listPermissions } from "../../util/wslink" -import DataTable from "../../components/data-table" +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, listPermissions } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class PermissionsTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -19,12 +19,12 @@ export class PermissionsTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/permissions/${record.id}/view`) + this.navigate(`/permissions/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/roles/role.jsx b/packages/master/web/pages/roles/role.jsx index 625a25e0..b022ff46 100644 --- a/packages/master/web/pages/roles/role.jsx +++ b/packages/master/web/pages/roles/role.jsx @@ -1,7 +1,7 @@ -import React, { Component } from "react" +import React, { Component } from "react"; -import { Card, Button, Popover, Select, Transfer } from "antd" -import DeleteOutlined from "@ant-design/icons/DeleteOutlined" +import { Card, Button, Popover, Select, Transfer } from "antd"; +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; import { listSlaves, @@ -21,36 +21,36 @@ import { setRoles, listPermissions, updateRole, -} from "../../util/wslink" -import DataTable from "../../components/data-table" -import notify from "../../util/notify" +} from "../../util/wslink"; +import DataTable from "../../components/data-table"; +import notify from "../../util/notify"; -const { Option } = Select +const { Option } = Select; export class RoleView extends Component { constructor(props) { - super(props) + super(props); this.state = { role: {} - } - this.messagesEndRef = React.createRef() + }; + this.messagesEndRef = React.createRef(); } navigate(url) { this.props.history.push(url); } async componentDidMount() { - await this.getData() + await this.getData(); } async getData() { - let id = this.props.match.params.id + let id = this.props.match.params.id; - let roles = await listRoles() - let permissions = await listPermissions() + let roles = await listRoles(); + let permissions = await listPermissions(); this.setState({ role: roles.find(x => x.id === Number(id)), permissions, - }) + }); } async handleChange(targetKeys) { this.setState({ @@ -62,12 +62,12 @@ export class RoleView extends Component { let response = await updateRole({ ...this.state.role, permissions: targetKeys, - }) - console.log("Updated user roles", response) + }); + console.log("Updated user roles", response); } render() { - console.log(this.state) - let { role, permissions } = this.state + console.log(this.state); + let { role, permissions } = this.state; return { - await deleteUser({ role: role.name }) - notify("Deleted role " + role.name, "success") - this.navigate("/roles") + await deleteUser({ role: role.name }); + notify("Deleted role " + role.name, "success"); + this.navigate("/roles"); }} > Delete this role permanently @@ -108,6 +108,6 @@ export class RoleView extends Component { onChange={this.handleChange.bind(this)} render={item => item.name} /> - + ; } } diff --git a/packages/master/web/pages/roles/rolesTable.jsx b/packages/master/web/pages/roles/rolesTable.jsx index 6dd3af92..689ab45d 100644 --- a/packages/master/web/pages/roles/rolesTable.jsx +++ b/packages/master/web/pages/roles/rolesTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, listRoles, createRole } from "../../util/wslink" -import DataTable from "../../components/data-table" +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, listRoles, createRole } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class RolesTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -23,8 +23,8 @@ export class RolesTable extends Component { title: "Description" }], insert: async args => { - let response = await createRole({name: args.name, description: args.description}) - console.log("Created role",response) + let response = await createRole({name: args.name, description: args.description}); + console.log("Created role",response); } }} DataFunction={listRoles} @@ -32,12 +32,12 @@ export class RolesTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/roles/${record.id}/view`) + this.navigate(`/roles/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/settings/settings.jsx b/packages/master/web/pages/settings/settings.jsx index e725d01b..9e42a831 100644 --- a/packages/master/web/pages/settings/settings.jsx +++ b/packages/master/web/pages/settings/settings.jsx @@ -1,5 +1,5 @@ -import React, { Component } from "react" -import { Card, Button, Input, Form } from "antd" +import React, { Component } from "react"; +import { Card, Button, Input, Form } from "antd"; const layout = { labelCol: { @@ -18,16 +18,16 @@ const tailLayout = { export class Settings extends Component { constructor(props) { - super(props) + super(props); this.state = { role: {} - } + }; } navigate(url) { this.props.history.push(url); } render() { - console.log(this.state) + console.log(this.state); return

Web interface settings

{ - console.log("Saving settings",values) + console.log("Saving settings",values); for(let key of Object.keys(values)){ - localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")) + localStorage.setItem(key, values[key].replace("https://", "wss://").replace("http://", "ws://")); } // Force refresh to apply changes - document.location = document.location + document.location = document.location; }} >
-
+ ; } } diff --git a/packages/master/web/pages/slaves/slavesTable.jsx b/packages/master/web/pages/slaves/slavesTable.jsx index f0450be1..38856bf2 100644 --- a/packages/master/web/pages/slaves/slavesTable.jsx +++ b/packages/master/web/pages/slaves/slavesTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" +import React, { Component } from "react"; import { Card } from "antd"; -import { listSlaves, listInstances } from "../../util/wslink" -import DataTable from "../../components/data-table" +import { listSlaves, listInstances } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class SlavesTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -19,12 +19,12 @@ export class SlavesTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/slaves/${record.id}/view`) + this.navigate(`/slaves/${record.id}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/pages/users/user.jsx b/packages/master/web/pages/users/user.jsx index 9989ab27..ad674df7 100644 --- a/packages/master/web/pages/users/user.jsx +++ b/packages/master/web/pages/users/user.jsx @@ -1,41 +1,41 @@ -import React, { Component } from "react" +import React, { Component } from "react"; import { Card, Button, Popover, Select, Transfer } from "antd"; import { deleteUser, listUsers, listRoles, setRoles, -} from "../../util/wslink" -import DataTable from "../../components/data-table" -import notify from "../../util/notify" -import DeleteOutlined from "@ant-design/icons/DeleteOutlined" +} from "../../util/wslink"; +import DataTable from "../../components/data-table"; +import notify from "../../util/notify"; +import DeleteOutlined from "@ant-design/icons/DeleteOutlined"; -const { Option } = Select +const { Option } = Select; export class UserView extends Component { constructor(props) { - super(props) + super(props); this.state = { user: {} - } + }; this.messagesEndRef = React.createRef(); } navigate(url) { this.props.history.push(url); } async componentDidMount() { - await this.getData() + await this.getData(); } async getData() { - let name = this.props.match.params.id + let name = this.props.match.params.id; - let users = await listUsers() - let roles = await listRoles() + let users = await listUsers(); + let roles = await listRoles(); this.setState({ user: users.find(x => x.name === name), roles, - }) + }); } async handleChange(targetKeys) { this.setState({ @@ -47,12 +47,12 @@ export class UserView extends Component { let response = await setRoles({ name: this.state.user.name, roles: targetKeys, - }) - console.log("Updated user roles",response) + }); + console.log("Updated user roles",response); }; render() { - console.log(this.state) - let { user, roles } = this.state + console.log(this.state); + let { user, roles } = this.state; return

{user.name}

Assign roles

@@ -71,9 +71,9 @@ export class UserView extends Component { type="primary" danger onClick={async () => { - await deleteUser({ name: user.name }) - notify("Deleted user " + user.name, "success") - this.navigate("/users") + await deleteUser({ name: user.name }); + notify("Deleted user " + user.name, "success"); + this.navigate("/users"); }} > Delete this user from the cluster @@ -85,6 +85,6 @@ export class UserView extends Component { -
+ ; } } diff --git a/packages/master/web/pages/users/usersTable.jsx b/packages/master/web/pages/users/usersTable.jsx index 7f22e4a1..7a25158a 100644 --- a/packages/master/web/pages/users/usersTable.jsx +++ b/packages/master/web/pages/users/usersTable.jsx @@ -1,11 +1,11 @@ -import React, { Component } from "react" -import { Card } from "antd" -import { listSlaves, listInstances, listUsers, createUser } from "../../util/wslink" -import DataTable from "../../components/data-table" +import React, { Component } from "react"; +import { Card } from "antd"; +import { listSlaves, listInstances, listUsers, createUser } from "../../util/wslink"; +import DataTable from "../../components/data-table"; export class UsersTable extends Component { constructor(props) { - super(props) + super(props); } navigate(url) { this.props.history.push(url); @@ -20,8 +20,8 @@ export class UsersTable extends Component { title: "Name" }], insert: async args => { - let response = await createUser({name: args.name}) - console.log("Created user",response) + let response = await createUser({name: args.name}); + console.log("Created user",response); } }} DataFunction={listUsers} @@ -29,12 +29,12 @@ export class UsersTable extends Component { onRow: (record, rowIndex) => { return { onClick: event => { - this.navigate(`/users/${record.name}/view`) + this.navigate(`/users/${record.name}/view`); } - } + }; } }} /> - + ; } } diff --git a/packages/master/web/util/notify.jsx b/packages/master/web/util/notify.jsx index 40801c98..034f03b1 100644 --- a/packages/master/web/util/notify.jsx +++ b/packages/master/web/util/notify.jsx @@ -11,5 +11,5 @@ export default function notify(message, type = "info", description) { description, placement: "bottomRight", }); - if (typeof message !== "string") console.error(message) + if (typeof message !== "string") console.error(message); } diff --git a/packages/master/web/util/websocket.jsx b/packages/master/web/util/websocket.jsx index 08fb435c..6a05c142 100644 --- a/packages/master/web/util/websocket.jsx +++ b/packages/master/web/util/websocket.jsx @@ -75,7 +75,7 @@ export class Control extends link.Link { async instanceOutputEventHandler(message) { let { instance_id, output } = message.data; console.log(formatOutput(output)); - window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}) + window.instanceOutputEventHandler && window.instanceOutputEventHandler({instance_id, output}); } async debugWsMessageEventHandler(message) { diff --git a/packages/master/web/util/wslink.jsx b/packages/master/web/util/wslink.jsx index 68b6f820..97f35561 100644 --- a/packages/master/web/util/wslink.jsx +++ b/packages/master/web/util/wslink.jsx @@ -1,9 +1,9 @@ -import { Control, ControlConnector } from "./../util/websocket" -import * as errors from "@clusterio/lib/errors" -import * as link from "@clusterio/lib/link" -import config from "@clusterio/lib/config" +import { Control, ControlConnector } from "./../util/websocket"; +import * as errors from "@clusterio/lib/errors"; +import * as link from "@clusterio/lib/link"; +import config from "@clusterio/lib/config"; -let control, controlConnector +let control, controlConnector; // Create WS connection to master. Used by all components through the interface exported here. (async () => { @@ -17,47 +17,47 @@ let control, controlConnector try { await controlConnector.connect(); } catch (err) { - console.log(err) + console.log(err); } -})() +})(); -let listSlaves = createListFunction("listSlaves") -let listInstances = createListFunction("listInstances") -let listUsers = createListFunction("listUsers", "name") -let listRoles = createListFunction("listRoles") -let listPermissions = createListFunction("listPermissions", "name") +let listSlaves = createListFunction("listSlaves"); +let listInstances = createListFunction("listInstances"); +let listUsers = createListFunction("listUsers", "name"); +let listRoles = createListFunction("listRoles"); +let listPermissions = createListFunction("listPermissions", "name"); let startInstance = async function ({ instance_id, save = null }) { - return await link.messages.startInstance.send(control, { instance_id, save }) -} + return await link.messages.startInstance.send(control, { instance_id, save }); +}; let stopInstance = async function ({ instance_id }) { - return await link.messages.stopInstance.send(control, { instance_id }) -} + return await link.messages.stopInstance.send(control, { instance_id }); +}; let createInstance = async function (serialized_config) { return await link.messages.createInstance.send(control, { serialized_config }); -} +}; let deleteInstance = async function ({ instance_id }) { return await link.messages.deleteInstance.send(control, { instance_id }); -} +}; let assignInstance = async function ({ instance_id, slave_id }) { return await link.messages.assignInstanceCommand.send(control, { instance_id, slave_id, }); -} +}; let createSave = async function ({ instance_id }) { return await link.messages.createSave.send(control, { instance_id }); -} +}; let getInstanceConfig = async function ({ instance_id }) { return await link.messages.getInstanceConfig.send(control, { instance_id }); -} +}; let setInstanceConfigField = async function ({ instance_id, field, value }) { return await link.messages.setInstanceConfigField.send(control, { instance_id, field, value: typeof value === "object" ? JSON.stringify(value) : value, }); -} +}; let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) { return await link.messages.setInstanceConfigProp.send(control, { instance_id, @@ -65,35 +65,35 @@ let setInstanceConfigProp = async function ({ instance_id, field, prop, value }) prop, value, // JSON Object }); -} +}; let sendRcon = async function ({ instance_id, command }) { - return await link.messages.sendRcon.send(control, { instance_id, command }) -} + return await link.messages.sendRcon.send(control, { instance_id, command }); +}; let setInstanceOutputSubscriptions = async function ({ instance_id }) { - return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }) -} + return await link.messages.setInstanceOutputSubscriptions.send(control, { instance_ids: [instance_id] }); +}; let createUser = async function ({ name }) { - return await link.messages.createUser.send(control, { name }) -} + return await link.messages.createUser.send(control, { name }); +}; let deleteUser = async function ({ name }) { - return await link.messages.deleteUser.send(control, { name }) -} + return await link.messages.deleteUser.send(control, { name }); +}; let setRoles = async function ({ name, roles }) { return await link.messages.updateUserRoles.send(control, { name, roles, - }) -} + }); +}; let createRole = async function ({ name, description, permissions = [] }) { - return await link.messages.createRole.send(control, { name, description, permissions }) -} + return await link.messages.createRole.send(control, { name, description, permissions }); +}; let updateRole = async function ({ id, name, description, permissions }) { return await link.messages.updateRole.send(control, { id, name, description, permissions - }) -} + }); +}; export { listSlaves, @@ -117,18 +117,18 @@ export { setInstanceConfigProp, sendRcon, setInstanceOutputSubscriptions, -} +}; function createListFunction(name, key) { return async () => { return (await link.messages[name].send(control)).list.map(addKey(key || "id")); - } + }; } function addKey(key) { return function (el) { return { ...el, key: el[key] - } - } + }; + }; }