From 4e1384c2dff095b9a5dbcbd9e515ce5a614ddcc2 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Mon, 4 Dec 2023 15:02:42 +0100 Subject: [PATCH] UX: move some items behind login-toggles, add a 'login to add pictures' button again (fix #1698) --- src/UI/Image/UploadImage.svelte | 81 +++++----- src/UI/Popup/DeleteFlow/DeleteWizard.svelte | 164 ++++++++++---------- src/UI/Popup/NearbyImages.svelte | 106 ++++++------- src/UI/Popup/NearbyImagesCollapsed.svelte | 5 +- 4 files changed, 182 insertions(+), 174 deletions(-) diff --git a/src/UI/Image/UploadImage.svelte b/src/UI/Image/UploadImage.svelte index 80ae2ee0f..eda00468b 100644 --- a/src/UI/Image/UploadImage.svelte +++ b/src/UI/Image/UploadImage.svelte @@ -1,50 +1,53 @@ - + + +
- import LoginToggle from "../../Base/LoginToggle.svelte" - import type { SpecialVisualizationState } from "../../SpecialVisualization" - import Translations from "../../i18n/Translations" - import Tr from "../../Base/Tr.svelte" - import { TrashIcon } from "@babeard/svelte-heroicons/mini" - import type { OsmId, OsmTags } from "../../../Models/OsmFeature" - import DeleteConfig from "../../../Models/ThemeConfig/DeleteConfig" - import TagRenderingQuestion from "../TagRendering/TagRenderingQuestion.svelte" - import type { Feature } from "geojson" - import { UIEventSource } from "../../../Logic/UIEventSource" - import LayerConfig from "../../../Models/ThemeConfig/LayerConfig" - import { TagsFilter } from "../../../Logic/Tags/TagsFilter" - import { XCircleIcon } from "@rgossiaux/svelte-heroicons/solid" - import { TagUtils } from "../../../Logic/Tags/TagUtils" - import OsmChangeAction from "../../../Logic/Osm/Actions/OsmChangeAction" - import DeleteAction from "../../../Logic/Osm/Actions/DeleteAction" - import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction" - import Loading from "../../Base/Loading.svelte" - import { DeleteFlowState } from "./DeleteFlowState" - import { twJoin } from "tailwind-merge" + import LoginToggle from "../../Base/LoginToggle.svelte" + import type { SpecialVisualizationState } from "../../SpecialVisualization" + import Translations from "../../i18n/Translations" + import Tr from "../../Base/Tr.svelte" + import { TrashIcon } from "@babeard/svelte-heroicons/mini" + import type { OsmId, OsmTags } from "../../../Models/OsmFeature" + import DeleteConfig from "../../../Models/ThemeConfig/DeleteConfig" + import TagRenderingQuestion from "../TagRendering/TagRenderingQuestion.svelte" + import type { Feature } from "geojson" + import { UIEventSource } from "../../../Logic/UIEventSource" + import LayerConfig from "../../../Models/ThemeConfig/LayerConfig" + import { TagsFilter } from "../../../Logic/Tags/TagsFilter" + import { XCircleIcon } from "@rgossiaux/svelte-heroicons/solid" + import { TagUtils } from "../../../Logic/Tags/TagUtils" + import OsmChangeAction from "../../../Logic/Osm/Actions/OsmChangeAction" + import DeleteAction from "../../../Logic/Osm/Actions/DeleteAction" + import ChangeTagAction from "../../../Logic/Osm/Actions/ChangeTagAction" + import Loading from "../../Base/Loading.svelte" + import { DeleteFlowState } from "./DeleteFlowState" + import { twJoin } from "tailwind-merge" - export let state: SpecialVisualizationState - export let deleteConfig: DeleteConfig + export let state: SpecialVisualizationState + export let deleteConfig: DeleteConfig - export let tags: UIEventSource + export let tags: UIEventSource - let featureId: OsmId = tags.data.id + let featureId: OsmId = tags.data.id - export let feature: Feature - export let layer: LayerConfig + export let feature: Feature + export let layer: LayerConfig - const deleteAbility = new DeleteFlowState(featureId, state, deleteConfig.neededChangesets) + const deleteAbility = new DeleteFlowState(featureId, state, deleteConfig.neededChangesets) - const canBeDeleted: UIEventSource = deleteAbility.canBeDeleted - const canBeDeletedReason = deleteAbility.canBeDeletedReason + const canBeDeleted: UIEventSource = deleteAbility.canBeDeleted + const canBeDeletedReason = deleteAbility.canBeDeletedReason - const hasSoftDeletion = deleteConfig.softDeletionTags !== undefined - let currentState: "start" | "confirm" | "applying" | "deleted" = "start" - $: { - deleteAbility.CheckDeleteability(true) - } - - const t = Translations.t.delete - - let selectedTags: TagsFilter - let changedProperties = undefined - $: changedProperties = TagUtils.changeAsProperties(selectedTags?.asChange(tags?.data ?? {}) ?? []) - let isHardDelete = undefined - $: isHardDelete = changedProperties[DeleteConfig.deleteReasonKey] !== undefined - - async function onDelete() { - if (selectedTags === undefined) { - return - } - currentState = "applying" - let actionToTake: OsmChangeAction - const changedProperties = TagUtils.changeAsProperties(selectedTags.asChange(tags?.data ?? {})) - const deleteReason = changedProperties[DeleteConfig.deleteReasonKey] - if (deleteReason) { - // This is a proper, hard deletion - actionToTake = new DeleteAction( - featureId, - deleteConfig.softDeletionTags, - { - theme: state?.layout?.id ?? "unknown", - specialMotivation: deleteReason, - }, - canBeDeleted.data - ) - } else { - // no _delete_reason is given, which implies that this is _not_ a deletion but merely a retagging via a nonDeleteMapping - actionToTake = new ChangeTagAction(featureId, selectedTags, tags.data, { - theme: state?.layout?.id ?? "unkown", - changeType: "special-delete", - }) + const hasSoftDeletion = deleteConfig.softDeletionTags !== undefined + let currentState: "start" | "confirm" | "applying" | "deleted" = "start" + $: { + deleteAbility.CheckDeleteability(true) } - await state.changes?.applyAction(actionToTake) - tags.data["_deleted"] = "yes" - tags.ping() - currentState = "deleted" - } + const t = Translations.t.delete + + let selectedTags: TagsFilter + let changedProperties = undefined + $: changedProperties = TagUtils.changeAsProperties(selectedTags?.asChange(tags?.data ?? {}) ?? []) + let isHardDelete = undefined + $: isHardDelete = changedProperties[DeleteConfig.deleteReasonKey] !== undefined + + async function onDelete() { + if (selectedTags === undefined) { + return + } + currentState = "applying" + let actionToTake: OsmChangeAction + const changedProperties = TagUtils.changeAsProperties(selectedTags.asChange(tags?.data ?? {})) + const deleteReason = changedProperties[DeleteConfig.deleteReasonKey] + if (deleteReason) { + // This is a proper, hard deletion + actionToTake = new DeleteAction( + featureId, + deleteConfig.softDeletionTags, + { + theme: state?.layout?.id ?? "unknown", + specialMotivation: deleteReason, + }, + canBeDeleted.data, + ) + } else { + // no _delete_reason is given, which implies that this is _not_ a deletion but merely a retagging via a nonDeleteMapping + actionToTake = new ChangeTagAction(featureId, selectedTags, tags.data, { + theme: state?.layout?.id ?? "unkown", + changeType: "special-delete", + }) + } + + await state.changes?.applyAction(actionToTake) + tags.data["_deleted"] = "yes" + tags.ping() + currentState = "deleted" + } + -{#if $canBeDeleted === false && !hasSoftDeletion} -
- - -
-{:else} - + {#if $canBeDeleted === false && !hasSoftDeletion} +
+ + +
+ {:else} {#if currentState === "start"}
{/if} -
-{/if} + {/if} + diff --git a/src/UI/Popup/NearbyImages.svelte b/src/UI/Popup/NearbyImages.svelte index 5f7192862..3fbb31ddb 100644 --- a/src/UI/Popup/NearbyImages.svelte +++ b/src/UI/Popup/NearbyImages.svelte @@ -1,61 +1,63 @@ - -
-
-

- -

- -
- {#if !$allDone} - - {:else if $images.length === 0} - - {:else} -
- {#each $images as image (image.pictureUrl)} + +
+
+

+ +

+ +
+ {#if !$allDone} + + {:else if $images.length === 0} + + {:else} +
+ {#each $images as image (image.pictureUrl)} - {/each} -
- {/if} -
+ {/each} +
+ {/if} +
+ diff --git a/src/UI/Popup/NearbyImagesCollapsed.svelte b/src/UI/Popup/NearbyImagesCollapsed.svelte index a8343e78c..a5337b723 100644 --- a/src/UI/Popup/NearbyImagesCollapsed.svelte +++ b/src/UI/Popup/NearbyImagesCollapsed.svelte @@ -12,6 +12,7 @@ import { XCircleIcon } from "@babeard/svelte-heroicons/solid" import exp from "constants" import Camera_plus from "../../assets/svg/Camera_plus.svelte" + import LoginToggle from "../Base/LoginToggle.svelte" export let tags: Store export let state: SpecialVisualizationState @@ -25,7 +26,8 @@ let expanded = false - + + {#if expanded} {/if} +