From 68ddce79e7b0da88e3c08d7457936c7f35f247fe Mon Sep 17 00:00:00 2001 From: Collin Beczak Date: Fri, 5 Jun 2026 14:07:23 -0300 Subject: [PATCH] Add "Open in JOSM" button to Task Map widget Loads the task's features into JOSM via remote control, mirroring the behavior of the "Edit in JOSM" button in the Task Completion widget. --- .../Widgets/TaskMapWidget/Messages.js | 5 ++ .../Widgets/TaskMapWidget/TaskMapWidget.jsx | 52 +++++++++++++++---- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/components/Widgets/TaskMapWidget/Messages.js b/src/components/Widgets/TaskMapWidget/Messages.js index a66640507..f634fd292 100644 --- a/src/components/Widgets/TaskMapWidget/Messages.js +++ b/src/components/Widgets/TaskMapWidget/Messages.js @@ -28,4 +28,9 @@ export default defineMessages({ id: "Widgets.TaskMapWidget.reselectTask", defaultMessage: "Re-Select Task", }, + + openInJOSM: { + id: "Widgets.TaskMapWidget.openInJOSM", + defaultMessage: "Open in JOSM", + }, }); diff --git a/src/components/Widgets/TaskMapWidget/TaskMapWidget.jsx b/src/components/Widgets/TaskMapWidget/TaskMapWidget.jsx index 7d70cca3e..f44e2c3a0 100644 --- a/src/components/Widgets/TaskMapWidget/TaskMapWidget.jsx +++ b/src/components/Widgets/TaskMapWidget/TaskMapWidget.jsx @@ -1,9 +1,13 @@ import { Component } from "react"; import { FormattedMessage } from "react-intl"; import AsCooperativeWork from "../../../interactions/Task/AsCooperativeWork"; +import { Editor } from "../../../services/Editor/Editor"; import { WidgetDataTarget, registerWidgetType } from "../../../services/Widget/Widget"; +import Button from "../../Button/Button"; import MapPane from "../../EnhancedMap/MapPane/MapPane"; +import WithEditor from "../../HOCs/WithEditor/WithEditor"; import WithKeyboardShortcuts from "../../HOCs/WithKeyboardShortcuts/WithKeyboardShortcuts"; +import WithSearch from "../../HOCs/WithSearch/WithSearch"; import QuickWidget from "../../QuickWidget/QuickWidget"; import TaskMap from "../../TaskPane/TaskMap/TaskMap"; import messages from "./Messages"; @@ -20,7 +24,7 @@ const descriptor = { defaultHeight: 19, }; -export default class TaskMapWidget extends Component { +export class TaskMapWidget extends Component { componentWillUnmount = () => { this.props.resumeKeyboardShortcuts(); }; @@ -38,6 +42,22 @@ export default class TaskMapWidget extends Component { } } + openInJOSM = () => { + const { task, mapBounds, taskBundle, editTask } = this.props; + if (!task || !editTask) { + return; + } + + editTask( + Editor.josm, + task, + mapBounds, + {}, + taskBundle, + task?.parent?.checkinComment, + ); + }; + render() { const cooperative = AsCooperativeWork(this.props.task).isTagType() || this.props.task.cooperativeWork; @@ -78,18 +98,28 @@ export default class TaskMapWidget extends Component { className="mr-mt-2" style={{ height: altWorkspaceType ? "calc(100vh - 270px)" : "calc(100% - 3rem)" }} > - {this.props.getUserAppSetting ? ( - <> -
-
+
+ {this.props.getUserAppSetting ? ( +
+
-
+
- - ) : null} + ) : ( +
+ )} + {!editMode && ( + + )} +
{editMode ? (