forked from MapComplete/MapComplete
		
	Fix: note themes uses full URL now instead of Panoramax-id
This commit is contained in:
		
							parent
							
								
									4395e88390
								
							
						
					
					
						commit
						ce363dfb59
					
				
					 4 changed files with 41 additions and 32 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
import { ImageUploader } from "./ImageUploader"
 | 
			
		||||
import { ImageUploader, UploadResult } from "./ImageUploader"
 | 
			
		||||
import LinkImageAction from "../Osm/Actions/LinkImageAction"
 | 
			
		||||
import FeaturePropertiesStore from "../FeatureSource/Actors/FeaturePropertiesStore"
 | 
			
		||||
import { OsmId, OsmTags } from "../../Models/OsmFeature"
 | 
			
		||||
| 
						 | 
				
			
			@ -111,44 +111,40 @@ export class ImageUploadManager {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        const tags = tagsStore.data
 | 
			
		||||
 | 
			
		||||
        const featureId = <OsmId>tags.id
 | 
			
		||||
 | 
			
		||||
        const author = this._osmConnection.userDetails.data.name
 | 
			
		||||
 | 
			
		||||
        const action = await this.uploadImageWithLicense(
 | 
			
		||||
        const uploadResult = await this.uploadImageWithLicense(
 | 
			
		||||
            featureId,
 | 
			
		||||
            author,
 | 
			
		||||
            file,
 | 
			
		||||
            targetKey,
 | 
			
		||||
            tags?.data?.["_orig_theme"],
 | 
			
		||||
        )
 | 
			
		||||
        if (!uploadResult) {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        const properties = this._featureProperties.getStore(featureId)
 | 
			
		||||
 | 
			
		||||
        if (!action) {
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
        if (!isNaN(Number(featureId))) {
 | 
			
		||||
            // This is a map note
 | 
			
		||||
            const url = action._url
 | 
			
		||||
            await this._osmConnection.addCommentToNote(featureId, url)
 | 
			
		||||
            NoteCommentElement.addCommentTo(url, <UIEventSource<any>>tagsStore, {
 | 
			
		||||
                osmConnection: this._osmConnection,
 | 
			
		||||
        const action = new LinkImageAction(featureId, uploadResult. key,  uploadResult   . value, properties, {
 | 
			
		||||
            theme:  tags?.data?.["_orig_theme"] ?? this._layout.id,
 | 
			
		||||
            changeType: "add-image",
 | 
			
		||||
        })
 | 
			
		||||
            return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await this._changes.applyAction(action)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private async uploadImageWithLicense(
 | 
			
		||||
    public async uploadImageWithLicense(
 | 
			
		||||
        featureId: OsmId,
 | 
			
		||||
        author: string,
 | 
			
		||||
        blob: File,
 | 
			
		||||
        targetKey: string | undefined,
 | 
			
		||||
        theme?: string,
 | 
			
		||||
    ): Promise<LinkImageAction> {
 | 
			
		||||
    ): Promise<UploadResult> {
 | 
			
		||||
        this.increaseCountFor(this._uploadStarted, featureId)
 | 
			
		||||
        const properties = this._featureProperties.getStore(featureId)
 | 
			
		||||
        let key: string
 | 
			
		||||
        let value: string
 | 
			
		||||
        let absoluteUrl: string
 | 
			
		||||
        let location: [number, number] = undefined
 | 
			
		||||
        if (this._gps.data) {
 | 
			
		||||
            location = [this._gps.data.longitude, this._gps.data.latitude]
 | 
			
		||||
| 
						 | 
				
			
			@ -157,7 +153,6 @@ export class ImageUploadManager {
 | 
			
		|||
            const feature = this._indexedFeatures.featuresById.data.get(featureId)
 | 
			
		||||
            location = GeoOperations.centerpointCoordinates(feature)
 | 
			
		||||
        }
 | 
			
		||||
        let absoluteUrl: string
 | 
			
		||||
        try {
 | 
			
		||||
            ;({ key, value, absoluteUrl } = await this._uploader.uploadImage(blob, location, author))
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
| 
						 | 
				
			
			@ -179,10 +174,8 @@ export class ImageUploadManager {
 | 
			
		|||
            value = absoluteUrl
 | 
			
		||||
        }
 | 
			
		||||
        this.increaseCountFor(this._uploadFinished, featureId)
 | 
			
		||||
        return new LinkImageAction(featureId, key, value, properties, {
 | 
			
		||||
            theme: theme ?? this._layout.id,
 | 
			
		||||
            changeType: "add-image",
 | 
			
		||||
        })
 | 
			
		||||
        return {key, absoluteUrl, value}
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private getCounterFor(collection: Map<string, UIEventSource<number>>, key: string | "*") {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,5 +8,7 @@ export interface ImageUploader {
 | 
			
		|||
        blob: File,
 | 
			
		||||
        currentGps: [number,number],
 | 
			
		||||
        author: string
 | 
			
		||||
    ): Promise<{ key: string; value: string, absoluteUrl: string }>
 | 
			
		||||
    ): Promise<UploadResult>
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface UploadResult{ key: string; value: string, absoluteUrl: string }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,11 +14,14 @@
 | 
			
		|||
  import LoginButton from "../Base/LoginButton.svelte"
 | 
			
		||||
  import { Translation } from "../i18n/Translation"
 | 
			
		||||
  import Camera from "@babeard/svelte-heroicons/solid/Camera"
 | 
			
		||||
  import LayerConfig from "../../Models/ThemeConfig/LayerConfig"
 | 
			
		||||
  import NoteCommentElement from "../Popup/Notes/NoteCommentElement"
 | 
			
		||||
 | 
			
		||||
  export let state: SpecialVisualizationState
 | 
			
		||||
 | 
			
		||||
  export let tags: UIEventSource<OsmTags>
 | 
			
		||||
  export let targetKey: string = undefined
 | 
			
		||||
  export let layer: LayerConfig
 | 
			
		||||
  /**
 | 
			
		||||
   * Image to show in the button
 | 
			
		||||
   * NOT the image to upload!
 | 
			
		||||
| 
						 | 
				
			
			@ -30,11 +33,9 @@
 | 
			
		|||
  export let labelText: string = undefined
 | 
			
		||||
  const t = Translations.t.image
 | 
			
		||||
 | 
			
		||||
  let licenseStore = state?.userRelatedState?.imageLicense ?? new ImmutableStore("CC0")
 | 
			
		||||
 | 
			
		||||
  let errors = new UIEventSource<Translation[]>([])
 | 
			
		||||
 | 
			
		||||
  function handleFiles(files: FileList) {
 | 
			
		||||
  async function handleFiles(files: FileList) {
 | 
			
		||||
    const errs = []
 | 
			
		||||
    for (let i = 0; i < files.length; i++) {
 | 
			
		||||
      const file = files.item(i)
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +46,21 @@
 | 
			
		|||
          errs.push(canBeUploaded.error)
 | 
			
		||||
          continue
 | 
			
		||||
        }
 | 
			
		||||
        state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey)
 | 
			
		||||
 | 
			
		||||
        if(layer.id === "note"){
 | 
			
		||||
          const uploadResult = await state?.imageUploadManager.uploadImageWithLicense(file, tags, targetKey)
 | 
			
		||||
          if(!uploadResult){
 | 
			
		||||
            return
 | 
			
		||||
          }
 | 
			
		||||
          const url = uploadResult.absoluteUrl
 | 
			
		||||
          await this._osmConnection.addCommentToNote(tags.data.id, url)
 | 
			
		||||
          NoteCommentElement.addCommentTo(url, <UIEventSource<any>>tags, {
 | 
			
		||||
            osmConnection: this._osmConnection,
 | 
			
		||||
          })
 | 
			
		||||
          return
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        await state?.imageUploadManager.uploadImageAndApply(file, tags, targetKey)
 | 
			
		||||
      } catch (e) {
 | 
			
		||||
        alert(e)
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1100,11 +1100,10 @@ export default class SpecialVisualizations {
 | 
			
		|||
                ],
 | 
			
		||||
                needsUrls: [Imgur.apiUrl, ...Imgur.supportingUrls],
 | 
			
		||||
 | 
			
		||||
                constr: (state, tags, args) => {
 | 
			
		||||
                constr: (state, tags, args, feature, layer) => {
 | 
			
		||||
                    const id = tags.data[args[0] ?? "id"]
 | 
			
		||||
                    tags = state.featureProperties.getStore(id)
 | 
			
		||||
                    console.log("Id is", id)
 | 
			
		||||
                    return new SvelteUIElement(UploadImage, { state, tags })
 | 
			
		||||
                    return new SvelteUIElement(UploadImage, { state, tags, layer  })
 | 
			
		||||
                },
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue