Skip to content
Snippets Groups Projects
Commit d384cd9f authored by Bjarke Madsen's avatar Bjarke Madsen
Browse files

add EOSCListings page, but don't link to it due to bad data quality

parent 743a441b
No related branches found
No related tags found
No related merge requests found
...@@ -25,6 +25,7 @@ import CentralProcurementPage from "./pages/Standards&Policies/CentralProcuremen ...@@ -25,6 +25,7 @@ import CentralProcurementPage from "./pages/Standards&Policies/CentralProcuremen
import CorporateStrategyPage from "./pages/Standards&Policies/CorporateStrategy"; import CorporateStrategyPage from "./pages/Standards&Policies/CorporateStrategy";
import CrisisExercisesPage from "./pages/Standards&Policies/CrisisExercises"; import CrisisExercisesPage from "./pages/Standards&Policies/CrisisExercises";
import CrisisManagementPage from "./pages/Standards&Policies/CrisisManagement"; import CrisisManagementPage from "./pages/Standards&Policies/CrisisManagement";
import EOSCListingsPage from "./pages/Standards&Policies/EOSCListings";
import PolicyPage from "./pages/Standards&Policies/Policy"; import PolicyPage from "./pages/Standards&Policies/Policy";
import SecurityControlsPage from "./pages/Standards&Policies/SecurityControls"; import SecurityControlsPage from "./pages/Standards&Policies/SecurityControls";
import ServiceLevelTargetsPage from "./pages/Standards&Policies/ServiceLevelTargets"; import ServiceLevelTargetsPage from "./pages/Standards&Policies/ServiceLevelTargets";
...@@ -128,6 +129,7 @@ const router = createBrowserRouter([ ...@@ -128,6 +129,7 @@ const router = createBrowserRouter([
{ path: "/dark-fibre-lease-international", element: <DarkFibreLeasePage key={"darkfibreinternational"} /> }, { path: "/dark-fibre-lease-international", element: <DarkFibreLeasePage key={"darkfibreinternational"} /> },
{ path: "/dark-fibre-installed", element: <DarkFibreInstalledPage /> }, { path: "/dark-fibre-installed", element: <DarkFibreInstalledPage /> },
{ path: "/remote-campuses", element: <RemoteCampusesPage /> }, { path: "/remote-campuses", element: <RemoteCampusesPage /> },
{ path: "/eosc-listings", element: <EOSCListingsPage /> },
{ path: "/fibre-light", element: <FibreLightPage /> }, { path: "/fibre-light", element: <FibreLightPage /> },
{ path: "/monitoring-tools", element: <MonitoringToolsPage /> }, { path: "/monitoring-tools", element: <MonitoringToolsPage /> },
{ path: "/pert-team", element: <PertTeamPage /> }, { path: "/pert-team", element: <PertTeamPage /> },
......
...@@ -147,6 +147,10 @@ export interface ECProject extends NrenAndYearDatapoint { ...@@ -147,6 +147,10 @@ export interface ECProject extends NrenAndYearDatapoint {
project: string; project: string;
} }
export interface EOSCListing extends NrenAndYearDatapoint {
service_names: string[];
}
export interface ExternalConnection extends NrenAndYearDatapoint { export interface ExternalConnection extends NrenAndYearDatapoint {
link_name: string, link_name: string,
capacity: (number | null), capacity: (number | null),
......
...@@ -9,6 +9,28 @@ interface configProps { ...@@ -9,6 +9,28 @@ interface configProps {
removeDecoration?: boolean; removeDecoration?: boolean;
} }
function getUrlOrString(keysAreURLs, style, index, key, value: string) {
if (!keysAreURLs) {
return <li key={index}>
<span>{value}</span>
</li>
}
const isURL = key.startsWith('http');
if (!isURL) {
return <li key={index}>
<span>{value}</span>
</li>
}
return (<li key={index}>
<a href={addHttpIfMissing(key)} target="_blank" rel="noopener noreferrer" style={style}>{value}</a>
</li>)
}
function getJSXFromData(data: Map<string, Map<number, { [key: string]: string }>>, function getJSXFromData(data: Map<string, Map<number, { [key: string]: string }>>,
{ dottedBorder = false, noDots = false, keysAreURLs = false, removeDecoration = false }: configProps) { { dottedBorder = false, noDots = false, keysAreURLs = false, removeDecoration = false }: configProps) {
return Array.from(data.entries()).map(([nren, nrenMap]) => { return Array.from(data.entries()).map(([nren, nrenMap]) => {
...@@ -24,14 +46,7 @@ function getJSXFromData(data: Map<string, Map<number, { [key: string]: string }> ...@@ -24,14 +46,7 @@ function getJSXFromData(data: Map<string, Map<number, { [key: string]: string }>
<td className='pt-3 blue-column'> <td className='pt-3 blue-column'>
<ul className={noDots ? 'no-list-style-type' : ''}> <ul className={noDots ? 'no-list-style-type' : ''}>
{Array.from(Object.entries(yearData)).map(([text, key], index) => { {Array.from(Object.entries(yearData)).map(([text, key], index) => {
if (!keysAreURLs) { return getUrlOrString(keysAreURLs, style, index, key, text);
return (<li key={index}>
<span>{text}</span>
</li>)
}
return (<li key={index}>
<a href={addHttpIfMissing(key)} target="_blank" rel="noopener noreferrer" style={style}>{text}</a>
</li>)
})} })}
</ul> </ul>
</td> </td>
......
import React, { useContext } from 'react';
import { EOSCListing } from "../../Schema";
import { createDataLookupList, getTableData } from "../../helpers/dataconversion";
import DataPage from '../../components/DataPage';
import Filter from "../../components/graphing/Filter"
import { Sections } from '../../helpers/constants';
import { FilterSelectionContext } from '../../providers/FilterSelectionProvider';
import ChartContainer from "../../components/graphing/ChartContainer";
import { useData } from '../../helpers/useData';
import NrenYearTable from '../../components/NrenYearTable';
// The data for this page is not good quality, so it's unlisted for now.
function EOSCListingsPage() {
const { filterSelection, setFilterSelection } = useContext(FilterSelectionContext);
const { data, years, nrens } = useData<EOSCListing>('/api/eosc-listings', setFilterSelection);
const selectedData = data.filter(data =>
filterSelection.selectedYears.includes(data.year) && filterSelection.selectedNrens.includes(data.nren)
);
const dataset = createDataLookupList(selectedData);
const dataByYear = getTableData(dataset, (obj, EOSCListing) => {
for (const listing of EOSCListing) {
for (const serviceName of listing.service_names) {
obj[serviceName] = serviceName;
}
}
})
const filterNode = <Filter
filterOptions={{ availableYears: [...years], availableNrens: [...nrens.values()] }}
filterSelection={filterSelection}
setFilterSelection={setFilterSelection}
/>
const description = <span>
Some NRENs choose to list services on the EOSC portal, these can be seen in the table below.
Click on the name of the NREN to expand the detail and see the names of the services they list.
</span>
return (
<DataPage title="NREN Services Listed on the EOSC Portal"
description={description}
category={Sections.Policy} filter={filterNode}
data={selectedData} filename='nren_eosc_listings'>
<ChartContainer>
<NrenYearTable data={dataByYear} columnTitle="Service Name" dottedBorder keysAreURLs noDots />
</ChartContainer>
</DataPage>
);
}
export default EOSCListingsPage;
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment