Skip to content

Commit

Permalink
feat: add prefill data for user details in setup (#604)
Browse files Browse the repository at this point in the history
  • Loading branch information
TejasvOnly authored Nov 12, 2024
1 parent 04f2d96 commit 52e52b2
Show file tree
Hide file tree
Showing 10 changed files with 111 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,21 @@ export const UserDetails = () => {
const goldPlanStrings =
lang.strings.inheritanceGoldPlanPurchase.email.userDetails;

const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [alternateEmail, setAlternateEmail] = useState('');

const {
registerUser,
onPrevious,
onNext,
isRegisteringUser,
walletAuthStep,
userDetailPrefillData,
} = useInheritanceGoldPlanPurchaseDialog();

const [name, setName] = useState(userDetailPrefillData.name);
const [email, setEmail] = useState(userDetailPrefillData.email);
const [alternateEmail, setAlternateEmail] = useState(
userDetailPrefillData.alternateEmail,
);

const formId = 'inheritance-gold-plan-user-details';

const onSubmit = (e: React.FormEvent<HTMLFormElement>) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ export const NomineeDetails: React.FC<{ index: number }> = ({ index }) => {

const details = useMemo(() => nomineeDetails[index], [nomineeDetails]);

const [name, setName] = useState(details.name ?? '');
const [email, setEmail] = useState(details.email ?? '');
const [name, setName] = useState(details?.name ?? '');
const [email, setEmail] = useState(details?.email ?? '');
const [alternateEmail, setAlternateEmail] = useState(
details.alternateEmail ?? '',
details?.alternateEmail ?? '',
);

const formId = 'inheritance-gold-plan-user-details';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import React, {
useMemo,
useState,
useRef,
useEffect,
} from 'react';

import { routes } from '~/constants';
Expand Down Expand Up @@ -194,6 +195,11 @@ export const InheritanceGoldPlanPurchaseDialogProvider: FC<
nomineeIndex,
);
}

if (result.result.emailConfig?.frequency)
setReminderPeriod(
(result.result.emailConfig?.frequency as ReminderPeriod) ?? 'monthly',
);
setIsFetchingDetails(false);
};

Expand All @@ -205,7 +211,14 @@ export const InheritanceGoldPlanPurchaseDialogProvider: FC<
setUnhandledError(undefined);
}, []);

const walletAuthService = useWalletAuth(onError);
const [userDetailPrefillData, setUserDetailPrefillData] =
useState<IUserDetails>({
name: '',
email: '',
alternateEmail: '',
});

const walletAuthService = useWalletAuth(onError, setUserDetailPrefillData);
const encryptMessageService = useEncryptMessage(onError);
const sessionService = useSession(onError);
const sessionIdRef = useRef<string | undefined>();
Expand Down Expand Up @@ -440,6 +453,15 @@ export const InheritanceGoldPlanPurchaseDialogProvider: FC<
authTokenConfig,
);

useEffect(() => {
if (nomineeCount === 1 && authTokenConfig !== undefined) {
inheritanceLoginService.clearMetaData({
resetNominee: true,
authTokenConfig,
});
}
}, [nomineeCount]);

const {
haveExecutor,
setHaveExecutor,
Expand All @@ -461,6 +483,15 @@ export const InheritanceGoldPlanPurchaseDialogProvider: FC<
authTokenConfig,
);

useEffect(() => {
if (haveExecutor === false && authTokenConfig !== undefined) {
inheritanceLoginService.clearMetaData({
resetExecutor: true,
authTokenConfig,
});
}
}, [haveExecutor]);

const onNextActionMapPerDialog = useMemo<
Record<number, Record<number, (() => boolean) | undefined> | undefined>
>(
Expand Down Expand Up @@ -540,6 +571,12 @@ export const InheritanceGoldPlanPurchaseDialogProvider: FC<
return false;
},
},
[tabIndicies.nominieeAndExecutor.tabNumber]: {
[tabIndicies.nominieeAndExecutor.dialogs.nomineeCountSelect]: () => {
fallbackToWalletSelect();
return true;
},
},
}),
[fallbackToWalletSelect, haveExecutor],
);
Expand Down Expand Up @@ -654,6 +691,7 @@ export const InheritanceGoldPlanPurchaseDialogProvider: FC<
setExecutorMessage,
onExecutorMessageSubmit,
fetchExistingDetailsFromServer,
userDetailPrefillData,
});

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,5 @@ export interface InheritanceGoldPlanPurchaseDialogContextInterface {
setIsOnSummaryPage: (val: boolean) => void;
executorNomineeIndex?: number;
fetchExistingDetailsFromServer: () => void;
userDetailPrefillData: IUserDetails;
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,21 @@ export const UserDetails = () => {
const silverPlanStrings =
lang.strings.inheritanceSilverPlanPurchase.email.userDetails;

const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [alternateEmail, setAlternateEmail] = useState('');

const {
registerUser,
onPrevious,
onNext,
isRegisteringUser,
walletAuthStep,
userDetailPrefillData,
} = useInheritanceSilverPlanPurchaseDialog();

const [name, setName] = useState(userDetailPrefillData.name);
const [email, setEmail] = useState(userDetailPrefillData.email);
const [alternateEmail, setAlternateEmail] = useState(
userDetailPrefillData.alternateEmail,
);

const formId = 'inheritance-silver-plan-user-details';

const onSubmit = (e: React.FormEvent<HTMLFormElement>) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ export const InheritanceSilverPlanPurchaseDialogProvider: FC<
const [applyingCouponError, setApplyingCouponError] = useState<
{ heading: string; subtext: string } | undefined
>();
const [userDetailPrefillData, setUserDetailPrefillData] =
useState<IUserDetails>({
name: '',
email: '',
alternateEmail: '',
});
const [couponDuration, setCouponDuration] = useState('');

const onError = useCallback((e?: any) => {
Expand All @@ -109,7 +115,7 @@ export const InheritanceSilverPlanPurchaseDialogProvider: FC<
setUnhandledError(undefined);
}, []);

const walletAuthService = useWalletAuth(onError);
const walletAuthService = useWalletAuth(onError, setUserDetailPrefillData);
const encryptMessageService = useEncryptMessage(onError);
const sessionService = useSession(onError);
const sessionIdRef = useRef<string | undefined>();
Expand Down Expand Up @@ -480,6 +486,7 @@ export const InheritanceSilverPlanPurchaseDialogProvider: FC<
couponDuration,
isEstablishingSession: sessionService.isStartingSession,
isRegisterationRequired: walletAuthService.isRegisterationRequired,
userDetailPrefillData,
});

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,5 @@ export interface InheritanceSilverPlanPurchaseDialogContextInterface {
couponDuration: string;
isEstablishingSession: boolean;
isRegisterationRequired: boolean;
userDetailPrefillData: IUserDetails;
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ export * from './types';

type AuthType = 'seed-based' | 'wallet-based';

export const useWalletAuth = (onErrorCallback: (e?: any) => void) => {
export const useWalletAuth = (
onErrorCallback: (e?: any) => void,
getPrefillData?: (data: IUserDetails) => void,
) => {
const dispatch = useAppDispatch();

const walletAuthTokensPerWallet = useAppSelector(
Expand Down Expand Up @@ -250,6 +253,15 @@ export const useWalletAuth = (onErrorCallback: (e?: any) => void) => {
throw result.error;
}

const prefillData = result.result.wallet?.owner;
if (prefillData) {
getPrefillData?.({
name: prefillData.name ?? '',
email: prefillData.email ?? '',
alternateEmail: prefillData.alternateEmail ?? '',
});
}

if (result.result.otpDetails) {
setOtpVerificationDetails({
id: 'emailVerificationOnLogin',
Expand Down
19 changes: 19 additions & 0 deletions packages/cysync-core/src/services/inheritance/login/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
ReminderPeriod,
updateReminderResultSchema,
NomineeType,
clearMeataDataResultSchema,
} from './schema';

import {
Expand Down Expand Up @@ -171,6 +172,23 @@ const updateReminder = async (params: {
),
);

const clearMetaData = async (params: {
resetExecutor?: boolean;
resetNominee?: boolean;
authTokenConfig: AuthTokenConfig;
}) =>
runAndHandleServerErrors(() =>
makePostRequest(
clearMeataDataResultSchema,
`${baseUrl}/info/clear`,
{
executor: params.resetExecutor === true,
nominee: params.resetNominee === true,
},
params.authTokenConfig,
),
);

export const inheritanceLoginService = {
init,
resendOTP,
Expand All @@ -182,4 +200,5 @@ export const inheritanceLoginService = {
updateNominees,
updateExecutor,
updateReminder,
clearMetaData,
};
13 changes: 13 additions & 0 deletions packages/cysync-core/src/services/inheritance/login/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,18 @@ export const validateResultSchema = z.object({
success: z.boolean(),
concern: loginConcernSchema,
otpDetails: z.array(otpDetailSchema).optional(),
wallet: z
.object({
owner: z
.object({
name: z.string().optional(),
email: z.string().optional(),
alternateEmail: z.string().optional(),
})
.optional(),
})
.optional()
.nullish(),
});

export const resendResultSchema = z.object({
Expand Down Expand Up @@ -77,6 +89,7 @@ export const updateNomineesResultSchema = z.object({
});
export const updateExecutorResultSchema = genericSuccessResult;
export const updateReminderResultSchema = genericSuccessResult;
export const clearMeataDataResultSchema = genericSuccessResult;

export type InheritanceLoginInitResponse = z.infer<typeof initResultSchema>;
export type InheritanceLoginResendResponse = z.infer<typeof resendResultSchema>;
Expand Down

0 comments on commit 52e52b2

Please sign in to comment.