-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #37 from cmu-jsa/career_fair
Added Career Fair page
- Loading branch information
Showing
19 changed files
with
1,315 additions
and
76 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,172 @@ | ||
/** | ||
* Company List Item Component | ||
* | ||
* @module src/routes/career | ||
*/ | ||
|
||
import React from 'react'; | ||
import { styled } from '@mui/material/styles'; | ||
import Card from '@mui/material/Card'; | ||
import CardActions from '@mui/material/CardActions'; | ||
import CardContent from '@mui/material/CardContent'; | ||
import CardMedia from '@mui/material/CardMedia'; | ||
import Chip from '@mui/material/Chip'; | ||
import Collapse from '@mui/material/Collapse'; | ||
import Button from '@mui/material/Button'; | ||
import IconButton from '@mui/material/IconButton'; | ||
import ListItem from '@mui/material/ListItem'; | ||
import Stack from '@mui/material/Stack'; | ||
import Typography from '@mui/material/Typography'; | ||
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; | ||
import { | ||
number, object | ||
} from 'prop-types'; | ||
import ReactMarkdown from 'react-markdown'; | ||
|
||
import { | ||
PlaidDescription, | ||
JmcDescription, | ||
MujinDescription, | ||
MenuDescription, | ||
PlaystationDescription | ||
} from './descriptions'; | ||
|
||
const descriptions = { | ||
0: PlaidDescription, | ||
1: JmcDescription, | ||
2: MujinDescription, | ||
3: MenuDescription, | ||
4: PlaystationDescription | ||
}; | ||
|
||
/* eslint-disable no-unused-vars */ | ||
const ExpandMore = styled((props) => { | ||
const { expand, ...other } = props; | ||
return <IconButton {...other} />; | ||
})(({ theme, expand }) => ({ | ||
transform: !expand ? 'rotate(0deg)' : 'rotate(180deg)', | ||
marginLeft: 'auto', | ||
transition: theme.transitions.create('transform', { | ||
duration: theme.transitions.duration.shortest | ||
}) })); | ||
/* eslint-enable no-unused-vars */ | ||
|
||
const CompanyListItem = (props) => { | ||
const { company, index } = props; | ||
const [expanded, setExpanded] = React.useState(false); | ||
const handleExpandClick = () => { | ||
setExpanded(!expanded); | ||
}; | ||
|
||
return ( | ||
<ListItem> | ||
<Card sx={{ minWidth: 768 }}> | ||
<CardMedia | ||
component='img' | ||
height='250' | ||
image={company.imagePath} | ||
alt={company.name} | ||
/> | ||
<CardContent> | ||
<Typography | ||
gutterBottom variant="h5" | ||
component="div"> | ||
{company.name} | ||
</Typography> | ||
<Typography variant="body2"> | ||
{company.industry} | ||
</Typography> | ||
</CardContent> | ||
<CardContent> | ||
<Stack spacing={1}> | ||
<Stack direction="row" spacing={1}> | ||
{company.intern === "1" && | ||
<Chip | ||
label="Internship" | ||
color="primary" | ||
size ='small' | ||
/> | ||
} | ||
{company.fulltime === "1" && | ||
<Chip | ||
label="Fulltime" | ||
color="primary" | ||
size ='small' | ||
/> | ||
} | ||
</Stack> | ||
<Stack direction="row" spacing={1}> | ||
{company.japan === "1" && | ||
<Chip | ||
label="Japan" | ||
color="secondary" | ||
size ='small' | ||
/> | ||
} | ||
{company.us === "1" && | ||
<Chip | ||
label="US" | ||
color="secondary" | ||
size ='small' | ||
/> | ||
} | ||
{company.china === "1" && | ||
<Chip | ||
label="China" | ||
color="secondary" | ||
size ='small' | ||
/> | ||
} | ||
</Stack> | ||
<Stack direction="row" spacing={1}> | ||
{company.japanese === "1" && | ||
<Chip | ||
label="Japanese required" | ||
color="success" | ||
size ='small' | ||
/> | ||
} | ||
{company.english === "1" && | ||
<Chip | ||
label="English required" | ||
color="success" | ||
size ='small' | ||
/> | ||
} | ||
</Stack> | ||
</Stack> | ||
</CardContent> | ||
<CardActions> | ||
<Button | ||
size="small" | ||
href={company.url} | ||
target="_blank"> | ||
Website | ||
</Button> | ||
<ExpandMore | ||
expand={expanded} | ||
onClick={handleExpandClick} | ||
aria-expanded={expanded} | ||
aria-label="show more" | ||
> | ||
<ExpandMoreIcon /> | ||
</ExpandMore> | ||
</CardActions> | ||
<Collapse in={expanded} timeout="auto" unmountOnExit> | ||
<CardContent> | ||
<ReactMarkdown> | ||
{descriptions[index]} | ||
</ReactMarkdown> | ||
</CardContent> | ||
</Collapse> | ||
</Card> | ||
</ListItem> | ||
); | ||
}; | ||
|
||
CompanyListItem.propTypes = { | ||
company: object, | ||
index: number | ||
}; | ||
|
||
export default CompanyListItem; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
Category,Start Date,End Date,Event,Time,Culture Tag,"Day (not used, keep for \r issues)",,,,,, | ||
English,"Thursday, October 21",,Sony Interactive Entertainment,20:00-20:30,playstation,1,,,,,, | ||
English,"Thursday, October 21",,Japan Medical Company,20:40-21:10,jmc,0,,,,,, | ||
English,"Friday, October 22",,Mujin,20:00-20:30,mujin,0,,,,,, | ||
English,"Friday, October 22",,Menu,20:40-21:10,menu,0,,,,,, | ||
Japanese,"Friday, October 22",,Plaid,21:20-22:50,plaid,0,,,,,, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
/** | ||
* Matsuri Schedule page | ||
* | ||
* @module src/routes/matsuri/schedule | ||
*/ | ||
|
||
|
||
import React from 'react'; | ||
import './index.less'; | ||
|
||
/** | ||
* Schedule Table Component | ||
* | ||
* @returns {ReactElement} The component's elements. | ||
*/ | ||
class ScheduleTable extends React.PureComponent { | ||
/** | ||
* Initializes the component. | ||
*/ | ||
constructor() { | ||
super(); | ||
|
||
let csvData = require('./careerSchedule.csv'); | ||
let headerDates = new Set(); | ||
csvData.forEach(event => { headerDates.add(event['Start Date']);}); | ||
const currYear = 2021; | ||
headerDates = Array.from(headerDates); | ||
headerDates.sort((s1, s2) => { | ||
const date1 = new Date(s1); | ||
const date2 = new Date(s2); | ||
date1.setFullYear(currYear); | ||
date2.setFullYear(currYear); | ||
return (date1 < date2 ? -1 : 1); | ||
}); | ||
|
||
this.state = { | ||
scheduleData: csvData, | ||
headerDates: headerDates | ||
}; | ||
} | ||
/** | ||
* Get label for type of event | ||
* | ||
* @param {string} type Type of event | ||
* @returns {JSX.Element} Event label | ||
*/ | ||
getLabel(type) { | ||
let color; | ||
switch (type) { | ||
case 'English': | ||
color = 'green'; | ||
break; | ||
case 'Japanese': | ||
color = 'blue'; | ||
break; | ||
case 'Game': | ||
color = 'green'; | ||
break; | ||
default: | ||
break; | ||
} | ||
return ( | ||
<span style={{ | ||
backgroundColor: color, | ||
borderRadius: '12px', | ||
color: 'white', | ||
padding: '5px', | ||
marginLeft: '24px' }}> | ||
{type} | ||
</span> | ||
); | ||
} | ||
|
||
/** | ||
* Get event link | ||
* | ||
* @param {Object} event Event object | ||
* @returns {JSX.Element} Event label | ||
*/ | ||
getEventLink(event) { | ||
const cultureTag = event['Culture Tag']; | ||
let link; | ||
switch (cultureTag) { | ||
case 'Food': | ||
link = '/matsuriculture/food/'; | ||
break; | ||
case 'Art': | ||
link = '/matsuriculture/art/'; | ||
break; | ||
case 'Music': | ||
link = '/matsuriculture/music/'; | ||
break; | ||
case 'Games': | ||
link = '/matsuriculture/games/'; | ||
break; | ||
case 'Literature': | ||
link = '/matsuriculture/literature/'; | ||
break; | ||
case 'Culture': | ||
link = '/matsuriculture/'; | ||
break; | ||
default: | ||
link = false; | ||
} | ||
return link; | ||
} | ||
|
||
/** | ||
* Renders the component. | ||
* | ||
* @returns {ReactElement} The component's elements. | ||
*/ | ||
render() { | ||
return ( | ||
<div className='schedule'> | ||
{this.state.headerDates.map(headerDate => ( | ||
<div className='matsuri-day' style={{ position: 'relative' }} key={headerDate.key}> | ||
<div style={{ position: 'sticky', top: '43px', borderRadius: '6px', color: 'white', backgroundColor: '#2e3192', padding: '10px' }}> | ||
{headerDate} | ||
</div> | ||
<table style={{ width: '100%' }}> | ||
{this.state.scheduleData.filter(event => event['Start Date'] === headerDate).map(event => ( | ||
<tr className='row' style={{ width: '100%', margin: '10px' }} key={event.key}> | ||
<div className='flex-row' style={{ display: 'flex', justifyContent: 'space-between', padding: '10px' }}> | ||
<div className='event-time' style={{ width: '20%' }}> | ||
{event['Time']} | ||
</div> | ||
<div className='event-detials' style={{ width: '80%', display: 'flex', justifyContent: 'space-between' }}> | ||
{this.getEventLink(event) | ||
? <a href={this.getEventLink(event)}>{event.Event}</a> | ||
: event.Event | ||
} | ||
{this.getLabel(event['Category'])} | ||
</div> | ||
</div> | ||
</tr> | ||
))} | ||
</table> | ||
</div> | ||
))} | ||
</div> | ||
); | ||
} | ||
} | ||
|
||
export default ScheduleTable; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
name,industry,imagePath,url,intern,fulltime,japan,us,china,japanese,english, | ||
Plaid Inc.,Marketing/Analytics,/images/career/plaid.png,https://plaid.co.jp/,1,0,1,0,0,1,0 | ||
Japan Medical Company,Medical Technology,/images/career/jmc.png,https://japanmedicalcompany.co.jp/en/,1,1,1,0,0,1,0, | ||
Mujin,Computer Science and Robotics,/images/career/mujin.png,https://mujin-corp.com/,1,1,1,1,1,0,1, | ||
Menu,Food Delivery,/images/career/menu.png,https://app.menu.jp/,1,1,1,0,0,0,1, | ||
Sony Interactive Entertainment,Entertainment Technology,/images/career/playstation.png,https://www.sie.com/jp/saiyo/newgrad/internship.html,1,0,1,0,0,1,1, |
Oops, something went wrong.