Feature: include username of the person closing a maproulette note

This commit is contained in:
Pieter Vander Vennet 2024-12-11 22:41:33 +01:00
parent c26b9ae7f7
commit b47d0f8c6a
4 changed files with 14 additions and 10 deletions

View file

@ -1,9 +1,12 @@
import Constants from "../Models/Constants" import Constants from "../Models/Constants"
import { SpecialVisualizationState } from "../UI/SpecialVisualization"
export interface MaprouletteTask { export interface MaprouletteTask {
name: string name: string
description: string description: string
instruction: string instruction: string
} }
export default class Maproulette { export default class Maproulette {
public static readonly defaultEndpoint = "https://maproulette.org/api/v2" public static readonly defaultEndpoint = "https://maproulette.org/api/v2"
@ -24,7 +27,7 @@ export default class Maproulette {
4: "Deleted", 4: "Deleted",
5: "Already fixed", 5: "Already fixed",
6: "Too_Hard", 6: "Too_Hard",
9: "Disabled", 9: "Disabled"
} }
public static singleton = new Maproulette() public static singleton = new Maproulette()
/* /*
@ -78,6 +81,7 @@ export default class Maproulette {
async closeTask( async closeTask(
taskId: number, taskId: number,
status = Maproulette.STATUS_FIXED, status = Maproulette.STATUS_FIXED,
state: SpecialVisualizationState,
options?: { options?: {
comment?: string comment?: string
tags?: string tags?: string
@ -86,13 +90,16 @@ export default class Maproulette {
} }
): Promise<void> { ): Promise<void> {
console.log("Maproulette: setting", `${this.endpoint}/task/${taskId}/${status}`, options) console.log("Maproulette: setting", `${this.endpoint}/task/${taskId}/${status}`, options)
options ??= {}
const userdetails = state.osmConnection.userDetails.data
options.tags = `MapComplete MapComplete:${state.theme.id}; userid: ${userdetails?.uid}; username: ${userdetails?.name}`
const response = await fetch(`${this.endpoint}/task/${taskId}/${status}`, { const response = await fetch(`${this.endpoint}/task/${taskId}/${status}`, {
method: "PUT", method: "PUT",
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
apiKey: this.apiKey, apiKey: this.apiKey
}, },
body: options !== undefined ? JSON.stringify(options) : undefined, body: JSON.stringify(options)
}) })
if (response.status !== 204) { if (response.status !== 204) {
console.log(`Failed to close task: ${response.status}`) console.log(`Failed to close task: ${response.status}`)

View file

@ -38,8 +38,7 @@
async function apply() { async function apply() {
const maproulette_id = tags.data[maproulette_id_key] ?? tags.data.mr_taskId ?? tags.data.id const maproulette_id = tags.data[maproulette_id_key] ?? tags.data.mr_taskId ?? tags.data.id
try { try {
await Maproulette.singleton.closeTask(Number(maproulette_id), Number(statusToSet), { await Maproulette.singleton.closeTask(Number(maproulette_id), Number(statusToSet), state, {
tags: `MapComplete MapComplete:${state.theme.id}`,
comment: feedback, comment: feedback,
}) })
tags.data["mr_taskStatus"] = Maproulette.STATUS_MEANING[Number(statusToSet)] tags.data["mr_taskStatus"] = Maproulette.STATUS_MEANING[Number(statusToSet)]

View file

@ -19,7 +19,6 @@ export interface PointImportFlowArguments extends ImportFlowArguments {
export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> { export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
public readonly startCoordinate: [number, number] public readonly startCoordinate: [number, number]
private readonly _originalFeature: Feature<Point>
constructor( constructor(
state: SpecialVisualizationState, state: SpecialVisualizationState,
@ -29,7 +28,6 @@ export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
originalFeatureTags: UIEventSource<Record<string, string>> originalFeatureTags: UIEventSource<Record<string, string>>
) { ) {
super(state, args, tagsToApply, originalFeatureTags) super(state, args, tagsToApply, originalFeatureTags)
this._originalFeature = originalFeature
this.startCoordinate = GeoOperations.centerpointCoordinates(originalFeature) this.startCoordinate = GeoOperations.centerpointCoordinates(originalFeature)
} }
@ -80,7 +78,7 @@ export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
originalFeatureTags.ping() originalFeatureTags.ping()
} }
let maproulette_id = originalFeatureTags.data[this.args.maproulette_id] const maproulette_id = originalFeatureTags.data[this.args.maproulette_id]
if (maproulette_id !== undefined) { if (maproulette_id !== undefined) {
if (this.state.featureSwitchIsTesting.data) { if (this.state.featureSwitchIsTesting.data) {
console.log( console.log(
@ -90,7 +88,7 @@ export class PointImportFlowState extends ImportFlow<PointImportFlowArguments> {
) )
} else { } else {
console.log("Marking maproulette task as fixed") console.log("Marking maproulette task as fixed")
await Maproulette.singleton.closeTask(Number(maproulette_id)) await Maproulette.singleton.closeTask(Number(maproulette_id), Maproulette.STATUS_FIXED, this.state)
originalFeatureTags.data["mr_taskStatus"] = "Fixed" originalFeatureTags.data["mr_taskStatus"] = "Fixed"
originalFeatureTags.ping() originalFeatureTags.ping()
} }

View file

@ -159,7 +159,7 @@ export default class TagApplyButton implements AutoAction, SpecialVisualization
const maproulette_id = tags.data[maproulette_id_key] const maproulette_id = tags.data[maproulette_id_key]
const maproulette_feature = state.indexedFeatures.featuresById.data.get(maproulette_id) const maproulette_feature = state.indexedFeatures.featuresById.data.get(maproulette_id)
const maproulette_task_id = Number(maproulette_feature.properties.mr_taskId) const maproulette_task_id = Number(maproulette_feature.properties.mr_taskId)
await Maproulette.singleton.closeTask(maproulette_task_id, Maproulette.STATUS_FIXED, { await Maproulette.singleton.closeTask(maproulette_task_id, Maproulette.STATUS_FIXED, state, {
comment: "Tags are copied onto " + targetId + " with MapComplete", comment: "Tags are copied onto " + targetId + " with MapComplete",
}) })
maproulette_feature.properties["mr_taskStatus"] = "Fixed" maproulette_feature.properties["mr_taskStatus"] = "Fixed"