diff --git a/nakar-client-web/src/room/data-table/DataTable.tsx b/nakar-client-web/src/room/data-table/DataTable.tsx index b6d1f83e..693802fe 100644 --- a/nakar-client-web/src/room/data-table/DataTable.tsx +++ b/nakar-client-web/src/room/data-table/DataTable.tsx @@ -3,7 +3,6 @@ import { useBearStore } from "../../state/useBearStore.ts"; export function DataTable() { const tableData = useBearStore((s) => s.room.scenario.graph.table.data); - const selectGraph = useBearStore((s) => s.room.canvas.tabs.selectGraph); return ( , - next: ScenarioArgumentDto, - ): Record => ({ - ...akku, - [next.identifier]: next.value, - }), - {}, - ), - }, - }; - const url: URL = new URL( - window.location.origin + - Router.getCanvasPath( - roomContext.initialRoomData.id, - roomContext.initialCanvasData.id, - ), - ); - url.search = qs.stringify(canvasSearchData); - return url; - } catch { - return null; - } + return createScenarioShareUrl(scenario, roomContext, scenarioArguments); })(); const handleRun = async () => { @@ -137,8 +107,10 @@ export function RunScenarioModal() { > - - {shareUrl.toString()} + + + {shareUrl.toString()} + { + if (props.scenario.parameters.length > 0) { + return null; + } else { + return createScenarioShareUrl(props.scenario, canvasContext, []); + } + })(); + return ( None )} + + {shareUrl && ( + + + + Share this URL to run this scenario on start. + + + + + + {shareUrl.toString()} + + + + + + )} ); diff --git a/nakar-client-web/src/room/scenarios-panel/createScenarioShareUrl.ts b/nakar-client-web/src/room/scenarios-panel/createScenarioShareUrl.ts new file mode 100644 index 00000000..991e5574 --- /dev/null +++ b/nakar-client-web/src/room/scenarios-panel/createScenarioShareUrl.ts @@ -0,0 +1,36 @@ +import { CanvasSearchData } from "../canvas/CanvasSearchData.ts"; +import { ScenarioArgumentDto, ScenarioDto } from "api-client"; +import { Router } from "../../routing/Router.ts"; +import qs from "qs"; +import { CanvasContextData } from "../../pages/Canvas.tsx"; + +export function createScenarioShareUrl( + scenario: ScenarioDto, + roomContext: CanvasContextData, + scenarioArguments: ScenarioArgumentDto[], +): URL { + const canvasSearchData: CanvasSearchData = { + scenario: { + id: scenario.id, + args: scenarioArguments.reduce( + ( + akku: Record, + next: ScenarioArgumentDto, + ): Record => ({ + ...akku, + [next.identifier]: next.value, + }), + {}, + ), + }, + }; + const url: URL = new URL( + window.location.origin + + Router.getCanvasPath( + roomContext.initialRoomData.id, + roomContext.initialCanvasData.id, + ), + ); + url.search = qs.stringify(canvasSearchData); + return url; +}