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, + }; + } +}