Skip to content

Commit

Permalink
convert dec -> dms on the frontend
Browse files Browse the repository at this point in the history
  • Loading branch information
realtalin committed Oct 16, 2024
1 parent 868621b commit 86fbf86
Showing 1 changed file with 21 additions and 21 deletions.
42 changes: 21 additions & 21 deletions frontend/src/components/Locality/Tabs/LocalityTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,26 @@ import { EditableTable } from '@/components/DetailView/common/EditableTable'
import { EditingModal } from '@/components/DetailView/common/EditingModal'
import { emptyOption } from '@/components/DetailView/common/misc'
import { Map } from '@/components/Map/Map'
import { useState } from 'react'
import { useEffect, useState } from 'react'

const convertDmsToDec = (dms: string | null | undefined) => {
if (typeof dms !== 'string') return

const dmsArray = dms.split(/[^\d\w.]+/)

const degrees = dmsArray[0]
const minutes = dmsArray[1]
const seconds = dmsArray[2]
const direction = dmsArray[3]

let dec = Number((Number(degrees) + Number(minutes) / 60 + Number(seconds) / 3600).toFixed(12))
const convertDecToDms = (dec: number | null | undefined, isLatitude: boolean) => {
if (typeof dec !== 'number') return undefined

if (direction == 'S' || direction == 'W') {
dec = dec * -1
if (isLatitude) {
if (dec > 90 || dec < -90) {
return undefined
}
} else {
if (dec > 180 || dec < -180) {
return undefined
}
}

return dec
}

const convertDecToDms = (dec: number | null | undefined, isLatitude: boolean) => {
if (typeof dec !== 'number') return

const absolute = Math.abs(dec)
const degrees = Math.floor(absolute)
const minutesNotTruncated = (absolute - degrees) * 60
const minutes = Math.floor(minutesNotTruncated)
const seconds = Number(((minutesNotTruncated - minutes) * 60).toFixed(2))
const seconds = Math.round((minutesNotTruncated - minutes) * 60)

let direction = ''
if (isLatitude) {
Expand All @@ -52,6 +43,15 @@ export const LocalityTab = () => {
const { textField, radioSelection, dropdown, mode, bigTextField } = useDetailContext<LocalityDetailsType>()
const { editData, setEditData } = useDetailContext<LocalityDetailsType>()

useEffect(() => {
setEditData({
...editData,
dms_lat: convertDecToDms(editData.dec_lat, true),
dms_long: convertDecToDms(editData.dec_long, false),
})
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [editData.dec_lat, editData.dec_long])

const approximateCoordinatesOptions = [
{ display: 'No', value: 'false' },
{ display: 'Yes', value: 'true' },
Expand Down

0 comments on commit 86fbf86

Please sign in to comment.