From 181f46492d06e2588321f876023af6f5d976dc4b Mon Sep 17 00:00:00 2001 From: Abdelrahman Khattab Date: Fri, 10 Oct 2025 04:04:29 +0200 Subject: [PATCH 01/17] Block report submission when strict policy rules are enabled with violations --- src/components/AnimatedSubmitButton/index.tsx | 27 ++++++++---- src/components/MoneyReportHeader.tsx | 27 +++++++++++- .../MoneyRequestReportPreviewContent.tsx | 41 +++++++++++++++---- src/hooks/useStrictPolicyRules.ts | 37 +++++++++++++++++ src/languages/en.ts | 1 + src/languages/es.ts | 1 + src/libs/ReportPreviewActionUtils.ts | 9 ++++ src/libs/ReportUtils.ts | 17 ++++++++ 8 files changed, 143 insertions(+), 17 deletions(-) create mode 100644 src/hooks/useStrictPolicyRules.ts diff --git a/src/components/AnimatedSubmitButton/index.tsx b/src/components/AnimatedSubmitButton/index.tsx index aabe97dca511..0eb0b929f0bf 100644 --- a/src/components/AnimatedSubmitButton/index.tsx +++ b/src/components/AnimatedSubmitButton/index.tsx @@ -2,6 +2,7 @@ import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react'; import Animated, {Keyframe, runOnJS, useAnimatedStyle, useSharedValue, withTiming} from 'react-native-reanimated'; import Button from '@components/Button'; import * as Expensicons from '@components/Icon/Expensicons'; +import Tooltip from '@components/Tooltip'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import variables from '@styles/variables'; @@ -22,9 +23,15 @@ type AnimatedSubmitButtonProps = { // Function to call when the animation finishes onAnimationFinish: () => void; + + // Whether the button should be disabled + isDisabled?: boolean; + + // Tooltip text to show on hover when button is disabled + tooltipText?: string; }; -function AnimatedSubmitButton({success, text, onPress, isSubmittingAnimationRunning, onAnimationFinish}: AnimatedSubmitButtonProps) { +function AnimatedSubmitButton({success, text, onPress, isSubmittingAnimationRunning, onAnimationFinish, isDisabled, tooltipText}: AnimatedSubmitButtonProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); const isAnimationRunning = isSubmittingAnimationRunning; @@ -123,12 +130,18 @@ function AnimatedSubmitButton({success, text, onPress, isSubmittingAnimationRunn )} {!isAnimationRunning && ( -