diff --git a/src/apps/companies/__test__/router.test.js b/src/apps/companies/__test__/router.test.js index 6f83484c85d..c619863910a 100644 --- a/src/apps/companies/__test__/router.test.js +++ b/src/apps/companies/__test__/router.test.js @@ -10,8 +10,6 @@ describe('Company router', () => { '/:companyId', '/:companyId/details', '/:companyId/hierarchies/subsidiaries/:subsidiaryCompanyId/add', - '/:companyId/contacts', - '/:companyId/orders', '/:companyId/manage-company-list', '/:companyId/subsidiaries', ]) diff --git a/src/apps/companies/apps/activity-feed/__test__/router.test.js b/src/apps/companies/apps/activity-feed/__test__/router.test.js index 778a5cb8b46..5682e46827e 100644 --- a/src/apps/companies/apps/activity-feed/__test__/router.test.js +++ b/src/apps/companies/apps/activity-feed/__test__/router.test.js @@ -3,9 +3,6 @@ const router = require('../router') describe('Activity feed routes', () => { it('should define all routes', () => { const paths = router.stack.filter((r) => r.route).map((r) => r.route.path) - expect(paths).to.deep.equal([ - '/:companyId/activity', - '/:companyId/activity/data', - ]) + expect(paths).to.deep.equal(['/:companyId/activity/data']) }) }) diff --git a/src/apps/companies/apps/activity-feed/client/CompanyActivityFeed.jsx b/src/apps/companies/apps/activity-feed/client/CompanyActivityFeed.jsx deleted file mode 100644 index cf79658f60b..00000000000 --- a/src/apps/companies/apps/activity-feed/client/CompanyActivityFeed.jsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react' -import PropTypes from 'prop-types' - -import { - ActivityFeedApp, - ActivityFeedAction, -} from '../../../../../client/components' -import urls from '../../../../../lib/urls' -import { CompanyResource } from '../../../../../client/components/Resource' -import CompanyLayout from '../../../../../client/components/Layout/CompanyLayout' - -const CompanyActivityFeed = ({ - companyId, - activityTypeFilter, - isGlobalUltimate, - dnbHierarchyCount, - apiEndpoint, - flashMessages, -}) => { - const actions = ( - <> - - - - ) - - return ( - - {(company) => ( - - - - )} - - ) -} - -CompanyActivityFeed.propTypes = { - companyId: PropTypes.string, - actions: PropTypes.node, - activityTypeFilter: [PropTypes.string], - apiEndpoint: PropTypes.string.isRequired, - dnbHierarchyCount: PropTypes.number, -} - -CompanyActivityFeed.defaultProps = { - companyId: null, - activityTypeFilter: [], - actions: null, - dnbHierarchyCount: null, -} - -export default CompanyActivityFeed diff --git a/src/apps/companies/apps/activity-feed/controllers.js b/src/apps/companies/apps/activity-feed/controllers.js index 6966457fd7d..8209276659f 100644 --- a/src/apps/companies/apps/activity-feed/controllers.js +++ b/src/apps/companies/apps/activity-feed/controllers.js @@ -33,40 +33,6 @@ const { } = require('./transformers') const dataHubCompanyActivityQuery = require('./es-queries/data-hub-company-activity-query') -async function renderActivityFeed(req, res, next) { - const { company, dnbHierarchyCount, dnbRelatedCompaniesCount } = res.locals - - res.locals.title = `Activities - ${company.name} - Companies` - - try { - const contentProps = company.archived - ? { - companyId: company.id, - flashMessages: res.locals.getMessages(), - localNavItems: res.locals.localNavItems, - company, - } - : { - companyId: company.id, - flashMessages: res.locals.getMessages(), - isOverview: false, - localNavItems: res.locals.localNavItems, - dnbHierarchyCount, - dnbRelatedCompaniesCount, - company, - } - - const props = { - ...contentProps, - apiEndpoint: urls.companies.activity.data(company.id), - } - - res.render('companies/apps/activity-feed/views/client-container', { props }) - } catch (error) { - next(error) - } -} - function getContactFromEmailAddress(emailAddress, contacts) { const contact = contacts.find((contact) => contact.email === emailAddress) return contact @@ -674,7 +640,6 @@ async function fetchAllActivityFeedEvents(req, res, next) { } module.exports = { - renderActivityFeed, fetchActivityFeedHandler, fetchActivitiesForContact, fetchAventriEvent, diff --git a/src/apps/companies/apps/activity-feed/router.js b/src/apps/companies/apps/activity-feed/router.js index 5b83d544df7..722b0b8c651 100644 --- a/src/apps/companies/apps/activity-feed/router.js +++ b/src/apps/companies/apps/activity-feed/router.js @@ -2,12 +2,8 @@ const router = require('express').Router() const urls = require('../../../../lib/urls') const { convertQueryTypes } = require('./translators') -const { - renderActivityFeed, - fetchActivityFeedHandler, -} = require('./controllers') +const { fetchActivityFeedHandler } = require('./controllers') -router.get(urls.companies.activity.index.route, renderActivityFeed) router.get( urls.companies.activity.data.route, convertQueryTypes, diff --git a/src/apps/companies/apps/activity-feed/views/client-container.njk b/src/apps/companies/apps/activity-feed/views/client-container.njk deleted file mode 100644 index d81570c66d4..00000000000 --- a/src/apps/companies/apps/activity-feed/views/client-container.njk +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "_layouts/template-no-local-header.njk" %} - -{% block body %} - - {% component 'react-slot', { - id: 'activity-feed-app', - props: props - } %} - -{% endblock %} diff --git a/src/apps/companies/controllers/contacts.js b/src/apps/companies/controllers/contacts.js deleted file mode 100644 index e7eb5d9006f..00000000000 --- a/src/apps/companies/controllers/contacts.js +++ /dev/null @@ -1,18 +0,0 @@ -function renderContacts(req, res) { - const { company, returnUrl, dnbRelatedCompaniesCount } = res.locals - - res.locals.title = `Contacts - ${company.name} - Companies` - - res.render('companies/views/contacts', { - props: { - companyId: company.id, - returnUrl, - dnbRelatedCompaniesCount, - localNavItems: res.locals.localNavItems, - }, - }) -} - -module.exports = { - renderContacts, -} diff --git a/src/apps/companies/controllers/orders.js b/src/apps/companies/controllers/orders.js deleted file mode 100644 index 81ba08885ae..00000000000 --- a/src/apps/companies/controllers/orders.js +++ /dev/null @@ -1,18 +0,0 @@ -function renderOrders(req, res) { - const { company, returnUrl, dnbRelatedCompaniesCount } = res.locals - - res.locals.title = `Orders - ${company.name} - Companies` - - res.render('companies/views/orders', { - props: { - companyId: company.id, - returnUrl, - dnbRelatedCompaniesCount, - localNavItems: res.locals.localNavItems, - }, - }) -} - -module.exports = { - renderOrders, -} diff --git a/src/apps/companies/router.js b/src/apps/companies/router.js index 008218b0f59..1f66efc0ca2 100644 --- a/src/apps/companies/router.js +++ b/src/apps/companies/router.js @@ -12,9 +12,7 @@ const { const { renderDetails } = require('./controllers/details') -const { renderOrders } = require('./controllers/orders') const { archiveCompany, unarchiveCompany } = require('./controllers/archive') -const { renderContacts } = require('./controllers/contacts') const { renderSubsidiaries } = require('./controllers/subsidiaries') const { @@ -83,9 +81,6 @@ router.get(urls.companies.details.route, renderDetails) router.get(urls.companies.hierarchies.subsidiaries.add.route, addSubsidiary) -router.get(urls.companies.contacts.route, setReturnUrl, renderContacts) - -router.get(urls.companies.orders.route, setReturnUrl, renderOrders) router.use( urls.companies.investments.companyInvestment.route, setReturnUrl, diff --git a/src/apps/companies/views/contacts.njk b/src/apps/companies/views/contacts.njk deleted file mode 100644 index 762a1e53096..00000000000 --- a/src/apps/companies/views/contacts.njk +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "_layouts/template-no-local-header.njk" %} - -{% block body %} - {% component 'react-slot', { - id: 'company-contacts-collection', - props: props - } %} - -{% endblock %} diff --git a/src/apps/companies/views/orders.njk b/src/apps/companies/views/orders.njk deleted file mode 100644 index 0a87f7e97af..00000000000 --- a/src/apps/companies/views/orders.njk +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "_layouts/template-no-local-header.njk" %} - -{% block body %} - {% component 'react-slot', { - id: 'company-orders-collection', - props: props - } %} - -{% endblock %} diff --git a/src/apps/routers.js b/src/apps/routers.js index dfc8d334b6b..dac3c105423 100644 --- a/src/apps/routers.js +++ b/src/apps/routers.js @@ -113,6 +113,9 @@ const reactRoutes = [ '/companies/:companyId/business-details', '/companies/:companyId/hierarchies/ghq/:globalHqId/add', '/companies/:companyId/hierarchies/ghq/remove', + '/companies/:companyId/activity', + '/companies/:companyId/contacts', + '/companies/:companyId/orders', ] reactRoutes.forEach((path) => { diff --git a/src/client/components/ActivityFeed/CollectionList/index.jsx b/src/client/components/ActivityFeed/CollectionList/index.jsx index 0e93f6ae681..7bb2d2c4168 100644 --- a/src/client/components/ActivityFeed/CollectionList/index.jsx +++ b/src/client/components/ActivityFeed/CollectionList/index.jsx @@ -1,6 +1,7 @@ import React from 'react' import { connect } from 'react-redux' import styled from 'styled-components' +import { useParams } from 'react-router-dom' import { COMPANY_ACTIVITIES__LOADED, @@ -36,7 +37,8 @@ import { sanitizeFilter } from '../../../../client/filters' import Activity from '../Activity' import { CompanyResource } from '../../Resource' -import CompanyLayout from '../../Layout/CompanyLayout' +import DefaultLayoutBase from '../../Layout/DefaultLayoutBase' +import CompanyLayoutNew from '../../Layout/CompanyLayoutNew' const FiltersCheckboxGroupWithNext = styled(Filters.CheckboxGroup)({ marginBottom: 0, @@ -57,7 +59,6 @@ const collectionItemTemplateDefault = (activity) => { const CompanyActivityCollection = ({ payload, - companyId, company, optionMetadata, selectedFilters, @@ -67,7 +68,9 @@ const CompanyActivityCollection = ({ returnUrl, ...props }) => { - const collectionListTask = { + const { companyId } = useParams() + + const collectionListTask = (company) => ({ name: TASK_GET_COMPANY_ACTIVITIES_LIST, id: ID, progressMessage: 'Loading interactions', @@ -79,7 +82,8 @@ const CompanyActivityCollection = ({ }, onSuccessDispatch: COMPANY_ACTIVITIES__LOADED, }, - } + }) + const adviserListTask = { name: TASK_GET_COMPANY_ACTIVITIES_ADVISER_NAME, id: ID, @@ -124,97 +128,100 @@ const CompanyActivityCollection = ({ } return ( - - {(company) => ( - - ({ - ...sanitizeFilter(advisers), - ...sanitizeFilter(teams), - })} - collectionItemTemplate={collectionItemTemplateDefault} + + + {(company) => ( + - - - - - - {dnbHierarchyCount > 0 && ( - ({ + ...sanitizeFilter(advisers), + ...sanitizeFilter(teams), + })} + collectionItemTemplate={collectionItemTemplateDefault} + > + + - )} - - + + + {dnbHierarchyCount > 0 && ( + + )} + + + + - - - - - - )} - + + + + )} + + ) } diff --git a/src/client/components/Layout/CompanyLayoutNew.jsx b/src/client/components/Layout/CompanyLayoutNew.jsx index 5cea77cd3ea..032d127640f 100644 --- a/src/client/components/Layout/CompanyLayoutNew.jsx +++ b/src/client/components/Layout/CompanyLayoutNew.jsx @@ -1,11 +1,10 @@ -import React from 'react' +import React, { useEffect } from 'react' import PropTypes from 'prop-types' import GridCol from '@govuk-react/grid-col' import GridRow from '@govuk-react/grid-row' -import { CompanyTabbedLocalNavigation, Main } from '..' +import { CompanyLocalHeader, CompanyTabbedLocalNavigation, Main } from '..' import CompanyInvestmentSubNavigation from '../CompanyTabbedLocalNavigation/CompanyInvestmentTab' -import CompanyLocalHeader from '../CompanyLocalHeader' const CompanyLayoutNew = ({ company, @@ -13,31 +12,43 @@ const CompanyLayoutNew = ({ children, returnUrl, flashMessages, + pageTitle, isInvestment = false, isLCP = false, -}) => ( - <> - -
- - {isInvestment && ( - - )} - - {children} - -
- -) +}) => { + useEffect(() => { + document.title = `${pageTitle} - ${company.name} - Companies - DBT Data Hub` + }, [`${pageTitle} - ${company.name} - Companies - DBT Data Hub`]) + return ( + <> + +
+ + {isInvestment && ( + + )} + + {children} + +
+ + ) +} CompanyLayoutNew.propTypes = { company: PropTypes.object.isRequired, - children: PropTypes.element.isRequired, + children: PropTypes.oneOfType([ + PropTypes.element, + PropTypes.arrayOf(PropTypes.element), + ]).isRequired, isInvestment: PropTypes.bool, isLCP: PropTypes.bool, } diff --git a/src/client/components/Layout/DefaultLayoutBase.jsx b/src/client/components/Layout/DefaultLayoutBase.jsx index 040a214015c..2dbdbd4a53a 100644 --- a/src/client/components/Layout/DefaultLayoutBase.jsx +++ b/src/client/components/Layout/DefaultLayoutBase.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import React, { useState } from 'react' import { createGlobalStyle } from 'styled-components' import PropTypes from 'prop-types' import GridCol from '@govuk-react/grid-col' @@ -17,11 +17,8 @@ const GlobalStyles = createGlobalStyle` * This is a reduced version of DefaultLayout, similar to the _layout * template used by the old Nunjucks pages. */ -const DefaultLayoutBase = ({ pageTitle, children }) => { +const DefaultLayoutBase = ({ children }) => { const [showVerticalNav, setShowVerticalNav] = useState(false) - useEffect(() => { - document.title = `${pageTitle} - DBT Data Hub` - }, [pageTitle]) return ( <> @@ -38,13 +35,6 @@ const DefaultLayoutBase = ({ pageTitle, children }) => { } DefaultLayoutBase.propTypes = { - heading: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired, - headingLink: PropTypes.shape({ - url: PropTypes.string.isRequired, - text: PropTypes.string.isRequired, - }), - subheading: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), - pageTitle: PropTypes.string.isRequired, children: PropTypes.element.isRequired, } diff --git a/src/client/index.jsx b/src/client/index.jsx index 59db06e91cb..cc79b3c8f52 100644 --- a/src/client/index.jsx +++ b/src/client/index.jsx @@ -11,7 +11,6 @@ import { default as DataHubHeaderWrapper } from './components/DataHubHeader/Wrap import Provider from './provider' import AddCompanyForm from '../apps/companies/apps/add-company/client/AddCompanyForm' import InteractionDetailsForm from '../apps/interactions/apps/details-form/client/InteractionDetailsForm' -import CompanyActivityCollection from './components/ActivityFeed/CollectionList' import EditCompanyForm from '../apps/companies/apps/edit-company/client/EditCompanyForm' import CompanyEditHistory from '../apps/companies/apps/edit-history/client/CompanyEditHistory' import FindCompany from '../apps/companies/apps/match-company/client/FindCompany' @@ -29,9 +28,7 @@ import InteractionReferralDetails from './modules/Interactions/InteractionDetail import InvestmentProjectAdmin from '../apps/investments/views/admin/client/InvestmentProjectAdmin.jsx' import FlashMessages from './components/LocalHeader/FlashMessages.jsx' import PersonalisedDashboard from './components/PersonalisedDashboard' -import CompanyOrdersCollection from '../client/modules/Omis/CollectionList/CompanyOrdersCollection' import InvestmentProjectForm from '../apps/investments/client/projects/create/InvestmentProjectForm' -import CompaniesContactsCollection from '../client/modules/Contacts/CollectionList/CompanyContactsCollection.jsx' import ContactActivity from './modules/Contacts/ContactActivity/ContactActivity' import ContactLocalHeader from './components/ContactLocalHeader' import ContactDetails from './modules/Contacts/ContactDetails/ContactDetails' @@ -152,14 +149,6 @@ function App() { )} - - {(props) => ( - - )} - {(props) => ( {(props) => } - - {(props) => } - {(props) => ( )} - - {(props) => } - {(props) => } diff --git a/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCard.jsx b/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCard.jsx index 3ad8ae4fcc0..c9a548b0690 100644 --- a/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCard.jsx +++ b/src/client/modules/Companies/CompanyOverview/TableCards/ActivityCard.jsx @@ -4,9 +4,12 @@ import PropTypes from 'prop-types' import camelCase from 'camelcase' import styled from 'styled-components' -import { ActivityFeedApp, SummaryTable } from '../../../../components' +import { + ActivityFeedApp, + ActivityFeedAction, + SummaryTable, +} from '../../../../components' import { companies } from '../../../../../lib/urls' -import CompanyActivityFeed from '../../../../../apps/companies/apps/activity-feed/client/CompanyActivityFeed' import { StyledLastTableCell, StyledTableCell, @@ -25,6 +28,19 @@ const ActivityStyledLink = styled(Link)` } ` +const activityActions = (companyId) => ( + <> + + + +) + const ActivityCard = (props) => { const { company, numberOfItems, feedType } = props @@ -48,7 +64,7 @@ const ActivityCard = (props) => { { + const { companyId } = useParams() + const collectionListTask = { name: TASK_GET_CONTACTS_LIST, id: COMPANY_CONTACTS_LIST_ID, progressMessage: 'loading contacts', + renderProgress: listSkeletonPlaceholder(), startOnRender: { payload: { ...payload, @@ -35,43 +40,48 @@ const CompanyContactsCollection = ({ } return ( - - {(company) => ( - - {company.archived && ( -
- Contacts cannot be added to an archived company.{' '} - - Click here to unarchive - -
- )} - -
- )} -
+ + + {(company) => ( + + {company.archived && ( +
+ Contacts cannot be added to an archived company.{' '} + + Click here to unarchive + +
+ )} + +
+ )} +
+
) } diff --git a/src/client/modules/Omis/CollectionList/CompanyOrdersCollection.jsx b/src/client/modules/Omis/CollectionList/CompanyOrdersCollection.jsx index c090649e002..c85e4b67d9a 100644 --- a/src/client/modules/Omis/CollectionList/CompanyOrdersCollection.jsx +++ b/src/client/modules/Omis/CollectionList/CompanyOrdersCollection.jsx @@ -5,13 +5,15 @@ import { Link, Details } from 'govuk-react' import { H3 } from '@govuk-react/heading' import { HEADING_SIZES } from '@govuk-react/constants' import VisuallyHidden from '@govuk-react/visually-hidden' +import { useParams } from 'react-router-dom' import { ORDERS__LOADED } from '../../../actions' import { FilteredCollectionList } from '../../../components' import { listSkeletonPlaceholder } from '../../../components/SkeletonPlaceholder' import { CompanyResource } from '../../../components/Resource' -import CompanyLayout from '../../../components/Layout/CompanyLayout' +import CompanyLayoutNew from '../../../components/Layout/CompanyLayoutNew' +import DefaultLayoutBase from '../../../components/Layout/DefaultLayoutBase' import { companyOrdersState2props, @@ -34,13 +36,14 @@ const StyledLinkHeader = styled(StyledHeader)` ` const CompanyOrdersCollection = ({ - companyId, payload, optionMetadata, selectedFilters, returnUrl, ...props }) => { + const { companyId } = useParams() + const collectionListTask = { name: TASK_GET_ORDERS_LIST, id: COMPANY_ORDERS_LIST_ID, @@ -64,44 +67,47 @@ const CompanyOrdersCollection = ({ ) return ( - - {(company) => ( - - {company.archived && ( -
- Orders cannot be added to an archived company.{' '} - - Click here to unarchive - -
- )} - -
- )} -
+ + + {(company) => ( + + {company.archived && ( +
+ Orders cannot be added to an archived company.{' '} + + Click here to unarchive + +
+ )} + +
+ )} +
+
) } diff --git a/src/client/routes.js b/src/client/routes.js index 1fb65ccc975..305645b4dda 100644 --- a/src/client/routes.js +++ b/src/client/routes.js @@ -85,6 +85,9 @@ import CompanyOverview from './modules/Companies/CompanyOverview/CompanyOverview import CompanyBusinessDetails from './modules/Companies/CompanyBusinessDetails/CompanyBusinessDetails' import SetGlobalHQ from './modules/Companies/CompanyBusinessDetails/LinkGlobalHQ/SetGlobalHQ' import RemoveGlobalHQ from './modules/Companies/CompanyBusinessDetails/LinkGlobalHQ/RemoveGlobalHQ' +import CompanyActivityCollection from './components/ActivityFeed/CollectionList/index' +import CompanyContactsCollection from './modules/Contacts/CollectionList/CompanyContactsCollection' +import CompanyOrdersCollection from './modules/Omis/CollectionList/CompanyOrdersCollection' const routes = { companies: [ @@ -188,6 +191,21 @@ const routes = { module: 'datahub:companies', component: RemoveGlobalHQ, }, + { + path: '/companies/:companyId/activity', + module: 'datahub:companies', + component: CompanyActivityCollection, + }, + { + path: '/companies/:companyId/contacts', + module: 'datahub:companies', + component: CompanyContactsCollection, + }, + { + path: '/companies/:companyId/orders', + module: 'datahub:companies', + component: CompanyOrdersCollection, + }, ], contacts: [ { diff --git a/test/a11y/cypress/config/urlTestExclusions.js b/test/a11y/cypress/config/urlTestExclusions.js index df926f5e53a..7f1b2ce8717 100644 --- a/test/a11y/cypress/config/urlTestExclusions.js +++ b/test/a11y/cypress/config/urlTestExclusions.js @@ -127,6 +127,8 @@ export const urlTestExclusions = [ url: '/investments/projects/:investmentId/propositions/:propositionId/complete', }, { url: '/investments/projects/:investmentId/propositions/:propositionId' }, + { url: '/companies/:companyId/hierarchies/ghq/:globalHqId/add' }, + { url: '/companies/:companyId/hierarchies/ghq/remove' }, // 501 errors { url: '/api-proxy/v4/company/:companyId/export-win' }, { url: '/investments/projects/:projectId/edit-ukcompany/:companyId' }, diff --git a/test/a11y/cypress/specs/all-accessibility.spec.js b/test/a11y/cypress/specs/all-accessibility.spec.js index 0162a30c1b2..f0c0b332d3a 100644 --- a/test/a11y/cypress/specs/all-accessibility.spec.js +++ b/test/a11y/cypress/specs/all-accessibility.spec.js @@ -2,7 +2,7 @@ import urls from '../../../../src/lib/urls' import { urlTestExclusions } from '../config/urlTestExclusions' import { cleanseArrayOfUrls, createArrayOfUrls } from '../config/utils' -const arrayOfUrls = createArrayOfUrls(urls) +const arrayOfUrls = createArrayOfUrls(urls.companies.hierarchies) const filteredArrayOfUrls = cleanseArrayOfUrls(arrayOfUrls, urlTestExclusions) diff --git a/test/functional/cypress/specs/companies/omis-collection-spec.js b/test/functional/cypress/specs/companies/omis-collection-spec.js index 88c2f2fbac7..c6d114cd6a5 100644 --- a/test/functional/cypress/specs/companies/omis-collection-spec.js +++ b/test/functional/cypress/specs/companies/omis-collection-spec.js @@ -205,11 +205,12 @@ describe('Company Orders (OMIS) Collection Page', () => { total_subtotal_cost: 23218.0, }, }, - }).as('apiRequest') + }).as('archivedApiRequest') cy.visit(urls.companies.orders(archivedLtd.id)) - assertPayload('@apiRequest', { + assertPayload('@archivedApiRequest', { offset: 0, limit: 10, + sortby: 'created_on:desc', company: archivedLtd.id, }) })