diff --git a/src/hooks/useIsPolicyConnectedToUberReceiptPartner.ts b/src/hooks/useIsPolicyConnectedToUberReceiptPartner.ts new file mode 100644 index 00000000000..7721ed263dc --- /dev/null +++ b/src/hooks/useIsPolicyConnectedToUberReceiptPartner.ts @@ -0,0 +1,7 @@ +import usePolicy from './usePolicy'; + +export default function useIsPolicyConnectedToUberReceiptPartner({policyID}: {policyID?: string}) { + const policy = usePolicy(policyID); + + return !!policy?.receiptPartners?.uber?.enabled; +} diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 8cb551c28c3..bf810eb1d23 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2804,7 +2804,7 @@ function removePolicyReceiptPartnersConnection(policyID: string, partnerName: st key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { receiptPartners: { - [partnerName]: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}, + [partnerName]: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, enabled: false}, }, }, }, @@ -2816,7 +2816,7 @@ function removePolicyReceiptPartnersConnection(policyID: string, partnerName: st key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`, value: { receiptPartners: { - [partnerName]: {pendingAction: null}, + [partnerName]: null, }, }, }, diff --git a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx index a578f306e1e..835e3727aab 100644 --- a/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx +++ b/src/pages/workspace/WorkspaceMoreFeaturesPage.tsx @@ -9,6 +9,7 @@ import Section from '@components/Section'; import Text from '@components/Text'; import useCardFeeds from '@hooks/useCardFeeds'; import useDefaultFundID from '@hooks/useDefaultFundID'; +import useIsPolicyConnectedToUberReceiptPartner from '@hooks/useIsPolicyConnectedToUberReceiptPartner'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; @@ -91,6 +92,7 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro selector: filterInactiveCards, canBeMissing: true, }); + const isUberConnected = useIsPolicyConnectedToUberReceiptPartner({policyID}); const [cardFeeds] = useCardFeeds(policyID); const [isOrganizeWarningModalOpen, setIsOrganizeWarningModalOpen] = useState(false); const [isIntegrateWarningModalOpen, setIsIntegrateWarningModalOpen] = useState(false); @@ -333,7 +335,9 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro isActive: policy?.areReceiptPartnersEnabled ?? false, pendingAction: policy?.pendingFields?.areReceiptPartnersEnabled, disabledAction: () => { - // TODO: When Uber integration is added, check if any integration exists if(!hasReceiptPartnersIntegration) return; + if (!isUberConnected) { + return; + } setIsReceiptPartnersWarningModalOpen(true); }, action: (isEnabled: boolean) => { @@ -342,7 +346,7 @@ function WorkspaceMoreFeaturesPage({policy, route}: WorkspaceMoreFeaturesPagePro } enablePolicyReceiptPartners(policyID, isEnabled); }, - disabled: false, // TODO: When Uber integration is added, set to hasReceiptPartnersIntegration + disabled: isUberConnected, errors: getLatestErrorField(policy ?? {}, CONST.POLICY.MORE_FEATURES.ARE_RECEIPT_PARTNERS_ENABLED), onCloseError: () => { if (!policyID) { diff --git a/src/pages/workspace/receiptPartners/WorkspaceReceiptPartnersPage.tsx b/src/pages/workspace/receiptPartners/WorkspaceReceiptPartnersPage.tsx index e7080f4039f..3eaa9e5387a 100644 --- a/src/pages/workspace/receiptPartners/WorkspaceReceiptPartnersPage.tsx +++ b/src/pages/workspace/receiptPartners/WorkspaceReceiptPartnersPage.tsx @@ -11,6 +11,7 @@ import ScreenWrapper from '@components/ScreenWrapper'; import ScrollView from '@components/ScrollView'; import Section from '@components/Section'; import ThreeDotsMenu from '@components/ThreeDotsMenu'; +import useIsPolicyConnectedToUberReceiptPartner from '@hooks/useIsPolicyConnectedToUberReceiptPartner'; import useLocalize from '@hooks/useLocalize'; import useNetwork from '@hooks/useNetwork'; import usePolicy from '@hooks/usePolicy'; @@ -50,13 +51,10 @@ function WorkspaceReceiptPartnersPage({route}: WorkspaceReceiptPartnersPageProps const integrations = policy?.receiptPartners; const isAutoRemove = !!integrations?.uber?.autoRemove; const isAutoInvite = !!integrations?.uber?.autoInvite; - const [isConnected, setIsConnected] = useState(false); - const isUberConnected = !!integrations?.uber?.organizationID || isConnected; + const isUberConnected = useIsPolicyConnectedToUberReceiptPartner({policyID}); const startIntegrationFlow = useCallback( ({name}: {name: string}) => { - // TODO remove this when integration flow will be ready - setIsConnected(true); switch (name) { case CONST.POLICY.RECEIPT_PARTNERS.NAME.UBER: { const {connectFormData} = integrations?.uber ?? {}; @@ -147,7 +145,6 @@ function WorkspaceReceiptPartnersPage({route}: WorkspaceReceiptPartnersPageProps return; } removePolicyReceiptPartnersConnection(policyID, selectedPartner, integrations?.[selectedPartner]); - setIsConnected(false); onCloseModal(); }, [policyID, selectedPartner, integrations, onCloseModal]); diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts index d820d1c17fc..17b6528e73a 100644 --- a/src/types/onyx/Policy.ts +++ b/src/types/onyx/Policy.ts @@ -165,6 +165,10 @@ type UberReceiptPartner = { * auto remove for uber connection */ autoRemove?: boolean; + /** + * Whether uber is enabled for user + */ + enabled?: boolean; /** * organization id for connected uber */