Skip to content
Snippets Groups Projects
parts.tsx 8.56 KiB
Newer Older
Xingan Zhao's avatar
Xingan Zhao committed
import { Nav } from 'react-bootstrap';
import { Link,Element } from 'react-scroll';
import React,{useEffect,useState} from 'react';


// sidenavbar begin
interface SideNavbarProps {
  activeLink: string;
}
const SideNavbar: React.FC<SideNavbarProps> = ({ activeLink }) => {
  return (
    <div className="side-navbar">
      <Nav className="flex-column">
Xingan Zhao's avatar
Xingan Zhao committed
        <Nav.Link as={Link} to="section1" smooth={true} duration={500} className={activeLink === 'section1' ? 'active' : 'notActive'}>Basice Parts</Nav.Link>
        <Nav.Link as={Link} to="section2" smooth={true} duration={500} className={activeLink === 'section2' ? 'active' : 'notActive'}>Composite Parts</Nav.Link>
        <Nav.Link as={Link} to="section3" smooth={true} duration={500} className={activeLink === 'section3' ? 'active' : 'notActive'}>Contribution</Nav.Link>
Xingan Zhao's avatar
Xingan Zhao committed
      </Nav>
    </div>
  );
};
// sidenavbar end 

Xingan Zhao's avatar
Xingan Zhao committed
type TableRowData = {
  id: string;
  type: string;
  description: string;
  class: string;
  link: string;
};

const basicParts: TableRowData[] = [
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378000', type: 'Coding', description: 'GS',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378000' },
  { id: 'BBa_K5378001', type: 'Coding', description: 'TPH1',class:"table-element-orange",link:'https://parts.igem.org/Part:BBa_K5378001'},
  { id: 'BBa_K5378006', type: 'Coding', description: 'tynA-G494S',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378006'},
  { id: 'BBa_K5378007', type: 'Coding', description: 'feaR-A81L',class:"table-element-orange",link:'https://parts.igem.org/Part:BBa_K5378007'},
  { id: 'BBa_K5378009', type: 'Promoter', description: 'PtynA',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378009'},
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378011', type: 'Coding', description: 'CsgA',class:"table-element-orange",link:'https://parts.igem.org/Part:BBa_K5378011'},
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378012', type: 'Coding', description: 'TFF3',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378012'},
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378016', type: 'RBS', description: 'RBS',class:"table-element-orange",link:'https://parts.igem.org/Part:BBa_K5378016'},
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378018', type: 'Coding', description: 'GFP',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378018' },
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378020', type: 'Coding', description: '6xHis',class:"table-element-orange table-bottom-line",link:'https://parts.igem.org/partsdb/edit_seq.cgi?part=BBa_K5378020'},
Xingan Zhao's avatar
Xingan Zhao committed
];
const compositeParts: TableRowData[] = [
Pan Zhao's avatar
Pan Zhao committed
  { id: 'BBa_K5378002', type: 'Composite', description: 'PtynA-RBS-TPH1',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378002' },
  { id: 'BBa_K5378003', type: 'Composite', description: 'PtynA-RBS-GS',class:"table-element-orange",link:'https://parts.igem.org/Part:BBa_K5378003'},
  { id: 'BBa_K5378004', type: 'Composite', description: 'feaR-A81L-G494S-PtynA-GS',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378004'},
  { id: 'BBa_K5378005', type: 'Composite', description: 'feaR-A81L-G494S-PtynA-TPH1',class:"table-element-orange",link:'https://parts.igem.org/Part:BBa_K5378005'},
  { id: 'BBa_K5378019', type: 'Composite', description: 'PtynA-RBS-GFP',class:"table-element-yellow",link:'https://parts.igem.org/Part:BBa_K5378019'},
  { id: 'BBa_K5378021', type: 'Composite', description: 'CsgA-6xHis-TFF3',class:"table-element-orange table-bottom-line",link:'https://parts.igem.org/Part:BBa_K5378021'},
Xingan Zhao's avatar
Xingan Zhao committed
];

Xingan Zhao's avatar
Xingan Zhao committed
export function parts() {
    // sidenavbar begin
    const [activeLink, setActiveLink] = useState<string>('');
      useEffect(() => {
        const handleScroll = () => {
          const sections = document.querySelectorAll('.element');
          let currentSection = '';
            sections.forEach(section => {
              const sectionTop = section.getBoundingClientRect().top;
              if (sectionTop <= window.innerHeight / 2 && sectionTop > -section.clientHeight) {
                currentSection = section.id;
              }
            });
          setActiveLink(currentSection);
        };
        window.addEventListener('scroll', handleScroll);
        return () => window.removeEventListener('scroll', handleScroll);
      }, []);
      // sidenavbar end
  
  
    return (
      <>
Xingan Zhao's avatar
Xingan Zhao committed
      <div className="custom-header-parts">
Xingan Zhao's avatar
Xingan Zhao committed
                <h1 className="centered-title">
                <img
                        src="https://static.igem.wiki/teams/5378/header/parts.png"
                        alt="safety header"
                        className="header-img"
                    />
                    <img
                        src="https://static.igem.wiki/teams/5378/header/header-bar.webp"
                        alt="safety header"
                        className="header-bar"
                    />
                </h1>
            </div>
Xingan Zhao's avatar
Xingan Zhao committed

        <div className='row bg-rice_yellow'>
Xingan Zhao's avatar
Xingan Zhao committed
        <div className="col-2">
Xingan Zhao's avatar
Xingan Zhao committed
            <SideNavbar activeLink={activeLink}          />
          </div>
          
Xingan Zhao's avatar
Xingan Zhao committed
          <div className="col-10">
Xingan Zhao's avatar
Xingan Zhao committed
            
                <Element name="section1" className="element rounded-border" id='section1'>
Pan Zhao's avatar
Pan Zhao committed
                <p className="indent">We have built several BioBricks, which cover all aspects throughout our projects, constituting our sensory module, metabolic module, and safety module.</p>
                   <h2>1.Our Basic Parts</h2>
Pan Zhao's avatar
Pan Zhao committed
                   <p className="indent">We designed six basic parts in total this year,you can click on the part to see details.</p>
Xingan Zhao's avatar
Xingan Zhao committed
                   <table className="three-line-table">
                      <thead>
                            <tr className='table-head-line'>
                                <th>Part Name</th>
                                <th>Type</th>
                                <th>Short Description</th>
                            </tr>
                        </thead>
                        <tbody>
                            {basicParts.map((row) => (
                                <tr className={row.class} key={row.id}>
                                    <td><a href={row.link}>{row.id}</a></td>
                                    <td>{row.type}</td>
                                    <td>{row.description}</td>
                                </tr>
                            ))}
                        </tbody>
                    </table>
Xingan Zhao's avatar
Xingan Zhao committed
                 </Element>
Xingan Zhao's avatar
Xingan Zhao committed
                <Element name="section2" className="element rounded-border" id='section2'>
                  <h2>2.Our Composite Parts</h2>
Pan Zhao's avatar
Pan Zhao committed
                  <p className="indent">We designed seven composite parts in total this year,you can click on the part to see details.</p>
Xingan Zhao's avatar
Xingan Zhao committed
                  <table className="three-line-table">
Xingan Zhao's avatar
Xingan Zhao committed
                      <thead>
                            <tr className='table-head-line'>
                                <th >Part Name</th>
                                <th >Type</th>
                                <th >Short Description</th>
                            </tr>
                        </thead>
                        <tbody>
                            {compositeParts.map((row) => (
                                <tr className={row.class} key={row.id}>
                                    <td><a href={row.link}>{row.id}</a></td>
                                    <td>{row.type}</td>
                                    <td>{row.description}</td>
                                </tr>
                            ))}
                        </tbody>
Xingan Zhao's avatar
Xingan Zhao committed
                    </table>                 
Xingan Zhao's avatar
Xingan Zhao committed
                </Element>
            
  
                <Element name="section3" className="element rounded-border" id='section3'>
                <h2> 3.Contribution</h2>
                <p className="indent">In addition, we have added content to the uploaded parts.</p>
Pan Zhao's avatar
Pan Zhao committed
                <p className="indent">We optimized the codon of <a href='https://parts.igem.org/Part:BBa_K3924011'>BBa_K3924011</a> and <a href='https://parts.igem.org/Part:BBa_K3924002'>BBa_K3924002</a>, and added two basic components accordingly, namely <a href='https://parts.igem.org/Part:BBa_K5378011'>BBa_K5378011</a> and <a href='https://parts.igem.org/Part:BBa_K5378012'>BBa_K5378012</a>.</p>
Pan Zhao's avatar
Pan Zhao committed
                <p className="indent">Moreover, we added information to an existing part created by iGEM21_Tsinghua, clearly documenting our Functional Verification on the Part's Main Page on the Registry. Here shows the link <a href='https://parts.igem.org/Part:BBa_K3924029'>BBa_K3924029</a>.And we also make our new composite part <a href='https://parts.igem.org/Part:BBa_K5378021'>BBa_K5378021</a>.</p>
Xingan Zhao's avatar
Xingan Zhao committed
                </Element>

Xingan Zhao's avatar
Xingan Zhao committed