Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: Add company card feed flow #48119

Merged
merged 48 commits into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
739618e
add translations
waterim Aug 27, 2024
60827be
update const
waterim Aug 27, 2024
0a8da42
add new form and key for adding card to the onyx
waterim Aug 27, 2024
e5b12f6
add new routes
waterim Aug 27, 2024
fa81496
add screens and navigations
waterim Aug 27, 2024
abfa5b9
new companyCardUtils
waterim Aug 27, 2024
df253a9
CompanyCards actions file
waterim Aug 27, 2024
d874d0b
initial page
waterim Aug 27, 2024
06c4a30
instructions page
waterim Aug 27, 2024
40cd9e4
name step page
waterim Aug 27, 2024
679cb22
type step page
waterim Aug 27, 2024
2cf779d
details step
waterim Aug 27, 2024
d8e9a1f
types for form and new onyx key for adding a card
waterim Aug 27, 2024
477dd2f
update translations
waterim Aug 28, 2024
a1a9a03
update utils
waterim Aug 28, 2024
07a4c2a
update navigation
waterim Aug 28, 2024
d1240ef
update steps
waterim Aug 28, 2024
9675c7a
remove unused CONST
waterim Aug 29, 2024
495a908
change data to not use unneeded array push
waterim Aug 29, 2024
8c191e3
remove unused routes
waterim Aug 29, 2024
a05246f
fix linter
waterim Aug 29, 2024
97a6a1e
remove policyID
waterim Aug 29, 2024
b3d2e91
Merge remote-tracking branch 'upstream/main' into feat-47376-Add-Card…
waterim Aug 30, 2024
17614b0
add clear add flow
waterim Aug 30, 2024
79e16c0
add new add screen type
waterim Aug 30, 2024
c3707db
add navigation from empty page
waterim Aug 30, 2024
e3c7965
update card type, add disable
waterim Aug 30, 2024
5843dac
update links
waterim Aug 30, 2024
b3fc183
fix linter and ts
waterim Aug 30, 2024
ff20af0
fix compiler
waterim Aug 30, 2024
3805278
Merge remote-tracking branch 'upstream/main' into feat-47376-Add-Card…
waterim Sep 2, 2024
416497f
fix duplicate after merge
waterim Sep 2, 2024
091abad
add navigation back
waterim Sep 2, 2024
4c50b02
add error field to card provider selection, add new error translation
waterim Sep 2, 2024
a8283fd
translations
waterim Sep 2, 2024
15ff548
remove duplicate
waterim Sep 2, 2024
c4e5b5a
added new blue amex card
waterim Sep 3, 2024
9342486
Merge remote-tracking branch 'upstream/main' into feat-47376-Add-Card…
waterim Sep 3, 2024
fe765b0
Merge remote-tracking branch 'upstream/main' into feat-47376-Add-Card…
waterim Sep 9, 2024
a441561
remove unused functions
waterim Sep 9, 2024
3c3350e
remove unused translation function
waterim Sep 9, 2024
92fb88d
remove useCallbacks and useMemos as we have react compiler for that
waterim Sep 9, 2024
96a5d68
fix lint
waterim Sep 9, 2024
919cb16
remove unused code
waterim Sep 9, 2024
4323c19
remove unused code
waterim Sep 9, 2024
7caf812
update translations
waterim Sep 9, 2024
1641d03
removed unnecessary validation code
waterim Sep 9, 2024
695f2a8
update translations and validation
waterim Sep 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions src/CONST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ const CONST = {
SAGE_INTACCT_INSTRUCTIONS: 'https://help.expensify.com/articles/expensify-classic/integrations/accounting-integrations/Sage-Intacct',
HOW_TO_CONNECT_TO_SAGE_INTACCT: 'https://help.expensify.com/articles/expensify-classic/integrations/accounting-integrations/Sage-Intacct#how-to-connect-to-sage-intacct',
PRICING: `https://www.expensify.com/pricing`,
COMPANY_CARDS_HELP: 'https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Commercial-Card-Feeds',

// Use Environment.getEnvironmentURL to get the complete URL with port number
DEV_NEW_EXPENSIFY_URL: 'https://dev.new.expensify.com:',
Expand Down Expand Up @@ -2327,6 +2328,24 @@ const CONST = {
},
CARD_TITLE_INPUT_LIMIT: 255,
},
COMPANY_CARDS: {
STEP: {
CARD_TYPE: 'CardType',
CARD_INSTRUCTIONS: 'CardInstructions',
CARD_NAME: 'CardName',
CARD_DETAILS: 'CardDetails',
},
CARD_TYPE: {
AMEX: 'amex',
VISA: 'visa',
MASTERCARD: 'mastercard',
},
CARD_TITLE_INPUT_LIMIT: 255,
waterim marked this conversation as resolved.
Show resolved Hide resolved
DELETE_TRANSACTIONS: {
RESTRICT: 'corporate',
ALLOW: 'personal',
},
},
AVATAR_ROW_SIZE: {
DEFAULT: 4,
LARGE_SCREEN: 8,
Expand All @@ -2341,12 +2360,6 @@ const CONST = {
PAYPERUSE: 'monthly2018',
},
},
COMPANY_CARDS: {
DELETE_TRANSACTIONS: {
RESTRICT: 'corporate',
ALLOW: 'personal',
},
},
REGEX: {
SPECIAL_CHARS_WITHOUT_NEWLINE: /((?!\n)[()-\s\t])/g,
DIGITS_AND_PLUS: /^\+?[0-9]*$/,
Expand Down
7 changes: 7 additions & 0 deletions src/ONYXKEYS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,9 @@ const ONYXKEYS = {
/** Stores the information about the state of issuing a new card */
ISSUE_NEW_EXPENSIFY_CARD: 'issueNewExpensifyCard',

/** Stores the information about the state of addint a new company card */
ADD_NEW_COMPANY_CARD: 'addNewCompanyCard',

/** Stores the information if mobile selection mode is active */
MOBILE_SELECTION_MODE: 'mobileSelectionMode',

Expand Down Expand Up @@ -609,6 +612,8 @@ const ONYXKEYS = {
SUBSCRIPTION_SIZE_FORM_DRAFT: 'subscriptionSizeFormDraft',
ISSUE_NEW_EXPENSIFY_CARD_FORM: 'issueNewExpensifyCard',
ISSUE_NEW_EXPENSIFY_CARD_FORM_DRAFT: 'issueNewExpensifyCardDraft',
ADD_NEW_CARD_FEED_FORM: 'addNewCardFeed',
ADD_NEW_CARD_FEED_FORM_DRAFT: 'addNewCardFeedDraft',
EDIT_EXPENSIFY_CARD_NAME_FORM: 'editExpensifyCardName',
EDIT_EXPENSIFY_CARD_NAME_DRAFT_FORM: 'editExpensifyCardNameDraft',
EDIT_EXPENSIFY_CARD_LIMIT_FORM: 'editExpensifyCardLimit',
Expand Down Expand Up @@ -706,6 +711,7 @@ type OnyxFormValuesMapping = {
[ONYXKEYS.FORMS.NEW_CHAT_NAME_FORM]: FormTypes.NewChatNameForm;
[ONYXKEYS.FORMS.SUBSCRIPTION_SIZE_FORM]: FormTypes.SubscriptionSizeForm;
[ONYXKEYS.FORMS.ISSUE_NEW_EXPENSIFY_CARD_FORM]: FormTypes.IssueNewExpensifyCardForm;
[ONYXKEYS.FORMS.ADD_NEW_CARD_FEED_FORM]: FormTypes.AddNewCardFeedForm;
[ONYXKEYS.FORMS.EDIT_EXPENSIFY_CARD_NAME_FORM]: FormTypes.EditExpensifyCardNameForm;
[ONYXKEYS.FORMS.EDIT_EXPENSIFY_CARD_LIMIT_FORM]: FormTypes.EditExpensifyCardLimitForm;
[ONYXKEYS.FORMS.SAGE_INTACCT_CREDENTIALS_FORM]: FormTypes.SageIntactCredentialsForm;
Expand Down Expand Up @@ -901,6 +907,7 @@ type OnyxValuesMapping = {
[ONYXKEYS.NVP_TRAVEL_SETTINGS]: OnyxTypes.TravelSettings;
[ONYXKEYS.REVIEW_DUPLICATES]: OnyxTypes.ReviewDuplicates;
[ONYXKEYS.ISSUE_NEW_EXPENSIFY_CARD]: OnyxTypes.IssueNewCard;
[ONYXKEYS.ADD_NEW_COMPANY_CARD]: OnyxTypes.AddNewCompanyCardFeed;
[ONYXKEYS.MOBILE_SELECTION_MODE]: OnyxTypes.MobileSelectionMode;
[ONYXKEYS.NVP_FIRST_DAY_FREE_TRIAL]: string;
[ONYXKEYS.NVP_LAST_DAY_FREE_TRIAL]: string;
Expand Down
12 changes: 8 additions & 4 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,14 @@ const ROUTES = {
route: 'settings/workspaces/:policyID/reportFields/:reportFieldID/edit/initialValue',
getRoute: (policyID: string, reportFieldID: string) => `settings/workspaces/${policyID}/reportFields/${encodeURIComponent(reportFieldID)}/edit/initialValue` as const,
},
WORKSPACE_COMPANY_CARDS: {
route: 'settings/workspaces/:policyID/company-cards',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/company-cards` as const,
},
WORKSPACE_COMPANY_CARDS_ADD_NEW: {
route: 'settings/workspaces/:policyID/company-cards/add-card-feed',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/company-cards/add-card-feed` as const,
},
WORKSPACE_COMPANY_CARDS_SELECT_FEED: {
route: 'settings/workspaces/:policyID/company-cards/select-feed',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/company-cards/select-feed` as const,
Expand All @@ -897,10 +905,6 @@ const ROUTES = {
route: 'settings/workspaces/:policyID/expensify-card',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/expensify-card` as const,
},
WORKSPACE_COMPANY_CARDS: {
route: 'settings/workspaces/:policyID/company-cards',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/company-cards` as const,
},
WORKSPACE_EXPENSIFY_CARD_DETAILS: {
route: 'settings/workspaces/:policyID/expensify-card/:cardID',
getRoute: (policyID: string, cardID: string, backTo?: string) => getUrlWithBackToParam(`settings/workspaces/${policyID}/expensify-card/${cardID}`, backTo),
Expand Down
5 changes: 5 additions & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,11 @@ const SCREENS = {
RATE_AND_UNIT_UNIT: 'Workspace_RateAndUnit_Unit',
COMPANY_CARDS: 'Workspace_CompanyCards',
COMPANY_CARDS_SELECT_FEED: 'Workspace_CompanyCards_Select_Feed',
COMPANY_CARDS_ADD_NEW: 'Workspace_CompanyCards_New',
COMPANY_CARDS_TYPE: 'Workspace_CompanyCards_Type',
COMPANY_CARDS_INSTRUCTIONS: 'Workspace_CompanyCards_Instructions',
COMPANY_CARDS_NAME: 'Workspace_CompanyCards_Name',
COMPANY_CARDS_DETAILS: 'Workspace_CompanyCards_Details',
COMPANY_CARDS_SETTINGS: 'Workspace_CompanyCards_Settings',
COMPANY_CARDS_SETTINGS_FEED_NAME: 'Workspace_CompanyCards_Settings_Feed_Name',
EXPENSIFY_CARD: 'Workspace_ExpensifyCard',
Expand Down
35 changes: 35 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ export default {
invalidTimeRange: 'Please enter a time using the 12-hour clock format (e.g., 2:30 PM).',
pleaseCompleteForm: 'Please complete the form above to continue.',
pleaseSelectOne: 'Please select an option above.',
pleaseSelectProvider: 'Please select a card provider before continuing.',
},
comma: 'comma',
semicolon: 'semicolon',
Expand Down Expand Up @@ -2755,6 +2756,40 @@ export default {
companyCards: {
addCompanyCards: 'Add company cards',
selectCardFeed: 'Select card feed',
addCardFeed: 'Add card feed',
addNewCard: {
cardProviders: {
amex: 'American Express Corporate Cards',
mastercard: 'Mastercard Commercial Cards',
visa: 'Visa Commercial Cards',
},
yourCardProvider: `Who's your card provider?`,
enableFeed: {
title: (provider: string) => `Enable your ${provider} feed`,
heading: 'We have a direct integration with your card issuer and can import your transaction data into Expensify quickly and accurately.\n\nTo get started, simply:',
visa: `1. Visit [this help article](${CONST.COMPANY_CARDS_HELP}) for detailed instructionson how to set up your Visa Commercial Cards.\n\n2. [Contact your bank](${CONST.COMPANY_CARDS_HELP}) to verify they support a custom feed for your program, and ask them toenable it.\n\n3. *Once the feed is enabled and you have its details, continue to the next screen.*`,
amex: `1. Visit [this help article](${CONST.COMPANY_CARDS_HELP}) to find out if American Express can enable a custom feed for your program.\n\n2. Once the feed is enabled, Amex will send you a production letter.\n\n3. *Once you have the feed information, continue to the next screen.*`,
mastercard: `1. Visit [this help article](${CONST.COMPANY_CARDS_HELP}) for detailed instructions on how to set up your Mastercard Commercial Cards.\n\n 2. [Contact your bank](${CONST.COMPANY_CARDS_HELP}) to verify they support a custom feed for your program, and ask them to enable it.\n\n3. *Once the feed is enabled and you have its details, continue to the next screen.*`,
},
whatBankIssuesCard: 'What bank issues these cards?',
enterNameOfBank: 'Enter name of bank',
feedDetails: {
visa: {
title: 'What are the Visa feed details?',
processorLabel: 'Processor ID',
bankLabel: 'Financial institution (bank) ID',
companyLabel: 'Company ID',
},
amex: {
title: `What's the Amex delivery file name`,
fileNameLabel: 'Delivery file name',
},
mastercard: {
title: `What's the Mastercard distribution ID`,
distributionLabel: 'Distribution ID',
},
},
},
},
expensifyCard: {
issueAndManageCards: 'Issue and manage your Expensify Cards',
Expand Down
36 changes: 36 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ export default {
invalidTimeRange: 'Por favor, introduce una hora entre 1 y 12 (por ejemplo, 2:30 PM).',
pleaseCompleteForm: 'Por favor complete el formulario de arriba para continuar.',
pleaseSelectOne: 'Seleccione una de las opciones.',
pleaseSelectProvider: 'Seleccione un proveedor de tarjetas antes de continuar.',
},
comma: 'la coma',
semicolon: 'el punto y coma',
Expand Down Expand Up @@ -2800,6 +2801,41 @@ export default {
companyCards: {
addCompanyCards: 'Agregar tarjetas de empresa',
selectCardFeed: 'Seleccionar feed de tarjetas',
addCardFeed: 'Añadir alimentación de tarjeta',
addNewCard: {
cardProviders: {
amex: 'Tarjetas de empresa American Express',
mastercard: 'Tarjetas comerciales Mastercard',
visa: 'Tarjetas comerciales Visa',
},
yourCardProvider: `¿Quién es su proveedor de tarjetas?`,
enableFeed: {
title: (provider: string) => `Habilita tu feed ${provider}`,
heading:
'Tenemos una integración directa con el emisor de su tarjeta y podemos importar los datos de sus transacciones a Expensify de forma rápida y precisa.\n\nPara empezar, simplemente:',
visa: `1. Visite [este artículo de ayuda](${CONST.COMPANY_CARDS_HELP}) para obtener instrucciones detalladas sobre cómo configurar sus tarjetas comerciales Visa.\n\n2. [Póngase en contacto con su banco](${CONST.COMPANY_CARDS_HELP}) para comprobar que admiten un feed personalizado para su programa, y pídales que lo activen.\n\n3. *Una vez que el feed esté habilitado y tengas sus datos, pasa a la siguiente pantalla.*`,
amex: `1. Visite [este artículo de ayuda](${CONST.COMPANY_CARDS_HELP}) para saber si American Express puede habilitar un feed personalizado para su programa.\n\n2. Una vez activada la alimentación, Amex le enviará una carta de producción.\n\n3. *Una vez que tenga la información de alimentación, continúe con la siguiente pantalla.*`,
mastercard: `1. Visite [este artículo de ayuda](${CONST.NETSUITE_IMPORT.HELP_LINKS.CUSTOM_SEGMENTS}) para obtener instrucciones detalladas sobre cómo configurar sus tarjetas comerciales Mastercard.\n\n 2. [Póngase en contacto con su banco](${CONST.COMPANY_CARDS_HELP}) para verificar que admiten un feed personalizado para su programa, y pídales que lo habiliten.\n\n3. *Una vez que el feed esté habilitado y tengas sus datos, pasa a la siguiente pantalla.*`,
},
whatBankIssuesCard: '¿Qué banco emite estas tarjetas?',
enterNameOfBank: 'Introduzca el nombre del banco',
feedDetails: {
visa: {
title: '¿Cuáles son los datos de alimentación de Visa?',
processorLabel: 'ID del procesador',
bankLabel: 'Identificación de la institución financiera (banco)',
companyLabel: 'Empresa ID',
},
amex: {
title: `¿Cuál es el nombre del archivo de entrega de Amex?`,
fileNameLabel: 'Nombre del archivo de entrega',
},
mastercard: {
title: `¿Cuál es el identificador de distribución de Mastercard?`,
distributionLabel: 'ID de distribución',
},
},
},
},
expensifyCard: {
issueAndManageCards: 'Emitir y gestionar Tarjetas Expensify',
Expand Down
39 changes: 39 additions & 0 deletions src/libs/CompanyCardUtils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import type {ValueOf} from 'type-fest';
import CONST from '@src/CONST';
import type {TranslationPaths} from '@src/languages/types';

/**
* @param feedProvider
* @returns Title based on the feedProvider
waterim marked this conversation as resolved.
Show resolved Hide resolved
*/
function getTranslationKeyForFeedDetails(feedProvider: ValueOf<typeof CONST.COMPANY_CARDS.CARD_TYPE> | undefined): TranslationPaths | '' {
waterim marked this conversation as resolved.
Show resolved Hide resolved
switch (feedProvider) {
case CONST.COMPANY_CARDS.CARD_TYPE.AMEX:
return 'workspace.companyCards.addNewCard.feedDetails.amex.title';
case CONST.COMPANY_CARDS.CARD_TYPE.MASTERCARD:
return 'workspace.companyCards.addNewCard.feedDetails.mastercard.title';
case CONST.COMPANY_CARDS.CARD_TYPE.VISA:
return 'workspace.companyCards.addNewCard.feedDetails.visa.title';
default:
return '';
}
}

/**
* @param feedProvider
* @returns Title based on the feedProvider
*/
function getTranslationKeyForFeedInstructions(feedProvider: ValueOf<typeof CONST.COMPANY_CARDS.CARD_TYPE> | undefined): TranslationPaths | '' {
switch (feedProvider) {
case CONST.COMPANY_CARDS.CARD_TYPE.AMEX:
return 'workspace.companyCards.addNewCard.enableFeed.amex';
case CONST.COMPANY_CARDS.CARD_TYPE.MASTERCARD:
return 'workspace.companyCards.addNewCard.enableFeed.mastercard';
case CONST.COMPANY_CARDS.CARD_TYPE.VISA:
return 'workspace.companyCards.addNewCard.enableFeed.visa';
default:
return '';
}
}

export {getTranslationKeyForFeedDetails, getTranslationKeyForFeedInstructions};
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,7 @@ const SettingsModalStackNavigator = createModalStackNavigator<SettingsNavigatorP
[SCREENS.WORKSPACE.INVOICES_COMPANY_NAME]: () => require<ReactComponentModule>('../../../../pages/workspace/invoices/WorkspaceInvoicingDetailsName').default,
[SCREENS.WORKSPACE.INVOICES_COMPANY_WEBSITE]: () => require<ReactComponentModule>('../../../../pages/workspace/invoices/WorkspaceInvoicingDetailsWebsite').default,
[SCREENS.WORKSPACE.COMPANY_CARDS_SELECT_FEED]: () => require<ReactComponentModule>('../../../../pages/workspace/companyCards/WorkspaceCompanyCardFeedSelectorPage').default,
[SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW]: () => require<ReactComponentModule>('../../../../pages/workspace/companyCards/addNew/AddNewCardPage').default,
[SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW]: () => require<ReactComponentModule>('../../../../pages/workspace/expensifyCard/issueNew/IssueNewCardPage').default,
[SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS]: () => require<ReactComponentModule>('../../../../pages/workspace/expensifyCard/WorkspaceCardSettingsPage').default,
[SCREENS.WORKSPACE.EXPENSIFY_CARD_SETTINGS_ACCOUNT]: () => require<ReactComponentModule>('../../../../pages/workspace/expensifyCard/WorkspaceSettlementAccountPage').default,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,17 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial<Record<FullScreenName, string[]>> = {
SCREENS.WORKSPACE.REPORT_FIELDS_EDIT_INITIAL_VALUE,
],
[SCREENS.WORKSPACE.INVOICES]: [SCREENS.WORKSPACE.INVOICES_COMPANY_NAME, SCREENS.WORKSPACE.INVOICES_COMPANY_WEBSITE],
[SCREENS.WORKSPACE.COMPANY_CARDS]: [SCREENS.WORKSPACE.COMPANY_CARDS_SELECT_FEED, SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS, SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS_FEED_NAME],
[SCREENS.WORKSPACE.COMPANY_CARDS]: [
SCREENS.WORKSPACE.COMPANY_CARDS_SELECT_FEED,
SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW,
SCREENS.WORKSPACE.COMPANY_CARDS_TYPE,
SCREENS.WORKSPACE.COMPANY_CARDS_INSTRUCTIONS,
SCREENS.WORKSPACE.COMPANY_CARDS_NAME,
SCREENS.WORKSPACE.COMPANY_CARDS_DETAILS,
SCREENS.WORKSPACE.COMPANY_CARDS_SELECT_FEED,
SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS,
SCREENS.WORKSPACE.COMPANY_CARDS_SETTINGS_FEED_NAME,
],
[SCREENS.WORKSPACE.EXPENSIFY_CARD]: [
SCREENS.WORKSPACE.EXPENSIFY_CARD_ISSUE_NEW,
SCREENS.WORKSPACE.EXPENSIFY_CARD_BANK_ACCOUNT,
Expand Down
3 changes: 3 additions & 0 deletions src/libs/Navigation/linkingConfig/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,9 @@ const config: LinkingOptions<RootStackParamList>['config'] = {
[SCREENS.WORKSPACE.EXPENSIFY_CARD_DETAILS]: {
path: ROUTES.WORKSPACE_EXPENSIFY_CARD_DETAILS.route,
},
[SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW]: {
path: ROUTES.WORKSPACE_COMPANY_CARDS_ADD_NEW.route,
},
[SCREENS.WORKSPACE.RATE_AND_UNIT]: {
path: ROUTES.WORKSPACE_RATE_AND_UNIT.route,
},
Expand Down
3 changes: 3 additions & 0 deletions src/libs/Navigation/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,9 @@ type FullScreenNavigatorParamList = {
[SCREENS.WORKSPACE.COMPANY_CARDS]: {
policyID: string;
};
[SCREENS.WORKSPACE.COMPANY_CARDS_ADD_NEW]: {
waterim marked this conversation as resolved.
Show resolved Hide resolved
policyID: string;
};
[SCREENS.WORKSPACE.WORKFLOWS]: {
policyID: string;
};
Expand Down
27 changes: 27 additions & 0 deletions src/libs/actions/CompanyCards.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import Onyx from 'react-native-onyx';
import ONYXKEYS from '@src/ONYXKEYS';
import type {AddNewCardFeedData, AddNewCardFeedStep} from '@src/types/onyx/CardFeeds';

type AddNewCompanyCardFlowData = {
/** Step to be set in Onyx */
step?: AddNewCardFeedStep;

/** Whether the user is editing step */
isEditing?: boolean;

/** Data required to be sent to issue a new card */
data?: Partial<AddNewCardFeedData>;
};

function setAddNewCompanyCardStepAndData({data, isEditing, step}: AddNewCompanyCardFlowData) {
Onyx.merge(ONYXKEYS.ADD_NEW_COMPANY_CARD, {data, isEditing, currentStep: step});
}

function clearAddNewCardFlow() {
Onyx.set(ONYXKEYS.ADD_NEW_COMPANY_CARD, {
currentStep: null,
data: {},
});
}

export {setAddNewCompanyCardStepAndData, clearAddNewCardFlow};
Loading
Loading