diff --git a/routes/index.js b/routes/index.js index 159df87a89650a5b23bf0479ade1489b59a1698d..f8e0dde22f75dd23829e915cb9ceb55687b1ca91 100644 --- a/routes/index.js +++ b/routes/index.js @@ -83,7 +83,21 @@ async function request_promotion(access_token, promotion, offset) { } -async function fetch_data(access_token, promotion) { +async function fetch_data(access_token, promotion_min, promotion_max) { + + let total_users = [] + let changed = false; + for (let i = promotion_min; i <= promotion_max; i++) { + let result = await fetch_data_promotion(access_token, i) + total_users = total_users.concat(result.users) + changed = changed || result.changed + } + + return {users: total_users, changed: changed}; +} + + +async function fetch_data_promotion(access_token, promotion) { // const token = await get_token() let offset = 0; @@ -167,10 +181,11 @@ function create_graph(users) { /* GET the fetched data. */ router.post('/', function(req, res, next) { - const promotion = req.body.promotion || 2021; - fetch_data(req.session.access_token, promotion) + const promotion_min = req.body.promotion_min || 2021; + const promotion_max = req.body.promotion_max || 2021; + fetch_data(req.session.access_token, promotion_min, promotion_max) .then(result => { - let key = "__express__graph_" + promotion; + let key = "__express__graph_" + promotion_min + "_" + promotion_max; let cached_graph = myCache.get(key); let all_edges; let all_nodes; diff --git a/views/index.ejs b/views/index.ejs index 4c24191682a5185ab9f62fbbbd288ae5c3e0e68d..0b53e16c70d0a0271db647caaa9cfcca06368817 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -29,10 +29,12 @@ const [allNodes, setAllNodes] = React.useState([]); const [allEdges, setAllEdges] = React.useState([]); + const [promotionMin, setPromotionMin] = React.useState(2021); + const [promotionMax, setPromotionMax] = React.useState(2021); + const [nodeMin, setNodeMin] = React.useState(10); const [edgeMin, setEdgeMin] = React.useState(5); - const [promotion, setPromotion] = React.useState(2021); const [submitted, setSubmitted] = React.useState(true); const [ready, setReady] = React.useState(false); @@ -44,14 +46,17 @@ React.useEffect(() => { setReady(false); setError(false); - axios.post('/', {promotion: promotion}) + axios.post('/', { + promotion_min: promotionMin, + promotion_max: promotionMax + }) .then(result => { setAllEdges(result.data.all_edges); setAllNodes(result.data.all_nodes); setReady(true); }) .catch(err => setError(true)) - }, [promotion]) + }, [promotionMin, promotionMax]) function handleSubmit (event) { @@ -85,8 +90,12 @@ return ( <form onSubmit={handleSubmit}> <div> - <label htmlFor="promotion">Promotion : </label> - <input type="number" id="promotion" value={promotion} onChange={e => setPromotion(e.target.value)} /> + <label htmlFor="promotionMin">Promotion minimale : </label> + <input type="number" id="promotionMin" value={promotionMin} onChange={e => setPromotionMin(e.target.value)} /> + </div> + <div> + <label htmlFor="promotionMax">Promotion maximale : </label> + <input type="number" id="promotionMax" value={promotionMax} onChange={e => setPromotionMax(e.target.value)} /> </div> <div> <label htmlFor="nodeMin">Taille minimale :</label> @@ -96,6 +105,7 @@ <label htmlFor="edgeMin">Consanguinité :</label> <input type="number" id="edgeMin" value={edgeMin} onChange={e => setEdgeMin(e.target.value)} /> </div> + <button type="submit">Générer</button> {error ? <p style={{color: "red"}}>Erreur</p> @@ -109,39 +119,6 @@ ReactDOM.render(React.createElement(FormComponent), document.getElementById('form')); - function draw() { - var container = document.getElementById('mynetwork'); - axios.post('/', {promotion: 2022}) - .then(result => { - all_nodes = result.data.all_nodes; - all_edges = result.data.all_edges; - - let nodes = []; - all_nodes.forEach(node => { - if (node.value >= 5) { - nodes.push(node); - } - }) - - let edges = []; - all_edges.forEach(edge => { - if (edge.value >= 3) { - edges.push(edge); - } - }) - var data = { - nodes: nodes, - edges: edges - }; - var options = { - nodes: { - shape: 'dot', - } - }; - let network = new vis.Network(container, data, options); - }) - .catch(err => console.log(err)) - } </script> </head> @@ -149,10 +126,11 @@ <h1><%= title %></h1> <p> <b>Comment ça marche ?</b><br> - Lorsqu'on arrive sur le site ou que l'on change la promotion, le site charge les données liées à la promotion.<br> - Quand le champ de texte sous le menu des promotions indique prêt, vous pouvez générer le graphe en cliquant sur le bouton Générer ci-dessous.<br> - Vous pouvez modifier la taille des assos ainsi que la consanguinité minimales, puis générer le graphe à nouveau.</br> - Tu peux déplacer le graphe ou zoomer dessus pour voir les détails. + Lorsqu'on arrive sur le site ou que l'on change l'une des promotions, le site charge les données liées aux promotions.<br> + Quand le champ de texte sous le menu indique prêt, vous pouvez générer le graphe en cliquant sur le bouton Générer ci-dessous.<br> + Les promotions prises en compte seront les promotions situées entre la promotion minimale et la promotion maximale (inclusion large)<br> + Vous pouvez modifier la taille des assos ainsi que la consanguinité minimales, puis générer le graphe à nouveau.<br> + Vous pouvez déplacer le graphe ou zoomer dessus pour voir les détails. </p> <div id="form"></div> <div id="mynetwork"></div>