Skip to content
Snippets Groups Projects
Forked from 2024 Competition / Bielefeld-CeBiTec
944 commits behind the upstream repository.
team.tsx 12.86 KiB
import { advisors, instructor, pis, SteckbriefInterface, teammembers } from "../data/steckbriefe";
import { useTabNavigation } from "../utils/TabNavigation";
import { BackUp } from "../components/Buttons";
import { Section } from "../components/sections";


export function Team() {
  useTabNavigation();
  let teambriefe = createSteckbriefe(teammembers); 
  let advisorbriefe = createPiSteckbriefe(advisors); 
  let sinan = createPiSteckbriefe(instructor); 
  let pibriefe = createPiSteckbriefe(pis)
  return (
    <>
      <br/>

      <br/>
      <Section title="Members" id="members">
      {teambriefe}
      </Section>

      <Section title="Instructor" id="instructor">
      {sinan}
      </Section>
      <Section title="Advisors" id="Advisors">
      {advisorbriefe}
      </Section>
      <Section title="Principal Investigators" id="PIS">
      {pibriefe}
      </Section>
      <BackUp/> 
    </>
  );
}



function createSteckbriefe(data: Array<SteckbriefInterface>){
  let briefe: JSX.Element[]  = []
  for (let index = 0; index < data.length; index++) {
    let thename = "" + data[index].vorname + data[index].nachname; 
    // Conditional head of
    var headof = <></>; 
    if(data[index].headof){
      var headof = <><div className=""> <b>Head of:</b> {data[index].headof} </div> <br/></>; 
    }
    // Jobs
    var jobs = ""; 
    for (let i = 0; i < data[index].igemjob.length; i++) {
        if (data[index].igemjob.length  == 1) {
          jobs +=  data[index].igemjob[i]
        }
        else if (i + 1 == data[index].igemjob.length ) {
          jobs += " and " + data[index].igemjob[i];
        }
        else if(i + 2 == data[index].igemjob.length){
          jobs +=  data[index].igemjob[i]
          //console.log(`bei i+2 ist es ${data[index].hobbies[i]}`)
        }
        else{
          jobs +=  data[index].igemjob[i] + ", ";
        }
    }
    // Funfacts 
    var funfacts: JSX.Element[]  = [];
    for (let i = 0; i < data[index].funfacts.length; i++) {
      funfacts.push(<li key={`f${i}`}> {data[index].funfacts[i]} </li>); 
    }
    // Hobbies
    var hobbs = ""; 
    for (let i = 0; i < data[index].hobbies.length; i++) {
      if (i + 1 == data[index].hobbies.length ) {
        //console.log(`bei i+1 ist es ${data[index].hobbies[i]}`)
        hobbs += " and " + data[index].hobbies[i];
      }
      else if(i + 2 == data[index].hobbies.length){
        hobbs +=  data[index].hobbies[i]
        //console.log(`bei i+2 ist es ${data[index].hobbies[i]}`)
      }
      else{
        //console.log(`bei ${i} ist es ${data[index].hobbies[i]}`)
        hobbs +=  data[index].hobbies[i] + ", ";
      }
    }
    // Whyigem
    var why: JSX.Element[]  = []; 
    for (let i = 0; i < data[index].whyigem.length; i++) {
      why.push(<p>{data[index].whyigem[i]}</p>); 
    }
    //Title
    let title = ""; 
    if (data[index].title) {
      title = data[index].title!; 
    }
    // challenges
    let challs: JSX.Element[]  = [];  
    for (let i = 0; i < data[index].biggestchallenge.length; i++) {
      challs.push(<li key={`d${i}`}>{data[index].biggestchallenge[i]}</li>); 
    }
    // bestparts
    let bests: JSX.Element[]  = [];  
    for (let i = 0; i < data[index].bestpart.length; i++) {
      bests.push(<li key={`e${i}`}>{data[index].bestpart[i]}</li>); 
    }
    let frontbriefclass = "frontbrief frontbrief"+thename; 
    let backbriefclass = "backbrief backbrief"+thename;

    let picture = <div className="col-2 lnp center"><img src={data[index].zweitfoto} style={{display: "none"}} className={"img team-img "+backbriefclass}/><img src={data[index].hauptfoto} className={"img team-img "+frontbriefclass}></img></div> 
    let namerow = <div className="row"><div className="team-name"> {title} {data[index].vorname} {data[index].nachname} <span className="pronouns"> ({data[index].pronouns}) </span> </div>  <div className="col"> <a href={data[index].linkedinurl}> <img className="team-socials" src="https://static.igem.wiki/teams/5247/design/icons/linkedin.png" /> </a></div> </div>; 
    let frontparagraph = <div className={"row " + frontbriefclass}> <h6>Why I took part in iGEM</h6> {why} </div> ; 
    let facts = <div className={frontbriefclass}><div className=""> <b>Age:</b> {data[index].age} </div> <br/> {headof} <div> <b>Part of:</b> {jobs}</div> <br/> <div className=""> <b>Major:</b> {data[index].studiengang} </div> <br/> <div className=""> <b>Scientific interests:</b> {data[index].scientificinterests} </div> </div>; 
    let backbutton =  <div className={backbriefclass} style={{display: "none"}}>   <div className="parent-button"><button onClick={flipBack(thename)} className="frontbutton">Click me</button></div></div>
    let funfactlist = <div className={backbriefclass} style={{display: "none"}}><b>Funfacts: </b><ul> {funfacts}</ul></div>
    let favmusic = <><h6>Favourite lab music:</h6><p>{data[index].favlabmusic}</p></>
    let hobbielist = <><h6>Hobbies:</h6> <p> {hobbs} </p></>
    let backparagraph = <div className={"row "+backbriefclass} style={{display: "none"}}>{favmusic}{hobbielist}</div> 
    let paragraphs = <div className="steckbody"> {frontparagraph} {backparagraph} </div>
    let frontbutton =  <div className={frontbriefclass}> <div className="parent-button"><button onClick={flip(thename)} className="frontbutton">Click me</button></div></div>
    let challenges = <div> <h6>What were the biggest challenges?</h6> <ul> {challs} </ul> </div>
    let bestpart = <div> <h6>What were the best parts?</h6> <ul> {bests} </ul></div> ; 
    let details = <div> <br/> {challenges} {bestpart} </div>
    let hole = 
            <div> 
              <div className="row steckbrief"> {picture}  
                <div className="col-5"> 
                  <div className="row"> {namerow}
                  <hr/>  
                  </div>   
                  {paragraphs}     
                </div> 
                <div className="col-4 brieffacts">
                  <br/><br/>  {funfactlist} {facts} 
                </div>                   
                </div> <div className="row steckbriefbuttonrow" style={{marginTop: "1rem", marginBottom: "1rem"}}> <div className="col-2"> {frontbutton} {backbutton}</div>  <div className="col"><details className={frontbriefclass} ><summary> <b>Personal motivation and challenges</b> </summary><div> {details}</div></details></div>                                                                                                                                                        </div> 
            </div>
    let whole = <div  className={"steckbrief-box"} id={thename}> {hole} </div>; 
    briefe.push(whole); 
  }
  return briefe; 
}

function createPiSteckbriefe(data: Array<SteckbriefInterface>){
  let briefe: JSX.Element[]  = []
  for (let index = 0; index < data.length; index++) {
    let thename = "" + data[index].vorname + data[index].nachname; 
    // Conditional head of
    var headof = <></>; 
    if(data[index].headof){
      var headof = <><div className=""> <b>iGEM-Job:</b> {data[index].headof} </div> <br/></>; 
    }
    // Jobs
    var jobs = ""; 
    for (let i = 0; i < data[index].igemjob.length; i++) {
        if (i + 1 == data[index].igemjob.length ) {
          jobs += " and " + data[index].igemjob[i];
        }
        else{
          jobs +=  data[index].igemjob[i] + ", ";
        }
    }
    // Funfacts 
    var funfacts: JSX.Element[]  = [];
    for (let i = 0; i < data[index].funfacts.length; i++) {
      funfacts.push(<li key={`a${i}`}> {data[index].funfacts[i]} </li>); 
    }
    // Hobbies
    var hobbs = ""; 
    for (let i = 0; i < data[index].hobbies.length; i++) {
      if (i + 1 == data[index].hobbies.length ) {
        hobbs += " and " + data[index].hobbies[i];
      }
      else if(i + 2 == data[index].hobbies.length){
        hobbs +=  data[index].hobbies[i]
        //console.log(`bei i+2 ist es ${data[index].hobbies[i]}`)
      }
      else{
        hobbs +=  data[index].hobbies[i] + ", ";
      }
    }
    // Whyigem
    var why: JSX.Element[]  = []; 
    for (let i = 0; i < data[index].whyigem.length; i++) {
      why.push(<p>{data[index].whyigem[i]}</p>); 
    }
    //Title
    let title = ""; 
    if (data[index].title) {
      title = data[index].title!; 
    }
    // challenges
    let challs: JSX.Element[]  = [];  
    for (let i = 0; i < data[index].biggestchallenge.length; i++) {
      challs.push(<li key={`b${i}`}>{data[index].biggestchallenge[i]}</li>); 
    }
    // bestparts
    let bests: JSX.Element[]  = [];  
    for (let i = 0; i < data[index].bestpart.length; i++) {
      bests.push(<li key={`c${i}`}>{data[index].bestpart[i]}</li>); 
    }
    let frontbriefclass = "frontbrief frontbrief"+thename; 
    let backbriefclass = "backbrief backbrief"+thename;

    let picture = <div className="col-2 lnp center"><img src={data[index].zweitfoto} style={{display: "none"}} className={"img team-img "+backbriefclass}/><img src={data[index].hauptfoto} className={"img team-img "+frontbriefclass}></img></div> 
    let namerow = <div className="row"><div className="team-name"> {title} {data[index].vorname} {data[index].nachname} <span className="pronouns"> ({data[index].pronouns}) </span> </div>  <div className="col"> <a href={data[index].linkedinurl}> <img className="team-socials" src="https://static.igem.wiki/teams/5247/design/icons/linkedin.png" /> </a></div> </div>; 
    let frontparagraph = <div className={"row " + frontbriefclass}> <h6>Why I took part in iGEM</h6> {why} </div> ; 
    let facts = <div className={frontbriefclass}><div className=""> <b>Age:</b> {data[index].age} </div> <br/> {headof} <div> <b>Affiliation:</b> {jobs}</div> <br/> <div className=""> <b>Regular Job:</b> {data[index].studiengang} </div> <br/> <div className=""> <b>Scientific interests:</b> {data[index].scientificinterests} </div> </div>; 
    let backbutton =  <div className={backbriefclass} style={{display: "none"}}>   <div className="parent-button"><button onClick={flipBack(thename)} className="frontbutton">Click me</button></div></div>
    let funfactlist = <div className={backbriefclass} style={{display: "none"}}><b>Funfacts: </b><ul> {funfacts}</ul></div>
    let favmusic = <><h6>Favourite lab music:</h6><p>{data[index].favlabmusic}</p></>
    let hobbielist = <><h6>Hobbies:</h6> <p> {hobbs} </p></>
    let backparagraph = <div className={"row "+backbriefclass} style={{display: "none"}}>{favmusic}{hobbielist}</div> 
    let paragraphs = <div className="steckbody"> {frontparagraph} {backparagraph} </div>
    let frontbutton =  <div className={frontbriefclass}> <div className="parent-button"><button onClick={flip(thename)} className="frontbutton">Click me</button></div></div>
    let challenges = <div> <h6>What were the biggest challenges?</h6> <ul> {challs} </ul> </div>
    let bestpart = <div> <h6>What were the best parts?</h6> <ul> {bests} </ul></div> ; 
    let details = <div> <br/> {challenges} {bestpart} </div>
    let hole = 
            <div> 
              <div className="row steckbrief"> {picture}  
                <div className="col-5"> 
                  <div className="row"> {namerow}
                  <hr/>  
                  </div>   
                  {paragraphs}     
                </div> 
                <div className="col-4 brieffacts">
                  <br/><br/>  {funfactlist} {facts} 
                </div>                   
                </div> <div className="row steckbriefbuttonrow" style={{marginTop: "1rem", marginBottom: "1rem"}}> <div className="col-2"> {frontbutton} {backbutton}</div>  <div className="col"><details className={frontbriefclass} ><summary> <b>Personal motivation and challenges</b> </summary><div> {details}</div></details></div>                                                                                                                                                        </div> 
            </div>
    let whole = <div  className={"steckbrief-box"} id={thename}> {hole} </div>; 
    briefe.push(whole); 
  }
  return briefe; 
}



function flip(element: string){
  const flipp = (_event: React.MouseEvent<HTMLElement, MouseEvent>) => {
    let elementsToHide = document.getElementsByClassName("frontbrief"+element);
      for (let i = 0; i < elementsToHide.length; i++) {
        (elementsToHide[i] as HTMLElement).style.display = "none";
      }
    let elementsToFind = document.getElementsByClassName("backbrief"+element);
    for (let i = 0; i < elementsToFind.length; i++) {
      (elementsToFind[i] as HTMLElement).style.display = "block";
    }
  }
  return flipp; 
}

function flipBack(element: string){
  const flippback = (_event: React.MouseEvent<HTMLElement, MouseEvent>) => {
    let elementsToHide = document.getElementsByClassName("backbrief"+element);
      for (let i = 0; i < elementsToHide.length; i++) {
        (elementsToHide[i] as HTMLElement).style.display = "none";
      }
    let elementsToFind = document.getElementsByClassName("frontbrief"+element);
    for (let i = 0; i < elementsToFind.length; i++) {
      (elementsToFind[i] as HTMLElement).style.display = "block";
    }
  }
  return flippback;  
}