diff --git a/src/libs/GetPhysicalCardUtils.ts b/src/libs/GetPhysicalCardUtils.ts index eebefd7c1d52..139297a26513 100644 --- a/src/libs/GetPhysicalCardUtils.ts +++ b/src/libs/GetPhysicalCardUtils.ts @@ -116,7 +116,7 @@ function getUpdatedDraftValues(draftValues: DraftValues, privatePersonalDetails: * @param draftValues * @returns */ -function getUpdatedPrivatePersonalDetails(draftValues: DraftValues) { +function getUpdatedPrivatePersonalDetails(draftValues: DraftValues): PrivatePersonalDetails { const {addressLine1, addressLine2, city, country, legalFirstName, legalLastName, phoneNumber, state, zipPostCode} = draftValues; return { legalFirstName, @@ -127,3 +127,4 @@ function getUpdatedPrivatePersonalDetails(draftValues: DraftValues) { } export {getUpdatedDraftValues, getUpdatedPrivatePersonalDetails, goToNextPhysicalCardRoute, setCurrentRoute}; +export type {PrivatePersonalDetails}; diff --git a/src/libs/actions/Wallet.js b/src/libs/actions/Wallet.js deleted file mode 100644 index fad529c4b1f5..000000000000 --- a/src/libs/actions/Wallet.js +++ /dev/null @@ -1,386 +0,0 @@ -import Onyx from 'react-native-onyx'; -import * as API from '@libs/API'; -import ONYXKEYS from '@src/ONYXKEYS'; - -/** - * Fetch and save locally the Onfido SDK token and applicantID - * - The sdkToken is used to initialize the Onfido SDK client - * - The applicantID is combined with the data returned from the Onfido SDK as we need both to create an - * identity check. Note: This happens in Web-Secure when we call Activate_Wallet during the OnfidoStep. - */ -function openOnfidoFlow() { - API.read( - 'OpenOnfidoFlow', - {}, - { - optimisticData: [ - { - // Use Onyx.set() since we are resetting the Onfido flow completely. - onyxMethod: Onyx.METHOD.SET, - key: ONYXKEYS.WALLET_ONFIDO, - value: { - isLoading: true, - }, - }, - ], - successData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ONFIDO, - value: { - isLoading: false, - }, - }, - ], - failureData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ONFIDO, - value: { - isLoading: false, - }, - }, - ], - }, - ); -} - -/** - * @param {Array} questions - * @param {String} [idNumber] - */ -function setAdditionalDetailsQuestions(questions, idNumber) { - Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {questions, idNumber}); -} - -/** - * @param {Object} errorFields - */ -function setAdditionalDetailsErrors(errorFields) { - Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {errorFields: null}); - Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {errorFields}); -} - -/** - * @param {String} additionalErrorMessage - */ -function setAdditionalDetailsErrorMessage(additionalErrorMessage) { - Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {additionalErrorMessage}); -} - -/** - * Save the source that triggered the KYC wall and optionally the chat report ID associated with the IOU - * - * @param {String} source - * @param {String} chatReportID - */ -function setKYCWallSource(source, chatReportID = '') { - Onyx.merge(ONYXKEYS.WALLET_TERMS, {source, chatReportID}); -} - -/** - * Validates a user's provided details against a series of checks - * - * @param {Object} personalDetails - */ -function updatePersonalDetails(personalDetails) { - if (!personalDetails) { - return; - } - const firstName = personalDetails.legalFirstName || ''; - const lastName = personalDetails.legalLastName || ''; - const dob = personalDetails.dob || ''; - const addressStreet = personalDetails.addressStreet || ''; - const addressCity = personalDetails.addressCity || ''; - const addressState = personalDetails.addressState || ''; - const addressZip = personalDetails.addressZip || ''; - const ssn = personalDetails.ssn || ''; - const phoneNumber = personalDetails.phoneNumber || ''; - API.write( - 'UpdatePersonalDetailsForWallet', - { - legalFirstName: firstName, - legalLastName: lastName, - dob, - addressStreet, - addressCity, - addressState, - addressZip, - ssn, - phoneNumber, - }, - { - optimisticData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, - value: { - isLoading: true, - errors: null, - errorFields: null, - }, - }, - ], - successData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, - value: { - isLoading: false, - }, - }, - ], - failureData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, - value: { - isLoading: false, - }, - }, - ], - }, - ); -} - -/** - * Creates an identity check by calling Onfido's API with data returned from the SDK - * - * The API will always return the updated userWallet in the response as a convenience so we can avoid an additional - * API request to fetch the userWallet after we call VerifyIdentity - * - * @param {Object} parameters - * @param {String} [parameters.onfidoData] - JSON string - */ -function verifyIdentity(parameters) { - const onfidoData = parameters.onfidoData; - - API.write( - 'VerifyIdentity', - { - onfidoData, - }, - { - optimisticData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ONFIDO, - value: { - isLoading: true, - errors: null, - fixableErrors: null, - }, - }, - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.USER_WALLET, - value: { - shouldShowFailedKYC: false, - }, - }, - ], - successData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ONFIDO, - value: { - isLoading: false, - errors: null, - }, - }, - ], - failureData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ONFIDO, - value: { - isLoading: false, - hasAcceptedPrivacyPolicy: false, - }, - }, - ], - }, - ); -} - -/** - * Complete the "Accept Terms" step of the wallet activation flow. - * - * @param {Object} parameters - * @param {Boolean} parameters.hasAcceptedTerms - * @param {Number} parameters.chatReportID When accepting the terms of wallet to pay an IOU, indicates the parent chat ID of the IOU - */ -function acceptWalletTerms(parameters) { - const optimisticData = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_TERMS, - value: { - isLoading: true, - }, - }, - ]; - - const successData = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_TERMS, - value: { - errors: null, - isLoading: false, - }, - }, - ]; - - const failureData = [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.USER_WALLET, - value: { - isPendingOnfidoResult: null, - shouldShowFailedKYC: true, - }, - }, - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_TERMS, - value: { - isLoading: false, - }, - }, - ]; - - API.write('AcceptWalletTerms', {hasAcceptedTerms: parameters.hasAcceptedTerms, reportID: parameters.chatReportID}, {optimisticData, successData, failureData}); -} - -/** - * Fetches data when the user opens the InitialSettingsPage - * - * @typedef {Object} UserWallet - * @property {Number} availableBalance - * @property {Number} currentBalance - * @property {String} currentStep - used to track which step of the "activate wallet" flow a user is in - * @property {('SILVER'|'GOLD')} tierName - will be GOLD when fully activated. SILVER is able to receive funds only. - */ -function openInitialSettingsPage() { - API.read('OpenInitialSettingsPage'); -} - -/** - * Fetches data when the user opens the EnablePaymentsPage - * - * @typedef {Object} UserWallet - * @property {Number} availableBalance - * @property {Number} currentBalance - * @property {String} currentStep - used to track which step of the "activate wallet" flow a user is in - * @property {('SILVER'|'GOLD')} tierName - will be GOLD when fully activated. SILVER is able to receive funds only. - */ -function openEnablePaymentsPage() { - API.read('OpenEnablePaymentsPage'); -} - -/** - * @param {String} currentStep - */ -function updateCurrentStep(currentStep) { - Onyx.merge(ONYXKEYS.USER_WALLET, {currentStep}); -} - -/** - * @param {Array} answers - * @param {String} idNumber - */ -function answerQuestionsForWallet(answers, idNumber) { - const idologyAnswers = JSON.stringify(answers); - API.write( - 'AnswerQuestionsForWallet', - { - idologyAnswers, - idNumber, - }, - { - optimisticData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, - value: { - isLoading: true, - }, - }, - ], - successData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, - value: { - isLoading: false, - }, - }, - ], - failureData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, - value: { - isLoading: false, - }, - }, - ], - }, - ); -} - -function requestPhysicalExpensifyCard(cardID, authToken, privatePersonalDetails) { - const { - legalFirstName, - legalLastName, - phoneNumber, - address: {city, country, state, street, zip}, - } = privatePersonalDetails; - const params = { - authToken, - legalFirstName, - legalLastName, - phoneNumber, - addressCity: city, - addressCountry: country, - addressState: state, - addressStreet: street, - addressZip: zip, - }; - const onyxData = { - optimisticData: [ - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.CARD_LIST, - value: { - [cardID]: { - state: 4, // NOT_ACTIVATED - }, - }, - }, - { - onyxMethod: Onyx.METHOD.MERGE, - key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, - value: privatePersonalDetails, - }, - ], - }; - API.write('RequestPhysicalExpensifyCard', params, onyxData); -} - -export { - openOnfidoFlow, - openInitialSettingsPage, - openEnablePaymentsPage, - setAdditionalDetailsErrors, - setAdditionalDetailsErrorMessage, - setAdditionalDetailsQuestions, - updateCurrentStep, - answerQuestionsForWallet, - updatePersonalDetails, - verifyIdentity, - acceptWalletTerms, - setKYCWallSource, - requestPhysicalExpensifyCard, -}; diff --git a/src/libs/actions/Wallet.ts b/src/libs/actions/Wallet.ts new file mode 100644 index 000000000000..bc2fb518d8e6 --- /dev/null +++ b/src/libs/actions/Wallet.ts @@ -0,0 +1,354 @@ +import type {OnyxUpdate} from 'react-native-onyx'; +import Onyx from 'react-native-onyx'; +import type {ValueOf} from 'type-fest'; +import * as API from '@libs/API'; +import type {PrivatePersonalDetails} from '@libs/GetPhysicalCardUtils'; +import type CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import type {WalletAdditionalQuestionDetails} from '@src/types/onyx'; +import type * as OnyxCommon from '@src/types/onyx/OnyxCommon'; + +type WalletTerms = { + hasAcceptedTerms: boolean; + reportID: string; +}; + +type WalletQuestionAnswer = { + question: string; + answer: string; +}; + +type IdentityVerification = { + onfidoData: string; +}; + +type PersonalDetails = { + phoneNumber: string; + legalFirstName: string; + legalLastName: string; + addressStreet: string; + addressCity: string; + addressState: string; + addressZip: string; + dob: string; + ssn: string; +}; + +/** + * Fetch and save locally the Onfido SDK token and applicantID + * - The sdkToken is used to initialize the Onfido SDK client + * - The applicantID is combined with the data returned from the Onfido SDK as we need both to create an + * identity check. Note: This happens in Web-Secure when we call Activate_Wallet during the OnfidoStep. + */ +function openOnfidoFlow() { + const optimisticData: OnyxUpdate[] = [ + { + // Use Onyx.set() since we are resetting the Onfido flow completely. + onyxMethod: Onyx.METHOD.SET, + key: ONYXKEYS.WALLET_ONFIDO, + value: { + isLoading: true, + }, + }, + ]; + + const finallyData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ONFIDO, + value: { + isLoading: false, + }, + }, + ]; + + API.read( + 'OpenOnfidoFlow', + {}, + { + optimisticData, + finallyData, + }, + ); +} + +function setAdditionalDetailsQuestions(questions: WalletAdditionalQuestionDetails[], idNumber: string) { + Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {questions, idNumber}); +} + +function setAdditionalDetailsErrors(errorFields: OnyxCommon.ErrorFields) { + Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {errorFields: null}); + Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {errorFields}); +} + +function setAdditionalDetailsErrorMessage(additionalErrorMessage: string) { + Onyx.merge(ONYXKEYS.WALLET_ADDITIONAL_DETAILS, {additionalErrorMessage}); +} + +/** + * Save the source that triggered the KYC wall and optionally the chat report ID associated with the IOU + */ +function setKYCWallSource(source: string, chatReportID = '') { + Onyx.merge(ONYXKEYS.WALLET_TERMS, {source, chatReportID}); +} + +/** + * Validates a user's provided details against a series of checks + */ +function updatePersonalDetails(personalDetails: PersonalDetails) { + const optimisticData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, + value: { + isLoading: true, + errors: null, + errorFields: null, + }, + }, + ]; + + const finallyData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, + value: { + isLoading: false, + }, + }, + ]; + + API.write('UpdatePersonalDetailsForWallet', personalDetails, { + optimisticData, + finallyData, + }); +} + +/** + * Creates an identity check by calling Onfido's API with data returned from the SDK + * + * The API will always return the updated userWallet in the response as a convenience so we can avoid an additional + * API request to fetch the userWallet after we call VerifyIdentity + */ +function verifyIdentity(parameters: IdentityVerification) { + const optimisticData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ONFIDO, + value: { + isLoading: true, + errors: null, + fixableErrors: null, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.USER_WALLET, + value: { + shouldShowFailedKYC: false, + }, + }, + ]; + + const successData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ONFIDO, + value: { + isLoading: false, + errors: null, + }, + }, + ]; + + const failureData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ONFIDO, + value: { + isLoading: false, + hasAcceptedPrivacyPolicy: false, + }, + }, + ]; + API.write('VerifyIdentity', parameters, { + optimisticData, + successData, + failureData, + }); +} + +/** + * Complete the "Accept Terms" step of the wallet activation flow. + * + * @param parameters.chatReportID When accepting the terms of wallet to pay an IOU, indicates the parent chat ID of the IOU + */ +function acceptWalletTerms(parameters: WalletTerms) { + const optimisticData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_TERMS, + value: { + isLoading: true, + }, + }, + ]; + + const successData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_TERMS, + value: { + errors: null, + isLoading: false, + }, + }, + ]; + + const failureData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.USER_WALLET, + value: { + isPendingOnfidoResult: null, + shouldShowFailedKYC: true, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_TERMS, + value: { + isLoading: false, + }, + }, + ]; + + const requestParams: WalletTerms = {hasAcceptedTerms: parameters.hasAcceptedTerms, reportID: parameters.reportID}; + + API.write('AcceptWalletTerms', requestParams, {optimisticData, successData, failureData}); +} + +/** + * Fetches data when the user opens the InitialSettingsPage + */ +function openInitialSettingsPage() { + API.read('OpenInitialSettingsPage', {}); +} + +/** + * Fetches data when the user opens the EnablePaymentsPage + */ +function openEnablePaymentsPage() { + API.read('OpenEnablePaymentsPage', {}); +} + +function updateCurrentStep(currentStep: ValueOf) { + Onyx.merge(ONYXKEYS.USER_WALLET, {currentStep}); +} + +function answerQuestionsForWallet(answers: WalletQuestionAnswer[], idNumber: string) { + const idologyAnswers = JSON.stringify(answers); + + const optimisticData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, + value: { + isLoading: true, + }, + }, + ]; + + const finallyData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.WALLET_ADDITIONAL_DETAILS, + value: { + isLoading: false, + }, + }, + ]; + + type AnswerQuestionsForWallet = { + idologyAnswers: string; + idNumber: string; + }; + + const requestParams: AnswerQuestionsForWallet = { + idologyAnswers, + idNumber, + }; + + API.write('AnswerQuestionsForWallet', requestParams, { + optimisticData, + finallyData, + }); +} + +function requestPhysicalExpensifyCard(cardID: number, authToken: string, privatePersonalDetails: PrivatePersonalDetails) { + const { + legalFirstName, + legalLastName, + phoneNumber, + address: {city, country, state, street, zip}, + } = privatePersonalDetails; + + type RequestPhysicalExpensifyCardParams = { + authToken: string; + legalFirstName: string; + legalLastName: string; + phoneNumber: string; + addressCity: string; + addressCountry: string; + addressState: string; + addressStreet: string; + addressZip: string; + }; + + const requestParams: RequestPhysicalExpensifyCardParams = { + authToken, + legalFirstName, + legalLastName, + phoneNumber, + addressCity: city, + addressCountry: country, + addressState: state, + addressStreet: street, + addressZip: zip, + }; + + const optimisticData: OnyxUpdate[] = [ + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.CARD_LIST, + value: { + [cardID]: { + state: 4, // NOT_ACTIVATED + }, + }, + }, + { + onyxMethod: Onyx.METHOD.MERGE, + key: ONYXKEYS.PRIVATE_PERSONAL_DETAILS, + value: privatePersonalDetails, + }, + ]; + + API.write('RequestPhysicalExpensifyCard', requestParams, {optimisticData}); +} + +export { + openOnfidoFlow, + openInitialSettingsPage, + openEnablePaymentsPage, + setAdditionalDetailsErrors, + setAdditionalDetailsErrorMessage, + setAdditionalDetailsQuestions, + updateCurrentStep, + answerQuestionsForWallet, + updatePersonalDetails, + verifyIdentity, + acceptWalletTerms, + setKYCWallSource, + requestPhysicalExpensifyCard, +}; diff --git a/src/pages/EnablePayments/AdditionalDetailsStep.js b/src/pages/EnablePayments/AdditionalDetailsStep.js index faa525a318ab..5ca51e208b49 100644 --- a/src/pages/EnablePayments/AdditionalDetailsStep.js +++ b/src/pages/EnablePayments/AdditionalDetailsStep.js @@ -132,15 +132,15 @@ function AdditionalDetailsStep({walletAdditionalDetails, translate, currentUserP */ const activateWallet = (values) => { const personalDetails = { - phoneNumber: parsePhoneNumber(values.phoneNumber, {regionCode: CONST.COUNTRY.US}).number.significant, - legalFirstName: values.legalFirstName, - legalLastName: values.legalLastName, - addressStreet: values.addressStreet, - addressCity: values.addressCity, - addressState: values.addressState, - addressZip: values.addressZipCode, - dob: values.dob, - ssn: values.ssn, + phoneNumber: parsePhoneNumber(values.phoneNumber, {regionCode: CONST.COUNTRY.US}).number.significant || '', + legalFirstName: values.legalFirstName || '', + legalLastName: values.legalLastName || '', + addressStreet: values.addressStreet || '', + addressCity: values.addressCity || '', + addressState: values.addressState || '', + addressZip: values.addressZipCode || '', + dob: values.dob || '', + ssn: values.ssn || '', }; // Attempt to set the personal details Wallet.updatePersonalDetails(personalDetails); diff --git a/src/pages/EnablePayments/TermsStep.js b/src/pages/EnablePayments/TermsStep.js index 8297ca54c2b4..a09e1801c3b0 100644 --- a/src/pages/EnablePayments/TermsStep.js +++ b/src/pages/EnablePayments/TermsStep.js @@ -104,7 +104,7 @@ function TermsStep(props) { setError(false); BankAccounts.acceptWalletTerms({ hasAcceptedTerms: hasAcceptedDisclosure && hasAcceptedPrivacyPolicyAndWalletAgreement, - chatReportID: props.walletTerms.chatReportID, + reportID: props.walletTerms.chatReportID, }); }} message={errorMessage} diff --git a/src/types/onyx/WalletAdditionalDetails.ts b/src/types/onyx/WalletAdditionalDetails.ts index da890b36bfef..b5521f2e79c8 100644 --- a/src/types/onyx/WalletAdditionalDetails.ts +++ b/src/types/onyx/WalletAdditionalDetails.ts @@ -1,12 +1,14 @@ import type * as OnyxCommon from './OnyxCommon'; +type WalletAdditionalQuestionDetails = { + prompt: string; + type: string; + answer: string[]; +}; + type WalletAdditionalDetails = { /** Questions returned by Idology */ - questions?: { - prompt: string; - type: string; - answer: string[]; - }; + questions?: WalletAdditionalQuestionDetails[]; /** ExpectID ID number related to those questions */ idNumber?: string; @@ -16,8 +18,10 @@ type WalletAdditionalDetails = { /** Which field needs attention? */ errorFields?: OnyxCommon.ErrorFields; + additionalErrorMessage?: string; isLoading?: boolean; errors?: OnyxCommon.Errors; }; export default WalletAdditionalDetails; +export type {WalletAdditionalQuestionDetails}; diff --git a/src/types/onyx/WalletOnfido.ts b/src/types/onyx/WalletOnfido.ts index bea6db81a87d..de7c80b34037 100644 --- a/src/types/onyx/WalletOnfido.ts +++ b/src/types/onyx/WalletOnfido.ts @@ -2,10 +2,10 @@ import type * as OnyxCommon from './OnyxCommon'; type WalletOnfido = { /** Unique identifier returned from openOnfidoFlow then re-sent to ActivateWallet with Onfido response data */ - applicantID: string; + applicantID?: string; /** Token used to initialize the Onfido SDK token */ - sdkToken: string; + sdkToken?: string; /** Loading state to provide feedback when we are waiting for a request to finish */ isLoading?: boolean; diff --git a/src/types/onyx/WalletTerms.ts b/src/types/onyx/WalletTerms.ts index b60a880e0aa0..b8fcdfeabe3e 100644 --- a/src/types/onyx/WalletTerms.ts +++ b/src/types/onyx/WalletTerms.ts @@ -6,6 +6,12 @@ type WalletTerms = { /** When the user accepts the Wallet's terms in order to pay an IOU, this is the ID of the chatReport the IOU is linked to */ chatReportID?: string; + + /** Source that triggered the KYC wall */ + source?: string; + + /** Loading state to provide feedback when we are waiting for a request to finish */ + isLoading?: boolean; }; export default WalletTerms; diff --git a/src/types/onyx/index.ts b/src/types/onyx/index.ts index 7bd9c321be5e..8cba351d0f45 100644 --- a/src/types/onyx/index.ts +++ b/src/types/onyx/index.ts @@ -60,6 +60,7 @@ import type User from './User'; import type UserLocation from './UserLocation'; import type UserWallet from './UserWallet'; import type WalletAdditionalDetails from './WalletAdditionalDetails'; +import type {WalletAdditionalQuestionDetails} from './WalletAdditionalDetails'; import type WalletOnfido from './WalletOnfido'; import type WalletStatement from './WalletStatement'; import type WalletTerms from './WalletTerms'; @@ -130,6 +131,7 @@ export type { UserWallet, ViolationName, WalletAdditionalDetails, + WalletAdditionalQuestionDetails, WalletOnfido, WalletStatement, WalletTerms,