gpstracker/frontend/src/mixins/LocationQuery.vue

36 lines
1,010 B
Vue

<script lang="ts">
import _ from 'lodash'
import Dates from './Dates.vue'
import LocationQuery from '../models/LocationQuery'
export default {
mixins: [Dates],
methods: {
isQueryChanged({
newValue,
oldValue,
}: {
newValue?: LocationQuery,
oldValue?: LocationQuery,
}): boolean {
const values = [oldValue, newValue].map((value) =>
Object.entries(value || {}).reduce((acc, [key, val]) => {
// Replace all undefined values with null to avoid the comparison from breaking
// when an attribute is not set and it's undefined on one side and null on the other
acc[key] = val === undefined ? null : val
// Normalize dates to avoid issues with different date formats
if (key === 'startDate' || key === 'endDate') {
acc[key] = this.normalizeDate(val)
}
return acc
}, {} as Record<string, any>)
)
return !_.isEqual(values[0], values[1])
},
}
}
</script>