From 87a62c98d7a1514a8ae9b16d589a80a4e765b033 Mon Sep 17 00:00:00 2001
From: Skander Hatira <skander.hatira@inrae.fr>
Date: Thu, 25 Feb 2021 06:46:28 +0100
Subject: [PATCH] clean repo for showcase and lightweight version with remote
 mongodb

---
 hooks.js                                      |  20 +-
 package.json                                  |   1 +
 src/backend/config/keys.js                    |   4 +-
 .../NotFoundHeader/NotFoundHeader.js          |  33 +++
 src/components/NotFoundHeader/index.js        |  23 --
 src/components/Tableau/Chart.js               |  52 +----
 src/components/Tableau/DashLayout.js          |   6 +-
 src/components/Tableau/Default.js             |  16 +-
 src/components/Tableau/listItems.js           |   6 +-
 src/dummy/multiqc_data.js                     | 204 ++++++++++++++++++
 src/main.js                                   |  36 ++--
 src/pages/NotFound/index.js                   |   2 +-
 test.js                                       |   4 +
 webpack.main.config.js                        |   8 +-
 yarn.lock                                     |  35 +++
 15 files changed, 328 insertions(+), 122 deletions(-)
 create mode 100644 src/components/NotFoundHeader/NotFoundHeader.js
 delete mode 100644 src/components/NotFoundHeader/index.js
 create mode 100644 src/dummy/multiqc_data.js
 create mode 100644 test.js

diff --git a/hooks.js b/hooks.js
index 5979b12..67a6c8c 100644
--- a/hooks.js
+++ b/hooks.js
@@ -4,17 +4,17 @@ const chmodr = require("chmodr");
 const path = require("path");
 
 module.exports = {
-  postStart: async (forgeConfig, options) => {
-    const resources = path.join(__dirname, ".webpack/main/resources");
+  // postStart: async (forgeConfig, options) => {
+  //   const resources = path.join(__dirname, ".webpack/main/resources");
 
-    chmodr(resources, 0o777, (err) => {
-      if (err) {
-        console.log("Failed to execute chmod", err);
-      } else {
-        console.log("Success");
-      }
-    });
-  },
+  //   chmodr(resources, 0o777, (err) => {
+  //     if (err) {
+  //       console.log("Failed to execute chmod", err);
+  //     } else {
+  //       console.log("Success");
+  //     }
+  //   });
+  // },
 
   postPackage: async (forgeConfig, options) => {
     const resources = path.join(
diff --git a/package.json b/package.json
index dc156fd..4ec13d0 100644
--- a/package.json
+++ b/package.json
@@ -78,6 +78,7 @@
     "node-loader": "^1.0.1",
     "nodemon": "^2.0.7",
     "react-hot-loader": "^4.13.0",
+    "react-json-to-table": "^0.1.7",
     "style-loader": "^1.2.1",
     "wait-on": "^5.2.1"
   },
diff --git a/src/backend/config/keys.js b/src/backend/config/keys.js
index d2a5c19..ed74f99 100644
--- a/src/backend/config/keys.js
+++ b/src/backend/config/keys.js
@@ -1,6 +1,8 @@
 module.exports = {
     PORT: "5000",
-    DATABASE: "mongodb://localhost/bissprop-db",
+    DATABASE:
+        "mongodb+srv://skan:skan123@mern.fcmll.mongodb.net/<dbname>?retryWrites=true&w=majority",
     // "mongodb+srv://skan:skan123@mern.fcmll.mongodb.net/<dbname>?retryWrites=true&w=majority",
+    //  "mongodb://localhost/bissprop-db"
     SECRET: "secret",
 };
diff --git a/src/components/NotFoundHeader/NotFoundHeader.js b/src/components/NotFoundHeader/NotFoundHeader.js
new file mode 100644
index 0000000..09ad7f3
--- /dev/null
+++ b/src/components/NotFoundHeader/NotFoundHeader.js
@@ -0,0 +1,33 @@
+import { Link } from "react-router-dom";
+import React from "react";
+import { useAuth } from "../../hooks/useAuth";
+
+const NotFoundHeader = () => {
+  const auth = useAuth();
+  return (
+    <div>
+      {auth.user.isAuthenticated && auth.user.isAuthenticated ? (
+        <div className="d-lg-flex">
+          <div className="container  d-lg-flex pt-3 align-items-lg-center min-height-lg-100vh space-bottom-4 ">
+            <div className="not-found-404">404</div>
+            <div className="">
+              <h1 className="text-primary font-weight-normal">
+                Oops! Vous semblez perdu,
+              </h1>
+              <p className="h3">Allons retrouver votre cap</p>
+              <Link
+                className="btn btn-primary btn-wide transition-3d-hover"
+                to="/"
+              >
+                Naviguer
+              </Link>
+            </div>
+          </div>
+        </div>
+      ) : (
+        ""
+      )}
+    </div>
+  );
+};
+export default NotFoundHeader;
diff --git a/src/components/NotFoundHeader/index.js b/src/components/NotFoundHeader/index.js
deleted file mode 100644
index 2471323..0000000
--- a/src/components/NotFoundHeader/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Link } from 'react-router-dom';
-import React from 'react';
-
-const NotFoundHeader = () => {
-  return (
-    <div className="d-lg-flex">
-      <div className="container  d-lg-flex pt-3 align-items-lg-center min-height-lg-100vh space-bottom-4 ">
-        <div className="not-found-404">404</div>
-        <div className="">
-          <h1 className="text-primary font-weight-normal">
-            Oops! Vous semblez perdu,
-          </h1>
-          <p className="h3">Allons retrouver votre cap</p>
-          <Link className="btn btn-primary btn-wide transition-3d-hover" to="/">
-            Naviguer
-          </Link>
-        </div>
-      </div>
-    </div>
-  );
-};
-
-export default NotFoundHeader;
diff --git a/src/components/Tableau/Chart.js b/src/components/Tableau/Chart.js
index 6117863..f76e486 100644
--- a/src/components/Tableau/Chart.js
+++ b/src/components/Tableau/Chart.js
@@ -1,5 +1,8 @@
 import React from "react";
+import dummy from "../../dummy/multiqc_data";
 import { useTheme } from "@material-ui/core/styles";
+import { JsonToTable } from "react-json-to-table";
+
 import {
   LineChart,
   Line,
@@ -11,56 +14,9 @@ import {
 import Title from "./Title";
 
 // Generate Sales Data
-function createData(time, amount) {
-  return { time, amount };
-}
-
-const data = [
-  createData("00:00", 0),
-  createData("03:00", 300),
-  createData("06:00", 600),
-  createData("09:00", 800),
-  createData("12:00", 1500),
-  createData("15:00", 2000),
-  createData("18:00", 2400),
-  createData("21:00", 2400),
-  createData("24:00", undefined),
-];
 
 export default function Chart() {
   const theme = useTheme();
 
-  return (
-    <React.Fragment>
-      <Title>Today</Title>
-      <ResponsiveContainer>
-        <LineChart
-          data={data}
-          margin={{
-            top: 16,
-            right: 16,
-            bottom: 0,
-            left: 24,
-          }}
-        >
-          <XAxis dataKey="time" stroke={theme.palette.text.secondary} />
-          <YAxis stroke={theme.palette.text.secondary}>
-            <Label
-              angle={270}
-              position="left"
-              style={{ textAnchor: "middle", fill: theme.palette.text.primary }}
-            >
-              Sales ($)
-            </Label>
-          </YAxis>
-          <Line
-            type="monotone"
-            dataKey="amount"
-            stroke={theme.palette.primary.main}
-            dot={false}
-          />
-        </LineChart>
-      </ResponsiveContainer>
-    </React.Fragment>
-  );
+  return <></>;
 }
diff --git a/src/components/Tableau/DashLayout.js b/src/components/Tableau/DashLayout.js
index 5c591f9..e67c728 100644
--- a/src/components/Tableau/DashLayout.js
+++ b/src/components/Tableau/DashLayout.js
@@ -103,7 +103,7 @@ function Copyright() {
     <Typography variant="body2" color="textSecondary" align="center">
       {"Copyright © "}
       <Link color="inherit" href="https://www.google.fr/">
-        Your Website
+        bissprop{" "}
       </Link>{" "}
       {new Date().getFullYear()}
       {"."}
@@ -156,9 +156,9 @@ const DashLayout = ({ Filling }) => {
           {auth.user.isAuthenticated ? (
             <>
               <IconButton color="inherit">
-                <Badge badgeContent={4} color="secondary">
+                {/* <Badge color="secondary">
                   <NotificationsIcon />
-                </Badge>
+                </Badge> */}
               </IconButton>
               <IconButton color="inherit">
                 <Typography
diff --git a/src/components/Tableau/Default.js b/src/components/Tableau/Default.js
index bc4832d..d2ddeab 100644
--- a/src/components/Tableau/Default.js
+++ b/src/components/Tableau/Default.js
@@ -12,23 +12,11 @@ const Default = ({ Copyright, classes, fixedHeightPaper }) => {
     <Container maxWidth="lg" className={classes.container}>
       <Grid container spacing={3}>
         {/* Chart */}
-        <Grid item xs={12} md={8} lg={9}>
+        {/* <Grid item xs={12} md={8} lg={9}>
           <Paper className={fixedHeightPaper}>
             <Chart />
           </Paper>
-        </Grid>
-        {/* Recent Deposits */}
-        <Grid item xs={12} md={4} lg={3}>
-          <Paper className={fixedHeightPaper}>
-            <Deposits />
-          </Paper>
-        </Grid>
-        {/* Recent Runs */}
-        <Grid item xs={12}>
-          <Paper className={classes.paper}>
-            <Runs />
-          </Paper>
-        </Grid>
+        </Grid> */}
       </Grid>
       <Box pt={4}>
         <Copyright />
diff --git a/src/components/Tableau/listItems.js b/src/components/Tableau/listItems.js
index 3c38e22..bcc29df 100644
--- a/src/components/Tableau/listItems.js
+++ b/src/components/Tableau/listItems.js
@@ -23,7 +23,7 @@ export const mainListItems = (
       <ListItemIcon>
         <ShoppingCartIcon />
       </ListItemIcon>
-      <ListItemText primary="Runs" />
+      <ListItemText primary="New Run" />
     </ListItem>
     <ListItem component={Link} to="/reports" button button>
       <ListItemIcon>
@@ -42,7 +42,7 @@ export const mainListItems = (
 
 export const secondaryListItems = (
   <div>
-    <ListSubheader inset>Saved reports</ListSubheader>
+    {/* <ListSubheader inset>Saved reports</ListSubheader>
     <ListItem button>
       <ListItemIcon>
         <AssignmentIcon />
@@ -60,6 +60,6 @@ export const secondaryListItems = (
         <AssignmentIcon />
       </ListItemIcon>
       <ListItemText primary="Year-end sale" />
-    </ListItem>
+    </ListItem> */}
   </div>
 );
diff --git a/src/dummy/multiqc_data.js b/src/dummy/multiqc_data.js
new file mode 100644
index 0000000..94ce482
--- /dev/null
+++ b/src/dummy/multiqc_data.js
@@ -0,0 +1,204 @@
+module.exports = {
+  report_data_sources: {
+    Bismark: {
+      alignment: {
+        "Rossa_3-bismark_bt2_PE_report":
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/alignment_bismark/Rossa_3-bismark_bt2_PE_report.txt",
+      },
+      deduplication: {
+        Rossa_3:
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/alignment_bismark/Rossa_3.deduplication_report.txt",
+      },
+      methylation_extraction: {
+        Rossa_3:
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/methylation_extraction_bismark/Rossa_3.deduplicated_splitting_report.txt",
+      },
+      m_bias: {
+        Rossa_3:
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/methylation_extraction_bismark/Rossa_3.deduplicated.M-bias.txt",
+      },
+      bam2nuc: {
+        "Rossa_3-bismark_bt2_pe.nucleotide_stats":
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/alignment_bismark/Rossa_3-bismark_bt2_pe.nucleotide_stats.txt",
+      },
+    },
+    FastQC: {
+      all_sections: {
+        "Rossa_3-2":
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/quality/Rossa_3-2_fastqc.zip",
+        "Rossa_3-1":
+          "/groups/INVITE/vs_gala_homozygote/results/Rossa_3-TechRep_1-BioRep_1/quality/Rossa_3-1_fastqc.zip",
+      },
+    },
+  },
+  report_general_stats_data: [
+    {
+      Rossa_3: {
+        total_c: 1330589925.0,
+        meth_cpg: 136988750.0,
+        meth_chg: 109440963.0,
+        meth_chh: 64793179.0,
+        unmeth_cpg: 60139313.0,
+        unmeth_chg: 90378301.0,
+        unmeth_chh: 868849419.0,
+        percent_cpg_meth: 69.5,
+        percent_chg_meth: 54.8,
+        percent_chh_meth: 6.9,
+      },
+    },
+    {
+      "Rossa_3-bismark_bt2_pe.nucleotide_stats": {
+        A_count_sample: "4374261601",
+        A_percent_sample: "29.24",
+        A_count_genomic: "213700944",
+        A_percent_genomic: "30.98",
+        A_coverage: "20.469",
+        C_count_sample: "2711206336",
+        C_percent_sample: "18.12",
+        C_count_genomic: "131083847",
+        C_percent_genomic: "19.00",
+        C_coverage: "20.683",
+        G_count_sample: "3358652047",
+        G_percent_sample: "22.45",
+        G_count_genomic: "131116685",
+        G_percent_genomic: "19.01",
+        G_coverage: "25.616",
+        T_count_sample: "4515011554",
+        T_percent_sample: "30.18",
+        T_count_genomic: "213833349",
+        T_percent_genomic: "31.00",
+        T_coverage: "21.115",
+        AA_count_sample: "1441870938",
+        AA_percent_sample: "9.70",
+        AA_count_genomic: "75842481",
+        AA_percent_genomic: "11.00",
+        AA_coverage: "19.011",
+        AC_count_sample: "697101247",
+        AC_percent_sample: "4.69",
+        AC_count_genomic: "36106089",
+        AC_percent_genomic: "5.23",
+        AC_coverage: "19.307",
+        AG_count_sample: "971802901",
+        AG_percent_sample: "6.54",
+        AG_count_genomic: "40300727",
+        AG_percent_genomic: "5.84",
+        AG_coverage: "24.114",
+        AT_count_sample: "1234845351",
+        AT_percent_sample: "8.31",
+        AT_count_genomic: "61451197",
+        AT_percent_genomic: "8.91",
+        AT_coverage: "20.095",
+        CA_count_sample: "913698082",
+        CA_percent_sample: "6.15",
+        CA_count_genomic: "46423547",
+        CA_percent_genomic: "6.73",
+        CA_coverage: "19.682",
+        CC_count_sample: "561438047",
+        CC_percent_sample: "3.78",
+        CC_count_genomic: "28781995",
+        CC_percent_genomic: "4.17",
+        CC_coverage: "19.507",
+        CG_count_sample: "400627924",
+        CG_percent_sample: "2.70",
+        CG_count_genomic: "15552161",
+        CG_percent_genomic: "2.25",
+        CG_coverage: "25.760",
+        CT_count_sample: "818898072",
+        CT_percent_sample: "5.51",
+        CT_count_genomic: "40324825",
+        CT_percent_genomic: "5.85",
+        CT_coverage: "20.308",
+        GA_count_sample: "1045659763",
+        GA_percent_sample: "7.04",
+        GA_count_genomic: "42071288",
+        GA_percent_genomic: "6.10",
+        GA_coverage: "24.854",
+        GC_count_sample: "600525917",
+        GC_percent_sample: "4.04",
+        GC_count_genomic: "24117629",
+        GC_percent_genomic: "3.50",
+        GC_coverage: "24.900",
+        GG_count_sample: "793731678",
+        GG_percent_sample: "5.34",
+        GG_count_genomic: "28804378",
+        GG_percent_genomic: "4.18",
+        GG_coverage: "27.556",
+        GT_count_sample: "896255773",
+        GT_percent_sample: "6.03",
+        GT_count_genomic: "36117136",
+        GT_percent_genomic: "5.24",
+        GT_coverage: "24.815",
+        TA_count_sample: "942364708",
+        TA_percent_sample: "6.34",
+        TA_count_genomic: "49363180",
+        TA_percent_genomic: "7.16",
+        TA_coverage: "19.090",
+        TC_count_sample: "833152904",
+        TC_percent_sample: "5.61",
+        TC_count_genomic: "42071866",
+        TC_percent_genomic: "6.10",
+        TC_coverage: "19.803",
+        TG_count_sample: "1172030965",
+        TG_percent_sample: "7.89",
+        TG_count_genomic: "46458101",
+        TG_percent_genomic: "6.74",
+        TG_coverage: "25.228",
+        TT_count_sample: "1535399157",
+        TT_percent_sample: "10.33",
+        TT_count_genomic: "75939767",
+        TT_percent_genomic: "11.01",
+        TT_coverage: "20.219",
+      },
+    },
+    {
+      Rossa_3: {
+        aligned_reads: 56462346.0,
+        dup_reads: 27497732.0,
+        dup_reads_percent: 48.7,
+        dedup_reads: 28964614.0,
+        dedup_reads_percent: 51.3,
+      },
+    },
+    {
+      "Rossa_3-bismark_bt2_PE_report": {
+        total_reads: 90855477.0,
+        aligned_reads: 56462371.0,
+        no_alignments: 23889669.0,
+        ambig_reads: 10503437.0,
+        discarded_reads: 25.0,
+        total_c: 3036238715.0,
+        meth_cpg: 309369938.0,
+        meth_chg: 242596462.0,
+        meth_chh: 143358423.0,
+        unmeth_cpg: 139603637.0,
+        unmeth_chg: 208961532.0,
+        unmeth_chh: 1992348723.0,
+        percent_cpg_meth: 68.9,
+        percent_chg_meth: 53.7,
+        percent_chh_meth: 6.7,
+        strand_ot: 28431248.0,
+        strand_ctot: 0.0,
+        strand_ctob: 0.0,
+        strand_ob: 28031098.0,
+        strand_directional: "directional",
+        percent_aligned: 62.145258452608196,
+      },
+    },
+    {
+      "Rossa_3-2": {
+        percent_gc: 26.0,
+        avg_sequence_length: 149.9991666435255,
+        total_sequences: 90855477.0,
+        percent_duplicates: 39.72347298485794,
+        percent_fails: 9.090909090909092,
+      },
+      "Rossa_3-1": {
+        percent_gc: 26.0,
+        avg_sequence_length: 149.999843366625,
+        total_sequences: 90855477.0,
+        percent_duplicates: 37.85312138591972,
+        percent_fails: 0.0,
+      },
+    },
+  ],
+};
diff --git a/src/main.js b/src/main.js
index f74f718..987d3c0 100644
--- a/src/main.js
+++ b/src/main.js
@@ -5,25 +5,25 @@ const { exec } = require("child_process");
 try {
   require("electron-reloader")(module);
 } catch (_) {}
-exec(
-  "bash " + path.join(__dirname, "resources/checkConda.sh") + " " + __dirname,
-  (error, stdout, stderr) => {
-    if (error) {
-      console.log(`error: ${error.message}`);
-      return;
-    }
-    if (stderr) {
-      console.log(`stderr: ${stderr}`);
-      return;
-    }
-    console.log(`stdout: ${stdout}`);
-  }
-);
+// exec(
+//   "bash " + path.join(__dirname, "resources/checkConda.sh") + " " + __dirname,
+//   (error, stdout, stderr) => {
+//     if (error) {
+//       console.log(`error: ${error.message}`);
+//       return;
+//     }
+//     if (stderr) {
+//       console.log(`stderr: ${stderr}`);
+//       return;
+//     }
+//     console.log(`stdout: ${stdout}`);
+//   }
+// );
 
-const mongod = () => {
-  require(path.join(__dirname, "backend/spawnMongod"));
-};
-mongod();
+// const mongod = () => {
+//   require(path.join(__dirname, "backend/spawnMongod"));
+// };
+// mongod();
 
 const server = () => {
   require(path.join(__dirname, "backend/server.js"));
diff --git a/src/pages/NotFound/index.js b/src/pages/NotFound/index.js
index 7c445fd..7e82d76 100644
--- a/src/pages/NotFound/index.js
+++ b/src/pages/NotFound/index.js
@@ -1,4 +1,4 @@
-import NotFoundHeader from "../../components/NotFoundHeader";
+import NotFoundHeader from "../../components/NotFoundHeader/NotFoundHeader";
 import NotFoundSVG from "../../components/SVG/NotFoundSVG";
 import React from "react";
 
diff --git a/test.js b/test.js
new file mode 100644
index 0000000..d00b628
--- /dev/null
+++ b/test.js
@@ -0,0 +1,4 @@
+const fs = require("fs");
+let rawdata = fs.readFileSync("multiqc_data.json");
+let student = JSON.parse(rawdata);
+console.log(student);
diff --git a/webpack.main.config.js b/webpack.main.config.js
index 28abb13..8526e45 100644
--- a/webpack.main.config.js
+++ b/webpack.main.config.js
@@ -12,7 +12,13 @@ module.exports = {
           from: path.join("resources"),
           to: "resources",
           globOptions: {
-            ignore: ["**/.test/**", "**/.snakemake/**", "**/.git/**"],
+            ignore: [
+              "**/.test/**",
+              "**/mongo/**",
+              "**/.snakemake/**",
+              "**/snakemake/**",
+              "**/.git/**",
+            ],
           },
         },
         { from: path.join("src/backend"), to: "src/backend" },
diff --git a/yarn.lock b/yarn.lock
index 90d7cf7..3388bec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12232,6 +12232,16 @@ react-dev-utils@^11.0.2:
     strip-ansi "6.0.0"
     text-table "0.2.0"
 
+react-dom@^16.7.0:
+  version "16.14.0"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89"
+  integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.2"
+    scheduler "^0.19.1"
+
 react-dom@^17.0.1:
   version "17.0.1"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6"
@@ -12275,6 +12285,14 @@ react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339"
   integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==
 
+react-json-to-table@^0.1.7:
+  version "0.1.7"
+  resolved "https://registry.yarnpkg.com/react-json-to-table/-/react-json-to-table-0.1.7.tgz#dc2a9e424678dc32afd22ce5846c12e62ea3b199"
+  integrity sha512-mUo8gFS1VquYKm38hQukcQuFjWRfnnmDaGHWg5quQM4Ib+ogWgQV5kEaouvTyIXBK3LZ7Us9O0uqDa4TJdUOtA==
+  dependencies:
+    react "^16.7.0"
+    react-dom "^16.7.0"
+
 react-lifecycles-compat@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
@@ -12440,6 +12458,15 @@ react-transition-group@^4.4.0:
     loose-envify "^1.4.0"
     prop-types "^15.6.2"
 
+react@^16.7.0:
+  version "16.14.0"
+  resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d"
+  integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.2"
+
 react@^17.0.1:
   version "17.0.1"
   resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127"
@@ -13172,6 +13199,14 @@ saxes@^5.0.0:
   dependencies:
     xmlchars "^2.2.0"
 
+scheduler@^0.19.1:
+  version "0.19.1"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
+  integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
 scheduler@^0.20.1:
   version "0.20.1"
   resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c"
-- 
GitLab