Skip to content

chore(ui): Prepare for react router v6 upgrade #12183

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Sep 24, 2024
Merged
33 changes: 0 additions & 33 deletions ui/apps/platform/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion ui/apps/platform/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@
"react-responsive": "^9.0.2",
"react-router-dom": "^5.3.4",
"react-router-hash-link": "^2.4.3",
"react-router-prop-types": "^1.0.5",
"react-select": "^2.0.0",
"react-spinners": "^0.10.4",
"react-table-6": "^6.11.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { Component, ErrorInfo, ReactNode } from 'react';
import { withRouter } from 'react-router-dom';
import { useLocation } from 'react-router-dom';
import Raven from 'raven-js';

import ErrorBoundaryPage from './ErrorBoundaryPage';
Expand Down Expand Up @@ -58,4 +58,9 @@ class ErrorBoundary extends Component<Props, State> {
}
}

export default withRouter(ErrorBoundary);
function ErrorBoundaryWrapper({ children }: { children: ReactNode }) {
const location = useLocation();
return <ErrorBoundary location={location.pathname}>{children}</ErrorBoundary>;
}

export default ErrorBoundaryWrapper;
22 changes: 6 additions & 16 deletions ui/apps/platform/src/Components/RelatedEntity.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React, { useContext } from 'react';
import PropTypes from 'prop-types';
import ReactRouterPropTypes from 'react-router-prop-types';
import { withRouter } from 'react-router-dom';
import { useHistory, useLocation, useRouteMatch } from 'react-router-dom';

import Widget from 'Components/Widget';
import EntityIcon from 'Components/EntityIcon';
Expand All @@ -11,16 +10,10 @@ import hexagonal from 'images/side-panel-icons/hexagonal.svg';
import URLService from 'utils/URLService';

// @TODO We should try to use this component for Compliance as well
const RelatedEntity = ({
match,
location,
history,
name,
entityType,
entityId,
value,
...rest
}) => {
const RelatedEntity = ({ name, entityType, entityId, value, ...rest }) => {
const history = useHistory();
const location = useLocation();
const match = useRouteMatch();
const workflowState = useContext(workflowStateContext);

function onClick() {
Expand Down Expand Up @@ -78,9 +71,6 @@ RelatedEntity.propTypes = {
entityId: PropTypes.string,
value: PropTypes.string,
link: PropTypes.string,
match: ReactRouterPropTypes.match.isRequired,
location: ReactRouterPropTypes.location.isRequired,
history: ReactRouterPropTypes.history.isRequired,
};

RelatedEntity.defaultProps = {
Expand All @@ -90,4 +80,4 @@ RelatedEntity.defaultProps = {
name: null,
};

export default withRouter(RelatedEntity);
export default RelatedEntity;
13 changes: 6 additions & 7 deletions ui/apps/platform/src/Components/RelatedEntityListCount.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import React, { useContext } from 'react';
import { withRouter } from 'react-router-dom';
import { useHistory, useLocation, useRouteMatch } from 'react-router-dom';
import PropTypes from 'prop-types';
import ReactRouterPropTypes from 'react-router-prop-types';

import Widget from 'Components/Widget';
import { newWorkflowCases } from 'constants/useCaseTypes';
import workflowStateContext from 'Containers/workflowStateContext';
import URLService from 'utils/URLService';

// @TODO We should try to use this component for Compliance as well
const RelatedEntityListCount = ({ match, location, history, name, value, entityType, ...rest }) => {
const RelatedEntityListCount = ({ name, value, entityType, ...rest }) => {
const history = useHistory();
const location = useLocation();
const match = useRouteMatch();
const workflowState = useContext(workflowStateContext);

function onClick() {
Expand Down Expand Up @@ -53,14 +55,11 @@ const RelatedEntityListCount = ({ match, location, history, name, value, entityT
RelatedEntityListCount.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.number,
match: ReactRouterPropTypes.match.isRequired,
location: ReactRouterPropTypes.location.isRequired,
history: ReactRouterPropTypes.history.isRequired,
entityType: PropTypes.string.isRequired,
};

RelatedEntityListCount.defaultProps = {
value: 0,
};

export default withRouter(RelatedEntityListCount);
export default RelatedEntityListCount;
3 changes: 1 addition & 2 deletions ui/apps/platform/src/Components/TablePagination.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import * as Icon from 'react-feather';
import { withRouter } from 'react-router-dom';
import debounce from 'lodash/debounce';
import clamp from 'lodash/clamp';

Expand Down Expand Up @@ -120,4 +119,4 @@ TablePagination.defaultProps = {
dataLength: 0,
};

export default withRouter(TablePagination);
export default TablePagination;
3 changes: 1 addition & 2 deletions ui/apps/platform/src/Components/URLSearchInput.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import { withRouter } from 'react-router-dom';

import Query from 'Components/ThrowingQuery';
import URLSearchInputWithAutocomplete from 'Components/URLSearchInputWithAutocomplete';
Expand Down Expand Up @@ -52,4 +51,4 @@ URLSearchInput.defaultProps = {
categories: [],
};

export default withRouter(URLSearchInput);
export default URLSearchInput;
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { useContext } from 'react';
import { useHistory, useLocation } from 'react-router-dom';
import PropTypes from 'prop-types';
import ReactRouterPropTypes from 'react-router-prop-types';
import { components } from 'react-select';
import queryString from 'qs';
import { connect } from 'react-redux';
Expand Down Expand Up @@ -100,8 +100,6 @@ export const removeValuesForKey = (oldOptions, newOptions) => {
};

const URLSearchInputWithAutocomplete = ({
location,
history,
autoCompleteResults,
categoryOptions,
setAllSearchOptions,
Expand All @@ -112,6 +110,8 @@ const URLSearchInputWithAutocomplete = ({
prependAutocompleteQuery,
...rest
}) => {
const location = useLocation();
const history = useHistory();
const searchParam = useContext(searchContext);
const workflowState = useContext(workflowStateContext);

Expand Down Expand Up @@ -309,8 +309,6 @@ URLSearchInputWithAutocomplete.propTypes = {
placeholder: PropTypes.string.isRequired,
categoryOptions: PropTypes.arrayOf(PropTypes.string),
autoCompleteResults: PropTypes.arrayOf(PropTypes.string),
location: ReactRouterPropTypes.location.isRequired,
history: ReactRouterPropTypes.history.isRequired,
fetchAutocomplete: PropTypes.func,
clearAutocomplete: PropTypes.func,
setAllSearchOptions: PropTypes.func.isRequired,
Expand Down
5 changes: 1 addition & 4 deletions ui/apps/platform/src/Components/visuals/Sunburst.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import React from 'react';
import { Sunburst, DiscreteColorLegend, LabelSeries } from 'react-vis';
import PropTypes from 'prop-types';
import merge from 'deepmerge';
import ReactRouterPropTypes from 'react-router-prop-types';
import { withRouter } from 'react-router-dom';

import SunburstDetailSection from 'Components/visuals/SunburstDetailSection';

Expand Down Expand Up @@ -70,7 +68,6 @@ class BasicSunburst extends React.Component {
onValueSelect: PropTypes.func,
onValueDeselect: PropTypes.func,
staticDetails: PropTypes.bool,
history: ReactRouterPropTypes.history.isRequired,
units: PropTypes.string,
small: PropTypes.bool,
};
Expand Down Expand Up @@ -234,4 +231,4 @@ class BasicSunburst extends React.Component {
}
}

export default withRouter(BasicSunburst);
export default BasicSunburst;
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ function AccessControl(): ReactElement {
return (
<>
<Switch>
<Route exact path={accessControlBasePath}>
<Redirect to={getEntityPath('AUTH_PROVIDER')} />
</Route>
<Route
exact
path={accessControlBasePath}
render={() => <Redirect to={getEntityPath('AUTH_PROVIDER')} />}
/>
<Route path={accessControlPath}>
<Switch>
<Route path={getEntityPath('AUTH_PROVIDER', paramId)}>
Expand Down
23 changes: 15 additions & 8 deletions ui/apps/platform/src/Containers/AppPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,21 @@ function AppPage(): ReactElement {
<AppPageTitle />
<AppPageFavicon />
<Switch>
<Route path={loginPath} component={LoginPage} />
<Route
path={authorizeRoxctlPath}
render={(props) => <LoginPage {...props} authorizeRoxctlMode />}
/>
<Route path={testLoginResultsPath} component={TestLoginResultsPage} />
<Route path={authResponsePrefix} component={LoadingSection} />
<Route component={AuthenticatedRoutes} />
<Route path={loginPath}>
<LoginPage />
</Route>
<Route path={authorizeRoxctlPath}>
<LoginPage authorizeRoxctlMode />
</Route>
<Route path={testLoginResultsPath}>
<TestLoginResultsPage />
</Route>
<Route path={authResponsePrefix}>
<LoadingSection />
</Route>
<Route>
<AuthenticatedRoutes />
</Route>
</Switch>
</>
);
Expand Down
12 changes: 6 additions & 6 deletions ui/apps/platform/src/Containers/Compliance/Entity/Page.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React from 'react';
import ReactRouterPropTypes from 'react-router-prop-types';
import PropTypes from 'prop-types';
import { withRouter } from 'react-router-dom';
import { useLocation, useRouteMatch } from 'react-router-dom';
import URLService from 'utils/URLService';
import entityTypes from 'constants/entityTypes';

Expand All @@ -12,7 +11,10 @@ import ControlPage from './Control';
import DeploymentPage from './Deployment';
import StandardPage from './Standard';

const ComplianceEntityPage = ({ match, location }) => {
const ComplianceEntityPage = () => {
const location = useLocation();
const match = useRouteMatch();

const params = URLService.getParams(match, location);

const pageProps = {
Expand All @@ -39,8 +41,6 @@ const ComplianceEntityPage = ({ match, location }) => {
};

ComplianceEntityPage.propTypes = {
match: ReactRouterPropTypes.match.isRequired,
location: ReactRouterPropTypes.location.isRequired,
params: PropTypes.shape({
entityId: PropTypes.string,
entityType: PropTypes.string,
Expand All @@ -53,4 +53,4 @@ ComplianceEntityPage.defaultProps = {
sidePanelMode: false,
};

export default withRouter(ComplianceEntityPage);
export default ComplianceEntityPage;
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Link, withRouter } from 'react-router-dom';
import ReactRouterPropTypes from 'react-router-prop-types';
import { Link, useLocation, useRouteMatch } from 'react-router-dom';
import { resourceLabels } from 'messages/common';
import URLService from 'utils/URLService';
import pluralize from 'pluralize';
Expand All @@ -10,7 +9,10 @@ import { SEARCH_WITH_CONTROLS as QUERY } from 'queries/search';
import queryService from 'utils/queryService';
import { getResourceCountFromAggregatedResults } from 'utils/complianceUtils';

const ResourceTabs = ({ entityType, entityId, resourceTabs, selectedType, match, location }) => {
const ResourceTabs = ({ entityType, entityId, resourceTabs, selectedType }) => {
const match = useRouteMatch();
const location = useLocation();

function getLinkToListType(listEntityType) {
return URLService.getURL(match, location)
.base(entityType, entityId)
Expand Down Expand Up @@ -87,8 +89,6 @@ const ResourceTabs = ({ entityType, entityId, resourceTabs, selectedType, match,
};

ResourceTabs.propTypes = {
match: ReactRouterPropTypes.match.isRequired,
location: ReactRouterPropTypes.location.isRequired,
entityType: PropTypes.string.isRequired,
entityId: PropTypes.string.isRequired,
selectedType: PropTypes.string,
Expand All @@ -100,4 +100,4 @@ ResourceTabs.defaultProps = {
selectedType: null,
};

export default withRouter(ResourceTabs);
export default ResourceTabs;
3 changes: 1 addition & 2 deletions ui/apps/platform/src/Containers/Compliance/List/Header.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import React from 'react';
import PropTypes from 'prop-types';
import { withRouter } from 'react-router-dom';
import lowerCase from 'lodash/lowerCase';
import startCase from 'lodash/startCase';

Expand Down Expand Up @@ -72,4 +71,4 @@ ListHeader.defaultProps = {
standard: null,
};

export default withRouter(ListHeader);
export default ListHeader;
Loading
Loading