From ecfa7d3d1d1739da65099d125ac9a069b2a761c6 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Sat, 22 Jun 2024 18:50:46 +0200 Subject: [PATCH] Fix #2002 --- src/UI/Popup/Notes/AddNoteComment.svelte | 2 ++ src/UI/Popup/Notes/CloseNoteButton.ts | 11 ++++++----- src/UI/Popup/Notes/NoteCommentElement.ts | 13 +++++++++---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/UI/Popup/Notes/AddNoteComment.svelte b/src/UI/Popup/Notes/AddNoteComment.svelte index f530dae2e..dbf493f9e 100644 --- a/src/UI/Popup/Notes/AddNoteComment.svelte +++ b/src/UI/Popup/Notes/AddNoteComment.svelte @@ -47,12 +47,14 @@ async function closeNote() { await state.osmConnection.closeNote(id, txt.data) tags.data["closed_at"] = new Date().toISOString() + NoteCommentElement.addCommentTo(txt.data, tags, state) tags.ping() } async function reopenNote() { await state.osmConnection.reopenNote(id, txt.data) tags.data["closed_at"] = undefined + NoteCommentElement.addCommentTo(txt.data, tags, state) tags.ping() } diff --git a/src/UI/Popup/Notes/CloseNoteButton.ts b/src/UI/Popup/Notes/CloseNoteButton.ts index c1cb7db97..48930b04b 100644 --- a/src/UI/Popup/Notes/CloseNoteButton.ts +++ b/src/UI/Popup/Notes/CloseNoteButton.ts @@ -10,6 +10,8 @@ import { UIEventSource } from "../../../Logic/UIEventSource" import Constants from "../../../Models/Constants" import SvelteUIElement from "../../Base/SvelteUIElement" import Checkmark from "../../../assets/svg/Checkmark.svelte" +import NoteCommentElement from "./NoteCommentElement" +import Icon from "../../Map/Icon.svelte" export class CloseNoteButton implements SpecialVisualization { public readonly funcName = "close_note" @@ -62,10 +64,7 @@ export class CloseNoteButton implements SpecialVisualization { zoomButton: string } = Utils.ParseVisArgs(this.args, args) - let icon: BaseUIElement = new SvelteUIElement(Checkmark) - if (params.icon !== "checkmark.svg" && (args[2] ?? "") !== "") { - icon = new Img(args[1]) - } + let icon: BaseUIElement = new SvelteUIElement(Icon, {icon: params.icon ?? "checkmark.svg"}) let textToShow = t.closeNote if ((params.text ?? "") !== "") { textToShow = Translations.T(args[0]) @@ -75,7 +74,9 @@ export class CloseNoteButton implements SpecialVisualization { const isClosed = tags.map((tags) => (tags["closed_at"] ?? "") !== "") closeButton.onClick(() => { const id = tags.data[args[2] ?? "id"] - state.osmConnection.closeNote(id, args[3])?.then((_) => { + const text = args[3] + state.osmConnection.closeNote(id, text)?.then((_) => { + NoteCommentElement.addCommentTo(text, tags, state) tags.data["closed_at"] = new Date().toISOString() tags.ping() }) diff --git a/src/UI/Popup/Notes/NoteCommentElement.ts b/src/UI/Popup/Notes/NoteCommentElement.ts index b7d5cd166..f8d845436 100644 --- a/src/UI/Popup/Notes/NoteCommentElement.ts +++ b/src/UI/Popup/Notes/NoteCommentElement.ts @@ -6,8 +6,7 @@ import Translations from "../../i18n/Translations" import { Utils } from "../../../Utils" import Img from "../../Base/Img" import { SlideShow } from "../../Image/SlideShow" -import { Stores, UIEventSource } from "../../../Logic/UIEventSource" -import { OsmConnection } from "../../../Logic/Osm/OsmConnection" +import { Store, Stores, UIEventSource } from "../../../Logic/UIEventSource" import { VariableUiElement } from "../../Base/VariableUIElement" import { SpecialVisualizationState } from "../../SpecialVisualization" import SvelteUIElement from "../../Base/SvelteUIElement" @@ -50,7 +49,7 @@ export default class NoteCommentElement extends Combine { } const userinfo = Stores.FromPromise( - Utils.downloadJsonCached( + Utils.downloadJsonCached<{user: { img: { href: string } }}>( "https://api.openstreetmap.org/api/0.6/user/" + comment.uid, 24 * 60 * 60 * 1000 ) @@ -114,10 +113,16 @@ export default class NoteCommentElement extends Combine { } } + /** + * Adds the comment to the _visualisation_ of the given note; doesn't _actually_ upload + * @param txt + * @param tags + * @param state + */ public static addCommentTo( txt: string, tags: UIEventSource, - state: { osmConnection: OsmConnection } + state: { osmConnection: {userDetails: Store<{ name: string, uid: number }>} } ) { const comments: any[] = JSON.parse(tags.data["comments"]) const username = state.osmConnection.userDetails.data.name