Skip to content
Snippets Groups Projects
Select Git revision
  • 2ec8eb293a1d4dfa2806e494b154711dddc41b20
  • develop default
  • master protected
  • feature/frontend-tests
  • 0.99
  • 0.98
  • 0.97
  • 0.96
  • 0.95
  • 0.94
  • 0.93
  • 0.92
  • 0.91
  • 0.90
  • 0.89
  • 0.88
  • 0.87
  • 0.86
  • 0.85
  • 0.84
  • 0.83
  • 0.82
  • 0.81
  • 0.80
24 results

survey.py

Blame
  • Policy.tsx 3.63 KiB
    import React, { useEffect, useMemo, useState } from 'react';
    import { Table } from "react-bootstrap";
    
    import { Policy, FilterSelection } from "../Schema";
    import { createPolicyDataLookup, getYearsAndNrens, loadDataWithFilterSelectionFallback } from '../helpers/dataconversion';
    import DataPage from '../components/DataPage';
    import Filter from "../components/graphing/Filter"
    import { Sections } from '../helpers/constants';
    
    interface inputProps {
        filterSelection: FilterSelection
        setFilterSelection: React.Dispatch<React.SetStateAction<FilterSelection>>
    }
    
    function getJSXFromMap(data: Map<string, Map<number, Policy>>) {
        const policies = [
            ['acceptable_use', 'Acceptable Use Policy'],
            ['connectivity', 'Connectivity Policy'],
            ['data_protection', 'Data Protection Policy'],
            ['environmental', 'Environmental Policy'],
            ['equal_opportunity', 'Equal Opportunity Policy'],
            ['privacy_notice', 'Privacy Notice'],
            ['strategic_plan', 'Strategic Plan']
        ];
    
        return Array.from(data.entries()).map(([nren, nrenMap]) => {
            return Array.from(nrenMap.entries()).map(([year, policy], yearIndex) => (
                <tr key={nren + year} className='dotted-border'>
                    <td className='pt-3 nren-column text-nowrap'>{yearIndex == 0 && nren}</td>
                    <td className='pt-3 year-column'>{year}</td>
                    <td className='pt-3 blue-column'>
                        <ul>
                            {policies.map(([key, text]) => (
                                !!policy[key] && (
                                    <li key={key}>
                                        <a href={policy[key]} target="_blank" rel="noopener noreferrer" style={{ textDecoration: 'none' }}>
                                            {text}
                                        </a>
                                    </li>
                                )
                            ))}
                        </ul>
                    </td>
                </tr>
            ))
        })
    }
    
    function PolicyPage({ filterSelection, setFilterSelection }: inputProps) {
        const [policyData, setProjectData] = useState<Policy[]>([]);
    
        const { years, nrens } = useMemo(
            () => getYearsAndNrens(policyData),
            [policyData]
        );
    
        const selectedData = (policyData).filter(project =>
            filterSelection.selectedYears.includes(project.year) && filterSelection.selectedNrens.includes(project.nren)
        );
        const policyDataByYear = createPolicyDataLookup(selectedData);
    
        useEffect(() => {
            loadDataWithFilterSelectionFallback('/api/policy/', setProjectData, setFilterSelection);
        }, [setFilterSelection]);
    
        const filterNode = <Filter
            filterOptions={{ availableYears: [...years], availableNrens: [...nrens.values()] }}
            filterSelection={filterSelection}
            setFilterSelection={setFilterSelection}
        />
    
        return (
            <DataPage title="NREN Policies" 
            description='The table shows the NRENs policies. By selecting multiple year and NRENs, 
            the table can be used to compare the NRENs policies over years of selected NRENs.'
            category={Sections.Policy} filter={filterNode}>
                <Table borderless className='compendium-table'>
                    <thead>
                        <tr>
                            <th className='nren-column'>NREN</th>
                            <th className='year-column'>Year</th>
                            <th className='blue-column'>Policies</th>
                        </tr>
                    </thead>
                    <tbody>
                        {getJSXFromMap(policyDataByYear)}
                    </tbody>
                </Table>
            </DataPage>
        )
    }
    export default PolicyPage;