Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
import useLocalize from '@hooks/useLocalize';
import useTheme from '@hooks/useTheme';
import useThemeStyles from '@hooks/useThemeStyles';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import type IconAsset from '@src/types/utils/IconAsset';

type DefaultAttachmentViewProps = {
Expand Down Expand Up @@ -38,6 +39,11 @@ function DefaultAttachmentView({fileName = '', shouldShowLoadingSpinnerIcon = fa
const theme = useTheme();
const styles = useThemeStyles();
const {translate} = useLocalize();
const reasonAttributes: SkeletonSpanReasonAttributes = {
context: 'DefaultAttachmentView',
shouldShowLoadingSpinnerIcon,
isUploading,
};

return (
<View style={[styles.defaultAttachmentView, containerStyles]}>
Expand Down Expand Up @@ -65,6 +71,7 @@ function DefaultAttachmentView({fileName = '', shouldShowLoadingSpinnerIcon = fa
<ActivityIndicator
color={theme.textSupporting}
testID="attachment-loading-spinner"
reasonAttributes={reasonAttributes}
/>
</Tooltip>
</View>
Expand Down
7 changes: 7 additions & 0 deletions src/components/ReportActionItem/MoneyReportView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import {
isSettled as isSettledReportUtils,
shouldHideSingleReportField,
} from '@libs/ReportUtils';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import {getTransactionPendingAction} from '@libs/TransactionUtils';
import AnimatedEmptyStateBackground from '@pages/inbox/report/AnimatedEmptyStateBackground';
import variables from '@styles/variables';
Expand Down Expand Up @@ -101,6 +102,11 @@ function MoneyReportView({
const formattedBillableAmount = convertToDisplayString(billableTotal, report?.currency);
const formattedTaxAmount = convertToDisplayString(taxTotal, report?.currency);
const isPartiallyPaid = !!report?.pendingFields?.partial;
const totalActivityReasonAttributes: SkeletonSpanReasonAttributes = {
context: 'MoneyReportView.Total',
isTotalUpdated,
isOffline,
};

const subAmountTextStyles: StyleProp<TextStyle> = [
styles.taskTitleMenuItem,
Expand Down Expand Up @@ -227,6 +233,7 @@ function MoneyReportView({
<ActivityIndicator
style={[styles.moneyRequestLoadingHeight]}
color={theme.textSupporting}
reasonAttributes={totalActivityReasonAttributes}
/>
) : (
<Text
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ function MoneyRequestReportPreviewContent({
isTransactionsEmpty: transactions.length === 0,
isOptimisticReport: chatReportMetadata?.isOptimisticReport,
};
const carouselReasonAttributes: SkeletonSpanReasonAttributes = {
context: 'MoneyRequestReportPreviewContent.Carousel',
hasCurrentWidth: !!currentWidth,
shouldShowLoading,
shouldShowLoadingDeferred,
};
const theme = useTheme();
const styles = useThemeStyles();
const StyleUtils = useStyleUtils();
Expand Down Expand Up @@ -971,7 +977,10 @@ function MoneyRequestReportPreviewContent({
styles.mtn1,
]}
>
<ActivityIndicator size={40} />
<ActivityIndicator
size={40}
reasonAttributes={carouselReasonAttributes}
/>
</View>
) : (
<View style={[styles.flex1, styles.flexColumn, styles.overflowVisible, styles.minHeight42]}>
Expand Down
7 changes: 7 additions & 0 deletions src/pages/iou/request/step/IOURequestStepCategory.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import Navigation from '@libs/Navigation/Navigation';
import {hasEnabledOptions} from '@libs/OptionsListUtils';
import {isPolicyAdmin} from '@libs/PolicyUtils';
import {getReportOrDraftReport, getTransactionDetails, isGroupPolicy, isReportInGroupPolicy} from '@libs/ReportUtils';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import {getRequestType} from '@libs/TransactionUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
Expand Down Expand Up @@ -107,6 +108,11 @@ function IOURequestStepCategory({
const isLoading = !isOffline && policyCategories === undefined;
const shouldShowEmptyState = policyCategories !== undefined && !shouldShowCategory;
const shouldShowOfflineView = policyCategories === undefined && isOffline;
const reasonAttributes: SkeletonSpanReasonAttributes = {
context: 'IOURequestStepCategory',
isLoading,
isOffline,
};

useEffect(() => {
fetchData();
Expand Down Expand Up @@ -177,6 +183,7 @@ function IOURequestStepCategory({
<ActivityIndicator
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.flex1]}
reasonAttributes={reasonAttributes}
/>
)}
{shouldShowOfflineView && <FullPageOfflineBlockingView>{null}</FullPageOfflineBlockingView>}
Expand Down
8 changes: 8 additions & 0 deletions src/pages/iou/request/step/IOURequestStepDestination.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import Navigation from '@libs/Navigation/Navigation';
import {getPerDiemCustomUnit, getPolicyByCustomUnitID, isPolicyAdmin} from '@libs/PolicyUtils';
import {findSelfDMReportID, getPolicyExpenseChat} from '@libs/ReportUtils';
import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import variables from '@styles/variables';
import {
clearSubrates,
Expand Down Expand Up @@ -100,6 +101,12 @@ function IOURequestStepDestination({
const isLoading = !isOffline && (!customUnit?.rates || isLoadingOnyxValue(policyMetadata));
const shouldShowEmptyState = isEmptyObject(customUnit?.rates) && !isOffline && !isLoading;
const shouldShowOfflineView = isEmptyObject(customUnit?.rates) && isOffline;
const reasonAttributes: SkeletonSpanReasonAttributes = {
context: 'IOURequestStepDestination',
isLoading,
isOffline,
hasCustomUnitRates: !isEmptyObject(customUnit?.rates),
};

const navigateBack = () => {
Navigation.goBack(backTo);
Expand Down Expand Up @@ -196,6 +203,7 @@ function IOURequestStepDestination({
<ActivityIndicator
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.flex1]}
reasonAttributes={reasonAttributes}
/>
)}
{shouldShowOfflineView && <FullPageOfflineBlockingView>{null}</FullPageOfflineBlockingView>}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import getReceiptsUploadFolderPath from '@libs/getReceiptsUploadFolderPath';
import {shouldUseTransactionDraft} from '@libs/IOUUtils';
import Log from '@libs/Log';
import Navigation from '@libs/Navigation/Navigation';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import CameraPermission from '@pages/iou/request/step/IOURequestStepScan/CameraPermission';
import {cropImageToAspectRatio} from '@pages/iou/request/step/IOURequestStepScan/cropImageToAspectRatio';
import type {ImageObject} from '@pages/iou/request/step/IOURequestStepScan/cropImageToAspectRatio';
Expand Down Expand Up @@ -255,6 +256,12 @@ function IOURequestStepOdometerImage({
});
};

const cameraLoadingReasonAttributes: SkeletonSpanReasonAttributes = {
context: 'IOURequestStepOdometerImage',
cameraPermissionGranted: cameraPermissionStatus === RESULTS.GRANTED,
deviceAvailable: device != null,
};

// Wait for camera permission status to render
if (cameraPermissionStatus == null) {
return null;
Expand Down Expand Up @@ -297,6 +304,7 @@ function IOURequestStepOdometerImage({
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.flex1]}
color={theme.textSupporting}
reasonAttributes={cameraLoadingReasonAttributes}
/>
</View>
)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {base64ToFile} from '@libs/fileDownload/FileUtils';
import {shouldUseTransactionDraft} from '@libs/IOUUtils';
import Log from '@libs/Log';
import Navigation from '@libs/Navigation/Navigation';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import {cropImageToAspectRatio} from '@pages/iou/request/step/IOURequestStepScan/cropImageToAspectRatio';
import type {ImageObject} from '@pages/iou/request/step/IOURequestStepScan/cropImageToAspectRatio';
import NavigationAwareCamera from '@pages/iou/request/step/IOURequestStepScan/NavigationAwareCamera/WebCamera';
Expand Down Expand Up @@ -277,6 +278,13 @@ function IOURequestStepOdometerImage({
[],
);

const cameraLoadingReasonAttributes: SkeletonSpanReasonAttributes = {
context: 'IOURequestStepOdometerImage',
cameraPermissionState,
isQueriedPermissionState,
hasVideoConstraints: !isEmptyObject(videoConstraints),
};

const mobileCameraView = () => (
<>
<View style={[styles.cameraView]}>
Expand All @@ -285,6 +293,7 @@ function IOURequestStepOdometerImage({
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.flex1]}
color={theme.textSupporting}
reasonAttributes={cameraLoadingReasonAttributes}
/>
)}
{cameraPermissionState !== 'granted' && isQueriedPermissionState && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import Log from '@libs/Log';
import Navigation from '@libs/Navigation/Navigation';
import navigationRef from '@libs/Navigation/navigationRef';
import {cancelSpan, endSpan, getSpan, startSpan} from '@libs/telemetry/activeSpans';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import StepScreenWrapper from '@pages/iou/request/step/StepScreenWrapper';
import withFullTransactionOrNotFound from '@pages/iou/request/step/withFullTransactionOrNotFound';
import withWritableReportOrNotFound from '@pages/iou/request/step/withWritableReportOrNotFound';
Expand Down Expand Up @@ -436,6 +437,12 @@ function IOURequestStepScan({
askForPermissions,
]);

const cameraLoadingReasonAttributes: SkeletonSpanReasonAttributes = {
context: 'IOURequestStepScan',
cameraPermissionGranted: cameraPermissionStatus === RESULTS.GRANTED,
deviceAvailable: device != null,
};

// Wait for camera permission status to render
if (cameraPermissionStatus == null) {
return null;
Expand Down Expand Up @@ -488,6 +495,7 @@ function IOURequestStepScan({
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.flex1]}
color={theme.textSupporting}
reasonAttributes={cameraLoadingReasonAttributes}
/>
</View>
)}
Expand Down
9 changes: 9 additions & 0 deletions src/pages/iou/request/step/IOURequestStepScan/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import {base64ToFile, isLocalFile as isLocalFileFileUtils} from '@libs/fileDownl
import getCurrentPosition from '@libs/getCurrentPosition';
import Navigation from '@libs/Navigation/Navigation';
import {cancelSpan, endSpan, getSpan, startSpan} from '@libs/telemetry/activeSpans';
import type {SkeletonSpanReasonAttributes} from '@libs/telemetry/useSkeletonSpan';
import StepScreenDragAndDropWrapper from '@pages/iou/request/step/StepScreenDragAndDropWrapper';
import withFullTransactionOrNotFound from '@pages/iou/request/step/withFullTransactionOrNotFound';
import withWritableReportOrNotFound from '@pages/iou/request/step/withWritableReportOrNotFound';
Expand Down Expand Up @@ -436,6 +437,13 @@ function IOURequestStepScan({
[],
);

const cameraLoadingReasonAttributes: SkeletonSpanReasonAttributes = {
context: 'IOURequestStepScan',
cameraPermissionState,
isQueriedPermissionState,
hasVideoConstraints: !isEmptyObject(videoConstraints),
};

const mobileCameraView = () => (
<>
<View style={[styles.cameraView]}>
Expand All @@ -445,6 +453,7 @@ function IOURequestStepScan({
size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
style={[styles.flex1]}
color={theme.textSupporting}
reasonAttributes={cameraLoadingReasonAttributes}
/>
)}
{cameraPermissionState !== 'granted' && isQueriedPermissionState && (
Expand Down
Loading