Fix stale address coordinates after clearing autofill (#20264)
Closes #20082
This commit is contained in:
+40
@@ -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,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user