From 66bd90251cdd6ab885b29107311322ff8626f672 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Tue, 21 Jan 2025 14:34:01 +0100 Subject: [PATCH 01/12] Remove wrong default number id usage pt1 --- src/ROUTES.ts | 57 ++++++++++++++++--- .../BrokenConnectionDescription.tsx | 2 +- src/libs/ReportUtils.ts | 6 +- src/libs/actions/IOU.ts | 2 +- src/libs/actions/Policy/Policy.ts | 5 +- src/libs/actions/QuickActionNavigation.ts | 9 ++- src/libs/actions/Task.ts | 2 +- src/libs/actions/connections/index.ts | 5 +- src/pages/Travel/TripDetailsPage.tsx | 4 +- .../report/ContextMenu/ContextMenuActions.tsx | 2 +- src/pages/home/report/ReportActionsView.tsx | 4 +- .../FloatingActionButtonAndPopover.tsx | 4 +- .../step/IOURequestStepParticipants.tsx | 2 +- ...uickbooksCompanyCardExpenseAccountPage.tsx | 2 +- 14 files changed, 80 insertions(+), 26 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 4220569388ee..f32760511679 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -452,7 +452,12 @@ const ROUTES = { }, MONEY_REQUEST_CREATE: { route: ':action/:iouType/start/:transactionID/:reportID', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string) => `${action as string}/${iouType as string}/start/${transactionID}/${reportID}` as const, + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string | undefined) => { + if (!reportID) { + Log.warn('Invalid reportID is used to build the MONEY_REQUEST_CREATE route'); + } + return `${action as string}/${iouType as string}/start/${transactionID}/${reportID}` as const; + }, }, MONEY_REQUEST_STEP_SEND_FROM: { route: 'create/:iouType/from/:transactionID/:reportID', @@ -677,16 +682,30 @@ const ROUTES = { }, MONEY_REQUEST_CREATE_TAB_DISTANCE: { route: ':action/:iouType/start/:transactionID/:reportID/distance', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string) => `create/${iouType as string}/start/${transactionID}/${reportID}/distance` as const, + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string | undefined) => { + if (!reportID) { + Log.warn('Invalid reportID is used to build the MONEY_REQUEST_CREATE_TAB_DISTANCE route'); + } + return `create/${iouType as string}/start/${transactionID}/${reportID}/distance` as const; + }, }, MONEY_REQUEST_CREATE_TAB_MANUAL: { route: ':action/:iouType/start/:transactionID/:reportID/manual', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string) => - `${action as string}/${iouType as string}/start/${transactionID}/${reportID}/manual` as const, + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string | undefined) => { + if (!reportID) { + Log.warn('Invalid reportID is used to build the MONEY_REQUEST_CREATE_TAB_MANUAL route'); + } + return `${action as string}/${iouType as string}/start/${transactionID}/${reportID}/manual` as const; + }, }, MONEY_REQUEST_CREATE_TAB_SCAN: { route: ':action/:iouType/start/:transactionID/:reportID/scan', - getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string) => `create/${iouType as string}/start/${transactionID}/${reportID}/scan` as const, + getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string | undefined) => { + if (!reportID) { + Log.warn('Invalid reportID is used to build the MONEY_REQUEST_CREATE_TAB_SCAN route'); + } + return `create/${iouType as string}/start/${transactionID}/${reportID}/scan` as const; + }, }, MONEY_REQUEST_CREATE_TAB_PER_DIEM: { route: ':action/:iouType/start/:transactionID/:reportID/per-diem', @@ -777,7 +796,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export', - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`settings/workspaces/${policyID}/accounting/quickbooks-online/export` as const, backTo, false), + getRoute: (policyID: string | undefined, backTo?: string) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT route'); + } + return getUrlWithBackToParam(`settings/workspaces/${policyID}/accounting/quickbooks-online/export` as const, backTo, false); + }, }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account', @@ -785,15 +809,30 @@ const ROUTES = { }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account/account-select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/account-select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT route'); + } + return `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/account-select` as const; + }, }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_NON_REIMBURSABLE_DEFAULT_VENDOR_SELECT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account/default-vendor-select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/default-vendor-select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT route'); + } + return `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/default-vendor-select` as const; + }, }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account/card-select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/card-select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT route'); + } + return `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/card-select` as const; + }, }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_INVOICE_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/invoice-account-select', diff --git a/src/components/BrokenConnectionDescription.tsx b/src/components/BrokenConnectionDescription.tsx index 078cbed25631..34b37cef43f9 100644 --- a/src/components/BrokenConnectionDescription.tsx +++ b/src/components/BrokenConnectionDescription.tsx @@ -26,7 +26,7 @@ type BrokenConnectionDescriptionProps = { function BrokenConnectionDescription({transactionID, policy, report}: BrokenConnectionDescriptionProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); - const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID ?? CONST.DEFAULT_NUMBER_ID}`); + const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${transactionID}`); const brokenConnection530Error = transactionViolations?.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION_530); const brokenConnectionError = transactionViolations?.find((violation) => violation.data?.rterType === CONST.RTER_VIOLATION_TYPES.BROKEN_CARD_CONNECTION); diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index f5a1e71cea78..3a9038b12971 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -7586,7 +7586,11 @@ function canCreateRequest(report: OnyxEntry, policy: OnyxEntry, return requestOptions.includes(iouType); } -function getWorkspaceChats(policyID: string, accountIDs: number[], reports: OnyxCollection = allReports): Array> { +function getWorkspaceChats(policyID: string | undefined, accountIDs: number[], reports: OnyxCollection = allReports): Array> { + if (!policyID) { + return []; + } + return Object.values(reports ?? {}).filter( (report) => isPolicyExpenseChat(report) && report?.policyID === policyID && report?.ownerAccountID && accountIDs.includes(report?.ownerAccountID), ); diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 26ebf5e37a8e..68f74237c07c 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -684,7 +684,7 @@ function clearMoneyRequest(transactionID: string, skipConfirmation = false) { Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${transactionID}`, null); } -function startMoneyRequest(iouType: ValueOf, reportID: string, requestType?: IOURequestType, skipConfirmation = false) { +function startMoneyRequest(iouType: ValueOf, reportID: string | undefined, requestType?: IOURequestType, skipConfirmation = false) { clearMoneyRequest(CONST.IOU.OPTIMISTIC_TRANSACTION_ID, skipConfirmation); switch (requestType) { case CONST.IOU.REQUEST_TYPE.MANUAL: diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index eb302fd7fda5..9a34bcef152a 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -633,7 +633,10 @@ function clearPolicyErrorField(policyID: string | undefined, fieldName: string) Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {errorFields: {[fieldName]: null}}); } -function clearQBOErrorField(policyID: string, fieldName: string) { +function clearQBOErrorField(policyID: string | undefined, fieldName: string) { + if (!policyID) { + return; + } Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {quickbooksOnline: {config: {errorFields: {[fieldName]: null}}}}}); } diff --git a/src/libs/actions/QuickActionNavigation.ts b/src/libs/actions/QuickActionNavigation.ts index b89d1a981417..ae3a132efb05 100644 --- a/src/libs/actions/QuickActionNavigation.ts +++ b/src/libs/actions/QuickActionNavigation.ts @@ -22,7 +22,12 @@ function getQuickActionRequestType(action: QuickActionName | undefined): IOU.IOU return requestType; } -function navigateToQuickAction(isValidReport: boolean, quickActionReportID: string, quickAction: QuickAction, selectOption: (onSelected: () => void, shouldRestrictAction: boolean) => void) { +function navigateToQuickAction( + isValidReport: boolean, + quickActionReportID: string | undefined, + quickAction: QuickAction, + selectOption: (onSelected: () => void, shouldRestrictAction: boolean) => void, +) { const reportID = isValidReport ? quickActionReportID : generateReportID(); const requestType = getQuickActionRequestType(quickAction?.action); @@ -41,7 +46,7 @@ function navigateToQuickAction(isValidReport: boolean, quickActionReportID: stri selectOption(() => IOU.startMoneyRequest(CONST.IOU.TYPE.PAY, reportID, undefined, true), false); return; case CONST.QUICK_ACTIONS.ASSIGN_TASK: - selectOption(() => Task.startOutCreateTaskQuickAction(isValidReport ? reportID : '', quickAction.targetAccountID ?? CONST.DEFAULT_NUMBER_ID), false); + selectOption(() => Task.startOutCreateTaskQuickAction(isValidReport ? reportID : undefined, quickAction.targetAccountID ?? CONST.DEFAULT_NUMBER_ID), false); break; case CONST.QUICK_ACTIONS.TRACK_MANUAL: case CONST.QUICK_ACTIONS.TRACK_SCAN: diff --git a/src/libs/actions/Task.ts b/src/libs/actions/Task.ts index 2a13ff69b769..a66aca9ea87a 100644 --- a/src/libs/actions/Task.ts +++ b/src/libs/actions/Task.ts @@ -910,7 +910,7 @@ function clearOutTaskInfoAndNavigate(reportID?: string, chatReport?: OnyxEntry>( - policyID: string, + policyID: string | undefined, connectionName: TConnectionName, configUpdate: TConfigUpdate, configCurrentData: TConfigUpdate, ) { + if (!policyID) { + return; + } const optimisticData: OnyxUpdate[] = [ { onyxMethod: Onyx.METHOD.MERGE, diff --git a/src/pages/Travel/TripDetailsPage.tsx b/src/pages/Travel/TripDetailsPage.tsx index 2e9df5a6a5e6..d8e8f7127b94 100644 --- a/src/pages/Travel/TripDetailsPage.tsx +++ b/src/pages/Travel/TripDetailsPage.tsx @@ -48,8 +48,8 @@ function TripDetailsPage({route}: TripDetailsPageProps) { const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID); const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${route.params.transactionID}`); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID ?? CONST.DEFAULT_NUMBER_ID}`); - const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.parentReportID ?? CONST.DEFAULT_NUMBER_ID}`); + const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`); + const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.parentReportID}`); const tripID = ReportUtils.getTripIDFromTransactionParentReportID(parentReport?.reportID); const reservationType = transaction?.receipt?.reservationList?.at(route.params.reservationIndex ?? 0)?.type; diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index fe9e1a5b6cee..91481cd30754 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -311,7 +311,7 @@ const ContextMenuActions: ContextMenuAction[] = [ onPress: (closePopover, {reportID, reportAction, draftMessage}) => { if (isMoneyRequestAction(reportAction)) { hideContextMenu(false); - const childReportID = `${reportAction?.childReportID ?? CONST.DEFAULT_NUMBER_ID}`; + const childReportID = reportAction?.childReportID; openReport(childReportID); Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(childReportID)); return; diff --git a/src/pages/home/report/ReportActionsView.tsx b/src/pages/home/report/ReportActionsView.tsx index ceb704b30e6a..1a49079ba3d4 100755 --- a/src/pages/home/report/ReportActionsView.tsx +++ b/src/pages/home/report/ReportActionsView.tsx @@ -95,10 +95,10 @@ function ReportActionsView({ const reactionListRef = useContext(ReactionListContext); const route = useRoute>(); const [session] = useOnyx(ONYXKEYS.SESSION); - const [transactionThreadReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID ?? CONST.DEFAULT_NUMBER_ID}`, { + const [transactionThreadReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${transactionThreadReportID}`, { selector: (reportActions: OnyxEntry) => getSortedReportActionsForDisplay(reportActions, canUserPerformWriteAction(report), true), }); - const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionThreadReportID ?? CONST.DEFAULT_NUMBER_ID}`); + const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionThreadReportID}`); const [reportMetadata] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_METADATA}${report.reportID}`); const prevTransactionThreadReport = usePrevious(transactionThreadReport); const reportActionID = route?.params?.reportActionID; diff --git a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx index b4b3f0171a6a..f7b2b47a7e80 100644 --- a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx +++ b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx @@ -183,7 +183,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu}: Fl if (isEmptyObject(activePolicy) || !activePolicy?.isPolicyExpenseChatEnabled) { return {} as OnyxTypes.Report; } - const policyChatsForActivePolicy = getWorkspaceChats(`${activePolicyID ?? CONST.DEFAULT_NUMBER_ID}`, [session?.accountID ?? CONST.DEFAULT_NUMBER_ID], allReports); + const policyChatsForActivePolicy = getWorkspaceChats(activePolicyID, [session?.accountID ?? CONST.DEFAULT_NUMBER_ID], allReports); return policyChatsForActivePolicy.length > 0 ? policyChatsForActivePolicy.at(0) : ({} as OnyxTypes.Report); }, [activePolicy, activePolicyID, session?.accountID, allReports]); const [quickActionPolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${quickActionReport?.policyID}`); @@ -395,7 +395,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu}: Fl onSelected: () => interceptAnonymousUser(() => { hideProductTrainingTooltip(); - navigateToQuickAction(isValidReport, `${quickActionReport?.reportID ?? CONST.DEFAULT_NUMBER_ID}`, quickAction, selectOption); + navigateToQuickAction(isValidReport, quickActionReport?.reportID, quickAction, selectOption); }), shouldShowSubscriptRightAvatar: isPolicyExpenseChat(quickActionReport), }, diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 6a67a1040f1b..30b800465a67 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -41,7 +41,7 @@ function IOURequestStepParticipants({ const {translate} = useLocalize(); const styles = useThemeStyles(); const isFocused = useIsFocused(); - const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID ?? CONST.DEFAULT_NUMBER_ID}`); + const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID}`); // We need to set selectedReportID if user has navigated back from confirmation page and navigates to confirmation page with already selected participant const selectedReportID = useRef(participants?.length === 1 ? participants.at(0)?.reportID ?? reportID : reportID); diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx index 0fcb6540e3d3..c4c9c62dedec 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -19,7 +19,7 @@ import ROUTES from '@src/ROUTES'; function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const policyID = policy?.id ?? `${CONST.DEFAULT_NUMBER_ID}`; + const policyID = policy?.id; const qboConfig = policy?.connections?.quickbooksOnline?.config; const {vendors} = policy?.connections?.quickbooksOnline?.data ?? {}; const nonReimbursableBillDefaultVendorObject = vendors?.find((vendor) => vendor.id === qboConfig?.nonReimbursableBillDefaultVendor); From e06ad3ff3a8a4afa40b0db75f908659fab81ab59 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Tue, 21 Jan 2025 15:16:43 +0100 Subject: [PATCH 02/12] Remove wrong default number id usage pt2 --- src/components/MoneyReportHeader.tsx | 6 ++---- src/components/ReportActionItem/ReportPreview.tsx | 2 +- src/pages/home/report/ReportActionItemSingle.tsx | 4 +--- src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx | 2 +- src/pages/iou/request/IOURequestStartPage.tsx | 3 +-- src/pages/workspace/AccessOrNotFoundWrapper.tsx | 2 +- 6 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/components/MoneyReportHeader.tsx b/src/components/MoneyReportHeader.tsx index 38d859def1f7..7b074c335f3a 100644 --- a/src/components/MoneyReportHeader.tsx +++ b/src/components/MoneyReportHeader.tsx @@ -103,10 +103,8 @@ function MoneyReportHeader({policy, report: moneyRequestReport, transactionThrea // eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth const {shouldUseNarrowLayout, isSmallScreenWidth} = useResponsiveLayout(); const route = useRoute(); - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${moneyRequestReport?.chatReportID || CONST.DEFAULT_NUMBER_ID}`); - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const [nextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${moneyRequestReport?.reportID || CONST.DEFAULT_NUMBER_ID}`); + const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${moneyRequestReport?.chatReportID}`); + const [nextStep] = useOnyx(`${ONYXKEYS.COLLECTION.NEXT_STEP}${moneyRequestReport?.reportID}`); const [transactionThreadReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transactionThreadReportID}`); const [session] = useOnyx(ONYXKEYS.SESSION); const requestParentReportAction = useMemo(() => { diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 47520c6b77c8..a54da6c5fe1a 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -147,7 +147,7 @@ function ReportPreview({ const [transactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS); const [userWallet] = useOnyx(ONYXKEYS.USER_WALLET); const [invoiceReceiverPolicy] = useOnyx( - `${ONYXKEYS.COLLECTION.POLICY}${chatReport?.invoiceReceiver && 'policyID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.policyID : CONST.DEFAULT_NUMBER_ID}`, + `${ONYXKEYS.COLLECTION.POLICY}${chatReport?.invoiceReceiver && 'policyID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.policyID : undefined}`, ); const [invoiceReceiverPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, { selector: (personalDetails) => diff --git a/src/pages/home/report/ReportActionItemSingle.tsx b/src/pages/home/report/ReportActionItemSingle.tsx index 3e1092d0373a..02283934b56c 100644 --- a/src/pages/home/report/ReportActionItemSingle.tsx +++ b/src/pages/home/report/ReportActionItemSingle.tsx @@ -104,9 +104,7 @@ function ReportActionItemSingle({ const ownerAccountID = iouReport?.ownerAccountID ?? action?.childOwnerAccountID; const isReportPreviewAction = action?.actionName === CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW; const actorAccountID = getReportActionActorAccountID(action, iouReport, report); - const [invoiceReceiverPolicy] = useOnyx( - `${ONYXKEYS.COLLECTION.POLICY}${report?.invoiceReceiver && 'policyID' in report.invoiceReceiver ? report.invoiceReceiver.policyID : CONST.DEFAULT_NUMBER_ID}`, - ); + const [invoiceReceiverPolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${report?.invoiceReceiver && 'policyID' in report.invoiceReceiver ? report.invoiceReceiver.policyID : undefined}`); let displayName = getDisplayNameForParticipant(actorAccountID); const {avatar, login, pendingFields, status, fallbackIcon} = personalDetails?.[actorAccountID ?? CONST.DEFAULT_NUMBER_ID] ?? {}; diff --git a/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx b/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx index 580f94e0f2f4..7ecec286865b 100644 --- a/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx +++ b/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx @@ -22,7 +22,7 @@ function BaseSidebarScreen() { const activeWorkspaceID = useActiveWorkspaceFromNavigationState(); const {translate} = useLocalize(); const {shouldUseNarrowLayout} = useResponsiveLayout(); - const [activeWorkspace, activeWorkspaceResult] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${activeWorkspaceID ?? CONST.DEFAULT_NUMBER_ID}`); + const [activeWorkspace, activeWorkspaceResult] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${activeWorkspaceID}`); const isLoading = isLoadingOnyxValue(activeWorkspaceResult); useEffect(() => { diff --git a/src/pages/iou/request/IOURequestStartPage.tsx b/src/pages/iou/request/IOURequestStartPage.tsx index e5572bd34294..188b8877128d 100644 --- a/src/pages/iou/request/IOURequestStartPage.tsx +++ b/src/pages/iou/request/IOURequestStartPage.tsx @@ -49,8 +49,7 @@ function IOURequestStartPage({ const [selectedTab = CONST.TAB_REQUEST.SCAN, selectedTabResult] = useOnyx(`${ONYXKEYS.COLLECTION.SELECTED_TAB}${CONST.TAB.IOU_REQUEST_TYPE}`); const [session] = useOnyx(ONYXKEYS.SESSION); const isLoadingSelectedTab = shouldUseTab ? isLoadingOnyxValue(selectedTabResult) : false; - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${route?.params.transactionID || CONST.DEFAULT_NUMBER_ID}`); + const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${route?.params.transactionID}`); const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY); const {canUsePerDiem} = usePermissions(); diff --git a/src/pages/workspace/AccessOrNotFoundWrapper.tsx b/src/pages/workspace/AccessOrNotFoundWrapper.tsx index b9da0147b525..9bda7f3972f9 100644 --- a/src/pages/workspace/AccessOrNotFoundWrapper.tsx +++ b/src/pages/workspace/AccessOrNotFoundWrapper.tsx @@ -123,7 +123,7 @@ function AccessOrNotFoundWrapper({ ...props }: AccessOrNotFoundWrapperProps) { const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`); - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID ?? CONST.DEFAULT_NUMBER_ID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const [isLoadingReportData] = useOnyx(ONYXKEYS.IS_LOADING_REPORT_DATA, {initialValue: true}); const {login = ''} = useCurrentUserPersonalDetails(); const isPolicyIDInRoute = !!policyID?.length; From 9452d40ba6da5973adfab504f6da69543134a511 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Tue, 21 Jan 2025 16:00:39 +0100 Subject: [PATCH 03/12] Fix lint errors --- src/libs/actions/QuickActionNavigation.ts | 17 ++++--- src/libs/actions/Task.ts | 10 ++-- src/pages/Travel/TripDetailsPage.tsx | 14 +++--- .../SidebarScreen/BaseSidebarScreen.tsx | 4 +- .../step/IOURequestStepParticipants.tsx | 50 +++++++++++-------- .../workspace/AccessOrNotFoundWrapper.tsx | 35 +++++++------ ...uickbooksCompanyCardExpenseAccountPage.tsx | 24 ++++----- 7 files changed, 85 insertions(+), 69 deletions(-) diff --git a/src/libs/actions/QuickActionNavigation.ts b/src/libs/actions/QuickActionNavigation.ts index ae3a132efb05..d35eb21b37a1 100644 --- a/src/libs/actions/QuickActionNavigation.ts +++ b/src/libs/actions/QuickActionNavigation.ts @@ -2,10 +2,11 @@ import {generateReportID} from '@libs/ReportUtils'; import CONST from '@src/CONST'; import type {QuickActionName} from '@src/types/onyx/QuickAction'; import type QuickAction from '@src/types/onyx/QuickAction'; -import * as IOU from './IOU'; -import * as Task from './Task'; +import {startMoneyRequest} from './IOU'; +import type {IOURequestType} from './IOU'; +import {startOutCreateTaskQuickAction} from './Task'; -function getQuickActionRequestType(action: QuickActionName | undefined): IOU.IOURequestType | undefined { +function getQuickActionRequestType(action: QuickActionName | undefined): IOURequestType | undefined { if (!action) { return; } @@ -35,23 +36,23 @@ function navigateToQuickAction( case CONST.QUICK_ACTIONS.REQUEST_MANUAL: case CONST.QUICK_ACTIONS.REQUEST_SCAN: case CONST.QUICK_ACTIONS.REQUEST_DISTANCE: - selectOption(() => IOU.startMoneyRequest(CONST.IOU.TYPE.SUBMIT, reportID, requestType, true), true); + selectOption(() => startMoneyRequest(CONST.IOU.TYPE.SUBMIT, reportID, requestType, true), true); return; case CONST.QUICK_ACTIONS.SPLIT_MANUAL: case CONST.QUICK_ACTIONS.SPLIT_SCAN: case CONST.QUICK_ACTIONS.SPLIT_DISTANCE: - selectOption(() => IOU.startMoneyRequest(CONST.IOU.TYPE.SPLIT, reportID, requestType, true), true); + selectOption(() => startMoneyRequest(CONST.IOU.TYPE.SPLIT, reportID, requestType, true), true); return; case CONST.QUICK_ACTIONS.SEND_MONEY: - selectOption(() => IOU.startMoneyRequest(CONST.IOU.TYPE.PAY, reportID, undefined, true), false); + selectOption(() => startMoneyRequest(CONST.IOU.TYPE.PAY, reportID, undefined, true), false); return; case CONST.QUICK_ACTIONS.ASSIGN_TASK: - selectOption(() => Task.startOutCreateTaskQuickAction(isValidReport ? reportID : undefined, quickAction.targetAccountID ?? CONST.DEFAULT_NUMBER_ID), false); + selectOption(() => startOutCreateTaskQuickAction(isValidReport ? reportID : undefined, quickAction.targetAccountID ?? CONST.DEFAULT_NUMBER_ID), false); break; case CONST.QUICK_ACTIONS.TRACK_MANUAL: case CONST.QUICK_ACTIONS.TRACK_SCAN: case CONST.QUICK_ACTIONS.TRACK_DISTANCE: - selectOption(() => IOU.startMoneyRequest(CONST.IOU.TYPE.TRACK, reportID, requestType, true), false); + selectOption(() => startMoneyRequest(CONST.IOU.TYPE.TRACK, reportID, requestType, true), false); break; default: } diff --git a/src/libs/actions/Task.ts b/src/libs/actions/Task.ts index a66aca9ea87a..d25a5ce6c3c9 100644 --- a/src/libs/actions/Task.ts +++ b/src/libs/actions/Task.ts @@ -23,7 +23,7 @@ import type {Icon} from '@src/types/onyx/OnyxCommon'; import type {ReportActions} from '@src/types/onyx/ReportAction'; import type ReportAction from '@src/types/onyx/ReportAction'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -import * as Report from './Report'; +import {getMostRecentReportID, navigateToConciergeChatAndDeleteReport, notifyNewAction} from './Report'; type OptimisticReport = Pick; type Assignee = { @@ -335,7 +335,7 @@ function createTaskAndNavigate( clearOutTaskInfo(); Navigation.dismissModal(parentReportID); } - Report.notifyNewAction(parentReportID, currentUserAccountID); + notifyNewAction(parentReportID, currentUserAccountID); } /** @@ -1014,7 +1014,7 @@ function getNavigationUrlOnTaskDelete(report: OnyxEntry): stri } // If no parent report, try to navigate to most recent report - const mostRecentReportID = Report.getMostRecentReportID(report); + const mostRecentReportID = getMostRecentReportID(report); if (mostRecentReportID) { return ROUTES.REPORT_WITH_ID.getRoute(mostRecentReportID); } @@ -1162,7 +1162,7 @@ function deleteTask(report: OnyxEntry) { }; API.write(WRITE_COMMANDS.CANCEL_TASK, parameters, {optimisticData, successData, failureData}); - Report.notifyNewAction(report.reportID, currentUserAccountID); + notifyNewAction(report.reportID, currentUserAccountID); const urlToNavigateBack = getNavigationUrlOnTaskDelete(report); if (urlToNavigateBack) { @@ -1258,7 +1258,7 @@ function clearTaskErrors(reportID: string) { if (report?.pendingFields?.createChat === CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD) { Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.parentReportID}`, report.parentReportActionID ? {[report.parentReportActionID]: null} : {}); - Report.navigateToConciergeChatAndDeleteReport(reportID); + navigateToConciergeChatAndDeleteReport(reportID); return; } diff --git a/src/pages/Travel/TripDetailsPage.tsx b/src/pages/Travel/TripDetailsPage.tsx index d8e8f7127b94..70c00483e531 100644 --- a/src/pages/Travel/TripDetailsPage.tsx +++ b/src/pages/Travel/TripDetailsPage.tsx @@ -16,9 +16,9 @@ import useStyleUtils from '@hooks/useStyleUtils'; import useTheme from '@hooks/useTheme'; import useThemeStyles from '@hooks/useThemeStyles'; import type {TravelNavigatorParamList} from '@libs/Navigation/types'; -import * as ReportUtils from '@libs/ReportUtils'; -import * as TripReservationUtils from '@libs/TripReservationUtils'; -import * as Link from '@userActions/Link'; +import {getTripIDFromTransactionParentReportID} from '@libs/ReportUtils'; +import {getTripReservationIcon} from '@libs/TripReservationUtils'; +import {openTravelDotLink} from '@userActions/Link'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type SCREENS from '@src/SCREENS'; @@ -51,10 +51,10 @@ function TripDetailsPage({route}: TripDetailsPageProps) { const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${transaction?.reportID}`); const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report?.parentReportID}`); - const tripID = ReportUtils.getTripIDFromTransactionParentReportID(parentReport?.reportID); + const tripID = getTripIDFromTransactionParentReportID(parentReport?.reportID); const reservationType = transaction?.receipt?.reservationList?.at(route.params.reservationIndex ?? 0)?.type; const reservation = transaction?.receipt?.reservationList?.at(route.params.reservationIndex ?? 0); - const reservationIcon = TripReservationUtils.getTripReservationIcon(reservation?.type); + const reservationIcon = getTripReservationIcon(reservation?.type); const [travelerPersonalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: (personalDetails) => pickTravelerPersonalDetails(personalDetails, reservation)}); return ( @@ -112,7 +112,7 @@ function TripDetailsPage({route}: TripDetailsPageProps) { shouldShowRightIcon onPress={() => { setIsModifyTripLoading(true); - Link.openTravelDotLink(activePolicyID, CONST.TRIP_ID_PATH(tripID))?.finally(() => { + openTravelDotLink(activePolicyID, CONST.TRIP_ID_PATH(tripID))?.finally(() => { setIsModifyTripLoading(false); }); }} @@ -128,7 +128,7 @@ function TripDetailsPage({route}: TripDetailsPageProps) { shouldShowRightIcon onPress={() => { setIsTripSupportLoading(true); - Link.openTravelDotLink(activePolicyID, CONST.TRIP_SUPPORT)?.finally(() => { + openTravelDotLink(activePolicyID, CONST.TRIP_SUPPORT)?.finally(() => { setIsTripSupportLoading(false); }); }} diff --git a/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx b/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx index 7ecec286865b..c8ab0da877ae 100644 --- a/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx +++ b/src/pages/home/sidebar/SidebarScreen/BaseSidebarScreen.tsx @@ -7,7 +7,7 @@ import useLocalize from '@hooks/useLocalize'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useThemeStyles from '@hooks/useThemeStyles'; import {updateLastAccessedWorkspace} from '@libs/actions/Policy/Policy'; -import * as Browser from '@libs/Browser'; +import {isMobile} from '@libs/Browser'; import TopBar from '@libs/Navigation/AppNavigator/createCustomBottomTabNavigator/TopBar'; import Navigation from '@libs/Navigation/Navigation'; import Performance from '@libs/Performance'; @@ -45,7 +45,7 @@ function BaseSidebarScreen() { diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 30b800465a67..464cc3677cb9 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -5,16 +5,24 @@ import FormHelpMessage from '@components/FormHelpMessage'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import {READ_COMMANDS} from '@libs/API/types'; -import * as Browser from '@libs/Browser'; +import {isMobileSafari as checkIfMobileSafari} from '@libs/Browser'; import DistanceRequestUtils from '@libs/DistanceRequestUtils'; import getPlatform from '@libs/getPlatform'; import HttpUtils from '@libs/HttpUtils'; -import * as IOUUtils from '@libs/IOUUtils'; +import {isMovingTransactionFromTrackExpense, navigateToStartMoneyRequestStep} from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as ReportUtils from '@libs/ReportUtils'; -import * as TransactionUtils from '@libs/TransactionUtils'; +import {createDraftWorkspaceAndNavigateToConfirmationScreen, findSelfDMReportID, isInvoiceRoomWithID} from '@libs/ReportUtils'; +import {getRequestType} from '@libs/TransactionUtils'; import MoneyRequestParticipantsSelector from '@pages/iou/request/MoneyRequestParticipantsSelector'; -import * as IOU from '@userActions/IOU'; +import { + navigateToStartStepIfScanFileCannotBeRead, + setCustomUnitRateID, + setMoneyRequestCategory, + setMoneyRequestParticipants, + setMoneyRequestParticipantsFromReport, + setMoneyRequestTag, + setSplitShares, +} from '@userActions/IOU'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type {Route} from '@src/ROUTES'; @@ -46,7 +54,7 @@ function IOURequestStepParticipants({ // We need to set selectedReportID if user has navigated back from confirmation page and navigates to confirmation page with already selected participant const selectedReportID = useRef(participants?.length === 1 ? participants.at(0)?.reportID ?? reportID : reportID); const numberOfParticipants = useRef(participants?.length ?? 0); - const iouRequestType = TransactionUtils.getRequestType(transaction); + const iouRequestType = getRequestType(transaction); const isSplitRequest = iouType === CONST.IOU.TYPE.SPLIT; const headerTitle = useMemo(() => { if (action === CONST.IOU.ACTION.CATEGORIZE) { @@ -67,7 +75,7 @@ function IOURequestStepParticipants({ return translate('iou.chooseRecipient'); }, [iouType, translate, isSplitRequest, action]); - const selfDMReportID = useMemo(() => ReportUtils.findSelfDMReportID(), []); + const selfDMReportID = useMemo(() => findSelfDMReportID(), []); const [selfDMReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${selfDMReportID}`); const shouldDisplayTrackExpenseButton = !!selfDMReportID && iouType === CONST.IOU.TYPE.CREATE; @@ -75,17 +83,17 @@ function IOURequestStepParticipants({ const receiptPath = transaction?.receipt?.source; const receiptType = transaction?.receipt?.type; const isAndroidNative = getPlatform() === CONST.PLATFORM.ANDROID; - const isMobileSafari = Browser.isMobileSafari(); + const isMobileSafari = checkIfMobileSafari(); // When the component mounts, if there is a receipt, see if the image can be read from the disk. If not, redirect the user to the starting step of the flow. // This is because until the expense is saved, the receipt file is only stored in the browsers memory as a blob:// and if the browser is refreshed, then // the image ceases to exist. The best way for the user to recover from this is to start over from the start of the expense process. // skip this in case user is moving the transaction as the receipt path will be valid in that case useEffect(() => { - if (IOUUtils.isMovingTransactionFromTrackExpense(action)) { + if (isMovingTransactionFromTrackExpense(action)) { return; } - IOU.navigateToStartStepIfScanFileCannotBeRead(receiptFilename ?? '', receiptPath ?? '', () => {}, iouRequestType, iouType, transactionID, reportID, receiptType ?? ''); + navigateToStartStepIfScanFileCannotBeRead(receiptFilename ?? '', receiptPath ?? '', () => {}, iouRequestType, iouType, transactionID, reportID, receiptType ?? ''); }, [receiptType, receiptPath, receiptFilename, iouRequestType, iouType, transactionID, reportID, action]); const addParticipant = useCallback( @@ -94,11 +102,11 @@ function IOURequestStepParticipants({ const firstParticipantReportID = val.at(0)?.reportID; const rateID = DistanceRequestUtils.getCustomUnitRateID(firstParticipantReportID); - const isInvoice = iouType === CONST.IOU.TYPE.INVOICE && ReportUtils.isInvoiceRoomWithID(firstParticipantReportID); + const isInvoice = iouType === CONST.IOU.TYPE.INVOICE && isInvoiceRoomWithID(firstParticipantReportID); numberOfParticipants.current = val.length; - IOU.setMoneyRequestParticipants(transactionID, val); - IOU.setCustomUnitRateID(transactionID, rateID); + setMoneyRequestParticipants(transactionID, val); + setCustomUnitRateID(transactionID, rateID); // When multiple participants are selected, the reportID is generated at the end of the confirmation step. // So we are resetting selectedReportID ref to the reportID coming from params. @@ -133,13 +141,13 @@ function IOURequestStepParticipants({ const isPolicyExpenseChat = participants?.some((participant) => participant.isPolicyExpenseChat); if (iouType === CONST.IOU.TYPE.SPLIT && !isPolicyExpenseChat && transaction?.amount && transaction?.currency) { const participantAccountIDs = participants?.map((participant) => participant.accountID) as number[]; - IOU.setSplitShares(transaction, transaction.amount, transaction.currency, participantAccountIDs); + setSplitShares(transaction, transaction.amount, transaction.currency, participantAccountIDs); } - IOU.setMoneyRequestTag(transactionID, ''); - IOU.setMoneyRequestCategory(transactionID, ''); + setMoneyRequestTag(transactionID, ''); + setMoneyRequestCategory(transactionID, ''); if ((isCategorizing || isShareAction) && numberOfParticipants.current === 0) { - ReportUtils.createDraftWorkspaceAndNavigateToConfirmationScreen(transactionID, action); + createDraftWorkspaceAndNavigateToConfirmationScreen(transactionID, action); return; } @@ -160,7 +168,7 @@ function IOURequestStepParticipants({ }, [action, participants, iouType, transaction, transactionID, reportID, handleNavigation]); const navigateBack = useCallback(() => { - IOUUtils.navigateToStartMoneyRequestStep(iouRequestType, iouType, transactionID, reportID, action); + navigateToStartMoneyRequestStep(iouRequestType, iouType, transactionID, reportID, action); }, [iouRequestType, iouType, transactionID, reportID, action]); const trackExpense = () => { @@ -171,8 +179,8 @@ function IOURequestStepParticipants({ } const rateID = DistanceRequestUtils.getCustomUnitRateID(selfDMReportID); - IOU.setCustomUnitRateID(transactionID, rateID); - IOU.setMoneyRequestParticipantsFromReport(transactionID, selfDMReport); + setCustomUnitRateID(transactionID, rateID); + setMoneyRequestParticipantsFromReport(transactionID, selfDMReport); const iouConfirmationPageRoute = ROUTES.MONEY_REQUEST_STEP_CONFIRMATION.getRoute(action, CONST.IOU.TYPE.TRACK, transactionID, selfDMReportID); handleNavigation(iouConfirmationPageRoute); @@ -182,7 +190,7 @@ function IOURequestStepParticipants({ const isCategorizing = action === CONST.IOU.ACTION.CATEGORIZE; const isShareAction = action === CONST.IOU.ACTION.SHARE; if (isFocused && (isCategorizing || isShareAction)) { - IOU.setMoneyRequestParticipants(transactionID, []); + setMoneyRequestParticipants(transactionID, []); numberOfParticipants.current = 0; } }, [isFocused, action, transactionID]); diff --git a/src/pages/workspace/AccessOrNotFoundWrapper.tsx b/src/pages/workspace/AccessOrNotFoundWrapper.tsx index 9bda7f3972f9..5a8417b9cc07 100644 --- a/src/pages/workspace/AccessOrNotFoundWrapper.tsx +++ b/src/pages/workspace/AccessOrNotFoundWrapper.tsx @@ -7,12 +7,19 @@ import FullscreenLoadingIndicator from '@components/FullscreenLoadingIndicator'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useNetwork from '@hooks/useNetwork'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; -import * as IOUUtils from '@libs/IOUUtils'; +import {isValidMoneyRequestType} from '@libs/IOUUtils'; import Navigation from '@libs/Navigation/Navigation'; -import * as PolicyUtils from '@libs/PolicyUtils'; -import * as ReportUtils from '@libs/ReportUtils'; +import { + canSendInvoice, + isPolicyAccessible as getPolicyAccessible, + isPolicyFeatureEnabled as getPolicyFeatureEnabled, + isControlPolicy, + isPaidGroupPolicy, + isPolicyAdmin, +} from '@libs/PolicyUtils'; +import {canCreateRequest} from '@libs/ReportUtils'; import NotFoundPage from '@pages/ErrorPage/NotFoundPage'; -import * as Policy from '@userActions/Policy/Policy'; +import {openWorkspace} from '@userActions/Policy/Policy'; import type {IOUType} from '@src/CONST'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; @@ -24,9 +31,9 @@ import callOrReturn from '@src/types/utils/callOrReturn'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; const ACCESS_VARIANTS = { - [CONST.POLICY.ACCESS_VARIANTS.PAID]: (policy: OnyxEntry) => PolicyUtils.isPaidGroupPolicy(policy), - [CONST.POLICY.ACCESS_VARIANTS.CONTROL]: (policy: OnyxEntry) => PolicyUtils.isControlPolicy(policy), - [CONST.POLICY.ACCESS_VARIANTS.ADMIN]: (policy: OnyxEntry, login: string) => PolicyUtils.isPolicyAdmin(policy, login), + [CONST.POLICY.ACCESS_VARIANTS.PAID]: (policy: OnyxEntry) => isPaidGroupPolicy(policy), + [CONST.POLICY.ACCESS_VARIANTS.CONTROL]: (policy: OnyxEntry) => isControlPolicy(policy), + [CONST.POLICY.ACCESS_VARIANTS.ADMIN]: (policy: OnyxEntry, login: string) => isPolicyAdmin(policy, login), [CONST.IOU.ACCESS_VARIANTS.CREATE]: ( policy: OnyxEntry, login: string, @@ -35,10 +42,10 @@ const ACCESS_VARIANTS = { iouType?: IOUType, ) => !!iouType && - IOUUtils.isValidMoneyRequestType(iouType) && + isValidMoneyRequestType(iouType) && // Allow the user to submit the expense if we are submitting the expense in global menu or the report can create the expense - (isEmptyObject(report?.reportID) || ReportUtils.canCreateRequest(report, policy, iouType)) && - (iouType !== CONST.IOU.TYPE.INVOICE || PolicyUtils.canSendInvoice(allPolicies, login)), + (isEmptyObject(report?.reportID) || canCreateRequest(report, policy, iouType)) && + (iouType !== CONST.IOU.TYPE.INVOICE || canSendInvoice(allPolicies, login)), } as const satisfies Record< string, (policy: OnyxTypes.Policy, login: string, report: OnyxTypes.Report, allPolicies: NonNullable> | null, iouType?: IOUType) => boolean @@ -127,7 +134,7 @@ function AccessOrNotFoundWrapper({ const [isLoadingReportData] = useOnyx(ONYXKEYS.IS_LOADING_REPORT_DATA, {initialValue: true}); const {login = ''} = useCurrentUserPersonalDetails(); const isPolicyIDInRoute = !!policyID?.length; - const isMoneyRequest = !!iouType && IOUUtils.isValidMoneyRequestType(iouType); + const isMoneyRequest = !!iouType && isValidMoneyRequestType(iouType); const isFromGlobalCreate = isEmptyObject(report?.reportID); const pendingField = featureName ? policy?.pendingFields?.[featureName] : undefined; @@ -137,13 +144,13 @@ function AccessOrNotFoundWrapper({ return; } - Policy.openWorkspace(policyID, []); + openWorkspace(policyID, []); // eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps }, [isPolicyIDInRoute, policyID]); const shouldShowFullScreenLoadingIndicator = !isMoneyRequest && isLoadingReportData !== false && (!Object.entries(policy ?? {}).length || !policy?.id); - const isFeatureEnabled = featureName ? PolicyUtils.isPolicyFeatureEnabled(policy, featureName) : true; + const isFeatureEnabled = featureName ? getPolicyFeatureEnabled(policy, featureName) : true; const [isPolicyFeatureEnabled, setIsPolicyFeatureEnabled] = useState(isFeatureEnabled); const {isOffline} = useNetwork(); @@ -153,7 +160,7 @@ function AccessOrNotFoundWrapper({ return acc && accessFunction(policy, login, report, allPolicies ?? null, iouType); }, true); - const isPolicyNotAccessible = !PolicyUtils.isPolicyAccessible(policy); + const isPolicyNotAccessible = !getPolicyAccessible(policy); const shouldShowNotFoundPage = (!isMoneyRequest && !isFromGlobalCreate && isPolicyNotAccessible) || !isPageAccessible || !isPolicyFeatureEnabled || shouldBeBlocked; // We only update the feature state if it isn't pending. diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx index c4c9c62dedec..00f46060c126 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -4,10 +4,10 @@ import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections'; -import * as ConnectionUtils from '@libs/ConnectionUtils'; -import * as ErrorUtils from '@libs/ErrorUtils'; -import * as PolicyUtils from '@libs/PolicyUtils'; +import {updateManyPolicyConnectionConfigs} from '@libs/actions/connections'; +import {getQBONonReimbursableExportAccountType} from '@libs/ConnectionUtils'; +import {getLatestErrorField} from '@libs/ErrorUtils'; +import {areSettingsInErrorFields, settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; @@ -34,7 +34,7 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnections }, { title: qboConfig?.nonReimbursableExpensesAccount?.name ?? translate('workspace.qbo.notConfigured'), - description: ConnectionUtils.getQBONonReimbursableExportAccountType(qboConfig?.nonReimbursableExpensesExportDestination), + description: getQBONonReimbursableExportAccountType(qboConfig?.nonReimbursableExpensesExportDestination), onPress: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT.getRoute(policyID)), subscribedSettings: [CONST.QUICKBOOKS_CONFIG.NON_REIMBURSABLE_EXPENSE_ACCOUNT], }, @@ -54,12 +54,12 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnections onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT.getRoute(policyID))} > {sections.map((section) => ( - + @@ -74,10 +74,10 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnections wrapperStyle={[styles.ph5, styles.mb3, styles.mt1]} isActive={!!qboConfig?.autoCreateVendor} shouldPlaceSubtitleBelowSwitch - pendingAction={PolicyUtils.settingsPendingAction([CONST.QUICKBOOKS_CONFIG.AUTO_CREATE_VENDOR], qboConfig?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(qboConfig, CONST.QUICKBOOKS_CONFIG.AUTO_CREATE_VENDOR)} + pendingAction={settingsPendingAction([CONST.QUICKBOOKS_CONFIG.AUTO_CREATE_VENDOR], qboConfig?.pendingFields)} + errors={getLatestErrorField(qboConfig, CONST.QUICKBOOKS_CONFIG.AUTO_CREATE_VENDOR)} onToggle={(isOn) => - Connections.updateManyPolicyConnectionConfigs( + updateManyPolicyConnectionConfigs( policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, { @@ -95,13 +95,13 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnections onCloseError={() => clearQBOErrorField(policyID, CONST.QUICKBOOKS_CONFIG.AUTO_CREATE_VENDOR)} /> {qboConfig?.autoCreateVendor && ( - + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_NON_REIMBURSABLE_DEFAULT_VENDOR_SELECT.getRoute(policyID))} brickRoadIndicator={ - PolicyUtils.areSettingsInErrorFields([CONST.QUICKBOOKS_CONFIG.NON_REIMBURSABLE_BILL_DEFAULT_VENDOR], qboConfig?.errorFields) + areSettingsInErrorFields([CONST.QUICKBOOKS_CONFIG.NON_REIMBURSABLE_BILL_DEFAULT_VENDOR], qboConfig?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined } From 2e0c7aa0f2bab9336e360bf7d4e08e34a2569dae Mon Sep 17 00:00:00 2001 From: VickyStash Date: Mon, 27 Jan 2025 09:48:50 +0100 Subject: [PATCH 04/12] Remove wrong default number id usage pt3 --- src/libs/ReportUtils.ts | 6 +++--- src/pages/ReportDetailsPage.tsx | 9 +++------ src/pages/home/report/ReportActionItemContentCreated.tsx | 2 +- .../SidebarScreen/FloatingActionButtonAndPopover.tsx | 2 +- .../iou/request/step/IOURequestStepParticipants.tsx | 2 +- src/pages/workspace/WorkspaceNewRoomPage.tsx | 4 ++-- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 055bb5c789d2..b741a50127bd 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -5749,11 +5749,11 @@ function buildOptimisticChatReport( visibility?: ValueOf, writeCapability?: ValueOf, notificationPreference: NotificationPreference = CONST.REPORT.NOTIFICATION_PREFERENCE.ALWAYS, - parentReportActionID = '', - parentReportID = '', + parentReportActionID?: string, + parentReportID?: string, description = '', avatarUrl = '', - optimisticReportID = '', + optimisticReportID?: string, ): OptimisticChatReport { const isWorkspaceChatType = chatType && isWorkspaceChat(chatType); const participants = participantList.reduce((reportParticipants: Participants, accountID: number) => { diff --git a/src/pages/ReportDetailsPage.tsx b/src/pages/ReportDetailsPage.tsx index fc112cb09ba3..a6f7632e1c8a 100644 --- a/src/pages/ReportDetailsPage.tsx +++ b/src/pages/ReportDetailsPage.tsx @@ -166,12 +166,9 @@ function ReportDetailsPage({policies, report, route, reportMetadata}: ReportDeta const styles = useThemeStyles(); const backTo = route.params.backTo; - // The app would crash due to subscribing to the entire report collection if parentReportID is an empty string. So we should have a fallback ID here. - /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ - const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report.parentReportID || CONST.DEFAULT_NUMBER_ID}`); - const [reportNameValuePairs] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report?.reportID || CONST.DEFAULT_NUMBER_ID}`); - const [parentReportNameValuePairs] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report?.parentReportID || CONST.DEFAULT_NUMBER_ID}`); - /* eslint-enable @typescript-eslint/prefer-nullish-coalescing */ + const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${report.parentReportID}`); + const [reportNameValuePairs] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report?.reportID}`); + const [parentReportNameValuePairs] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report?.parentReportID}`); const {reportActions} = usePaginatedReportActions(report.reportID); const {currentSearchHash} = useSearchContext(); diff --git a/src/pages/home/report/ReportActionItemContentCreated.tsx b/src/pages/home/report/ReportActionItemContentCreated.tsx index 80867a9be95b..367c90aa1c85 100644 --- a/src/pages/home/report/ReportActionItemContentCreated.tsx +++ b/src/pages/home/report/ReportActionItemContentCreated.tsx @@ -53,7 +53,7 @@ function ReportActionItemContentCreated({contextValue, parentReportAction, trans const {report, action, transactionThreadReport} = contextValue; const policy = usePolicy(report.policyID === CONST.POLICY.OWNER_EMAIL_FAKE ? undefined : report.policyID); - const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID ?? CONST.DEFAULT_NUMBER_ID}`); + const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`); const transactionCurrency = getCurrency(transaction); diff --git a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx index b77e1bd89f67..866927520655 100644 --- a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx +++ b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx @@ -183,7 +183,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu}: Fl if (isEmptyObject(activePolicy) || !activePolicy?.isPolicyExpenseChatEnabled) { return {} as OnyxTypes.Report; } - const policyChatsForActivePolicy = getWorkspaceChats(`${activePolicyID ?? CONST.DEFAULT_NUMBER_ID}`, [session?.accountID ?? CONST.DEFAULT_NUMBER_ID], allReports); + const policyChatsForActivePolicy = getWorkspaceChats(`${activePolicyID}`, session?.accountID ? [session.accountID] : [], allReports); return policyChatsForActivePolicy.length > 0 ? policyChatsForActivePolicy.at(0) : ({} as OnyxTypes.Report); }, [activePolicy, activePolicyID, session?.accountID, allReports]); const [quickActionPolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${quickActionReport?.policyID}`); diff --git a/src/pages/iou/request/step/IOURequestStepParticipants.tsx b/src/pages/iou/request/step/IOURequestStepParticipants.tsx index 8d1ef11ef23f..fd6d2ab4e5f4 100644 --- a/src/pages/iou/request/step/IOURequestStepParticipants.tsx +++ b/src/pages/iou/request/step/IOURequestStepParticipants.tsx @@ -50,7 +50,7 @@ function IOURequestStepParticipants({ const {translate} = useLocalize(); const styles = useThemeStyles(); const isFocused = useIsFocused(); - const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID ?? CONST.DEFAULT_NUMBER_ID}`); + const [skipConfirmation] = useOnyx(`${ONYXKEYS.COLLECTION.SKIP_CONFIRMATION}${transactionID}`); // We need to set selectedReportID if user has navigated back from confirmation page and navigates to confirmation page with already selected participant const selectedReportID = useRef(participants?.length === 1 ? participants.at(0)?.reportID ?? reportID : reportID); diff --git a/src/pages/workspace/WorkspaceNewRoomPage.tsx b/src/pages/workspace/WorkspaceNewRoomPage.tsx index c64c53306a1f..4dd216e63b45 100644 --- a/src/pages/workspace/WorkspaceNewRoomPage.tsx +++ b/src/pages/workspace/WorkspaceNewRoomPage.tsx @@ -105,8 +105,8 @@ function WorkspaceNewRoomPage() { visibility, writeCapability || CONST.REPORT.WRITE_CAPABILITIES.ALL, CONST.REPORT.NOTIFICATION_PREFERENCE.ALWAYS, - '', - '', + undefined, + undefined, parsedDescription, ); setNewRoomReportID(policyReport.reportID); From 7683dfe3d83cb2edde9c427cf9a3f83c35ff3fc8 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Mon, 27 Jan 2025 10:29:30 +0100 Subject: [PATCH 05/12] Remove wrong default number id usage pt4 --- src/ROUTES.ts | 7 ++++++- .../ReportActionItem/MoneyRequestAction.tsx | 6 +++--- .../MoneyRequestPreviewContent.tsx | 4 ++-- .../MoneyRequestPreview/types.ts | 2 +- .../ReportActionItem/MoneyRequestView.tsx | 20 +++++++++---------- src/libs/actions/Report.ts | 5 ++++- .../home/report/PureReportActionItem.tsx | 2 +- .../FloatingActionButtonAndPopover.tsx | 2 +- 8 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index d19857ca81b9..804f32924388 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -400,7 +400,12 @@ const ROUTES = { }, SPLIT_BILL_DETAILS: { route: 'r/:reportID/split/:reportActionID', - getRoute: (reportID: string, reportActionID: string, backTo?: string) => getUrlWithBackToParam(`r/${reportID}/split/${reportActionID}` as const, backTo), + getRoute: (reportID: string | undefined, reportActionID: string, backTo?: string) => { + if (!reportID) { + Log.warn('Invalid reportID is used to build the SPLIT_BILL_DETAILS route'); + } + return getUrlWithBackToParam(`r/${reportID}/split/${reportActionID}` as const, backTo); + }, }, TASK_TITLE: { route: 'r/:reportID/title', diff --git a/src/components/ReportActionItem/MoneyRequestAction.tsx b/src/components/ReportActionItem/MoneyRequestAction.tsx index cc64fed1d3e6..2f197352ebf2 100644 --- a/src/components/ReportActionItem/MoneyRequestAction.tsx +++ b/src/components/ReportActionItem/MoneyRequestAction.tsx @@ -22,7 +22,7 @@ type MoneyRequestActionProps = { action: OnyxTypes.ReportAction; /** The ID of the associated chatReport */ - chatReportID: string; + chatReportID: string | undefined; /** The ID of the associated expense report */ requestReportID: string; @@ -70,8 +70,8 @@ function MoneyRequestAction({ const {isOffline} = useNetwork(); const isActionSplitBill = isSplitBillAction(action); const isActionTrackExpense = isTrackExpenseAction(action); - const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReportID || CONST.DEFAULT_NUMBER_ID}`, {canEvict: false}); - const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID || CONST.DEFAULT_NUMBER_ID}`); + const [reportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReportID}`, {canEvict: false}); + const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`); const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${requestReportID}`); const onMoneyRequestPreviewPressed = () => { diff --git a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx index 17874c9dd148..e20fe09058e1 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestPreview/MoneyRequestPreviewContent.tsx @@ -103,9 +103,9 @@ function MoneyRequestPreviewContent({ const route = useRoute>(); const {shouldUseNarrowLayout} = useResponsiveLayout(); const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST); - const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID || CONST.DEFAULT_NUMBER_ID}`); + const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${chatReportID}`); const [session] = useOnyx(ONYXKEYS.SESSION); - const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReportID || CONST.DEFAULT_NUMBER_ID}`); + const [iouReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReportID}`); const policy = usePolicy(iouReport?.policyID); const isMoneyRequestAction = isMoneyRequestActionReportActionsUtils(action); diff --git a/src/components/ReportActionItem/MoneyRequestPreview/types.ts b/src/components/ReportActionItem/MoneyRequestPreview/types.ts index c40b45c6d2bd..1630f00b0f95 100644 --- a/src/components/ReportActionItem/MoneyRequestPreview/types.ts +++ b/src/components/ReportActionItem/MoneyRequestPreview/types.ts @@ -10,7 +10,7 @@ type MoneyRequestPreviewProps = { iouReportID: string; /** The associated chatReport */ - chatReportID: string; + chatReportID: string | undefined; /** The ID of the current report */ reportID: string; diff --git a/src/components/ReportActionItem/MoneyRequestView.tsx b/src/components/ReportActionItem/MoneyRequestView.tsx index 10c72dbd8841..71f70c4023e6 100644 --- a/src/components/ReportActionItem/MoneyRequestView.tsx +++ b/src/components/ReportActionItem/MoneyRequestView.tsx @@ -107,16 +107,16 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals const {translate, toLocaleDigit} = useLocalize(); const parentReportID = report?.parentReportID; const policyID = report?.policyID; - const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${parentReportID ?? CONST.DEFAULT_NUMBER_ID}`); - const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${parentReport?.parentReportID ?? CONST.DEFAULT_NUMBER_ID}`, { + const [parentReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${parentReportID}`); + const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${parentReport?.parentReportID}`, { selector: (chatReportValue) => chatReportValue && {reportID: chatReportValue.reportID, errorFields: chatReportValue.errorFields}, }); - const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID ?? CONST.DEFAULT_NUMBER_ID}`); - const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID ?? CONST.DEFAULT_NUMBER_ID}`); - const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${updatedTransaction?.reportID ?? CONST.DEFAULT_NUMBER_ID}`); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); + const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`); + const [transactionReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${updatedTransaction?.reportID}`); const targetPolicyID = updatedTransaction?.reportID ? transactionReport?.policyID : policyID; - const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${targetPolicyID ?? CONST.DEFAULT_NUMBER_ID}`); - const [parentReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID ?? CONST.DEFAULT_NUMBER_ID}`, { + const [policyTagList] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${targetPolicyID}`); + const [parentReportActions] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentReportID}`, { canEvict: false, }); @@ -131,9 +131,9 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals return originalMessage?.IOUTransactionID; }, [parentReportAction]); - const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${linkedTransactionID ?? CONST.DEFAULT_NUMBER_ID}`); - const [transactionBackup] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_BACKUP}${linkedTransactionID ?? CONST.DEFAULT_NUMBER_ID}`); - const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${linkedTransactionID ?? CONST.DEFAULT_NUMBER_ID}`); + const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${linkedTransactionID}`); + const [transactionBackup] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_BACKUP}${linkedTransactionID}`); + const [transactionViolations] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS}${linkedTransactionID}`); const { created: transactionDate, diff --git a/src/libs/actions/Report.ts b/src/libs/actions/Report.ts index ea8aa5414c7b..5c150c2cdf02 100644 --- a/src/libs/actions/Report.ts +++ b/src/libs/actions/Report.ts @@ -2730,7 +2730,10 @@ function showReportActionNotification(reportID: string, reportAction: ReportActi } /** Clear the errors associated with the IOUs of a given report. */ -function clearIOUError(reportID: string) { +function clearIOUError(reportID: string | undefined) { + if (!reportID) { + return; + } Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, {errorFields: {iou: null}}); } diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index c74531acf317..0aa5596fa995 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -707,7 +707,7 @@ function PureReportActionItem({ children = ( { interceptAnonymousUser(() => { hideProductTrainingTooltip(); - navigateToQuickAction(isValidReport, `${quickActionReport?.reportID ?? CONST.DEFAULT_NUMBER_ID}`, quickAction, selectOption); + navigateToQuickAction(isValidReport, quickActionReport?.reportID, quickAction, selectOption); }); }; return [ From f2e73858e44e0ac6fde0e4582060137741c508e3 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Mon, 27 Jan 2025 11:52:51 +0100 Subject: [PATCH 06/12] Remove wrong default number id usage pt5 --- src/ROUTES.ts | 64 ++++++++++++++++--- src/libs/actions/Policy/Policy.ts | 5 +- .../actions/connections/NetSuiteCommands.ts | 30 +++++++-- src/libs/actions/connections/SageIntacct.ts | 27 ++++++-- src/pages/NewChatPage.tsx | 6 +- .../SageIntacctEditUserDimensionsPage.tsx | 2 +- .../advanced/NetSuiteAdvancedPage.tsx | 2 +- 7 files changed, 110 insertions(+), 26 deletions(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 804f32924388..ac7e5b6e3bbd 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -1840,36 +1840,75 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_REIMBURSEMENT_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/reimbursement-account/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/reimbursement-account/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_REIMBURSEMENT_ACCOUNT_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/reimbursement-account/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_COLLECTION_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/collection-account/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/collection-account/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_COLLECTION_ACCOUNT_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/collection-account/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_EXPENSE_REPORT_APPROVAL_LEVEL_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/expense-report-approval-level/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/expense-report-approval-level/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_EXPENSE_REPORT_APPROVAL_LEVEL_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/expense-report-approval-level/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_VENDOR_BILL_APPROVAL_LEVEL_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/vendor-bill-approval-level/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/vendor-bill-approval-level/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_VENDOR_BILL_APPROVAL_LEVEL_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/vendor-bill-approval-level/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_JOURNAL_ENTRY_APPROVAL_LEVEL_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/journal-entry-approval-level/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/journal-entry-approval-level/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_JOURNAL_ENTRY_APPROVAL_LEVEL_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/journal-entry-approval-level/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_APPROVAL_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/approval-account/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/approval-account/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_APPROVAL_ACCOUNT_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/approval-account/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_CUSTOM_FORM_ID: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/custom-form-id/:expenseType', - getRoute: (policyID: string, expenseType: ValueOf) => - `settings/workspaces/${policyID}/connections/netsuite/advanced/custom-form-id/${expenseType as string}` as const, + getRoute: (policyID: string | undefined, expenseType: ValueOf) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_CUSTOM_FORM_ID route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/custom-form-id/${expenseType as string}` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_AUTO_SYNC: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/autosync', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/autosync` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_AUTO_SYNC route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/autosync` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_ACCOUNTING_METHOD: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/autosync/accounting-method', @@ -1905,7 +1944,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_SAGE_INTACCT_USER_DIMENSIONS: { route: 'settings/workspaces/:policyID/accounting/sage-intacct/import/user-dimensions', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/import/user-dimensions` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_SAGE_INTACCT_USER_DIMENSIONS route'); + } + return `settings/workspaces/${policyID}/accounting/sage-intacct/import/user-dimensions` as const; + }, }, POLICY_ACCOUNTING_SAGE_INTACCT_ADD_USER_DIMENSION: { route: 'settings/workspaces/:policyID/accounting/sage-intacct/import/add-user-dimension', diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 70ba099d1993..f7f3e6bc7767 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -656,7 +656,10 @@ function clearXeroErrorField(policyID: string, fieldName: string) { Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {xero: {config: {errorFields: {[fieldName]: null}}}}}); } -function clearNetSuiteErrorField(policyID: string, fieldName: string) { +function clearNetSuiteErrorField(policyID: string | undefined, fieldName: string) { + if (!policyID) { + return; + } Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {netsuite: {options: {config: {errorFields: {[fieldName]: null}}}}}}); } diff --git a/src/libs/actions/connections/NetSuiteCommands.ts b/src/libs/actions/connections/NetSuiteCommands.ts index bf5b2be4b4a0..c330836fe7ce 100644 --- a/src/libs/actions/connections/NetSuiteCommands.ts +++ b/src/libs/actions/connections/NetSuiteCommands.ts @@ -846,7 +846,11 @@ function updateNetSuiteAutoSync(policyID: string, value: boolean) { API.write(WRITE_COMMANDS.UPDATE_NETSUITE_AUTO_SYNC, parameters, {optimisticData, failureData, successData}); } -function updateNetSuiteSyncReimbursedReports(policyID: string, value: boolean) { +function updateNetSuiteSyncReimbursedReports(policyID: string | undefined, value: boolean) { + if (!policyID) { + return; + } + const onyxData = updateNetSuiteSyncOptionsOnyxData(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.SYNC_REIMBURSED_REPORTS, value, !value); const parameters = { @@ -856,7 +860,11 @@ function updateNetSuiteSyncReimbursedReports(policyID: string, value: boolean) { API.write(WRITE_COMMANDS.UPDATE_NETSUITE_SYNC_REIMBURSED_REPORTS, parameters, onyxData); } -function updateNetSuiteSyncPeople(policyID: string, value: boolean) { +function updateNetSuiteSyncPeople(policyID: string | undefined, value: boolean) { + if (!policyID) { + return; + } + const onyxData = updateNetSuiteSyncOptionsOnyxData(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.SYNC_PEOPLE, value, !value); const parameters = { @@ -866,7 +874,11 @@ function updateNetSuiteSyncPeople(policyID: string, value: boolean) { API.write(WRITE_COMMANDS.UPDATE_NETSUITE_SYNC_PEOPLE, parameters, onyxData); } -function updateNetSuiteAutoCreateEntities(policyID: string, value: boolean) { +function updateNetSuiteAutoCreateEntities(policyID: string | undefined, value: boolean) { + if (!policyID) { + return; + } + const onyxData = updateNetSuiteOnyxData(policyID, CONST.NETSUITE_CONFIG.AUTO_CREATE_ENTITIES, value, !value); const parameters = { @@ -876,7 +888,11 @@ function updateNetSuiteAutoCreateEntities(policyID: string, value: boolean) { API.write(WRITE_COMMANDS.UPDATE_NETSUITE_AUTO_CREATE_ENTITIES, parameters, onyxData); } -function updateNetSuiteEnableNewCategories(policyID: string, value: boolean) { +function updateNetSuiteEnableNewCategories(policyID: string | undefined, value: boolean) { + if (!policyID) { + return; + } + const onyxData = updateNetSuiteSyncOptionsOnyxData(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.ENABLE_NEW_CATEGORIES, value, !value); const parameters = { @@ -886,7 +902,11 @@ function updateNetSuiteEnableNewCategories(policyID: string, value: boolean) { API.write(WRITE_COMMANDS.UPDATE_NETSUITE_ENABLE_NEW_CATEGORIES, parameters, onyxData); } -function updateNetSuiteCustomFormIDOptionsEnabled(policyID: string, value: boolean) { +function updateNetSuiteCustomFormIDOptionsEnabled(policyID: string | undefined, value: boolean) { + if (!policyID) { + return; + } + const data = { enabled: value, }; diff --git a/src/libs/actions/connections/SageIntacct.ts b/src/libs/actions/connections/SageIntacct.ts index 8cc554b7ec79..170d83abdd1f 100644 --- a/src/libs/actions/connections/SageIntacct.ts +++ b/src/libs/actions/connections/SageIntacct.ts @@ -326,12 +326,16 @@ function addSageIntacctUserDimensions( } function editSageIntacctUserDimensions( - policyID: string, + policyID: string | undefined, previousName: string, name: string, mapping: typeof CONST.SAGE_INTACCT_MAPPING_VALUE.TAG | typeof CONST.SAGE_INTACCT_MAPPING_VALUE.REPORT_FIELD, existingUserDimensions: SageIntacctDimension[], ) { + if (!policyID) { + return; + } + const newDimensions = existingUserDimensions.map((userDimension) => { if (userDimension.dimension === previousName) { return {dimension: name, mapping}; @@ -346,7 +350,11 @@ function editSageIntacctUserDimensions( ); } -function removeSageIntacctUserDimensions(policyID: string, dimensionName: string, existingUserDimensions: SageIntacctDimension[]) { +function removeSageIntacctUserDimensions(policyID: string | undefined, dimensionName: string, existingUserDimensions: SageIntacctDimension[]) { + if (!policyID) { + return; + } + const newDimensions = existingUserDimensions.filter((userDimension) => dimensionName !== userDimension.dimension); API.write( @@ -532,15 +540,24 @@ function updateSageIntacctDefaultVendor(policyID: string, settingName: keyof Sag } } -function clearSageIntacctErrorField(policyID: string, key: SageIntacctOfflineStateKeys | keyof SageIntacctConnectionsConfig) { +function clearSageIntacctErrorField(policyID: string | undefined, key: SageIntacctOfflineStateKeys | keyof SageIntacctConnectionsConfig) { + if (!policyID) { + return; + } Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {intacct: {config: {errorFields: {[key]: null}}}}}); } -function clearSageIntacctPendingField(policyID: string, key: SageIntacctOfflineStateKeys | keyof SageIntacctConnectionsConfig) { +function clearSageIntacctPendingField(policyID: string | undefined, key: SageIntacctOfflineStateKeys | keyof SageIntacctConnectionsConfig) { + if (!policyID) { + return; + } Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {intacct: {config: {pendingFields: {[key]: null}}}}}); } -function removeSageIntacctUserDimensionsByName(dimensions: SageIntacctDimension[], policyID: string, dimensionName: string) { +function removeSageIntacctUserDimensionsByName(dimensions: SageIntacctDimension[], policyID: string | undefined, dimensionName: string) { + if (!policyID) { + return; + } const Dimensions = dimensions.filter((dimension) => dimension.dimension !== dimensionName); Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {intacct: {config: {mappings: {dimensions: Dimensions}}}}}); } diff --git a/src/pages/NewChatPage.tsx b/src/pages/NewChatPage.tsx index e2df8ceda5c9..714f9fdf69cf 100755 --- a/src/pages/NewChatPage.tsx +++ b/src/pages/NewChatPage.tsx @@ -204,12 +204,12 @@ function NewChatPage() { (option: ListItem & Partial) => { const isOptionInList = !!option.isSelected; - let newSelectedOptions; + let newSelectedOptions = [...selectedOptions]; if (isOptionInList) { newSelectedOptions = reject(selectedOptions, (selectedOption) => selectedOption.login === option.login); - } else { - newSelectedOptions = [...selectedOptions, {...option, isSelected: true, selected: true, reportID: option.reportID ?? `${CONST.DEFAULT_NUMBER_ID}`}]; + } else if (option.reportID) { + newSelectedOptions = [...selectedOptions, {...option, isSelected: true, selected: true, reportID: option.reportID}]; } selectionListRef?.current?.clearInputAfterSelect?.(); diff --git a/src/pages/workspace/accounting/intacct/import/SageIntacctEditUserDimensionsPage.tsx b/src/pages/workspace/accounting/intacct/import/SageIntacctEditUserDimensionsPage.tsx index 6e0993851439..1371becfd25e 100644 --- a/src/pages/workspace/accounting/intacct/import/SageIntacctEditUserDimensionsPage.tsx +++ b/src/pages/workspace/accounting/intacct/import/SageIntacctEditUserDimensionsPage.tsx @@ -39,7 +39,7 @@ function SageIntacctEditUserDimensionsPage({route}: SageIntacctEditUserDimension const editedUserDimensionName: string = route.params.dimensionName; const policy = usePolicy(route.params.policyID); - const policyID: string = policy?.id ?? `${CONST.DEFAULT_NUMBER_ID}`; + const policyID = policy?.id; const config = policy?.connections?.intacct?.config; const userDimensions = policy?.connections?.intacct?.config?.mappings?.dimensions; const editedUserDimension = userDimensions?.find((userDimension) => userDimension.dimension === editedUserDimensionName); diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx index d6a56ae823aa..f5906ba25747 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx @@ -44,7 +44,7 @@ type MenuItemWithSubscribedSettings = Pick Date: Mon, 27 Jan 2025 13:53:50 +0100 Subject: [PATCH 07/12] Lint fixes --- src/libs/ReportUtils.ts | 2 +- src/pages/workspace/WorkspaceNewRoomPage.tsx | 56 +++++++++----------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index b741a50127bd..9dc1068558a9 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -5783,7 +5783,7 @@ function buildOptimisticChatReport( parentReportID, participants, policyID, - reportID: optimisticReportID || generateReportID(), + reportID: optimisticReportID ?? generateReportID(), reportName, stateNum: 0, statusNum: 0, diff --git a/src/pages/workspace/WorkspaceNewRoomPage.tsx b/src/pages/workspace/WorkspaceNewRoomPage.tsx index 4dd216e63b45..0948459d1238 100644 --- a/src/pages/workspace/WorkspaceNewRoomPage.tsx +++ b/src/pages/workspace/WorkspaceNewRoomPage.tsx @@ -24,14 +24,14 @@ import usePrevious from '@hooks/usePrevious'; import useResponsiveLayout from '@hooks/useResponsiveLayout'; import useSafeAreaInsets from '@hooks/useSafeAreaInsets'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {addErrorMessage} from '@libs/ErrorUtils'; import localeCompare from '@libs/LocaleCompare'; import Navigation from '@libs/Navigation/Navigation'; -import * as PolicyUtils from '@libs/PolicyUtils'; -import * as ReportUtils from '@libs/ReportUtils'; -import * as ValidationUtils from '@libs/ValidationUtils'; +import {getActivePolicies} from '@libs/PolicyUtils'; +import {buildOptimisticChatReport, getCommentLength, getParsedComment, isPolicyAdmin} from '@libs/ReportUtils'; +import {isExistingRoomName, isReservedRoomName, isValidRoomName} from '@libs/ValidationUtils'; import variables from '@styles/variables'; -import * as Report from '@userActions/Report'; +import {addPolicyReport, clearNewRoomFormError} from '@userActions/Report'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES from '@src/ROUTES'; @@ -64,7 +64,7 @@ function WorkspaceNewRoomPage() { const workspaceOptions = useMemo( () => - PolicyUtils.getActivePolicies(policies, session?.email) + getActivePolicies(policies, session?.email) ?.filter((policy) => policy.type !== CONST.POLICY.TYPE.PERSONAL) .map((policy) => ({ label: policy.name, @@ -79,12 +79,12 @@ function WorkspaceNewRoomPage() { } return ''; }); - const isPolicyAdmin = useMemo(() => { + const isUserPolicyAdmin = useMemo(() => { if (!policyID) { return false; } - return ReportUtils.isPolicyAdmin(policyID, policies); + return isPolicyAdmin(policyID, policies); }, [policyID, policies]); const [newRoomReportID, setNewRoomReportID] = useState(); @@ -92,9 +92,9 @@ function WorkspaceNewRoomPage() { * @param values - form input values passed by the Form component */ const submit = (values: FormOnyxValues) => { - const participants = [session?.accountID ?? -1]; - const parsedDescription = ReportUtils.getParsedComment(values.reportDescription ?? '', {policyID}); - const policyReport = ReportUtils.buildOptimisticChatReport( + const participants = session?.accountID ? [session.accountID] : []; + const parsedDescription = getParsedComment(values.reportDescription ?? '', {policyID}); + const policyReport = buildOptimisticChatReport( participants, values.roomName, CONST.REPORT.CHAT_TYPE.POLICY_ROOM, @@ -110,11 +110,11 @@ function WorkspaceNewRoomPage() { parsedDescription, ); setNewRoomReportID(policyReport.reportID); - Report.addPolicyReport(policyReport); + addPolicyReport(policyReport); }; useEffect(() => { - Report.clearNewRoomFormError(); + clearNewRoomFormError(); }, []); useEffect(() => { @@ -140,12 +140,12 @@ function WorkspaceNewRoomPage() { }, [isLoading, errorFields]); useEffect(() => { - if (isPolicyAdmin) { + if (isUserPolicyAdmin) { return; } setWriteCapability(CONST.REPORT.WRITE_CAPABILITIES.ALL); - }, [isPolicyAdmin]); + }, [isUserPolicyAdmin]); /** * @param values - form input values passed by the Form component @@ -157,27 +157,23 @@ function WorkspaceNewRoomPage() { if (!values.roomName || values.roomName === CONST.POLICY.ROOM_PREFIX) { // We error if the user doesn't enter a room name or left blank - ErrorUtils.addErrorMessage(errors, 'roomName', translate('newRoomPage.pleaseEnterRoomName')); - } else if (values.roomName !== CONST.POLICY.ROOM_PREFIX && !ValidationUtils.isValidRoomName(values.roomName)) { + addErrorMessage(errors, 'roomName', translate('newRoomPage.pleaseEnterRoomName')); + } else if (values.roomName !== CONST.POLICY.ROOM_PREFIX && !isValidRoomName(values.roomName)) { // We error if the room name has invalid characters - ErrorUtils.addErrorMessage(errors, 'roomName', translate('newRoomPage.roomNameInvalidError')); - } else if (ValidationUtils.isReservedRoomName(values.roomName)) { + addErrorMessage(errors, 'roomName', translate('newRoomPage.roomNameInvalidError')); + } else if (isReservedRoomName(values.roomName)) { // Certain names are reserved for default rooms and should not be used for policy rooms. - ErrorUtils.addErrorMessage(errors, 'roomName', translate('newRoomPage.roomNameReservedError', {reservedName: values.roomName})); - } else if (ValidationUtils.isExistingRoomName(values.roomName, reports, values.policyID ?? '-1')) { + addErrorMessage(errors, 'roomName', translate('newRoomPage.roomNameReservedError', {reservedName: values.roomName})); + } else if (isExistingRoomName(values.roomName, reports, values.policyID)) { // Certain names are reserved for default rooms and should not be used for policy rooms. - ErrorUtils.addErrorMessage(errors, 'roomName', translate('newRoomPage.roomAlreadyExistsError')); + addErrorMessage(errors, 'roomName', translate('newRoomPage.roomAlreadyExistsError')); } else if (values.roomName.length > CONST.TITLE_CHARACTER_LIMIT) { - ErrorUtils.addErrorMessage(errors, 'roomName', translate('common.error.characterLimitExceedCounter', {length: values.roomName.length, limit: CONST.TITLE_CHARACTER_LIMIT})); + addErrorMessage(errors, 'roomName', translate('common.error.characterLimitExceedCounter', {length: values.roomName.length, limit: CONST.TITLE_CHARACTER_LIMIT})); } - const descriptionLength = ReportUtils.getCommentLength(values.reportDescription, {policyID}); + const descriptionLength = getCommentLength(values.reportDescription, {policyID}); if (descriptionLength > CONST.REPORT_DESCRIPTION.MAX_LENGTH) { - ErrorUtils.addErrorMessage( - errors, - 'reportDescription', - translate('common.error.characterLimitExceedCounter', {length: descriptionLength, limit: CONST.REPORT_DESCRIPTION.MAX_LENGTH}), - ); + addErrorMessage(errors, 'reportDescription', translate('common.error.characterLimitExceedCounter', {length: descriptionLength, limit: CONST.REPORT_DESCRIPTION.MAX_LENGTH})); } if (!values.policyID) { @@ -302,7 +298,7 @@ function WorkspaceNewRoomPage() { onValueChange={(value) => setPolicyID(value as typeof policyID)} /> - {isPolicyAdmin && ( + {isUserPolicyAdmin && ( Date: Mon, 27 Jan 2025 15:28:58 +0100 Subject: [PATCH 08/12] Minor improvement --- .../sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx index 1e506ce6d8e7..dfea9405001f 100644 --- a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx +++ b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.tsx @@ -183,7 +183,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu}: Fl if (isEmptyObject(activePolicy) || !activePolicy?.isPolicyExpenseChatEnabled) { return {} as OnyxTypes.Report; } - const policyChatsForActivePolicy = getWorkspaceChats(`${activePolicyID}`, session?.accountID ? [session.accountID] : [], allReports); + const policyChatsForActivePolicy = getWorkspaceChats(activePolicyID, session?.accountID ? [session.accountID] : [], allReports); return policyChatsForActivePolicy.length > 0 ? policyChatsForActivePolicy.at(0) : ({} as OnyxTypes.Report); }, [activePolicy, activePolicyID, session?.accountID, allReports]); const [quickActionPolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${quickActionReport?.policyID}`); From b014cfbb6eaa0e002d594fe00fecc11bd4152f12 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Mon, 27 Jan 2025 15:50:30 +0100 Subject: [PATCH 09/12] Fix group chat creation --- src/libs/OptionsListUtils.ts | 2 +- src/pages/NewChatPage.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index c704b588d0cb..74a93ed328da 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -1755,7 +1755,7 @@ function shouldOptionShowTooltip(option: OptionData): boolean { */ function formatSectionsFromSearchTerm( searchTerm: string, - selectedOptions: OptionData[], + selectedOptions: Option[], filteredRecentReports: OptionData[], filteredPersonalDetails: OptionData[], personalDetails: OnyxEntry = {}, diff --git a/src/pages/NewChatPage.tsx b/src/pages/NewChatPage.tsx index 714f9fdf69cf..7df6d461251b 100755 --- a/src/pages/NewChatPage.tsx +++ b/src/pages/NewChatPage.tsx @@ -50,7 +50,7 @@ const excludedGroupEmails: string[] = CONST.EXPENSIFY_EMAILS.filter((value) => v function useOptions() { const [searchTerm, debouncedSearchTerm, setSearchTerm] = useDebouncedState(''); - const [selectedOptions, setSelectedOptions] = useState>([]); + const [selectedOptions, setSelectedOptions] = useState>([]); const [betas] = useOnyx(ONYXKEYS.BETAS); const [newGroupDraft] = useOnyx(ONYXKEYS.NEW_GROUP_CHAT_DRAFT); const personalData = useCurrentUserPersonalDetails(); @@ -208,7 +208,7 @@ function NewChatPage() { if (isOptionInList) { newSelectedOptions = reject(selectedOptions, (selectedOption) => selectedOption.login === option.login); - } else if (option.reportID) { + } else { newSelectedOptions = [...selectedOptions, {...option, isSelected: true, selected: true, reportID: option.reportID}]; } @@ -292,7 +292,7 @@ function NewChatPage() { if (!personalData || !personalData.login || !personalData.accountID) { return; } - const selectedParticipants: SelectedParticipant[] = selectedOptions.map((option: OptionData) => ({ + const selectedParticipants: SelectedParticipant[] = selectedOptions.map((option: Option) => ({ login: option?.login, accountID: option.accountID ?? CONST.DEFAULT_NUMBER_ID, })); From 7d50b32259651771817eceb2a2d2c3f2d9477a2f Mon Sep 17 00:00:00 2001 From: VickyStash Date: Tue, 28 Jan 2025 11:44:34 +0100 Subject: [PATCH 10/12] Remove wrong default ids in SplitBillDetailsPage --- src/pages/iou/SplitBillDetailsPage.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/iou/SplitBillDetailsPage.tsx b/src/pages/iou/SplitBillDetailsPage.tsx index b31fe7f71a6d..e00281f42399 100644 --- a/src/pages/iou/SplitBillDetailsPage.tsx +++ b/src/pages/iou/SplitBillDetailsPage.tsx @@ -42,8 +42,8 @@ function SplitBillDetailsPage({route, report, reportAction}: SplitBillDetailsPag const IOUTransactionID = originalMessage?.IOUTransactionID; const participantAccountIDs = originalMessage?.participantAccountIDs ?? []; - const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${IOUTransactionID ?? CONST.DEFAULT_NUMBER_ID}`); - const [draftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${IOUTransactionID ?? CONST.DEFAULT_NUMBER_ID}`); + const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${IOUTransactionID}`); + const [draftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${IOUTransactionID}`); const [personalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST); const [session] = useOnyx(ONYXKEYS.SESSION); From 17eee00911001910291df5e517610fe3c6579f85 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Tue, 28 Jan 2025 11:50:21 +0100 Subject: [PATCH 11/12] Minor code improvement --- src/pages/NewChatPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/NewChatPage.tsx b/src/pages/NewChatPage.tsx index 7df6d461251b..640d31e0f40d 100755 --- a/src/pages/NewChatPage.tsx +++ b/src/pages/NewChatPage.tsx @@ -204,7 +204,7 @@ function NewChatPage() { (option: ListItem & Partial) => { const isOptionInList = !!option.isSelected; - let newSelectedOptions = [...selectedOptions]; + let newSelectedOptions; if (isOptionInList) { newSelectedOptions = reject(selectedOptions, (selectedOption) => selectedOption.login === option.login); From 5a9964a2d8b40d84675493cd8b12f8686ef6d9e3 Mon Sep 17 00:00:00 2001 From: VickyStash Date: Wed, 29 Jan 2025 09:02:12 +0100 Subject: [PATCH 12/12] Bump eslint-config-expensify version to 2.0.76 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73de5f5e1a0c..953ff6664d8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -224,7 +224,7 @@ "electron-builder": "25.0.0", "eslint": "^8.57.0", "eslint-config-airbnb-typescript": "^18.0.0", - "eslint-config-expensify": "2.0.75", + "eslint-config-expensify": "2.0.76", "eslint-config-prettier": "^9.1.0", "eslint-plugin-deprecation": "^3.0.0", "eslint-plugin-jest": "^28.6.0", @@ -20331,9 +20331,9 @@ } }, "node_modules/eslint-config-expensify": { - "version": "2.0.75", - "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.75.tgz", - "integrity": "sha512-eSzQpxmVMGGXZSoB7aPZoWh75NC3oStyQnd+1JBFUQMDrdCyWjkMl8UJjzBqp/dOHazmVgLQUS1vDfk5cGXe6Q==", + "version": "2.0.76", + "resolved": "https://registry.npmjs.org/eslint-config-expensify/-/eslint-config-expensify-2.0.76.tgz", + "integrity": "sha512-i6IRvGCUL+o+nYIoOLK7+mk0T+TqVHfAJLubwvckejnmfGaZqYiJIR5BeNyLFWrlXUcjhO9if+6Mu/YOIz6ieA==", "dev": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index bf4def952266..8a4177db041a 100644 --- a/package.json +++ b/package.json @@ -289,7 +289,7 @@ "electron-builder": "25.0.0", "eslint": "^8.57.0", "eslint-config-airbnb-typescript": "^18.0.0", - "eslint-config-expensify": "2.0.75", + "eslint-config-expensify": "2.0.76", "eslint-config-prettier": "^9.1.0", "eslint-plugin-deprecation": "^3.0.0", "eslint-plugin-jest": "^28.6.0",