diff --git a/src/components/pages/AdminPage.jsx b/src/components/pages/AdminPage.jsx
index ba07836e0..26d618a72 100644
--- a/src/components/pages/AdminPage.jsx
+++ b/src/components/pages/AdminPage.jsx
@@ -2,13 +2,14 @@ import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, FormattedMessage } from 'react-intl';
import { Redirect, Route, Switch } from 'react-router';
-import Immutable from 'immutable';
+import { useSelector } from 'react-redux';
import AccountPageContainer from '../../containers/pages/AccountPageContainer';
import AuthRolePageContainer from '../../containers/pages/AuthRolePageContainer';
import AdminNavBar from '../admin/AdminNavBar';
import TitleBar from '../sections/TitleBar';
import { canList } from '../../helpers/permissionHelpers';
import styles from '../../../styles/cspace-ui/AdminPage.css';
+import { getAdminTab, getUserPerms } from '../../reducers';
const messages = defineMessages({
title: {
@@ -26,17 +27,16 @@ const propTypes = {
match: PropTypes.shape({
url: PropTypes.string,
}),
- perms: PropTypes.instanceOf(Immutable.Map),
- preferredTab: PropTypes.string,
};
export default function AdminPage(props) {
const {
match,
- perms,
- preferredTab,
} = props;
+ const perms = useSelector(getUserPerms);
+ const preferredTab = useSelector(getAdminTab);
+
const basename = match.url;
const title = ;
const permittedTabs = tabs.filter((tab) => canList(tab, perms));
diff --git a/src/components/pages/AuthorizePage.jsx b/src/components/pages/AuthorizePage.jsx
index 6a1f935f2..622fb3591 100644
--- a/src/components/pages/AuthorizePage.jsx
+++ b/src/components/pages/AuthorizePage.jsx
@@ -3,12 +3,13 @@
import { useEffect } from 'react';
import PropTypes from 'prop-types';
import get from 'lodash/get';
+import { useDispatch } from 'react-redux';
+import { createAuthCodeUrl } from '../../actions/login';
const propTypes = {
config: PropTypes.shape({
serverUrl: PropTypes.string,
}),
- createAuthCodeUrl: PropTypes.func.isRequired,
location: PropTypes.shape({
state: PropTypes.object,
}).isRequired,
@@ -21,8 +22,8 @@ const contextTypes = {
};
export default function AuthorizePage(props, context) {
+ const dispatch = useDispatch();
const {
- createAuthCodeUrl,
location,
} = props;
@@ -33,7 +34,7 @@ export default function AuthorizePage(props, context) {
const landingPath = get(location, ['state', 'continuation']) || '';
useEffect(() => {
- createAuthCodeUrl(config, landingPath).then((url) => {
+ dispatch(createAuthCodeUrl(config, landingPath)).then((url) => {
window.location.replace(url);
});
}, []);
diff --git a/src/components/pages/AuthorizedPage.jsx b/src/components/pages/AuthorizedPage.jsx
index 7724510ca..928156e63 100644
--- a/src/components/pages/AuthorizedPage.jsx
+++ b/src/components/pages/AuthorizedPage.jsx
@@ -1,21 +1,23 @@
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
-import Immutable from 'immutable';
+import { useDispatch, useSelector } from 'react-redux';
import LoginForm from '../login/LoginForm';
import styles from '../../../styles/cspace-ui/AuthorizedPage.css';
+import {
+ getLoginError,
+ getLoginLandingPath,
+ isLoginPending as isLoginPendingSelector,
+ isLoginSuccess as isLoginSuccessSelector,
+} from '../../reducers';
+import { receiveAuthCode } from '../../actions/login';
const propTypes = {
history: PropTypes.shape({
replace: PropTypes.func.isRequired,
}).isRequired,
- isLoginPending: PropTypes.bool,
- isLoginSuccess: PropTypes.bool,
- landingPath: PropTypes.string,
location: PropTypes.shape({
search: PropTypes.string,
}).isRequired,
- loginError: PropTypes.instanceOf(Immutable.Map),
- receiveAuthCode: PropTypes.func.isRequired,
};
const contextTypes = {
@@ -30,13 +32,16 @@ export default function AuthorizedPage(props, context = {}) {
} = context;
const {
- isLoginPending,
- isLoginSuccess,
location,
- loginError,
- receiveAuthCode,
} = props;
+ const isLoginPending = useSelector(isLoginPendingSelector);
+ const isLoginSuccess = useSelector(isLoginSuccessSelector);
+ const landingPath = useSelector(getLoginLandingPath);
+ const loginError = useSelector(getLoginError);
+
+ const dispatch = useDispatch();
+
useEffect(() => {
const {
search,
@@ -46,14 +51,13 @@ export default function AuthorizedPage(props, context = {}) {
const authCodeRequestId = params.get('state');
const authCode = params.get('code');
- receiveAuthCode(config, authCodeRequestId, authCode);
+ dispatch(receiveAuthCode(config, authCodeRequestId, authCode));
}, []);
useEffect(() => {
if (isLoginSuccess) {
const {
history,
- landingPath,
} = props;
history.replace(landingPath);
diff --git a/src/components/pages/RootPage.jsx b/src/components/pages/RootPage.jsx
index e212f945b..3ece40106 100644
--- a/src/components/pages/RootPage.jsx
+++ b/src/components/pages/RootPage.jsx
@@ -6,9 +6,6 @@ import { Helmet } from 'react-helmet';
import classNames from 'classnames';
import ProtectedRouteContainer from '../../containers/routes/ProtectedRouteContainer';
import PublicRoute from '../routes/PublicRoute';
-import AdminPageContainer from '../../containers/pages/AdminPageContainer';
-import AuthorizePageContainer from '../../containers/pages/AuthorizePageContainer';
-import AuthorizedPageContainer from '../../containers/pages/AuthorizedPageContainer';
import ConfigPage from './ConfigPage';
import ContentViewerPageContainer from '../../containers/pages/ContentViewerPageContainer';
import CreatePageContainer from '../../containers/pages/CreatePageContainer';
@@ -24,6 +21,9 @@ import SearchResultPageContainer from '../../containers/pages/SearchResultPageCo
import NotificationBarContainer from '../../containers/notification/NotificationBarContainer';
import styles from '../../../styles/cspace-ui/RootPage.css';
import favicon from '../../../images/favicon.png';
+import AdminPage from './AdminPage';
+import AuthorizedPage from './AuthorizedPage';
+import AuthorizePage from './AuthorizePage';
const messages = defineMessages({
title: {
@@ -66,13 +66,13 @@ function RootPage(props) {
-
-
+
+
-
+
({
- perms: getUserPerms(state),
- preferredTab: getAdminTab(state),
-});
-
-export default connect(
- mapStateToProps,
-)(AdminPage);
diff --git a/src/containers/pages/AuthorizePageContainer.js b/src/containers/pages/AuthorizePageContainer.js
deleted file mode 100644
index e50762d83..000000000
--- a/src/containers/pages/AuthorizePageContainer.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { connect } from 'react-redux';
-import AuthorizePage from '../../components/pages/AuthorizePage';
-
-import {
- createAuthCodeUrl,
-} from '../../actions/login';
-
-const mapDispatchToProps = {
- createAuthCodeUrl,
-};
-
-export default connect(
- undefined,
- mapDispatchToProps,
-)(AuthorizePage);
diff --git a/src/containers/pages/AuthorizedPageContainer.js b/src/containers/pages/AuthorizedPageContainer.js
deleted file mode 100644
index 449a5c798..000000000
--- a/src/containers/pages/AuthorizedPageContainer.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import { connect } from 'react-redux';
-import AuthorizedPage from '../../components/pages/AuthorizedPage';
-import { receiveAuthCode } from '../../actions/login';
-
-import {
- getLoginError,
- getLoginLandingPath,
- isLoginPending,
- isLoginSuccess,
-} from '../../reducers';
-
-const mapStateToProps = (state) => ({
- isLoginPending: isLoginPending(state),
- isLoginSuccess: isLoginSuccess(state),
- landingPath: getLoginLandingPath(state),
- loginError: getLoginError(state),
-});
-
-const mapDispatchToProps = {
- receiveAuthCode,
-};
-
-export default connect(
- mapStateToProps,
- mapDispatchToProps,
-)(AuthorizedPage);
diff --git a/test/specs/containers/pages/AdminPageContainer.spec.jsx b/test/specs/containers/pages/AdminPageContainer.spec.jsx
deleted file mode 100644
index 5194132ba..000000000
--- a/test/specs/containers/pages/AdminPageContainer.spec.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from 'react';
-import configureMockStore from 'redux-mock-store';
-import { createRenderer } from 'react-test-renderer/shallow';
-import Immutable from 'immutable';
-import { findWithType } from 'react-shallow-testutils';
-import AdminPage from '../../../../src/components/pages/AdminPage';
-import AdminPageContainer from '../../../../src/containers/pages/AdminPageContainer';
-
-chai.should();
-
-const mockStore = configureMockStore();
-
-const adminTab = 'tabName';
-
-const perms = Immutable.fromJS({
- collectionobject: {
- data: 'CRUDL',
- },
- group: {
- data: 'CRUDL',
- },
-});
-
-const store = mockStore({
- prefs: Immutable.Map({
- adminTab,
- }),
- user: Immutable.Map({
- perms,
- }),
-});
-
-describe('AdminPageContainer', () => {
- it('should set props on AdminPage', () => {
- const shallowRenderer = createRenderer();
-
- shallowRenderer.render();
-
- const result = shallowRenderer.getRenderOutput();
- const admin = findWithType(result, AdminPage);
-
- admin.type.should.equal(AdminPage);
- admin.props.should.have.property('perms', perms);
- admin.props.should.have.property('preferredTab', adminTab);
- });
-});