Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/components/NavBar/NavbarDesktop.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Team from '../../pages/Team';
import Sponsors from '../../pages/Sponsors';
// import Blog from '../../pages/Blog/Blog'; // Commented out March 21st 2025


import Link from './Link';

const NavbarContainer = styled.div`
Expand Down
3 changes: 3 additions & 0 deletions src/components/OurTeam/OurTeam.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ const OurTeam: React.FC = () => (
provide an effective mentorship experience for all new team members.
</p>
<TeamPhoto src={Team} alt="some team photo" />
<p>
Curious how you can help? Here is a list of our teams, what they do, as well as the team leads.
</p>
<div className="centerDiv">
<Button
backgroundColor="yellow"
Expand Down
7 changes: 7 additions & 0 deletions src/components/PastGeeseTimeline/hooks/geese-images.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import goose1 from '../../../static/img/pgimgs/goose1.png';
import goose2 from '../../../static/img/pgimgs/goose2.png';
import goose3 from '../../../static/img/pgimgs/goose3.png';
import goose4 from '../../../static/img/pgimgs/goose4.png';
import goose5 from '../../../static/img/pgimgs/goose5.png';

interface Image {
imgFile: string;
Expand Down Expand Up @@ -49,6 +50,12 @@ const imgs: Image[] = [
desc:
'By the fourth competition, we had realized that, despite wheeled propulsion posting record-breaking speeds in the SpaceX Hyperloop tube, there was no way of scaling those systems to transcontinental scale—wheels spinning at Mach 1 simply cannot last. We pivoted to designing a contactless linear induction motor from scratch, and simplified the rest of the pod to allow us to devote the majority of our time on the most difficult research.',
},
{
imgFile: goose5,
name: 'Goose V',
desc:
'With Goose V, we continued to refine the wheel-less propulsion methods, by implementing a system to convert constant power into three-phase power to maximize thrust and speed.'
}
];

const useGeeseImages:
Expand Down
2 changes: 1 addition & 1 deletion src/components/Sponsor/SponsorPage.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React from 'react';
import React from 'react';
import styled from 'styled-components';
import Grid from '@material-ui/core/Grid';
import SponsorComponent from './Sponsor';
Expand Down
2 changes: 1 addition & 1 deletion src/components/SponsorsLanding/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
export * from './SponsorsLanding';
export { default as Sponsors } from './SponsorsLanding';
export { default as SponsorsLanding } from './SponsorsLanding';
4 changes: 3 additions & 1 deletion src/components/TextWithImage/TextWithImage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ export type MyProps = {
text: string;
link?: string;
linkText?: string;
wideImage?: boolean;
largeImage?: boolean;
};

interface Props {
Expand Down Expand Up @@ -48,7 +50,7 @@ export class TextWithImage extends React.Component<Props> {
</div>
</div>
<img
className="Img-TextWithImage"
className={`Img-TextWithImage ${entry.largeImage ? 'Img-TextWithImage--large' : ''} ${entry.wideImage ? 'Img-TextWithImage--wide' : ''}`}
src={this.props.imgData[key]}
alt="waterloop"
></img>
Expand Down
33 changes: 33 additions & 0 deletions src/components/TextWithProfileImage/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Text with Image Component ReadMe

## Purpose:

Displays text, along with an circular image beside it. Can be configured to also display a title and a button that redirects the user to a link. Used to display the team leads under the "teams" section.

## How to create:

Pass in **list of JSON data** into the prop parameter _**data**_, with each JSON entry containing the following parameters:

```JSON
{
"title": "The title to display (optional)",
"text": "The descriptive text (required)",
"link": "Link to redirect user to when they click the 'VIEW MORE' button (optional - button hidden when parameter not provided)"
}
```
### IMPORTANT NOTE:

Because of the way images are stored, **you also have to manually import the images into the parent component using TextWithImage** from the `static/img` folder and pass them into a `string[]` type variable in the same order as the corresponding JSON entries.


Additionally, you can change the layout to only display text on the **left** or on the **right** by passing either value into the prop parameter _**textPos**_. By default, this is set to **alternate** the text position between left and right.

## Notes:

1. Please don't use too many words in the title and description.

2. Responsive design for (mobile) devices under **500px** width.

3. Left and right border padding of the components is assumed to be done by the parent component for the mobile view.

4. If you have any questions, contact Jeff at [[email protected]]([email protected]) or [[email protected]]([email protected])
83 changes: 83 additions & 0 deletions src/components/TextWithProfileImage/TextWithProfileImage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import React from 'react';
import { Button } from 'components/Button';
import 'theme/styles.scss';

export type MyCircularProps = {
title?: string;
text: string;
link?: string;
linkText?: string;
};

interface Props {
data: MyCircularProps[];
imgData: string[];
textPos?: string;
}

export class TextWithProfileImage extends React.Component<Props> {
renderChildren = (data: MyCircularProps[]): React.ReactElement[] => {
let isRightLeft = true; // Alternate between right-left and left-right layout.
let key = -1;
return data.map((entry: MyCircularProps) => {
isRightLeft = !isRightLeft;
key += 1;

// Determine if image should be displayed first or after text:
let posClass = '';
switch (this.props.textPos) {
case 'left':
posClass = 'left-right-variant';
break;
case 'right':
posClass = 'right-left-variant';
break;

default:
// The "alternate" case
posClass = isRightLeft ? 'right-left-variant' : 'left-right-variant';
}

return (
<div key={key} className={`Block-TextWithProfileImage ${posClass}`}>
<div className="TextBlock-TextWithProfileImage">
{entry.title !== undefined ? <h3>{entry.title}</h3> : <b></b>}
<p>{entry.text}</p>
<div className="ButtonBlock-TextWithProfileImage">
{this.renderButton(entry.link, entry.linkText)}
</div>
</div>
<img
className="Img-TextWithProfileImage"
src={this.props.imgData[key]}
alt="waterloop"
></img>
<div className="text-w-profile-image-btn-mobile">
{this.renderButton(entry.link, entry.linkText)}
</div>
</div>
);
});
};

renderButton = (
link: string | undefined,
linkText: string | undefined,
): React.ReactElement => {
if (link !== undefined && linkText !== undefined) {
return (
<Button
backgroundColor="yellow"
textColor="black"
text={linkText}
onClick={(): Window | null => window.open(link, '_self')}
/>
);
}
return <></>;
};

render() {
return <div>{this.renderChildren(this.props.data)}</div>;
}
}
1 change: 1 addition & 0 deletions src/components/TextWithProfileImage/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './TextWithProfileImage'; // This will take all the named exports
2 changes: 2 additions & 0 deletions src/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ export * from './SimpleFeatures';
export * from './Hero';
export * from './TeamsDisplayer';
export * from './TextWithImage';
export * from './TextWithProfileImage';
export * from './TextWithProfileImage';
export * from './ColumnBlock';
export * from './Postings';
export * from './NewsletterSignUpForm';
7 changes: 4 additions & 3 deletions src/pages/Contact.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ContactForm } from "components/ContactForm";
import Hero from "components/Hero/General";
// import { MAP } from "../config/map";
import "../theme/styles.scss";
import NewsletterSignUpForm from "components/NewsletterSignUpForm";
//import NewsletterSignUpForm from "components/NewsletterSignUpForm";

const Contact: React.FC = () => (
<div>
Expand All @@ -23,8 +23,9 @@ const Contact: React.FC = () => (
desc="Want to get in touch? Submit this form or drop us a message at [email protected]"
></ContactForm>

<NewsletterSignUpForm/>

{//<NewsletterSignUpForm/>
}

<div className="locationContainer">
<h3>Visit Us</h3>
<table>
Expand Down
8 changes: 4 additions & 4 deletions src/pages/Flock.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import Hero from "components/Hero/General";
import { GooseRoster } from "components/GooseRoster";
import { SimpleFeatures } from "sections/FeaturedComponent";
import { PastGeeseTimeline as UnstyledPastGeeseTimeline } from "components/PastGeeseTimeline";
import Goose1 from "../static/img/goose/Goose.png";
import Goose2 from "../static/img/goose/Goose1.png";
import Goose1 from "../static/img/goose/goose6_full.png";
import Goose2 from "../static/img/goose/goose6_better.png";
import "../theme/styles.scss";

const PastGeeseTimeline = styled(UnstyledPastGeeseTimeline)``;
Expand All @@ -28,8 +28,8 @@ const Flock: React.FC = () => (
<div className="pageContainer">
<Container>
<GooseRoster
heading="Goose V"
description="Our 'flock' of Hyperloop pods has developed in sophistication over 5 iterations of research and development. Take a look at the major features of our latest pod and the history of its development!"
heading="Goose VI"
description="Our 'flock' of Hyperloop pods has developed in sophistication over 6 iterations of research and development. Take a look at the major features of our latest pod and the history of its development!"
imgUrls={Goose5}
></GooseRoster>
<div className="break"></div>
Expand Down
32 changes: 24 additions & 8 deletions src/pages/Home.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,30 @@
import React from 'react';

import Hero from 'components/Hero/Landing';
import { Sponsors } from 'components/SponsorsLanding';
import { SponsorsLanding } from 'components/SponsorsLanding';
import { ImgJSON } from 'components/SponsorsLanding';
import { TextWithImage, MyProps } from 'components/TextWithImage';
import { ColumnBlock, Props } from 'components/ColumnBlock';
import Text from 'static/copy/Landing/TextWithImage.json';
import ColText from 'static/copy/Landing/ColumnBlock.json';
import '../theme/styles.scss';

// Images for sponsors:
import Brent from '../static/img/official-sponsors/BrentsWeldingAndFab.png';
// import Brent from '../static/img/official-sponsors/BrentsWeldingAndFab.png';
import Weef from '../static/img/official-sponsors/weef.jpg';
import WaterlooEng from '../static/img/official-sponsors/wes.jpg';
import UW from '../static/img/official-sponsors/foe.jpg';
import ClickUp from '../static/img/official-sponsors/ClickUp.png';
import WCBranham from '../static/img/official-sponsors/WCBranham.png';
// import ClickUp from '../static/img/official-sponsors/ClickUp.png';
// import WCBranham from '../static/img/official-sponsors/WCBranham.png';
import Altium from '../static/img/official-sponsors/altium.png';
import Ansys from '../static/img/official-sponsors/ansys.png';
import BILD from '../static/img/official-sponsors/bild.png';
import Dassault from '../static/img/official-sponsors/Dassault-Systems.png';
import Hakko from '../static/img/official-sponsors/hakko.png';
import Keysight from '../static/img/official-sponsors/keysight.jpg';
import Mitutoyo from '../static/img/official-sponsors/mitutoyo_logo.png';
import SKF from '../static/img/official-sponsors/SKF-Logo.png';
import Stantec from '../static/img/official-sponsors/Stantec.png';

import Goals from '../static/img/landing/textwithimage/goals.png';
import Competition from '../static/img/landing/textwithimage/competition.png';
Expand All @@ -25,12 +35,18 @@ const ColData: Props[] = ColText;

// Place data here:
const imgJSON: ImgJSON[] = [
{ imgSrc: Brent, imgAlt: 'Brent' },
{ imgSrc: Weef, imgAlt: 'Weef' },
{ imgSrc: WaterlooEng, imgAlt: 'WaterlooEng' },
{ imgSrc: UW, imgAlt: 'UW' },
{ imgSrc: ClickUp, imgAlt: 'ClickUp' },
{ imgSrc: WCBranham, imgAlt: 'WCBranham' },
{ imgSrc: Ansys, imgAlt: 'Ansys' },
{ imgSrc: BILD, imgAlt: 'BILD' },
{ imgSrc: Dassault, imgAlt: 'Dassault' },
{ imgSrc: Hakko, imgAlt: 'Hakko' },
{ imgSrc: Keysight, imgAlt: 'Keysight' },
{ imgSrc: Mitutoyo, imgAlt: 'Mitutoyo' },
{ imgSrc: SKF, imgAlt: 'SKF' },
{ imgSrc: Stantec, imgAlt: 'Stantec' },
{ imgSrc: Altium, imgAlt: 'Altium' },
];

const Home: React.FC = () => (
Expand All @@ -49,7 +65,7 @@ const Home: React.FC = () => (
<ColumnBlock data={ColData} imgData={imgData} />
<div className="pageContainer">
<div className="break"></div>
<Sponsors data={imgJSON} />
<SponsorsLanding data={imgJSON} />
</div>
</div>
);
Expand Down
13 changes: 8 additions & 5 deletions src/pages/Recruitment/Recruitment.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import { MyProps } from "components/TextWithImage";
import Text from "static/copy/Recruitment/Recruitment.json";
import JoinUs from "../../static/img/team/joinus.png";
import "../../theme/styles.scss";

import JobPostings from "components/Postings/Postings";

import { Button } from "components";
import usePostings from "hooks/postings";
const castData: MyProps[] = Text;
Expand All @@ -25,8 +25,8 @@ const VideoContainer = styled.div`
padding-top: 56.25%; /* 16:9 Aspect Ratio (divide 9 by 16 = 0.5625) */
`;

const SignUpButton = styled(Button)`
width: 128px;
const FAQButton = styled(Button)`
width: 256px;
`;


Expand Down Expand Up @@ -84,9 +84,12 @@ const Recruitment: React.FC = () =>{
Missed recruitment but still want to join our team? Reach out to us at <a href = "mailto:[email protected]">[email protected]</a>!
</p> */}
<p>
Want to learn about linear induction motors, high power PCBS, or other technical and business topics? Fill out out our <a href = "https://forms.gle/jfcf6xypJukN9xjf7">Application Form</a> here.<br/>
{//Want to learn about linear induction motors, high power PCBS, or other technical and business topics? Fill out out our <a href = "https://teamwaterloop.ca/recruitment/faq">Application Form</a> here.<br/>
}
Have questions? Check our FAQ, or contact us.
</p>
<SignUpButton onClick={() => window.open('http://wloop.fly.dev/subscribe')} text="Sign up" backgroundColor="yellow" textColor="black" />
{<FAQButton onClick={() => window.open('recruitment/faq')} text="Frequently Asked Questions" backgroundColor="yellow" textColor="black" />
}
</FlexContainer>
)}
</div>
Expand Down
Loading