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