From 5c42855dd218e5c713e57a5a1d0a443c0ec3aa10 Mon Sep 17 00:00:00 2001 From: Devin Ball Date: Mon, 21 Nov 2022 20:27:31 -0700 Subject: [PATCH 1/5] Refactored header and configuration components --- .../configuration.jsx | 35 +++++++++---------- .../configuration.spec.jsx | 2 +- .../application_instance_settings/header.jsx | 17 ++++----- .../header.spec.jsx | 2 +- 4 files changed, 25 insertions(+), 31 deletions(-) diff --git a/client/apps/admin/components/application_instance_settings/configuration.jsx b/client/apps/admin/components/application_instance_settings/configuration.jsx index b322da53..15ae7e75 100644 --- a/client/apps/admin/components/application_instance_settings/configuration.jsx +++ b/client/apps/admin/components/application_instance_settings/configuration.jsx @@ -1,6 +1,6 @@ import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; import _ from 'lodash'; import * as ApplicationInstanceActions from '../../actions/application_instances'; import Textarea from '../common/textarea'; @@ -20,25 +20,25 @@ function prettyJSON(str) { } } -const select = (state, props) => ({ - loading: state.applicationInstances.loading, - loaded: state.applicationInstances.loaded, - applicationInstances: _.filter(state.applicationInstances.applicationInstances, - { application_id: parseInt(props.params.applicationId, 10) }), -}); - -export function Configuration(props) { +export default function Configuration(props) { const { - loading, - loaded, params, - applicationInstances } = props; + const dispatch = useDispatch(); + const loading = useSelector((state) => state.applicationInstances.loading); + const loaded = useSelector((state) => state.applicationInstances.loaded); + const applicationInstances = useSelector((state) => _.filter( + state.applicationInstances.applicationInstances, + { application_id: parseInt(params.applicationId, 10) } + )); + useEffect(() => { if (!loading && !loaded) { - props.getApplicationInstance(params.applicationId, params.applicationInstanceId); + dispatch( + getApplicationInstance(params.applicationId, params.applicationInstanceId) + ) } }, []); @@ -52,7 +52,9 @@ export function Configuration(props) { useEffect(() => { // Redux function to store newApplicationInstance - props.updateNewInstance(newApplicationInstance); + dispatch( + updateNewInstance(newApplicationInstance) + ); }, [newApplicationInstance]); @@ -135,18 +137,13 @@ export function Configuration(props) { ); } -export default connect(select, ApplicationInstanceActions)(Configuration); - Configuration.propTypes = { applicationInstance: PropTypes.shape({ config: PropTypes.string, lti_config: PropTypes.string, lti_config_xml: PropTypes.string, }), - loading: PropTypes.bool, - loaded: PropTypes.bool, updateNewInstance: PropTypes.func, - applicationInstances: PropTypes.array, getApplicationInstance: PropTypes.func, params: PropTypes.shape({ applicationId: PropTypes.string.isRequired, diff --git a/client/apps/admin/components/application_instance_settings/configuration.spec.jsx b/client/apps/admin/components/application_instance_settings/configuration.spec.jsx index a7c032f0..3e55c38a 100644 --- a/client/apps/admin/components/application_instance_settings/configuration.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/configuration.spec.jsx @@ -1,7 +1,7 @@ import React from 'react'; import TestRenderer from 'react-test-renderer'; -import { Configuration } from './configuration'; +import Configuration from './configuration'; describe('configuration', () => { it('renders the DownloadButton component', () => { diff --git a/client/apps/admin/components/application_instance_settings/header.jsx b/client/apps/admin/components/application_instance_settings/header.jsx index bae31a6c..62c23700 100644 --- a/client/apps/admin/components/application_instance_settings/header.jsx +++ b/client/apps/admin/components/application_instance_settings/header.jsx @@ -1,6 +1,5 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; import _ from 'lodash'; import EnabledButton from '../common/enabled'; import Menu from '../common/menu'; @@ -9,20 +8,18 @@ import DeleteModal from '../common/delete_modal'; import getExtraFields from '../application_instances/extra_fields'; import * as ApplicationInstanceActions from '../../actions/application_instances'; -const select = (state) => ({ - newApplicationInstance: state.applicationInstances.newApplicationInstance, -}); - -export function Header(props) { +export default function Header(props) { const { goBack, applicationInstance, application, deleteInstance, disableInstance, - newApplicationInstance, } = props; + const dispatch = useDispatch(); + const newApplicationInstance = useSelector((state) => state.applicationInstances.newApplicationInstance); + const { nickname, primary_contact: primaryContact, @@ -47,7 +44,9 @@ export function Header(props) { const saveAppInstance = () => { if (!_.isEmpty(newApplicationInstance)) { - props.saveApplicationInstance(application.id, newApplicationInstance); + dispatch( + saveApplicationInstance(application.id, newApplicationInstance) + ) } }; @@ -141,8 +140,6 @@ export function Header(props) { ); } -export default connect(select, ApplicationInstanceActions)(Header); - Header.propTypes = { goBack: PropTypes.func, saveApplicationInstance: PropTypes.func, diff --git a/client/apps/admin/components/application_instance_settings/header.spec.jsx b/client/apps/admin/components/application_instance_settings/header.spec.jsx index a32997ab..b4c63825 100644 --- a/client/apps/admin/components/application_instance_settings/header.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/header.spec.jsx @@ -1,7 +1,7 @@ import React from 'react'; import TestRenderer from 'react-test-renderer'; -import { Header } from './header'; +import Header from './header'; describe('Header', () => { const applicationInstance = { From d77c20b997129627a8a244fe1c4ce89671e0acac Mon Sep 17 00:00:00 2001 From: Devin Ball Date: Mon, 21 Nov 2022 21:00:24 -0700 Subject: [PATCH 2/5] Refactored index and xml_config components --- .../application_instance_settings/index.jsx | 34 ++++++----------- .../index.spec.jsx | 2 +- .../xml_config.jsx | 38 ++++++++----------- 3 files changed, 28 insertions(+), 46 deletions(-) diff --git a/client/apps/admin/components/application_instance_settings/index.jsx b/client/apps/admin/components/application_instance_settings/index.jsx index 37a8d441..de896c73 100644 --- a/client/apps/admin/components/application_instance_settings/index.jsx +++ b/client/apps/admin/components/application_instance_settings/index.jsx @@ -1,6 +1,5 @@ import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; import _ from 'lodash'; import Heading from '../common/heading'; import Header from './header'; @@ -8,31 +7,28 @@ import ApplicationInstanceSettings from './application_instance_settings'; import Loader from '../../../../common/components/common/atomicjolt_loader'; import * as ApplicationInstanceActions from '../../actions/application_instances'; -const select = (state, props) => ({ - loading: state.applicationInstances.loading, - applicationInstances: _.filter(state.applicationInstances.applicationInstances, - { application_id: parseInt(props.params.applicationId, 10) }), - applications: state.applications, - sites: state.sites, -}); - -export function Index(props) { +export default function Index(props) { const { router, - applicationInstances, - loading, params, - applications, deleteApplicationInstance, disableApplicationInstance, - sites, children, location, } = props; + const dispatch = dispatch(); + const loading = state.applicationInstances.loading; + const applicationInstances = _.filter(state.applicationInstances.applicationInstances, + { application_id: parseInt(params.applicationId, 10) }); + const applications = state.applications; + const sites = state.sites; + useEffect(() => { - props.getApplicationInstance(params.applicationId, params.applicationInstanceId); + dispatch( + getApplicationInstance(params.applicationId, params.applicationInstanceId) + ) }, []); @@ -80,23 +76,15 @@ export function Index(props) { ); } -export default connect(select, ApplicationInstanceActions)(Index); - Index.propTypes = { params: PropTypes.shape({ applicationId: PropTypes.string.isRequired, applicationInstanceId: PropTypes.string.isRequired, }).isRequired, - applications: PropTypes.shape({ - id: PropTypes.string.isRequired, - }).isRequired, getApplicationInstance: PropTypes.func, - applicationInstances: PropTypes.array, router: PropTypes.shape({ push: PropTypes.func, }), - loading: PropTypes.bool, - sites: PropTypes.shape({}).isRequired, deleteApplicationInstance: PropTypes.func, disableApplicationInstance: PropTypes.func, children: PropTypes.element, diff --git a/client/apps/admin/components/application_instance_settings/index.spec.jsx b/client/apps/admin/components/application_instance_settings/index.spec.jsx index 64e6ced0..af583c72 100644 --- a/client/apps/admin/components/application_instance_settings/index.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/index.spec.jsx @@ -3,7 +3,7 @@ import TestRenderer from 'react-test-renderer'; import { Provider } from 'react-redux'; import configureStore from 'redux-mock-store'; -import { Index } from './index'; +import Index from './index'; const mockStore = configureStore([]); const store = mockStore({ diff --git a/client/apps/admin/components/application_instance_settings/xml_config.jsx b/client/apps/admin/components/application_instance_settings/xml_config.jsx index db179d1a..4025b65a 100644 --- a/client/apps/admin/components/application_instance_settings/xml_config.jsx +++ b/client/apps/admin/components/application_instance_settings/xml_config.jsx @@ -1,35 +1,31 @@ import React, { useEffect } from 'react'; import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; import _ from 'lodash'; import * as ApplicationInstanceActions from '../../actions/application_instances'; import Textarea from '../common/textarea'; -const select = (state, props) => ( - { - loading: state.applicationInstances.loading, - loaded: state.applicationInstances.loaded, - applicationInstances: _.filter( - state.applicationInstances.applicationInstances, - { application_id: parseInt(props.params.applicationId, 10) } - ), - } -); - -export function XmlConfig(props) { +export default function XmlConfig(props) { const { - loading, - loaded, params, - applicationInstances } = props; + const dispatch = dispatch(); + const loading = state.applicationInstances.loading; + const loaded = state.applicationInstances.loaded; + const applicationInstances = _.filter( + state.applicationInstances.applicationInstances, + { application_id: parseInt(params.applicationId, 10) } + ); + + useEffect(() => { if (!loading && !loaded) { - props.getApplicationInstance( - params.applicationId, - params.applicationInstanceId - ); + dispatch( + getApplicationInstance( + params.applicationId, + params.applicationInstanceId + ) + ) } }, []); @@ -60,8 +56,6 @@ export function XmlConfig(props) { ); } -export default connect(select, ApplicationInstanceActions)(XmlConfig); - XmlConfig.propTypes = { applicationInstance: PropTypes.shape({ config: PropTypes.string, From b452a17f9a9b846e1cdda29acaa970dbbfcfcaf8 Mon Sep 17 00:00:00 2001 From: Devin Ball Date: Mon, 28 Nov 2022 16:17:39 -0700 Subject: [PATCH 3/5] Refactored more components --- .../settings_drop_down.jsx | 2 +- .../apps/admin/components/common/heading.jsx | 30 ++++++++----------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/client/apps/admin/components/application_instances/settings_drop_down.jsx b/client/apps/admin/components/application_instances/settings_drop_down.jsx index 0ddffcf1..af793058 100644 --- a/client/apps/admin/components/application_instances/settings_drop_down.jsx +++ b/client/apps/admin/components/application_instances/settings_drop_down.jsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React from 'react'; export default function settingDropDown() { const styles = { diff --git a/client/apps/admin/components/common/heading.jsx b/client/apps/admin/components/common/heading.jsx index 9ca248a4..73ec9830 100644 --- a/client/apps/admin/components/common/heading.jsx +++ b/client/apps/admin/components/common/heading.jsx @@ -1,31 +1,29 @@ import React from 'react'; import PropTypes from 'prop-types'; import _ from 'lodash'; -import { connect } from 'react-redux'; import { Link } from 'react-router3'; import Menu from './menu'; import SubNav from './sub_nav'; import logo from '../../assets/images/aj-logo-emblem.svg'; -const select = (state) => ({ - signOutUrl: state.settings.sign_out_url, - userEditUrl: state.settings.user_edit_url, - usersUrl: state.settings.users_url, - sites: state.sites, - journalsAdminUrl: state.settings.journals_admin_url, - poolsAdminUrl: state.settings.polls_admin_url, - discussionsAdminUrl: state.settings.discussions_admin_url, - assessmentsAdminUrl: state.settings.assessments_admin_url, - searchAdminUrl: state.settings.search_admin_url, - actAdminUrl: state.settings.act_admin_url, -}); - -export function Heading(props) { +export default function Heading(props) { const { application, } = props; + const dispatch = dispatch(); + const signOutUrl = state.settings.sign_out_url; + const userEditUrl = state.settings.user_edit_url; + const usersUrl = state.settings.users_url; + const sites = state.sites; + const journalsAdminUrl = state.settings.journals_admin_url; + const poolsAdminUrl = state.settings.polls_admin_url; + const discussionsAdminUrl = state.settings.discussions_admin_url; + const assessmentsAdminUrl = state.settings.assessments_admin_url; + const searchAdminUrl = state.settings.search_admin_url; + const actAdminUrl = state.settings.act_admin_url; + const apps = [ { displayName: 'Starter', @@ -104,5 +102,3 @@ Heading.propTypes = { discussionsAdminUrl: PropTypes.string, actAdminUrl: PropTypes.string, }; - -export default connect(select)(Heading); From 0cb38983eeb101d49fd6a923f8ea2f25f84db0a6 Mon Sep 17 00:00:00 2001 From: Devin Ball Date: Thu, 1 Dec 2022 16:44:56 -0700 Subject: [PATCH 4/5] Fixed failing tests, refactored components --- .../application_instance_settings.jsx | 3 - .../configuration.spec.jsx | 14 ++++- .../application_instance_settings/header.jsx | 5 +- .../header.spec.jsx | 19 ++++++ .../application_instance_settings/index.jsx | 14 ++--- .../index.spec.jsx | 63 +++++++++---------- .../xml_config.jsx | 13 ++-- .../xml_config.spec.jsx | 27 +++++--- .../apps/admin/components/common/heading.jsx | 34 +++++----- .../admin/components/common/heading.spec.jsx | 19 +++++- 10 files changed, 124 insertions(+), 87 deletions(-) diff --git a/client/apps/admin/components/application_instance_settings/application_instance_settings.jsx b/client/apps/admin/components/application_instance_settings/application_instance_settings.jsx index b74fc1f3..d806beed 100644 --- a/client/apps/admin/components/application_instance_settings/application_instance_settings.jsx +++ b/client/apps/admin/components/application_instance_settings/application_instance_settings.jsx @@ -8,7 +8,6 @@ export default function ApplicationInstanceSettings(props) { const { application, applicationInstance, - sites, tabComponent, location } = props; @@ -19,7 +18,6 @@ export default function ApplicationInstanceSettings(props) { location={location} application={application} applicationInstance={applicationInstance} - sites={sites} />
{tabComponent} @@ -36,7 +34,6 @@ ApplicationInstanceSettings.propTypes = { applicationInstance: PropTypes.shape({ lti_key: PropTypes.string, }), - sites: PropTypes.shape({}).isRequired, tabComponent: PropTypes.element, location: PropTypes.shape({ pathname: PropTypes.string, diff --git a/client/apps/admin/components/application_instance_settings/configuration.spec.jsx b/client/apps/admin/components/application_instance_settings/configuration.spec.jsx index 3e55c38a..8ad0c635 100644 --- a/client/apps/admin/components/application_instance_settings/configuration.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/configuration.spec.jsx @@ -1,12 +1,24 @@ import React from 'react'; +import { Provider } from 'react-redux'; import TestRenderer from 'react-test-renderer'; +import configureStore from 'redux-mock-store'; import Configuration from './configuration'; +const mockStore = configureStore([]); + +const store = mockStore({ + applicationInstances : {}, +}); + describe('configuration', () => { + + const params = {}; it('renders the DownloadButton component', () => { const result = TestRenderer.create( - + + + ); expect(result).toMatchSnapshot(); }); diff --git a/client/apps/admin/components/application_instance_settings/header.jsx b/client/apps/admin/components/application_instance_settings/header.jsx index 62c23700..f32e70db 100644 --- a/client/apps/admin/components/application_instance_settings/header.jsx +++ b/client/apps/admin/components/application_instance_settings/header.jsx @@ -7,14 +7,15 @@ import DisabledButton from '../common/disabled'; import DeleteModal from '../common/delete_modal'; import getExtraFields from '../application_instances/extra_fields'; import * as ApplicationInstanceActions from '../../actions/application_instances'; +import { useDispatch, useSelector } from 'react-redux'; export default function Header(props) { const { goBack, - applicationInstance, - application, deleteInstance, disableInstance, + applicationInstance, + application, } = props; const dispatch = useDispatch(); diff --git a/client/apps/admin/components/application_instance_settings/header.spec.jsx b/client/apps/admin/components/application_instance_settings/header.spec.jsx index b4c63825..4fc385df 100644 --- a/client/apps/admin/components/application_instance_settings/header.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/header.spec.jsx @@ -1,9 +1,26 @@ import React from 'react'; +import { Provider } from 'react-redux'; import TestRenderer from 'react-test-renderer'; import Header from './header'; +import configureStore from 'redux-mock-store'; + +const mockStore = configureStore([]); + +const settings = { + sign_out_url: 'https://www.example.com', +}; + +const store = mockStore({ + applicationInstances: { + newApplicationInstance: { + } + }, + settings, +}); describe('Header', () => { + const applicationInstance = { site: {}, }; @@ -11,7 +28,9 @@ describe('Header', () => { it('renders the Header component', () => { const result = TestRenderer.create( +
+ ); expect(result).toMatchSnapshot(); }); diff --git a/client/apps/admin/components/application_instance_settings/index.jsx b/client/apps/admin/components/application_instance_settings/index.jsx index de896c73..0207a68c 100644 --- a/client/apps/admin/components/application_instance_settings/index.jsx +++ b/client/apps/admin/components/application_instance_settings/index.jsx @@ -6,6 +6,7 @@ import Header from './header'; import ApplicationInstanceSettings from './application_instance_settings'; import Loader from '../../../../common/components/common/atomicjolt_loader'; import * as ApplicationInstanceActions from '../../actions/application_instances'; +import { useDispatch, useSelector } from 'react-redux'; export default function Index(props) { @@ -15,15 +16,12 @@ export default function Index(props) { deleteApplicationInstance, disableApplicationInstance, children, - location, } = props; - const dispatch = dispatch(); - const loading = state.applicationInstances.loading; - const applicationInstances = _.filter(state.applicationInstances.applicationInstances, - { application_id: parseInt(params.applicationId, 10) }); - const applications = state.applications; - const sites = state.sites; + const dispatch = useDispatch(); + const loading = useSelector((state) => state.applicationInstances.loading); + const applicationInstances = useSelector((state) => state.applicationInstances); + const applications = useSelector((state) => state.applications); useEffect(() => { dispatch( @@ -39,7 +37,6 @@ export default function Index(props) { let backPath = ''; if (!loading) { backPath = `/applications/${application.id}/application_instances`; - } const renderLoading = () => ( @@ -66,7 +63,6 @@ export default function Index(props) { diff --git a/client/apps/admin/components/application_instance_settings/index.spec.jsx b/client/apps/admin/components/application_instance_settings/index.spec.jsx index af583c72..6f27f9a9 100644 --- a/client/apps/admin/components/application_instance_settings/index.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/index.spec.jsx @@ -5,6 +5,29 @@ import configureStore from 'redux-mock-store'; import Index from './index'; +const application = { + id: 1, + name: 'test application', +}; + +const site = { + url: "https://www.example.com", +}; + +const applicationInstance = { + id: 1, + nickname: 'a test application instance', + site: site, +}; + +const params = { + applicationId: application.id, + applicationInstanceId: applicationInstance.id, +}; + +const applications = {}; +applications[application.id] = application; + const mockStore = configureStore([]); const store = mockStore({ settings: { @@ -12,48 +35,18 @@ const store = mockStore({ }, applicationInstances: { newApplicationInstance: {}, + applicationInstance: applicationInstance, }, + application: application, + applications: applications, + location: {}, }); describe('Index', () => { it('renders the Index component', () => { - const application = { - id: 1, - name: 'test application', - }; - - const site = { - url: "https://www.example.com", - }; - - const applicationInstance = { - id: 2, - nickname: 'a test application instance', - site, - }; - - const params = { - applicationId: application.id, - applicationInstanceId: applicationInstance.id, - }; - - const applications = {}; - applications[application.id] = application; - - const applicationInstances = [ - applicationInstance, - ]; - - const location = {}; - const result = TestRenderer.create( - + ); expect(result).toMatchSnapshot(); diff --git a/client/apps/admin/components/application_instance_settings/xml_config.jsx b/client/apps/admin/components/application_instance_settings/xml_config.jsx index 4025b65a..307c9532 100644 --- a/client/apps/admin/components/application_instance_settings/xml_config.jsx +++ b/client/apps/admin/components/application_instance_settings/xml_config.jsx @@ -3,20 +3,17 @@ import PropTypes from 'prop-types'; import _ from 'lodash'; import * as ApplicationInstanceActions from '../../actions/application_instances'; import Textarea from '../common/textarea'; +import { useDispatch, useSelector } from 'react-redux'; export default function XmlConfig(props) { const { params, } = props; - const dispatch = dispatch(); - const loading = state.applicationInstances.loading; - const loaded = state.applicationInstances.loaded; - const applicationInstances = _.filter( - state.applicationInstances.applicationInstances, - { application_id: parseInt(params.applicationId, 10) } - ); - + const dispatch = useDispatch(); + const loading = useSelector((state) => state.applicationInstances.loading); + const loaded = useSelector((state) => state.applicationInstances.loaded); + const applicationInstances = useSelector((state) => state.applicationInstances); useEffect(() => { if (!loading && !loaded) { diff --git a/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx b/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx index b066bdbb..71d5be70 100644 --- a/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx @@ -1,26 +1,33 @@ import React from 'react'; +import { Provider } from 'react-redux'; import TestRenderer from 'react-test-renderer'; -import { XmlConfig } from './xml_config'; +import XmlConfig from './xml_config'; +import configureStore from 'redux-mock-store'; -describe('XmlConfig', () => { - it('renders the XmlConfig component', () => { +const mockStore = configureStore([]); - const applicationInstance = { - id: 1, - }; +const applicationInstance = { + id: 1, +}; - const applicationInstances = [ - applicationInstance, - ]; +const store = mockStore({ + applicationInstances: [ + applicationInstance, + ], +}); +describe('XmlConfig', () => { + it('renders the XmlConfig component', () => { const params = { applicationId: "1", applicationInstanceId: "1", }; const result = TestRenderer.create( - + + + ); expect(result).toMatchSnapshot(); }); diff --git a/client/apps/admin/components/common/heading.jsx b/client/apps/admin/components/common/heading.jsx index 73ec9830..7ed33a8f 100644 --- a/client/apps/admin/components/common/heading.jsx +++ b/client/apps/admin/components/common/heading.jsx @@ -5,24 +5,24 @@ import { Link } from 'react-router3'; import Menu from './menu'; import SubNav from './sub_nav'; import logo from '../../assets/images/aj-logo-emblem.svg'; +import { useDispatch, useSelector } from 'react-redux' export default function Heading(props) { const { application, - } = props; - const dispatch = dispatch(); - const signOutUrl = state.settings.sign_out_url; - const userEditUrl = state.settings.user_edit_url; - const usersUrl = state.settings.users_url; - const sites = state.sites; - const journalsAdminUrl = state.settings.journals_admin_url; - const poolsAdminUrl = state.settings.polls_admin_url; - const discussionsAdminUrl = state.settings.discussions_admin_url; - const assessmentsAdminUrl = state.settings.assessments_admin_url; - const searchAdminUrl = state.settings.search_admin_url; - const actAdminUrl = state.settings.act_admin_url; + const dispatch = useDispatch(); + const signOutUrl = useSelector((state) => state.settings.sign_out_url); + const userEditUrl = useSelector((state) => state.settings.user_edit_url); + const usersUrl = useSelector((state) => state.settings.users_url); + const sites = useSelector((state) => state.sites); + const journalsAdminUrl = useSelector((state) => state.settings.journals_admin_url); + const poolsAdminUrl = useSelector((state) => state.settings.polls_admin_url); + const discussionsAdminUrl = useSelector((state) => state.settings.discussions_admin_url); + const assessmentsAdminUrl = useSelector((state) => state.settings.assessments_admin_url); + const searchAdminUrl = useSelector((state) => state.settings.search_admin_url); + const actAdminUrl = useSelector((state) => state.settings.act_admin_url); const apps = [ { @@ -61,16 +61,16 @@ export default function Heading(props) {
- +
); } diff --git a/client/apps/admin/components/common/heading.spec.jsx b/client/apps/admin/components/common/heading.spec.jsx index d6746a6f..2e88da7c 100644 --- a/client/apps/admin/components/common/heading.spec.jsx +++ b/client/apps/admin/components/common/heading.spec.jsx @@ -1,6 +1,17 @@ import React from 'react'; +import { Provider } from 'react-redux'; import TestRenderer from 'react-test-renderer'; -import { Heading } from './heading'; +import Heading from './heading'; +import configureStore from 'redux-mock-store'; + +const mockStore = configureStore([]); + +const store = mockStore({ + settings: { + sign_out_url: 'https://www.example.com' + }, + sites : { 1: { id: 1, oauth_key: 'akey', oauth_secret: 'secret' } }, +}); describe('common heading', () => { let result; @@ -14,7 +25,11 @@ describe('common heading', () => { signOutUrl: 'https://www.example.com', sites, }; - result = TestRenderer.create(); + result = TestRenderer.create( + + + + ); }); it('matches the snapshot', () => { From 82ec6e921cfa9fd9e8aadece3c1802be46891236 Mon Sep 17 00:00:00 2001 From: Devin Ball Date: Thu, 1 Dec 2022 17:23:21 -0700 Subject: [PATCH 5/5] Fixed xml_config.jsx --- .../components/application_instance_settings/xml_config.jsx | 5 ++++- .../application_instance_settings/xml_config.spec.jsx | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client/apps/admin/components/application_instance_settings/xml_config.jsx b/client/apps/admin/components/application_instance_settings/xml_config.jsx index 307c9532..5e5db648 100644 --- a/client/apps/admin/components/application_instance_settings/xml_config.jsx +++ b/client/apps/admin/components/application_instance_settings/xml_config.jsx @@ -13,7 +13,10 @@ export default function XmlConfig(props) { const dispatch = useDispatch(); const loading = useSelector((state) => state.applicationInstances.loading); const loaded = useSelector((state) => state.applicationInstances.loaded); - const applicationInstances = useSelector((state) => state.applicationInstances); + const applicationInstances = useSelector((state) => _.filter( + state.applicationInstances, + { application_id: parseInt(props.params.applicationId, 10) } + )); useEffect(() => { if (!loading && !loaded) { diff --git a/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx b/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx index 71d5be70..b18300c6 100644 --- a/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx +++ b/client/apps/admin/components/application_instance_settings/xml_config.spec.jsx @@ -9,6 +9,7 @@ const mockStore = configureStore([]); const applicationInstance = { id: 1, + application_id: 2, }; const store = mockStore({ @@ -20,8 +21,8 @@ const store = mockStore({ describe('XmlConfig', () => { it('renders the XmlConfig component', () => { const params = { - applicationId: "1", - applicationInstanceId: "1", + applicationId: 2, + applicationInstanceId: 1, }; const result = TestRenderer.create(