diff --git a/src/components/ShowContextMenuContext.ts b/src/components/ShowContextMenuContext.ts index ebd6f65e3aa0..7ae3ca4fb825 100644 --- a/src/components/ShowContextMenuContext.ts +++ b/src/components/ShowContextMenuContext.ts @@ -18,7 +18,7 @@ type ShowContextMenuContextProps = { }; const ShowContextMenuContext = createContext({ - anchor: undefined, + anchor: null, report: undefined, action: undefined, transactionThreadReport: undefined, diff --git a/src/libs/DistanceRequestUtils.ts b/src/libs/DistanceRequestUtils.ts index 3d48562451e0..2ace3b1b301a 100644 --- a/src/libs/DistanceRequestUtils.ts +++ b/src/libs/DistanceRequestUtils.ts @@ -43,7 +43,7 @@ const METERS_TO_MILES = 0.000621371; // There are approximately 0.000621371 mile function getMileageRates(policy: OnyxInputOrEntry, includeDisabledRates = false): Record { const mileageRates: Record = {}; - if (!policy?.customUnits) { + if (!policy || !policy?.customUnits) { return mileageRates; } diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index c1d299743a08..3316be85a94a 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -34,7 +34,7 @@ Onyx.connect({ * Filter out the active policies, which will exclude policies with pending deletion * These are policies that we can use to create reports with in NewDot. */ -function getActivePolicies(policies: OnyxCollection): Policy[] { +function getActivePolicies(policies: OnyxCollection | null): Policy[] { return Object.values(policies ?? {}).filter( (policy): policy is Policy => !!policy && policy.pendingAction !== CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE && !!policy.name && !!policy.id, ); @@ -406,13 +406,13 @@ function getPolicy(policyID: string | undefined): Policy | EmptyObject { } /** Return active policies where current user is an admin */ -function getActiveAdminWorkspaces(policies: OnyxCollection): Policy[] { +function getActiveAdminWorkspaces(policies: OnyxCollection | null): Policy[] { const activePolicies = getActivePolicies(policies); return activePolicies.filter((policy) => shouldShowPolicy(policy, NetworkStore.isOffline()) && isPolicyAdmin(policy)); } /** Whether the user can send invoice */ -function canSendInvoice(policies: OnyxCollection): boolean { +function canSendInvoice(policies: OnyxCollection | null): boolean { return getActiveAdminWorkspaces(policies).length > 0; } diff --git a/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx b/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx index d927c3088e75..177e5922189d 100644 --- a/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx +++ b/src/pages/home/report/ContextMenu/PopoverReportActionContextMenu.tsx @@ -34,7 +34,7 @@ function PopoverReportActionContextMenu(_props: unknown, ref: ForwardedRef(); - const reportActionRef = useRef>(undefined); + const reportActionRef = useRef> | null>(null); const reportActionIDRef = useRef('0'); const originalReportIDRef = useRef('0'); const selectionRef = useRef(''); @@ -131,7 +131,7 @@ function PopoverReportActionContextMenu(_props: unknown, ref: ForwardedRef { reportActionIDRef.current = '0'; - reportActionRef.current = undefined; + reportActionRef.current = null; }; /** @@ -294,7 +294,7 @@ function PopoverReportActionContextMenu(_props: unknown, ref: ForwardedRef; /** The report's parentReportAction */ - parentReportAction: OnyxEntry; + parentReportAction: NonNullable> | null; /** The policies which the user has access to */ policies: OnyxCollection; @@ -129,12 +129,12 @@ export default function `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report ? report.parentReportID : 0}`, - selector: (parentReportActions: OnyxEntry, props?: WithOnyxState): OnyxEntry => { + selector: (parentReportActions: OnyxEntry, props?: WithOnyxState): NonNullable> | null => { const parentReportActionID = props?.report?.parentReportActionID; if (!parentReportActionID) { - return; + return null; } - return parentReportActions?.[parentReportActionID]; + return parentReportActions?.[parentReportActionID] ?? null; }, canEvict: false, }, diff --git a/src/pages/iou/request/step/IOURequestStepCategory.tsx b/src/pages/iou/request/step/IOURequestStepCategory.tsx index f0d8cba2f297..fd5c60537c38 100644 --- a/src/pages/iou/request/step/IOURequestStepCategory.tsx +++ b/src/pages/iou/request/step/IOURequestStepCategory.tsx @@ -89,7 +89,7 @@ function IOURequestStepCategory({ const transactionCategory = ReportUtils.getTransactionDetails(isEditingSplitBill && !lodashIsEmpty(splitDraftTransaction) ? splitDraftTransaction : transaction)?.category; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const reportAction = reportActions?.[report?.parentReportActionID || reportActionID]; + const reportAction = reportActions?.[report?.parentReportActionID || reportActionID] ?? null; const shouldShowCategory = (ReportUtils.isReportInGroupPolicy(report) || ReportUtils.isGroupPolicy(policy?.type ?? '')) && diff --git a/src/pages/iou/request/step/IOURequestStepDescription.tsx b/src/pages/iou/request/step/IOURequestStepDescription.tsx index 5ff15b4c57e9..e8388a92e602 100644 --- a/src/pages/iou/request/step/IOURequestStepDescription.tsx +++ b/src/pages/iou/request/step/IOURequestStepDescription.tsx @@ -138,7 +138,7 @@ function IOURequestStepDescription({ }; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- nullish coalescing doesn't achieve the same result in this case - const reportAction = reportActions?.[report?.parentReportActionID || reportActionID]; + const reportAction = reportActions?.[report?.parentReportActionID || reportActionID] ?? null; const isEditing = action === CONST.IOU.ACTION.EDIT; const isSplitBill = iouType === CONST.IOU.TYPE.SPLIT; const canEditSplitBill = isSplitBill && reportAction && session?.accountID === reportAction.actorAccountID && TransactionUtils.areRequiredFieldsEmpty(transaction); diff --git a/src/pages/workspace/AccessOrNotFoundWrapper.tsx b/src/pages/workspace/AccessOrNotFoundWrapper.tsx index 0c08eba92b40..796a067833c0 100644 --- a/src/pages/workspace/AccessOrNotFoundWrapper.tsx +++ b/src/pages/workspace/AccessOrNotFoundWrapper.tsx @@ -28,7 +28,7 @@ const ACCESS_VARIANTS = { policy: OnyxEntry, login: string, report: OnyxEntry, - allPolicies: OnyxCollection, + allPolicies: NonNullable> | null, iouType?: IOUType, ) => !!iouType && @@ -36,7 +36,10 @@ const ACCESS_VARIANTS = { // 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)), -} as const satisfies Record, iouType?: IOUType) => boolean>; +} as const satisfies Record< + string, + (policy: OnyxTypes.Policy, login: string, report: OnyxTypes.Report, allPolicies: NonNullable> | null, iouType?: IOUType) => boolean +>; type AccessVariant = keyof typeof ACCESS_VARIANTS; type AccessOrNotFoundWrapperOnyxProps = { @@ -122,7 +125,7 @@ function AccessOrNotFoundWrapper({accessVariants = [], fullPageNotFoundViewProps const isPageAccessible = accessVariants.reduce((acc, variant) => { const accessFunction = ACCESS_VARIANTS[variant]; - return acc && accessFunction(policy, login, report, allPolicies, iouType); + return acc && accessFunction(policy, login, report, allPolicies ?? null, iouType); }, true); const isPolicyNotAccessible = isEmptyObject(policy) || (Object.keys(policy).length === 1 && !isEmptyObject(policy.errors)) || !policy?.id;