From 5b69b8557edbbeb0dd27413818c33077ff63daf7 Mon Sep 17 00:00:00 2001
From: "saket.agrahari" <saket.agrahari@geant.org>
Date: Tue, 23 May 2023 19:44:48 +0100
Subject: [PATCH] COMP-184:Funding Source Issue

---
 webapp/src/Schema.tsx                   |  1 -
 webapp/src/components/ColorBadge.tsx    | 21 ++++++++++
 webapp/src/helpers/dataconversion.tsx   |  5 +--
 webapp/src/pages/FundingSource.tsx      | 55 ++++++++++++++++++++++++-
 webapp/src/scss/layout/_components.scss | 17 ++++++++
 5 files changed, 93 insertions(+), 6 deletions(-)
 create mode 100644 webapp/src/components/ColorBadge.tsx

diff --git a/webapp/src/Schema.tsx b/webapp/src/Schema.tsx
index 305a2a72..8f9f17f0 100644
--- a/webapp/src/Schema.tsx
+++ b/webapp/src/Schema.tsx
@@ -73,7 +73,6 @@ export interface FundingSourceDataset {
         label: string,
         data: number[],
         backgroundColor: string
-        borderRadius: number,
         borderSkipped: boolean,
         barPercentage: number,
         borderWidth: number,
diff --git a/webapp/src/components/ColorBadge.tsx b/webapp/src/components/ColorBadge.tsx
new file mode 100644
index 00000000..052d257c
--- /dev/null
+++ b/webapp/src/components/ColorBadge.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+function ColorBadge({ index: index, active=true }) {
+  return (
+    <div className="d-inline-block" key={index}>
+      {active ? (
+        <div
+          className={`color-of-badge-${index % 5}`}
+          style={{ width: "15px", height: "30px", margin: "2px" }}
+        ></div>
+      ) : (
+        <div
+          className={`color-of-badge-blank`}
+          style={{ width: "15px", height: "30px", margin: "2px" }}
+        ></div>
+      )}
+    </div>
+  );
+}
+
+export default ColorBadge;
\ No newline at end of file
diff --git a/webapp/src/helpers/dataconversion.tsx b/webapp/src/helpers/dataconversion.tsx
index c800c2ee..60550fcf 100644
--- a/webapp/src/helpers/dataconversion.tsx
+++ b/webapp/src/helpers/dataconversion.tsx
@@ -133,11 +133,10 @@ export const createFundingSourceDataset = (fundingSourcesData: FundingSource[])
                 }
                 return dataForYear.get(fundingSource) ?? 0
             }),
-            stack: year,
+            stack: year,         
             borderSkipped: true,
-            borderRadius: 10,
-            borderWidth: 0.5,
             barPercentage: 0.5,
+            borderWidth: 0.5,
             categoryPercentage: 0.8,
             hidden: false
 
diff --git a/webapp/src/pages/FundingSource.tsx b/webapp/src/pages/FundingSource.tsx
index e4809cab..310e37de 100644
--- a/webapp/src/pages/FundingSource.tsx
+++ b/webapp/src/pages/FundingSource.tsx
@@ -1,12 +1,15 @@
 import React, { useEffect, useMemo, useState } from 'react';
 import { Bar } from 'react-chartjs-2';
-import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend } from 'chart.js';
+import { Col, Container, Row, Table } from "react-bootstrap";
+import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, Chart } from 'chart.js';
 
 import { FundingSource, FilterSelection } from "../Schema";
 import { createFundingSourceDataset, getYearsAndNrens, loadDataWithFilterSelectionFallback } from "../helpers/dataconversion";
 import DataPage from '../components/DataPage';
 import Filter from "../components/graphing/Filter"
 import { Sections } from '../helpers/constants';
+import ColorPill from '../components/ColorPill';
+import ColorBadge from '../components/ColorBadge';
 
 ChartJS.defaults.font.size = 16;
 
@@ -20,6 +23,7 @@ ChartJS.register(
     Legend
 );
 
+
 export const chartOptions = {
     maintainAspectRatio: false,
     animation: {
@@ -28,10 +32,35 @@ export const chartOptions = {
     plugins: {
         legend: {
             display: false,
+            labels: {
+                boxWidth: 20,
+                boxHeight: 30,
+                pointStyle: "rectRounded",
+                borderRadius: 6,
+                useBorderRadius: true,
+
+                },
+            },
         },
-    },
     scales: {
         x: {
+            position: 'top' as const,
+            stacked: true,
+            ticks: {
+                callback: (value: string | number) => {
+                    if (typeof value === 'number') {
+                        return `${value}%`;
+                    }
+                    return value;
+                },
+            },
+            font: {
+                size: 29,
+                family: 'Roboto',
+                weight: 'bold',
+            }
+        },
+        x2: {
             stacked: true,
             ticks: {
                 callback: (value: string | number) => {
@@ -98,12 +127,34 @@ function FundingSourcePage({ filterSelection, setFilterSelection }: inputProps)
     const height = Math.max(numNrens * heightPerBar + (numYears * 2 * heightPerBar), 20);
     return (
         <DataPage title="Funding Source" category={Sections.Organisation} filter={filterNode}>
+            <div>
+        <Container className=" border border-dark chart-Legend">
+            <Row > 
+                <Col>
+                <ColorBadge key={0} index={0}/>
+                <span>CLIENT INSTITUTIONS</span></Col>
+                <Col>
+                <ColorBadge key={1} index={1}/>
+                <span>COMMERCIAL</span></Col>
+                <Col>
+                <ColorBadge key={2} index={2}/>
+                <span>EUROPEAN FUNDING</span></Col>
+                <Col>
+                <ColorBadge key={3} index={3}/>
+                <span>GOV/PUBLIC_BODIES</span></Col>
+                <Col>
+                <ColorBadge key={4} index={4}/>
+                <span>OTHER</span></Col>
+            </Row>
+        </Container>  
+
             <div className="chart-container" style={{ 'height': `${height}rem` }}>
                 <Bar
                     data={fundingSourceDataset}
                     options={chartOptions}
                 />
             </div>
+            </div>
         </DataPage>
     );
 }
diff --git a/webapp/src/scss/layout/_components.scss b/webapp/src/scss/layout/_components.scss
index b43c72fd..be754f7e 100644
--- a/webapp/src/scss/layout/_components.scss
+++ b/webapp/src/scss/layout/_components.scss
@@ -278,3 +278,20 @@ $year-colors: (
   margin-right: 2.8em;
   float: right;
 }
+
+$funding-source-colors: (
+  rgb(157, 40, 114),
+  rgb(241, 224, 79),
+  rgb(219, 42, 76),
+  rgb(237, 141, 24),
+  rgb(137, 166, 121)
+);
+@for $i from 0 to list.length($funding-source-colors) {
+  .color-of-badge-#{$i} {
+    background-color: #{list.nth($funding-source-colors, $i + 1)};
+  }
+}
+
+.color-of-badge-blank {
+  background-color: rgb(0, 0, 0, 0);
+}
\ No newline at end of file
-- 
GitLab