Skip to content

Commit

Permalink
Merge pull request #6531 from Expensify/Rory-FixInfiniteLoopInWithFul…
Browse files Browse the repository at this point in the history
…lPolicy

Fix infinite loop in withFullPolicy HOC
  • Loading branch information
chiragsalian committed Nov 30, 2021
2 parents f70f5da + f79441b commit 8d8395f
Showing 1 changed file with 19 additions and 3 deletions.
22 changes: 19 additions & 3 deletions src/pages/workspace/withFullPolicy.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@ import _ from 'underscore';
import lodashGet from 'lodash/get';
import React from 'react';
import PropTypes from 'prop-types';
import Str from 'expensify-common/lib/str';
import {withOnyx} from 'react-native-onyx';
import {useNavigationState} from '@react-navigation/native';
import CONST from '../../CONST';
import getComponentDisplayName from '../../libs/getComponentDisplayName';
import * as Policy from '../../libs/actions/Policy';
import ONYXKEYS from '../../ONYXKEYS';

let previousRoute = '';
let previousRouteName = '';
let previousRoutePolicyID = '';

/**
* @param {Object} route
Expand All @@ -19,6 +21,19 @@ function getPolicyIDFromRoute(route) {
return lodashGet(route, 'params.policyID', '');
}

/**
* @param {String} routeName
* @param {String} policyID
* @returns {Boolean}
*/
function isPreviousRouteInSameWorkspace(routeName, policyID) {
return (
Str.startsWith(routeName, 'Workspace')
&& Str.startsWith(previousRouteName, 'Workspace')
&& policyID === previousRoutePolicyID
);
}

const fullPolicyPropTypes = {
/** The full policy object for the current route (as opposed to the policy summary object) */
policy: PropTypes.shape({
Expand Down Expand Up @@ -74,11 +89,12 @@ export default function (WrappedComponent) {
const currentRoute = _.last(useNavigationState(state => state.routes || []));
const policyID = getPolicyIDFromRoute(currentRoute);

if (_.isString(policyID) && !previousRoute.includes(policyID)) {
if (_.isString(policyID) && !_.isEmpty(policyID) && !isPreviousRouteInSameWorkspace(currentRoute.name, policyID)) {
Policy.loadFullPolicy(policyID);
}

previousRoute = lodashGet(currentRoute, 'path', '');
previousRouteName = currentRoute.name;
previousRoutePolicyID = policyID;

const rest = _.omit(props, ['forwardedRef', 'policy']);
return (
Expand Down

0 comments on commit 8d8395f

Please sign in to comment.