From 91b6d25597d0742b6c7c3c7ffaf92e561cf0e19d Mon Sep 17 00:00:00 2001
From: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com>
Date: Thu, 15 Jan 2026 13:51:00 +0000
Subject: [PATCH] Fix scenario web code
---
exp_scenario/index.ts | 4 ++-
exp_scenario/web/index.tsx | 68 -------------------------------------
exp_scenario/web/~index.tsx | 68 +++++++++++++++++++++++++++++++++++++
3 files changed, 71 insertions(+), 69 deletions(-)
create mode 100644 exp_scenario/web/~index.tsx
diff --git a/exp_scenario/index.ts b/exp_scenario/index.ts
index d6e85fcc..978a372c 100644
--- a/exp_scenario/index.ts
+++ b/exp_scenario/index.ts
@@ -1,5 +1,5 @@
import * as lib from "@clusterio/lib";
-import * as Messages from "./messages";
+// import * as Messages from "./messages";
lib.definePermission({
name: "exp_scenario.config.view",
@@ -24,6 +24,7 @@ export const plugin: lib.PluginDeclaration = {
controllerEntrypoint: "./dist/node/controller",
instanceEntrypoint: "./dist/node/instance",
+ /*
messages: [
],
@@ -31,4 +32,5 @@ export const plugin: lib.PluginDeclaration = {
routes: [
"/exp_scenario",
],
+ */
};
diff --git a/exp_scenario/web/index.tsx b/exp_scenario/web/index.tsx
index f4d7ff80..e69de29b 100644
--- a/exp_scenario/web/index.tsx
+++ b/exp_scenario/web/index.tsx
@@ -1,68 +0,0 @@
-import React, {
- useContext, useEffect, useState,
- useCallback, useSyncExternalStore,
-} from "react";
-
-// import {
-//
-// } from "antd";
-
-import {
- BaseWebPlugin, PageLayout, PageHeader, Control, ControlContext, notifyErrorHandler,
-} from "@clusterio/web_ui";
-
-import {
- PluginExampleEvent, PluginExampleRequest,
- ExampleSubscribableUpdate, ExampleSubscribableValue,
-} from "../messages";
-
-import * as lib from "@clusterio/lib";
-
-function MyTemplatePage() {
- const control = useContext(ControlContext);
- const plugin = control.plugins.get("exp_scenario") as WebPlugin;
- const [subscribableData, synced] = plugin.useSubscribableData();
-
- return
-
- Synced: {String(synced)} Data: {JSON.stringify([...subscribableData.values()])}
- ;
-}
-
-export class WebPlugin extends BaseWebPlugin {
- subscribableData = new lib.EventSubscriber(ExampleSubscribableUpdate, this.control);
-
- async init() {
- this.pages = [
- {
- path: "/exp_scenario",
- sidebarName: "exp_scenario",
- // This permission is client side only, so it must match the permission string of a resource request to be secure
- // An undefined value means that the page will always be visible
- permission: "exp_scenario.example.permission.subscribe",
- content: ,
- },
- ];
-
- this.control.handle(PluginExampleEvent, this.handlePluginExampleEvent.bind(this));
- this.control.handle(PluginExampleRequest, this.handlePluginExampleRequest.bind(this));
- }
-
- useSubscribableData() {
- const control = useContext(ControlContext);
- const subscribe = useCallback((callback: () => void) => this.subscribableData.subscribe(callback), [control]);
- return useSyncExternalStore(subscribe, () => this.subscribableData.getSnapshot());
- }
-
- async handlePluginExampleEvent(event: PluginExampleEvent) {
- this.logger.info(JSON.stringify(event));
- }
-
- async handlePluginExampleRequest(request: PluginExampleRequest) {
- this.logger.info(JSON.stringify(request));
- return {
- myResponseString: request.myString,
- myResponseNumbers: request.myNumberArray,
- };
- }
-}
diff --git a/exp_scenario/web/~index.tsx b/exp_scenario/web/~index.tsx
new file mode 100644
index 00000000..f4d7ff80
--- /dev/null
+++ b/exp_scenario/web/~index.tsx
@@ -0,0 +1,68 @@
+import React, {
+ useContext, useEffect, useState,
+ useCallback, useSyncExternalStore,
+} from "react";
+
+// import {
+//
+// } from "antd";
+
+import {
+ BaseWebPlugin, PageLayout, PageHeader, Control, ControlContext, notifyErrorHandler,
+} from "@clusterio/web_ui";
+
+import {
+ PluginExampleEvent, PluginExampleRequest,
+ ExampleSubscribableUpdate, ExampleSubscribableValue,
+} from "../messages";
+
+import * as lib from "@clusterio/lib";
+
+function MyTemplatePage() {
+ const control = useContext(ControlContext);
+ const plugin = control.plugins.get("exp_scenario") as WebPlugin;
+ const [subscribableData, synced] = plugin.useSubscribableData();
+
+ return
+
+ Synced: {String(synced)} Data: {JSON.stringify([...subscribableData.values()])}
+ ;
+}
+
+export class WebPlugin extends BaseWebPlugin {
+ subscribableData = new lib.EventSubscriber(ExampleSubscribableUpdate, this.control);
+
+ async init() {
+ this.pages = [
+ {
+ path: "/exp_scenario",
+ sidebarName: "exp_scenario",
+ // This permission is client side only, so it must match the permission string of a resource request to be secure
+ // An undefined value means that the page will always be visible
+ permission: "exp_scenario.example.permission.subscribe",
+ content: ,
+ },
+ ];
+
+ this.control.handle(PluginExampleEvent, this.handlePluginExampleEvent.bind(this));
+ this.control.handle(PluginExampleRequest, this.handlePluginExampleRequest.bind(this));
+ }
+
+ useSubscribableData() {
+ const control = useContext(ControlContext);
+ const subscribe = useCallback((callback: () => void) => this.subscribableData.subscribe(callback), [control]);
+ return useSyncExternalStore(subscribe, () => this.subscribableData.getSnapshot());
+ }
+
+ async handlePluginExampleEvent(event: PluginExampleEvent) {
+ this.logger.info(JSON.stringify(event));
+ }
+
+ async handlePluginExampleRequest(request: PluginExampleRequest) {
+ this.logger.info(JSON.stringify(request));
+ return {
+ myResponseString: request.myString,
+ myResponseNumbers: request.myNumberArray,
+ };
+ }
+}