diff --git a/frontend/src/components/Map.vue b/frontend/src/components/Map.vue index 79dc7c7..6c1a807 100644 --- a/frontend/src/components/Map.vue +++ b/frontend/src/components/Map.vue @@ -423,13 +423,17 @@ export default { return } - start = this.map.getCoordinateFromPixel(start) - end = this.map.getCoordinateFromPixel(end) + const startPoint = this.map?.getCoordinateFromPixel(start) + const endPoint = this.map?.getCoordinateFromPixel(end) + if (!(startPoint && endPoint)) { + return + } + const [startLon, startLat, endLon, endLat] = [ - Math.min(start[0], end[0]), - Math.min(start[1], end[1]), - Math.max(start[0], end[0]), - Math.max(start[1], end[1]), + Math.min(startPoint[0], endPoint[0]), + Math.min(startPoint[1], endPoint[1]), + Math.max(startPoint[0], endPoint[0]), + Math.max(startPoint[1], endPoint[1]), ] this.locationQuery = { diff --git a/frontend/src/components/MapSelectOverlay.vue b/frontend/src/components/MapSelectOverlay.vue index a6fb20d..c5de0fc 100644 --- a/frontend/src/components/MapSelectOverlay.vue +++ b/frontend/src/components/MapSelectOverlay.vue @@ -38,7 +38,9 @@ export default { } const scaledCoords = [ + // @ts-ignore this.scaledPointerCoordinates(...this.selectionBox[0]), + // @ts-ignore this.scaledPointerCoordinates(...this.selectionBox[1]), ] @@ -71,7 +73,9 @@ export default { }, scaledPointerCoordinates(x: number, y: number): number[] { + // @ts-ignore const offsetLeft = this.$refs.overlay?.getBoundingClientRect().left || 0 + // @ts-ignore const offsetTop = this.$refs.overlay?.getBoundingClientRect().top || 0 return [ @@ -80,8 +84,20 @@ export default { ] }, - setSelectionBoxCoordinates(event: MouseEvent) { - const coords = [event.clientX, event.clientY] + getXY(event: MouseEvent | TouchEvent): number[] { + if (event instanceof MouseEvent) { + return [event.clientX, event.clientY] + } + + if (event instanceof TouchEvent) { + return [event.touches[0].clientX, event.touches[0].clientY] + } + + return [] + }, + + setSelectionBoxCoordinates(event: MouseEvent | TouchEvent) { + const coords = this.getXY(event) let newBox = JSON.parse(JSON.stringify(this.selectionBox)) as number[][] if (newBox.length === 1 || !newBox[1]) { @@ -94,13 +110,13 @@ export default { this.selectionBox = newBox }, - onOverlayDragStart(event: MouseEvent) { + onOverlayDragStart(event: MouseEvent | TouchEvent) { this.selectionBox = [] this.setSelectionBoxCoordinates(event) this.overlayDragging = true }, - onOverlayDragEnd(event: MouseEvent) { + onOverlayDragEnd(event: MouseEvent | TouchEvent) { if (this.selectionBox.length < 1) { this.selectionBox = [] return @@ -117,14 +133,16 @@ export default { this.$emit( 'select', [ + // @ts-ignore this.scaledPointerCoordinates(...this.selectionBox[0]), + // @ts-ignore this.scaledPointerCoordinates(...this.selectionBox[1]) ] ) } }, - onOverlayMove(event: MouseEvent) { + onOverlayMove(event: MouseEvent | TouchEvent) { if (!this.overlayDragging || this.selectionBox.length < 1) { return } diff --git a/frontend/src/components/filter/Form.vue b/frontend/src/components/filter/Form.vue index 61ddcba..2fd1572 100644 --- a/frontend/src/components/filter/Form.vue +++ b/frontend/src/components/filter/Form.vue @@ -254,12 +254,14 @@ export default { }, initDateRange(value: LocationQuery) { - this.enableDateRange = !!(value.startDate && value.endDate) + this.enableDateRange = !!(value?.startDate && value?.endDate) }, }, mounted() { - this.initDateRange(this.value) + if (this.value) { + this.initDateRange(this.value) + } }, watch: { diff --git a/frontend/src/mixins/Dates.vue b/frontend/src/mixins/Dates.vue index e23eaa4..c526090 100644 --- a/frontend/src/mixins/Dates.vue +++ b/frontend/src/mixins/Dates.vue @@ -22,7 +22,7 @@ export default { return new Date(Math.floor(date.getTime() / 60000) * 60000) }, - toLocalString(date: Date | string | number | null): string { + toLocalString(date: Date | string | number | null | undefined): string { const d = this.normalizeDate(date) if (!d) { return '' diff --git a/frontend/src/mixins/SelectionBox.vue b/frontend/src/mixins/SelectionBox.vue index 104431d..d717dde 100644 --- a/frontend/src/mixins/SelectionBox.vue +++ b/frontend/src/mixins/SelectionBox.vue @@ -30,7 +30,9 @@ export default { methods: { scaledPointerCoordinates(event: MouseEvent): number[] { + // @ts-ignore const offsetLeft = this.$refs.overlay?.getBoundingClientRect().left || 0 + // @ts-ignore const offsetTop = this.$refs.overlay?.getBoundingClientRect().top || 0 return [ @@ -55,7 +57,6 @@ export default { onOverlayDragStart(event: MouseEvent) { this.setSelectionBoxCoordinates(event) - this.overlayDragging = true }, onOverlayDragEnd(event: MouseEvent) { @@ -70,12 +71,10 @@ export default { ) { this.selectionBox = [] } - - this.overlayDragging = false }, onOverlayMove(event: MouseEvent) { - if (!this.overlayDragging || this.selectionBox.length < 1) { + if (this.selectionBox.length < 1) { return } diff --git a/frontend/src/mixins/URLQueryHandler.vue b/frontend/src/mixins/URLQueryHandler.vue index 10f8c4d..cab80ff 100644 --- a/frontend/src/mixins/URLQueryHandler.vue +++ b/frontend/src/mixins/URLQueryHandler.vue @@ -80,6 +80,7 @@ export default { $route(newRoute: { fullPath: string }, oldRoute: { fullPath: string }) { const oldQuery = this.parseQuery(oldRoute.fullPath) const newQuery = this.parseQuery(newRoute.fullPath) + // @ts-ignore if (this.isQueryChanged({oldValue: oldQuery, newValue: newQuery})) { this.query = newQuery }