mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 21:19:01 +01:00 
			
		
		
		
	feat(geomap): invert note creation workflow
This commit is contained in:
		
							parent
							
								
									259dcdb568
								
							
						
					
					
						commit
						d1aa0e5f50
					
				@ -86,17 +86,17 @@ interface CreateChildResponse {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface Clipboard {
 | 
					 | 
				
			||||||
    noteId: string;
 | 
					 | 
				
			||||||
    title: string;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type MarkerData = Record<string, Marker>;
 | 
					type MarkerData = Record<string, Marker>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum State {
 | 
				
			||||||
 | 
					    Normal,
 | 
				
			||||||
 | 
					    NewNote
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class GeoMapTypeWidget extends TypeWidget {
 | 
					export default class GeoMapTypeWidget extends TypeWidget {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private geoMapWidget: GeoMapWidget;
 | 
					    private geoMapWidget: GeoMapWidget;
 | 
				
			||||||
    private clipboard?: Clipboard;
 | 
					    private state: State;
 | 
				
			||||||
    private L!: Leaflet;
 | 
					    private L!: Leaflet;
 | 
				
			||||||
    private currentMarkerData: MarkerData;
 | 
					    private currentMarkerData: MarkerData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -109,6 +109,7 @@ export default class GeoMapTypeWidget extends TypeWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        this.geoMapWidget = new GeoMapWidget("type", (L: Leaflet) => this.#onMapInitialized(L));
 | 
					        this.geoMapWidget = new GeoMapWidget("type", (L: Leaflet) => this.#onMapInitialized(L));
 | 
				
			||||||
        this.currentMarkerData = {};
 | 
					        this.currentMarkerData = {};
 | 
				
			||||||
 | 
					        this.state = State.Normal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.child(this.geoMapWidget);
 | 
					        this.child(this.geoMapWidget);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -202,16 +203,29 @@ export default class GeoMapTypeWidget extends TypeWidget {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #adjustCursor() {
 | 
					    #adjustCursor() {
 | 
				
			||||||
        this.geoMapWidget.$container.toggleClass("placing-note", !!this.clipboard);
 | 
					        this.geoMapWidget.$container.toggleClass("placing-note", this.state === State.NewNote);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async #onMapClicked(e: LeafletMouseEvent) {
 | 
					    async #onMapClicked(e: LeafletMouseEvent) {
 | 
				
			||||||
        if (!this.clipboard) {
 | 
					        if (this.state !== State.NewNote) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.moveMarker(this.clipboard.noteId, e.latlng);
 | 
					        const title = await dialogService.prompt({ message: t("relation_map.enter_title_of_new_note"), defaultValue: t("relation_map.default_new_note_title") });
 | 
				
			||||||
        this.clipboard = undefined;
 | 
					
 | 
				
			||||||
 | 
					        if (!title?.trim()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const { note } = await server.post<CreateChildResponse>(`notes/${this.noteId}/children?target=into`, {
 | 
				
			||||||
 | 
					            title,
 | 
				
			||||||
 | 
					            content: "",
 | 
				
			||||||
 | 
					            type: "text"
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        attributes.setLabel(note.noteId, "iconClass", CHILD_NOTE_ICON);
 | 
				
			||||||
 | 
					        this.moveMarker(note.noteId, e.latlng);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.state = State.Normal;
 | 
				
			||||||
        this.#adjustCursor();
 | 
					        this.#adjustCursor();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -242,22 +256,9 @@ export default class GeoMapTypeWidget extends TypeWidget {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const title = await dialogService.prompt({ message: t("relation_map.enter_title_of_new_note"), defaultValue: t("relation_map.default_new_note_title") });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (!title?.trim()) {
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const { note } = await server.post<CreateChildResponse>(`notes/${this.noteId}/children?target=into`, {
 | 
					 | 
				
			||||||
            title,
 | 
					 | 
				
			||||||
            content: "",
 | 
					 | 
				
			||||||
            type: "text"
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        attributes.setLabel(note.noteId, "iconClass", CHILD_NOTE_ICON);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        toastService.showMessage(t("relation_map.click_on_canvas_to_place_new_note"));
 | 
					        toastService.showMessage(t("relation_map.click_on_canvas_to_place_new_note"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.clipboard = { noteId: note.noteId, title };
 | 
					        this.state = State.NewNote;
 | 
				
			||||||
        this.#adjustCursor();
 | 
					        this.#adjustCursor();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user