Skip to content

Commit

Permalink
fix: autofill country on address form
Browse files Browse the repository at this point in the history
  • Loading branch information
daledah committed Feb 8, 2025
1 parent b0b7709 commit 493dc43
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 6 deletions.
17 changes: 17 additions & 0 deletions src/libs/PersonalDetailsUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,18 @@ Onyx.connect({
},
});

let defaultCountry = '';

Onyx.connect({
key: ONYXKEYS.COUNTRY,
callback: (value) => {
if (!value) {
return;
}
defaultCountry = value;
},
});

const regexMergedAccount = new RegExp(CONST.REGEX.MERGED_ACCOUNT_PREFIX);

function getDisplayNameOrDefault(passedPersonalDetails?: Partial<PersonalDetails> | null, defaultValue = '', shouldFallbackToHidden = true, shouldAddCurrentUserPostfix = false): string {
Expand Down Expand Up @@ -370,6 +382,10 @@ function getUserNameByEmail(email: string, nameToDisplay: 'firstName' | 'display
return email;
}

function getDefaultCountry() {
return defaultCountry;
}

export {
isPersonalDetailsEmpty,
getDisplayNameOrDefault,
Expand All @@ -388,4 +404,5 @@ export {
getNewAccountIDsAndLogins,
getPersonalDetailsLength,
getUserNameByEmail,
getDefaultCountry,
};
6 changes: 4 additions & 2 deletions src/pages/AddressPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,18 @@ type AddressPageProps = {
updateAddress: (values: FormOnyxValues<typeof ONYXKEYS.FORMS.HOME_ADDRESS_FORM>) => void;
/** Title of address page */
title: string;

defaultCountry?: Country;
} & BackToParams;

function AddressPage({title, address, updateAddress, isLoadingApp = true, backTo}: AddressPageProps) {
function AddressPage({title, address, updateAddress, isLoadingApp = true, backTo, defaultCountry}: AddressPageProps) {
const styles = useThemeStyles();
const {translate} = useLocalize();

// Check if country is valid
const {street} = address ?? {};
const [street1, street2] = street ? street.split('\n') : [undefined, undefined];
const [currentCountry, setCurrentCountry] = useState(address?.country);
const [currentCountry, setCurrentCountry] = useState(address?.country ?? defaultCountry);
const [state, setState] = useState(address?.state);
const [city, setCity] = useState(address?.city);
const [zipcode, setZipcode] = useState(address?.zip);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import {withOnyx} from 'react-native-onyx';
import useLocalize from '@hooks/useLocalize';
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
import type {SettingsNavigatorParamList} from '@libs/Navigation/types';
import * as PersonalDetailsUtils from '@libs/PersonalDetailsUtils';
import {getCurrentAddress, getDefaultCountry} from '@libs/PersonalDetailsUtils';
import AddressPage from '@pages/AddressPage';
import * as PersonalDetails from '@userActions/PersonalDetails';
import type {FormOnyxValues} from '@src/components/Form/types';
import type {Country} from '@src/CONST';
import {updateAddress as updateAddressPersonalDetails} from '@src/libs/actions/PersonalDetails';
import ONYXKEYS from '@src/ONYXKEYS';
import type SCREENS from '@src/SCREENS';
import type {PrivatePersonalDetails} from '@src/types/onyx';
Expand All @@ -26,7 +27,7 @@ type PersonalAddressPageProps = PlatformStackScreenProps<SettingsNavigatorParamL
* @param values - form input values
*/
function updateAddress(values: FormOnyxValues<typeof ONYXKEYS.FORMS.HOME_ADDRESS_FORM>) {
PersonalDetails.updateAddress(
updateAddressPersonalDetails(
values.addressLine1?.trim() ?? '',
values.addressLine2?.trim() ?? '',
values.city.trim(),
Expand All @@ -38,10 +39,12 @@ function updateAddress(values: FormOnyxValues<typeof ONYXKEYS.FORMS.HOME_ADDRESS

function PersonalAddressPage({privatePersonalDetails, isLoadingApp = true}: PersonalAddressPageProps) {
const {translate} = useLocalize();
const address = useMemo(() => PersonalDetailsUtils.getCurrentAddress(privatePersonalDetails), [privatePersonalDetails]);
const address = useMemo(() => getCurrentAddress(privatePersonalDetails), [privatePersonalDetails]);
const defaultCountry = getDefaultCountry();

return (
<AddressPage
defaultCountry={defaultCountry as Country}
address={address}
isLoadingApp={isLoadingApp}
updateAddress={updateAddress}
Expand Down

0 comments on commit 493dc43

Please sign in to comment.