diff --git a/src/App.tsx b/src/App.tsx
index c56000d0086334d0d6c5a05d5bd16c33ec35dc98..10b22331bfafe4c9f6e3d6c56da28c8c2679d463 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -3,14 +3,17 @@ import {Redirect, Route, Switch} from 'react-router';
 import LandingPage from "./pages/landingPage/landingPage";
 import OverviewPage from "./pages/overviewPage/Overview";
 import { GlobalCommitContext } from './context/commitPageContext';
-import { useState } from 'react';
 import IssuePage from './pages/issuePage';
 import { CommitPage } from './pages/commitGraphPage/CommitPage';
 import { IssueGraphPage } from './pages/issueGraphPage/issueGraphPage';
 import CommitPageWrapper from "./pages/commitListPage/commitPageWrapper"
+import './i18n';
+import { useState } from 'react';
 
 function App() {
-    const [testContext, setTestContext] = useState<string>('Admin');    
+
+    const [language, setLanguage] = useState("no");
+
     return (
         <div className="App">
             <Switch>
@@ -36,7 +39,7 @@ function App() {
                     <CommitPageWrapper/>
                 </Route>
                 <Route exact path={"/commitgraph"}>
-                    <GlobalCommitContext.Provider value = {{testContext, setTestContext}}>
+                    <GlobalCommitContext.Provider value={{language: language, setLanguage: setLanguage}}>
                         <CommitPage />
                     </GlobalCommitContext.Provider>
                 </Route>
diff --git a/src/components/graphs/barChart/barChart.module.scss b/src/components/graphs/barChart/barChart.module.scss
index bf4555180dc3561f60260ee99fadd73de9f60800..d824909b8a44bd0dd1d4f8dfe7a1f84f9586758d 100644
--- a/src/components/graphs/barChart/barChart.module.scss
+++ b/src/components/graphs/barChart/barChart.module.scss
@@ -19,10 +19,16 @@
     justify-content: space-evenly;
 }
 
-// .datePickerContainer {
-//     display: flex;
-//     flex-direction: column;
-//     justify-content: space-evenly;
-//     height: 30%;
-//     width: 50%;
-// }
+.datePickerContainer {
+    display: flex;
+    flex-direction: row;
+    justify-content: space-evenly;
+    height: 30%;
+    width: 70%;
+}
+
+@media screen and (max-width: 500px) {
+    .datePickerContainer {
+        flex-direction: column;
+    }
+}
diff --git a/src/components/graphs/barChart/barChart.tsx b/src/components/graphs/barChart/barChart.tsx
index 91c3f3a240d42f6fa3fc541ace1fdda9c80aec34..19f8c946af166dd0693d942c177319ab3aebe4fd 100644
--- a/src/components/graphs/barChart/barChart.tsx
+++ b/src/components/graphs/barChart/barChart.tsx
@@ -8,6 +8,7 @@ import { ICommitsPerDay } from "../../../utils/victory/types";
 import { Commit, Issue } from '../../../utils/queryType';
 import { TextField } from "@mui/material";
 import { DatePicker } from "@mui/lab";
+import { useTranslation } from 'react-i18next';
 
 
 interface IBarChartProps {
@@ -22,6 +23,7 @@ export const BarChart = (props: IBarChartProps) => {
     const [currentData, setCurrentData] = useState<ICommitsPerDay[]>();
     const [dateIntervalStart, setStartDate]  = useState<Date>(new Date("2021-09-26"));
     const [dateIntervalEnd, setEndDate]  = useState<Date>(new Date("2021-10-03"));
+    const { t } = useTranslation();
 
     useEffect(() => {
         let commitsPerDay = getEntriesPerDayBarChartData(dateIntervalStart, dateIntervalEnd);
@@ -30,27 +32,29 @@ export const BarChart = (props: IBarChartProps) => {
 
     return (
           <div className={styles.container}>
-            <h2>{props.title}</h2>
+            <h2>{t(props.title)}</h2>
             <LocalizationProvider dateAdapter={AdapterDateFns}>
-                <div>
-                    <DatePicker
-                        label="Start date"
-                        value={dateIntervalStart}
-                        onChange={(newValue) => {
-                        setStartDate(newValue ?? new Date("2021-09-26"));
-                        }}
-                        renderInput={(params) => <TextField {...params} sx={{ marginBottom: "10px"}} />}
-                        />
-                </div>
-                <div>
-                    <DatePicker
-                        label="End date"
-                        value={dateIntervalEnd}
-                        onChange={(newValue) => {
-                        setEndDate(newValue ?? new Date());
-                        }}
-                        renderInput={(params) => <TextField {...params} />}
-                        />
+                <div className={styles.datePickerContainer}>
+                    <div>
+                        <DatePicker
+                            label={t("Start date")}
+                            value={dateIntervalStart}
+                            onChange={(newValue) => {
+                            setStartDate(newValue ?? new Date("2021-09-26"));
+                            }}
+                            renderInput={(params) => <TextField {...params} sx={{ marginBottom: "10px"}} />}
+                            />
+                    </div>
+                    <div>
+                        <DatePicker
+                            label={t("End date")}
+                            value={dateIntervalEnd}
+                            onChange={(newValue) => {
+                            setEndDate(newValue ?? new Date());
+                            }}
+                            renderInput={(params) => <TextField {...params} />}
+                            />
+                    </div>
                 </div>
             </LocalizationProvider>
             <div className={styles.wrapper}>
@@ -67,4 +71,4 @@ export const BarChart = (props: IBarChartProps) => {
           </div>
         </div>
     )
-}
\ No newline at end of file
+}
diff --git a/src/components/graphs/pieChart/pieChart.module.scss b/src/components/graphs/pieChart/pieChart.module.scss
index 57a7c89be6647264e7262e0a646eecbf46aafbf9..bf7c9091bf2e54e6b48e292871ad60ac927fec48 100644
--- a/src/components/graphs/pieChart/pieChart.module.scss
+++ b/src/components/graphs/pieChart/pieChart.module.scss
@@ -3,7 +3,7 @@
     display: flex;
     flex-direction: column;
     align-items: center;
-    width: 70%;
+    width: 60%;
 }
 
 @media only screen and (max-width: 500px){
diff --git a/src/components/graphs/pieChart/pieChart.tsx b/src/components/graphs/pieChart/pieChart.tsx
index 9123e42b76329724841b95f8223a1cf56429c4bb..f58f770060a551d55f639fe2554eb10a381f4fb0 100644
--- a/src/components/graphs/pieChart/pieChart.tsx
+++ b/src/components/graphs/pieChart/pieChart.tsx
@@ -4,6 +4,7 @@ import { Commit, Issue } from '../../../utils/queryType';
 import { useVictory } from '../../../utils/victory/useVictory';
 import styles from './pieChart.module.scss';
 import Switch from "react-switch";
+import { useTranslation } from 'react-i18next';
 
 interface IPieChartProps {
     data: Commit[] | Issue[],
@@ -16,6 +17,7 @@ export const PieChart = (props: IPieChartProps) => {
     const [selectedAnimals, setSelectedAnimals] = useState(
         getAnonAnimals().map(animal => { return {animal: animal, selected: true}}))
     const [currentData, setCurrentData] = useState(getEntriesPerMemberPieChartData(selectedAnimals));
+    const { t } = useTranslation();
 
     const changeSelectedAnimals = (animalToChange: string) => {
         setSelectedAnimals(prevState =>
@@ -31,7 +33,7 @@ export const PieChart = (props: IPieChartProps) => {
         let checkboxes = getAnonAnimals().map(animal => {
             return (
                 <div className={styles.checkboxContainer} key={animal}>
-                    <label>{animal}</label>
+                    <label>{t(animal)}</label>
                     <Switch
                         onColor="#fae7c2"
                         checked={selectedAnimals.find(sa => sa.animal === animal)?.selected ?? false}
@@ -49,7 +51,7 @@ export const PieChart = (props: IPieChartProps) => {
 
     return (
         <div className={styles.pieChartContainer}>
-            <h2>{props.title}</h2>
+            <h2>{t(props.title)}</h2>
             <div className={styles.inputContainer}>
                 {animalCheckboxes()}
             </div>
diff --git a/src/context/commitPageContext.tsx b/src/context/commitPageContext.tsx
index bd691636b7d57b80baf21b4c8e7447e68598825e..a15ae6ead9b61af89b330b4964178aceef5b54c3 100644
--- a/src/context/commitPageContext.tsx
+++ b/src/context/commitPageContext.tsx
@@ -1,10 +1,12 @@
-import { createContext, useContext } from "react"
+import { createContext, Dispatch, SetStateAction, useContext } from "react"
+import '../i18n';
 export type GlobalGraphCommit = {
-  testContext: string
-  setTestContext:(c: string) => void
+  language: string,
+  setLanguage: Dispatch<SetStateAction<string>>,
 }
+
 export const GlobalCommitContext = createContext<GlobalGraphCommit>({
-testContext: 'Hello World',
-setTestContext: () => {},
-})
-export const useCommitContext = () => useContext(GlobalCommitContext)
\ No newline at end of file
+  language: "no",
+  setLanguage: () => {},
+});
+export const useCommitContext = () => useContext(GlobalCommitContext)
diff --git a/src/context/issuePageContext.tsx b/src/context/issuePageContext.tsx
deleted file mode 100644
index 593b52394027484b478556330bdb01099b8db0a4..0000000000000000000000000000000000000000
--- a/src/context/issuePageContext.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { createContext, useContext } from "react"
-export type GlobalGraphIssue = {
-  testContext: string
-  setTestContext:(c: string) => void
-}
-export const GlobalIssueContext = createContext<GlobalGraphIssue>({
-testContext: 'Hello World',
-setTestContext: () => {},
-})
-export const useIssueContext = () => useContext(GlobalIssueContext)
\ No newline at end of file
diff --git a/src/i18n.ts b/src/i18n.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c799fe19fa135443a09d82c1a57001e3fc8296ff
--- /dev/null
+++ b/src/i18n.ts
@@ -0,0 +1,55 @@
+// Source: https://react.i18next.com/guides/quick-start
+
+import i18n from "i18next";
+import { initReactI18next } from "react-i18next";
+
+// the translations
+// (tip move them in a JSON file and import them,
+// or even better, manage them separated from your code: https://react.i18next.com/guides/multiple-translation-files)
+const resources = {
+  en: {
+    translation: {
+      "Charts for issues": "Charts for issues",
+      "Charts for commits": "Charts for commits",
+      "Start date": "Start date",
+      "End date": "End date",
+      "Commits per day": "Commits per day",
+      "Commits per member": "Commits per member",
+      "Issues authored per member": "Issues authored by each member",
+      "Tiger": "Tiger",
+      "Lion": "Lion",
+      "Giraffe": "Giraffe",
+      "Rhino": "Rhino",
+    }
+  },
+  no: {
+    translation: {
+      "Charts for issues": "Diagrammer for issues",
+      "Charts for commits": "Diagrammer for commits",
+      "Start date": "Startdato",
+      "End date": "Sluttdato",
+      "Commits per day": "Commits per dag",
+      "Commits per member": "Commits per medlem",
+      "Issues authored per member": "Issues laget av hvert medlem",
+      "Tiger": "Tiger",
+      "Lion": "Løve",
+      "Giraffe": "Sjiraff",
+      "Rhino": "Nesehorn",
+    }
+  }
+};
+
+i18n
+  .use(initReactI18next) // passes i18n down to react-i18next
+  .init({
+    resources,
+    lng: "en", // language to use, more information here: https://www.i18next.com/overview/configuration-options#languages-namespaces-resources
+    // you can use the i18n.changeLanguage function to change the language manually: https://www.i18next.com/overview/api#changelanguage
+    // if you're using a language detector, do not define the lng option
+
+    interpolation: {
+      escapeValue: false // react already safes from xss
+    }
+  });
+
+  export default i18n;
\ No newline at end of file
diff --git a/src/index.css b/src/index.css
index 0d21890166ccb38bac7545b07857681029bfc474..cad26d1a7b85f7080418b942468d67be70c6b2fb 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,6 +1,6 @@
 body {
   margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+  font-family: "Roboto", BlinkMacSystemFont, 'Segoe UI', 'Oxygen',
     'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
     sans-serif;
   -webkit-font-smoothing: antialiased;
diff --git a/src/pages/commitGraphPage/CommitPage.module.scss b/src/pages/commitGraphPage/CommitPage.module.scss
index 064930c4ba585392aa47cd7eeaa99ed4d9cb152f..c26a632badab6b36de71366e5a312ed70006fc4f 100644
--- a/src/pages/commitGraphPage/CommitPage.module.scss
+++ b/src/pages/commitGraphPage/CommitPage.module.scss
@@ -8,3 +8,21 @@
     width: 80%;
     margin-left: 10%;
 }
+
+.header {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    width: 100%;
+}
+
+.button {
+    background: #F5CA7B;
+    border-radius: 5px;
+    border: none;
+    width: 3.5rem;
+    height: 3.5rem;
+    font-size: 2rem;
+    position: relative;
+    left: 20%;
+}
diff --git a/src/pages/commitGraphPage/CommitPage.tsx b/src/pages/commitGraphPage/CommitPage.tsx
index f05eb4689f36ed50a22adc005134de23d071ec42..7406d818b2680b851a2a19c6e2f7d54ece834a32 100644
--- a/src/pages/commitGraphPage/CommitPage.tsx
+++ b/src/pages/commitGraphPage/CommitPage.tsx
@@ -6,9 +6,19 @@ import styles from './CommitPage.module.scss';
 import { queryTypes, Commit } from '../../utils/queryType'
 import "react-loader-spinner/dist/loader/css/react-spinner-loader.css";
 import Loader from "react-loader-spinner";
+import { useCommitContext } from '../../context/commitPageContext';
+import { useEffect } from 'react';
+import { useTranslation } from 'react-i18next';
 
 export const CommitPage = () => {
-    const commitData = useGitlabApi(queryTypes.AllCommits);
+    const commitData = useGitlabApi(queryTypes.AllCommitsWithoutPagination);
+    const { t, i18n } = useTranslation();
+    const context = useCommitContext();
+    
+    useEffect(() => {
+        i18n.changeLanguage(context.language)
+    }, [context.language])
+
 
     if (commitData.isLoading) {
         return (
@@ -24,9 +34,16 @@ export const CommitPage = () => {
 
     return (
         <div className={styles.pageContainer}>
-            <h1>Charts for issues</h1>
+            <div className={styles.header}>
+                <h1>{t("Charts for issues")}</h1>
+                <button
+                    className={styles.button}
+                    onClick={() => context.setLanguage(context.language === "no" ? "en" : "no")}>
+                    {context.language}
+                </button>
+            </div>
             <BarChart data={commitData.data as Commit[]} title="Commits per day"/>
             <PieChart data={commitData.data as Commit[]} title={"Commits per member"}/>
         </div>
     )
-}
\ No newline at end of file
+}
diff --git a/src/utils/queryType.ts b/src/utils/queryType.ts
index 06d7cc5ce68dc5ff8e99b37cbc114bb6c6de4f3e..e531aa103b65998215f07918cd5d38ca1ec0a609 100644
--- a/src/utils/queryType.ts
+++ b/src/utils/queryType.ts
@@ -6,7 +6,7 @@ export enum queryTypes {
     Languages = "languages",  
     Access="access_requests",
     AllIssuesWithoutPagination = "issues/?scope=all",
-    AllCommitsWithoutPagination = "commits/?scope=all",
+    AllCommitsWithoutPagination = "repository/commits/?per_page=1000",
 }
 
 export type User = {
diff --git a/src/utils/victory/useVictory.tsx b/src/utils/victory/useVictory.tsx
index dcfb40b618d3e7033bdbd142ead70b87bb219b06..e2cf7e449fb12d3a6bc1a7c62037cac316e7bfdb 100644
--- a/src/utils/victory/useVictory.tsx
+++ b/src/utils/victory/useVictory.tsx
@@ -62,16 +62,21 @@ export const useVictory = (initData: Commit[] | Issue[]) => {
         return { anonData, animals };
     }
 
-    function getEntriesPerDayBarChartData(startDate: Date, endDate: Date) : ICommitsPerDay[]{
+    function getEntriesPerDayBarChartData(startDateInput: Date, endDateInput: Date) : ICommitsPerDay[]{
         let commitsPerDayData = []
         let anon = anonymizeData(initData);
 
-        startDate = startDate ?? new Date();
-        endDate = endDate ?? new Date();
+        let startDate = new Date(startDateInput);
+        let endDate = new Date(endDateInput);
 
         for (let day = startDate; day <= endDate; day.setDate(day.getDate() + 1)) {
-            let amount: number = anon.anonData.filter(entry => entry.date.getDate() === day.getDate()).length;
-            commitsPerDayData.push({ date: `${day.getDate()}.${day.getMonth()}`, amount: amount});
+            anon.anonData.forEach(entry => {
+                console.log(entry)
+            })
+            let amount: number = anon.anonData.filter(entry =>
+                entry.date.getMonth() === day.getMonth() && entry.date.getDate() === day.getDate()
+                ).length;
+            commitsPerDayData.push({ date: `${day.getDate()}.${day.getMonth() + 1}`, amount: amount});
         }
         return commitsPerDayData;
     };
diff --git a/yarn.lock b/yarn.lock
index 90e8a46d0addbf11d8be2b2b4e970dd23239db95..2313b8fc9e7c68c6da3a45a9b3f095d47f8046f7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1967,6 +1967,221 @@
   dependencies:
     "@babel/types" "^7.3.0"
 
+"@types/canvasjs@^1.9.7":
+  version "1.9.7"
+  resolved "https://registry.yarnpkg.com/@types/canvasjs/-/canvasjs-1.9.7.tgz#bbb3042cea23c577a4d5f72e97f00619ac5b7d22"
+  integrity sha512-/CfA3VtyTYVXDHvMy8F5hsvRUTiBX7TGe+nAHNONoJlNHbqakeIzxxt1MSNH619s8Oiu4CcFBMmJVg50El/0lw==
+
+"@types/d3-array@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.0.1.tgz#0ff28ee7052a2e504cb951d17df7437c33d442d6"
+  integrity sha512-D/G7oG0czeszALrkdUiV68CDiHDxXf+M2mLVqAyKktGd12VKQQljj1sHJGBKjcK4jRH1biBd6ZPQPHpJ0mNa0w==
+
+"@types/d3-axis@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.1.tgz#6afc20744fa5cc0cbc3e2bd367b140a79ed3e7a8"
+  integrity sha512-zji/iIbdd49g9WN0aIsGcwcTBUkgLsCSwB+uH+LPVDAiKWENMtI3cJEWt+7/YYwelMoZmbBfzA3qCdrZ2XFNnw==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-brush@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.1.tgz#ae5f17ce391935ca88b29000e60ee20452c6357c"
+  integrity sha512-B532DozsiTuQMHu2YChdZU0qsFJSio3Q6jmBYGYNp3gMDzBmuFFgPt9qKA4VYuLZMp4qc6eX7IUFUEsvHiXZAw==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-chord@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.1.tgz#54c8856c19c8e4ab36a53f73ba737de4768ad248"
+  integrity sha512-eQfcxIHrg7V++W8Qxn6QkqBNBokyhdWSAS73AbkbMzvLQmVVBviknoz2SRS/ZJdIOmhcmmdCRE/NFOm28Z1AMw==
+
+"@types/d3-color@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.0.2.tgz#53f2d6325f66ee79afd707c05ac849e8ae0edbb0"
+  integrity sha512-WVx6zBiz4sWlboCy7TCgjeyHpNjMsoF36yaagny1uXfbadc9f+5BeBf7U+lRmQqY3EHbGQpP8UdW8AC+cywSwQ==
+
+"@types/d3-contour@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.1.tgz#9ff4e2fd2a3910de9c5097270a7da8a6ef240017"
+  integrity sha512-C3zfBrhHZvrpAAK3YXqLWVAGo87A4SvJ83Q/zVJ8rFWJdKejUnDYaWZPkA8K84kb2vDA/g90LTQAz7etXcgoQQ==
+  dependencies:
+    "@types/d3-array" "*"
+    "@types/geojson" "*"
+
+"@types/d3-delaunay@*":
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.0.tgz#c09953ac7e5460997f693d2d7bf3522e0d4a88e6"
+  integrity sha512-iGm7ZaGLq11RK3e69VeMM6Oqj2SjKUB9Qhcyd1zIcqn2uE8w9GFB445yCY46NOQO3ByaNyktX1DK+Etz7ZaX+w==
+
+"@types/d3-dispatch@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.1.tgz#a1b18ae5fa055a6734cb3bd3cbc6260ef19676e3"
+  integrity sha512-NhxMn3bAkqhjoxabVJWKryhnZXXYYVQxaBnbANu0O94+O/nX9qSjrA1P1jbAQJxJf+VC72TxDX/YJcKue5bRqw==
+
+"@types/d3-drag@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.1.tgz#fb1e3d5cceeee4d913caa59dedf55c94cb66e80f"
+  integrity sha512-o1Va7bLwwk6h03+nSM8dpaGEYnoIG19P0lKqlic8Un36ymh9NSkNFX1yiXMKNMx8rJ0Kfnn2eovuFaL6Jvj0zA==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-dsv@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.0.tgz#f3c61fb117bd493ec0e814856feb804a14cfc311"
+  integrity sha512-o0/7RlMl9p5n6FQDptuJVMxDf/7EDEv2SYEO/CwdG2tr1hTfUVi0Iavkk2ax+VpaQ/1jVhpnj5rq1nj8vwhn2A==
+
+"@types/d3-ease@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.0.tgz#c29926f8b596f9dadaeca062a32a45365681eae0"
+  integrity sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==
+
+"@types/d3-fetch@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.1.tgz#f9fa88b81aa2eea5814f11aec82ecfddbd0b8fe0"
+  integrity sha512-toZJNOwrOIqz7Oh6Q7l2zkaNfXkfR7mFSJvGvlD/Ciq/+SQ39d5gynHJZ/0fjt83ec3WL7+u3ssqIijQtBISsw==
+  dependencies:
+    "@types/d3-dsv" "*"
+
+"@types/d3-force@*":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.3.tgz#76cb20d04ae798afede1ea6e41750763ff5a9c82"
+  integrity sha512-z8GteGVfkWJMKsx6hwC3SiTSLspL98VNpmvLpEFJQpZPq6xpA1I8HNBDNSpukfK0Vb0l64zGFhzunLgEAcBWSA==
+
+"@types/d3-format@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.1.tgz#194f1317a499edd7e58766f96735bdc0216bb89d"
+  integrity sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg==
+
+"@types/d3-geo@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.0.2.tgz#e7ec5f484c159b2c404c42d260e6d99d99f45d9a"
+  integrity sha512-DbqK7MLYA8LpyHQfv6Klz0426bQEf7bRTvhMy44sNGVyZoWn//B0c+Qbeg8Osi2Obdc9BLLXYAKpyWege2/7LQ==
+  dependencies:
+    "@types/geojson" "*"
+
+"@types/d3-hierarchy@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.0.2.tgz#ca63f2f4da15b8f129c5b7dffd71d904cba6aca2"
+  integrity sha512-+krnrWOZ+aQB6v+E+jEkmkAx9HvsNAD+1LCD0vlBY3t+HwjKnsBFbpVLx6WWzDzCIuiTWdAxXMEnGnVXpB09qQ==
+
+"@types/d3-interpolate@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz#e7d17fa4a5830ad56fe22ce3b4fac8541a9572dc"
+  integrity sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==
+  dependencies:
+    "@types/d3-color" "*"
+
+"@types/d3-path@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.0.0.tgz#939e3a784ae4f80b1fde8098b91af1776ff1312b"
+  integrity sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==
+
+"@types/d3-polygon@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.0.tgz#5200a3fa793d7736fa104285fa19b0dbc2424b93"
+  integrity sha512-D49z4DyzTKXM0sGKVqiTDTYr+DHg/uxsiWDAkNrwXYuiZVd9o9wXZIo+YsHkifOiyBkmSWlEngHCQme54/hnHw==
+
+"@types/d3-quadtree@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.2.tgz#433112a178eb7df123aab2ce11c67f51cafe8ff5"
+  integrity sha512-QNcK8Jguvc8lU+4OfeNx+qnVy7c0VrDJ+CCVFS9srBo2GL9Y18CnIxBdTF3v38flrGy5s1YggcoAiu6s4fLQIw==
+
+"@types/d3-random@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.1.tgz#5c8d42b36cd4c80b92e5626a252f994ca6bfc953"
+  integrity sha512-IIE6YTekGczpLYo/HehAy3JGF1ty7+usI97LqraNa8IiDur+L44d0VOjAvFQWJVdZOJHukUJw+ZdZBlgeUsHOQ==
+
+"@types/d3-scale-chromatic@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#103124777e8cdec85b20b51fd3397c682ee1e954"
+  integrity sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==
+
+"@types/d3-scale@*":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.1.tgz#fbe8238e2eff27af577d2b7d0b933ae50a546970"
+  integrity sha512-GDuXcRcR6mKcpUVMhPNttpOzHi2dP6YcDqLZYSZHgwTZ+sfCa8e9q0VEBwZomblAPNMYpVqxojnSyIEb4s/Pwg==
+  dependencies:
+    "@types/d3-time" "*"
+
+"@types/d3-selection@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.1.tgz#e57b01ab69b18b380f68db97b76ceefe62f17191"
+  integrity sha512-aJ1d1SCUtERHH65bB8NNoLpUOI3z8kVcfg2BGm4rMMUwuZF4x6qnIEKjT60Vt0o7gP/a/xkRVs4D9CpDifbyRA==
+
+"@types/d3-shape@*":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.0.2.tgz#4b1ca4ddaac294e76b712429726d40365cd1e8ca"
+  integrity sha512-5+ButCmIfNX8id5seZ7jKj3igdcxx+S9IDBiT35fQGTLZUfkFgTv+oBH34xgeoWDKpWcMITSzBILWQtBoN5Piw==
+  dependencies:
+    "@types/d3-path" "*"
+
+"@types/d3-time-format@*":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.0.tgz#ee7b6e798f8deb2d9640675f8811d0253aaa1946"
+  integrity sha512-yjfBUe6DJBsDin2BMIulhSHmr5qNR5Pxs17+oW4DoVPyVIXZ+m6bs7j1UVKP08Emv6jRmYrYqxYzO63mQxy1rw==
+
+"@types/d3-time@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.0.tgz#e1ac0f3e9e195135361fa1a1d62f795d87e6e819"
+  integrity sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==
+
+"@types/d3-timer@*":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.0.tgz#e2505f1c21ec08bda8915238e397fb71d2fc54ce"
+  integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==
+
+"@types/d3-transition@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.1.tgz#c9a96125567173d6163a6985b874f79154f4cc3d"
+  integrity sha512-Sv4qEI9uq3bnZwlOANvYK853zvpdKEm1yz9rcc8ZTsxvRklcs9Fx4YFuGA3gXoQN/c/1T6QkVNjhaRO/cWj94g==
+  dependencies:
+    "@types/d3-selection" "*"
+
+"@types/d3-zoom@*":
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.1.tgz#4bfc7e29625c4f79df38e2c36de52ec3e9faf826"
+  integrity sha512-7s5L9TjfqIYQmQQEUcpMAcBOahem7TRoSO/+Gkz02GbMVuULiZzjF2BOdw291dbO2aNon4m2OdFsRGaCq2caLQ==
+  dependencies:
+    "@types/d3-interpolate" "*"
+    "@types/d3-selection" "*"
+
+"@types/d3@^7.0.0":
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.0.0.tgz#d102ec6ea5741e51a1ff7b8228850db0665ccd27"
+  integrity sha512-7rMMuS5unvbvFCJXAkQXIxWTo2OUlmVXN5q7sfQFesuVICY55PSP6hhbUhWjTTNpfTTB3iLALsIYDFe7KUNABw==
+  dependencies:
+    "@types/d3-array" "*"
+    "@types/d3-axis" "*"
+    "@types/d3-brush" "*"
+    "@types/d3-chord" "*"
+    "@types/d3-color" "*"
+    "@types/d3-contour" "*"
+    "@types/d3-delaunay" "*"
+    "@types/d3-dispatch" "*"
+    "@types/d3-drag" "*"
+    "@types/d3-dsv" "*"
+    "@types/d3-ease" "*"
+    "@types/d3-fetch" "*"
+    "@types/d3-force" "*"
+    "@types/d3-format" "*"
+    "@types/d3-geo" "*"
+    "@types/d3-hierarchy" "*"
+    "@types/d3-interpolate" "*"
+    "@types/d3-path" "*"
+    "@types/d3-polygon" "*"
+    "@types/d3-quadtree" "*"
+    "@types/d3-random" "*"
+    "@types/d3-scale" "*"
+    "@types/d3-scale-chromatic" "*"
+    "@types/d3-selection" "*"
+    "@types/d3-shape" "*"
+    "@types/d3-time" "*"
+    "@types/d3-time-format" "*"
+    "@types/d3-timer" "*"
+    "@types/d3-transition" "*"
+    "@types/d3-zoom" "*"
+
 "@types/eslint@^7.2.6":
   version "7.2.6"
   resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz"
@@ -1985,6 +2200,11 @@
   resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz"
   integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
 
+"@types/geojson@*":
+  version "7946.0.8"
+  resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca"
+  integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==
+
 "@types/glob@^7.1.1":
   version "7.1.3"
   resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz"
@@ -2194,6 +2414,13 @@
   dependencies:
     source-map "^0.6.1"
 
+"@types/victory@^33.1.5":
+  version "33.1.5"
+  resolved "https://registry.yarnpkg.com/@types/victory/-/victory-33.1.5.tgz#de1ee8ddc685582b9e394baff03606f87d627d4b"
+  integrity sha512-Lpi1kAlZ4+gY7oH3tRcmJs4YhTIJTTJxkQkyYTK7CtTHl+S6Xf7E7e207eq6D/Dn9UQAB7PCrNrzTGtO5+9GGQ==
+  dependencies:
+    "@types/react" "*"
+
 "@types/webpack-sources@*":
   version "2.1.0"
   resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz"
@@ -3467,6 +3694,16 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, can
   resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001191.tgz"
   integrity sha512-xJJqzyd+7GCJXkcoBiQ1GuxEiOBCLQ0aVW9HMekifZsAVGdj5eJ4mFB9fEhSHipq9IOk/QXFJUiIr9lZT+EsGw==
 
+canvasjs-react-charts@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/canvasjs-react-charts/-/canvasjs-react-charts-1.0.5.tgz#bdcc06f7bd50a24f69cca9615dafabc0a2a7b063"
+  integrity sha512-8P3KnAvCqftmqf4O/xG6PlIDcTr0IvzuE4l6ACXIOROKtFmnmUu/xPEeq+0vI9Xvh7zXjzZvRqw0p1uxXr034g==
+
+canvasjs@^1.8.3:
+  version "1.8.3"
+  resolved "https://registry.yarnpkg.com/canvasjs/-/canvasjs-1.8.3.tgz#181a526bbce09c1909431d9471f808494fe970cf"
+  integrity sha512-60eUT0VjqRgYqdIQcOkXg0Zptfbl4HefA/O51YEf1m/P0uXvE3icI/1KPrXpY9aVxn8gG/BB8DzVoTGCcyBnYg==
+
 capture-exit@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz"
@@ -3756,6 +3993,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
   dependencies:
     delayed-stream "~1.0.0"
 
+commander@7:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
 commander@^2.20.0:
   version "2.20.3"
   resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
@@ -6228,6 +6470,13 @@ iconv-lite@0.4.24:
   dependencies:
     safer-buffer ">= 2.1.2 < 3"
 
+iconv-lite@0.6:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
 icss-utils@^4.0.0, icss-utils@^4.1.1:
   version "4.1.1"
   resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz"
@@ -6378,6 +6627,11 @@ internal-slot@^1.0.3:
     has "^1.0.3"
     side-channel "^1.0.4"
 
+"internmap@1 - 2":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
+  integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+
 ip-regex@^2.1.0:
   version "2.1.0"
   resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz"
@@ -10351,6 +10605,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
     hash-base "^3.0.0"
     inherits "^2.0.1"
 
+robust-predicates@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a"
+  integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==
+
 rollup-plugin-babel@^4.3.3:
   version "4.4.0"
   resolved "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz"
@@ -10405,6 +10664,11 @@ run-queue@^1.0.0, run-queue@^1.0.3:
   dependencies:
     aproba "^1.1.1"
 
+rw@1:
+  version "1.3.3"
+  resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+  integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
+
 safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
@@ -10422,7 +10686,7 @@ safe-regex@^1.1.0:
   dependencies:
     ret "~0.1.10"
 
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
   version "2.1.2"
   resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==