Fix stale address coordinates after clearing autofill (#20264)

Closes #20082
This commit is contained in:
Abdul Rahman
2026-05-05 20:13:51 +05:30
committed by GitHub
parent e89b12488c
commit 3d60e6dbfc
5 changed files with 75 additions and 3 deletions
@@ -0,0 +1,40 @@
import { type FieldAddressValue } from '@/object-record/record-field/ui/types/FieldMetadata';
import { normalizeAddressFieldValueForPersist } from '~/utils/normalize-address-field-value-for-persist';
describe('normalizeAddressFieldValueForPersist', () => {
it('should set coordinates to null when all text subfields are empty', () => {
const input: FieldAddressValue = {
addressStreet1: '',
addressStreet2: null,
addressCity: null,
addressState: null,
addressPostcode: null,
addressCountry: null,
addressLat: 40.7128,
addressLng: -74.006,
};
const result = normalizeAddressFieldValueForPersist(input);
expect(result.addressLat).toBeNull();
expect(result.addressLng).toBeNull();
});
it('should preserve coordinates when any text subfield is non-empty', () => {
const input: FieldAddressValue = {
addressStreet1: '1600 Amphitheatre',
addressStreet2: null,
addressCity: null,
addressState: null,
addressPostcode: null,
addressCountry: null,
addressLat: 37.422,
addressLng: -122.084,
};
const result = normalizeAddressFieldValueForPersist(input);
expect(result.addressLat).toBe(37.422);
expect(result.addressLng).toBe(-122.084);
});
});
@@ -0,0 +1,28 @@
import { isNonEmptyString } from '@sniptt/guards';
import { type FieldAddressValue } from '@/object-record/record-field/ui/types/FieldMetadata';
// When every user-editable text part of the address is empty, clear coordinates
// so DB columns for addressLat/addressLng are updated (see formatCompositeField
// in twenty-server: omitted keys are not written, leaving old coordinates in place).
export const normalizeAddressFieldValueForPersist = (
address: FieldAddressValue,
): FieldAddressValue => {
const allTextPartsEmpty =
!isNonEmptyString(address.addressStreet1) &&
!isNonEmptyString(address.addressStreet2) &&
!isNonEmptyString(address.addressCity) &&
!isNonEmptyString(address.addressState) &&
!isNonEmptyString(address.addressPostcode) &&
!isNonEmptyString(address.addressCountry);
if (!allTextPartsEmpty) {
return address;
}
return {
...address,
addressLat: null,
addressLng: null,
};
};