Merge branch 'master' into feature/next-js

This commit is contained in:
Aarni Halinen
2020-12-29 19:05:58 +02:00
59 changed files with 343 additions and 316 deletions
+5 -5
View File
@@ -1,10 +1,10 @@
import React, { ComponentProps } from "react";
import styled from "styled-components";
import { colors }from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import AddIcon from "@assets/img/add-icon.png";
const Link = styled(Anchor)`
const StyledLink = styled(Link)`
display: flex;
flex-flow: row nowrap;
align-items: center;
@@ -21,15 +21,15 @@ const Link = styled(Anchor)`
}
`;
type AddLinkProps = ComponentProps<typeof Anchor> & {
type AddLinkProps = ComponentProps<typeof Link> & {
text: string;
}
const AddLink: React.FC<AddLinkProps> = ({ text, ...props }) => (
<Link {...props}>
<StyledLink {...props}>
<img src={AddIcon} />
{text}
</Link>
</StyledLink>
)
export default AddLink;
+2 -2
View File
@@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import colors from "@theme/colors";
import breakpoints from "@theme/breakpoints";
@@ -20,7 +20,7 @@ const SideBar = styled.nav`
}
`;
const StyledLink = styled(Anchor)<{path: string}>`
const StyledLink = styled(Link)<{path: string}>`
padding: 1rem 3rem 1rem 1rem;
letter-spacing: 3px;
text-transform: uppercase;
-20
View File
@@ -1,20 +0,0 @@
import React from "react";
import Link from "next/link";
interface AnchorProps extends React.HTMLAttributes<HTMLAnchorElement> {
to: string;
}
const Anchor: React.FC<AnchorProps> = ({ to, ...props }) => {
if (to.startsWith("/")) {
return (
<Link href={to} {...props} />
);
}
else {
return (
<a href={to} {...props} />
);
}
}
export default Anchor;
+3 -3
View File
@@ -1,7 +1,7 @@
import React from "react";
import styled from "styled-components";
import { colors } from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import breakpoints from "@theme/breakpoints";
interface WrappedCardProps {
@@ -97,11 +97,11 @@ const WrappedCard: React.FC<WrappedCardProps> = ({ title, text, link, image, ima
) : null;
const button = (
<Anchor to={link}>
<Link to={link}>
<button onClick={buttonOnClick}>
Lue lisää&nbsp;
</button>
</Anchor>
</Link>
);
return (
+6 -6
View File
@@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import Anchor from "../Anchor";
import { Link } from "@components/index";
import colors from "@theme/colors";
import breakpoints from "@theme/breakpoints";
@@ -79,14 +79,14 @@ const FooterContent: React.FC = () => (
<div>
<p>Y-tunnus: 1627010-1</p>
<p>sik-hallitus@list.ayy.fi</p>
<Anchor to="/yhteystiedot">Yhteystiedot</Anchor>
<Link to="/yhteystiedot">Yhteystiedot</Link>
</div>
</div>
<div>
<Anchor to="/jaseneksi">Jäseneksi</Anchor>
<Anchor to="/palaute">Palaute</Anchor>
<Anchor to="https://static.sika.sik.party">Arkisto</Anchor>
<Anchor to="https://static.sika.sik.party">Materiaalipankki</Anchor>
<Link to="/jaseneksi">Jäseneksi</Link>
<Link to="/palaute">Palaute</Link>
<Link to="https://static.sika.sik.party">Arkisto</Link>
<Link to="https://static.sika.sik.party">Materiaalipankki</Link>
</div>
</Columns>
</MarginSpace>
+1 -1
View File
@@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import { Link } from "react-router-dom";
import { Link } from "@components/index";
import TitleImage from "@assets/img/SIK_RGB_W_side.png";
import breakpoints from "@theme/breakpoints";
+3 -3
View File
@@ -1,7 +1,7 @@
import React from "react";
import styled from "styled-components";
import { colors } from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
interface HeroAsideItemProps {
header: string;
@@ -20,11 +20,11 @@ export const HeroAsideItem: React.FC<HeroAsideItemProps> = ({ header, text, link
{text && (
<p>{text}</p>
)}
<Anchor to={link}>
<Link to={link}>
<h6>
{linkText}
</h6>
</Anchor>
</Link>
</Article>
)
+31
View File
@@ -0,0 +1,31 @@
import React from "react";
import NextJSLink, { LinkProps } from "next/link";
interface Props extends Omit<LinkProps, "href"> {
template?: string;
to: string;
}
interface Props extends React.HTMLAttributes<HTMLAnchorElement> {
to: string;
}
const Link: React.FC<Props> = ({ to, template, ...props }) => {
if (template) {
return (
<NextJSLink href={template} as={to} {...props} />
)
}
if (to.startsWith("/") || to.startsWith("#")) {
return (
<NextJSLink href={to} {...props} />
);
}
else {
return (
<a href={to} {...props} />
);
}
}
export default Link;
+2 -2
View File
@@ -2,13 +2,13 @@ import React from "react";
import styled from "styled-components";
import colors from "@theme/colors";
import breakpoints from "@theme/breakpoints";
import Anchor from "./Anchor";
import { Link } from "@components/index";
interface NavbarChildLinkProps {
to: string;
}
const StyledLink = styled(Anchor)`
const StyledLink = styled(Link)`
display: block;
padding: 1rem;
letter-spacing: 1.5px;
+2 -2
View File
@@ -1,7 +1,7 @@
import React, { useState } from "react";
import styled from "styled-components";
import DropDownBox from "./DropDownBox";
import Anchor from "./Anchor";
import { Link } from "@components/index";
import colors from "@theme/colors";
import breakpoints from "@theme/breakpoints";
@@ -20,7 +20,7 @@ const Container = styled.div`
}
`;
const StyledLink = styled(Anchor)`
const StyledLink = styled(Link)`
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
+2 -2
View File
@@ -1,7 +1,7 @@
import React from "react";
import styled from "styled-components";
import { colors } from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
interface PageLinkProps {
to: string;
@@ -43,7 +43,7 @@ const StyledPageLink = styled.div`
const PageLink: React.FC<PageLinkProps> = ({ to, desc, children }) => (
<StyledPageLink>
<p>{children}</p>
<Anchor to={to}>{desc}</Anchor>
<Link to={to}>{desc}</Link>
</StyledPageLink>
);
+3 -3
View File
@@ -2,7 +2,7 @@
import React from "react";
import styled from "styled-components";
import { colors } from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
const Section = styled.section<{ colors: string }>`
${(p) => p.colors}
@@ -91,9 +91,9 @@ const CTASection: React.FC<CTASectionProps> = ({ bgColor = "orange1", link, link
<Section colors={textColors(bgColor)} {...props}>
<h1>{children}</h1>
{link && (
<Anchor to={link}>
<Link to={link}>
<h4>{linkText}</h4>
</Anchor>
</Link>
)}
</Section>
);
@@ -16,6 +16,12 @@ const Container = styled.div`
button {
color: black;
}
.mde-preview {
min-height: unset !important;
height: 200px;
overflow: scroll;
}
`;
const MarkdownEditorWidget: React.FC<MarkdownEditorWidgetProps> = ({ value, onChange }) => {
@@ -1,7 +1,6 @@
import React from "react";
import "./SectionDividerWidget.scss";
import Icon from "../../Icon";
import { IconType } from "../../Icon";
import styled from "styled-components";
import Icon, { IconType } from "@components/Icon";
interface SectionDividerWidgetProps {
label: string;
@@ -18,10 +17,19 @@ const getIconByLabel = (label: string) => {
return null;
}
const Heading = styled.h3`
display: flex;
margin-top: 12px;
& > span.icon {
margin-top: 4px;
}
`;
const SectionDividerWidget: React.FC<SectionDividerWidgetProps> = ({ label }) => (
<h3 className="section-divider-widget">
<Heading>
{label}&nbsp;{getIconByLabel(label)}
</h3>
</Heading>
);
export default SectionDividerWidget;
@@ -1,8 +0,0 @@
.section-divider-widget {
display: flex;
margin-top: 12px;
> span.icon {
margin-top: 4px;
}
}
+1
View File
@@ -8,3 +8,4 @@ export { default as TextSection } from "./Sections/TextSection";
export { default as FullWidthSection } from "./Sections/FullWidthSection";
export { default as InfoBox } from "./InfoBox";
export { default as Accordion } from "./Accordion/Accordion";
export { default as Link } from "./Link";
+28 -1
View File
@@ -1,9 +1,36 @@
@import "./assets/scss/normalize";
@import "./assets/scss/globals";
$font: 'Montserrat', sans-serif;
$base-font: 12pt; // 16px
$base-line-height: 1.5;
$colors: (
// Name Color ?Hover?
dark-blue: 'dark-blue' #002d3a,
light-blue: 'light-blue' #bfdbd9,
white1: 'white1' #fff,
black1: 'black1' #000,
grey1: 'grey1' #d4d0c7,
grey2: 'grey2' #efece4,
orange1: 'orange1' #d57a2d,
orange2: 'orange2' #dd934e,
blue1: 'blue1' #57b2df,
light-turquoise: 'light-turquoise' #beddeb,
green1: 'green1' #c0dcd9,
sand: 'sand' #fdf9d7
);
@function color($label) {
$color: map-get($colors, $label);
@if $color {
@return nth($color, 2);
}
@warn 'No specified color for '#{$label}'; add your own to _colors.scss';
@return null;
}
* {
box-sizing: border-box;
}
-23
View File
@@ -1,23 +0,0 @@
import React from "react";
import Header from "@components/Header";
import Footer from "@components/Footer/Footer";
export interface CommonPageProps {
page: any;
}
export interface CommonPageState {}
class CommonPage extends React.Component<CommonPageProps, CommonPageState> {
render() {
const Page = this.props.page;
return (
<>
<Header />
<Page {...this.props} />
<Footer />
</>
);
}
}
export default CommonPage;
-100
View File
@@ -1,100 +0,0 @@
import React from "react";
import styled from "styled-components";
import { Redirect } from "react-router-dom";
import colors from "@theme/colors";
import breakpoints from "@theme/breakpoints";
import AdminHeader from "@components/AdminHeader";
import AdminSidebar from "@components/AdminSidebar";
import { isAuthenticated } from "@utils/auth";
const Main = styled.main`
display: flex;
color: ${colors.white};
background-color: ${colors.darkBlue};
flex-flow: row nowrap;
justify-content: flex-start;
align-items: flex-start;
flex: 1;
h1 {
margin-top: 0;
}
& > div {
padding: 0 1rem;
width: 100%;
max-width: 1000px;
margin: auto;
}
@media screen and (max-width: ${breakpoints.mobile}) {
flex-flow: column nowrap;
& > nav {
width: 100%;
}
}
`;
export interface AdminCommonPageProps {
page: any;
match: {
path: string;
};
requireAuthentication?: boolean;
}
export interface AdminCommonPageState {
redirecting: boolean;
}
class AdminCommonPage extends React.Component<AdminCommonPageProps, AdminCommonPageState> {
unmounted: boolean;
constructor(props) {
super(props);
this.state = {
redirecting: false,
};
if (props.requireAuthentication) {
this.updateIsAuthenticated();
}
}
componentWillUnmount() {
this.unmounted = true;
}
updateIsAuthenticated = async () => {
const redirecting = !await isAuthenticated();
if (!this.unmounted && redirecting) {
this.setState({
redirecting,
});
}
}
render() {
const Page = this.props.page;
const { path } = this.props.match;
const { redirecting } = this.state;
if (redirecting) {
const loginURL = `/admin/login?next=${path}`;
return <Redirect to={loginURL} />;
}
return (
<>
<AdminHeader />
<Main>
<AdminSidebar path={path} />
<Page {...this.props} />
</Main>
</>
);
}
}
export default AdminCommonPage;
@@ -6,7 +6,7 @@ import { Tag, getTags } from "@models/Tag";
import { SignupForm, getForms } from "@models/SignupForm";
import { Event, createEvent, getEvent, updateEvent } from "@models/Event";
import DatetimeWidget from "@components/Widgets/DatetimeWidget";
import SectionDividerWidget from "@components/Widgets/SectionDividerWidget/SectionDividerWidget";
import SectionDividerWidget from "@components/Widgets/SectionDividerWidget";
import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget";
const widgets = {
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import AddLink from "@components/AddLink";
import { Event, getEvents } from "@models/Event";
@@ -25,7 +25,7 @@ const renderData = (events: Event[]) => {
<tbody>
{events.map(event => (
<tr key={event.id}>
<td><Anchor to={`${URL}/${event.id}`}>{event.title_fi}</Anchor></td>
<td><Link to={`${URL}/${event.id}`}>{event.title_fi}</Link></td>
<td>{formatRelative(new Date(event.start_time), new Date())}</td>
<td>{formatRelative(new Date(event.end_time), new Date())}</td>
</tr>
@@ -5,7 +5,7 @@ import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import { Tag, getTags } from "@models/Tag";
import { Post, createPost, getPost, updatePost } from "@models/Feed";
import DatetimeWidget from "@components/Widgets/DatetimeWidget";
import SectionDividerWidget from "@components/Widgets/SectionDividerWidget/SectionDividerWidget";
import SectionDividerWidget from "@components/Widgets/SectionDividerWidget";
import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget";
const widgets = {
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import AddLink from "@components/AddLink";
import { Post, getFeed } from "@models/Feed";
@@ -25,7 +25,7 @@ const renderData = (feed: Post[]) => {
<tbody>
{feed.map(post => (
<tr key={post.id}>
<td><Anchor to={`${URL}/${post.id}`}>{post.title_fi}</Anchor></td>
<td><Link to={`${URL}/${post.id}`}>{post.title_fi}</Link></td>
<td>{post.description_fi}</td>
<td>{formatRelative(new Date(post.publish_time), new Date())}</td>
</tr>
@@ -4,7 +4,7 @@ import { RouteComponentProps } from "react-router-dom";
import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import { JobAd, getJobAd, createJobAd, updateJobAd } from "@models/JobAd";
import DatetimeWidget from "@components/Widgets/DatetimeWidget";
import SectionDividerWidget from "@components/Widgets/SectionDividerWidget/SectionDividerWidget";
import SectionDividerWidget from "@components/Widgets/SectionDividerWidget";
import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget";
const widgets = {
@@ -2,7 +2,7 @@ import React from "react";
import { Helmet } from "react-helmet";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import AddLink from "@components/AddLink";
import useFetchJobAds from "@hooks/useFetchJobAds";
import { JobAd } from "@models/JobAd";
@@ -27,7 +27,7 @@ const renderData = (jobAds: JobAd[]) => {
<tbody>
{jobAds.map(ad => (
<tr key={ad.id}>
<td><Anchor to={`${URL}/${ad.id}`}>{ad.title_fi}</Anchor></td>
<td><Link to={`${URL}/${ad.id}`}>{ad.title_fi}</Link></td>
<td>{ad.description_fi}</td>
<td>
{ad.autohide_enabled ?
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import AddLink from "@components/AddLink";
import { SignupForm, getForms } from "@models/SignupForm";
@@ -27,11 +27,11 @@ const renderData = (signupForms: SignupForm[]) => {
<tbody>
{signupForms.map(signupForm => (
<tr key={signupForm.id}>
<td><Anchor to={`${URL}/${signupForm.id}`}>{signupForm.title_fi}</Anchor></td>
<td><Link to={`${URL}/${signupForm.id}`}>{signupForm.title_fi}</Link></td>
<td>{formatRelative(new Date(signupForm.start_time), new Date())}</td>
<td>{formatRelative(new Date(signupForm.end_time), new Date())}</td>
<td><Anchor to={`${URL}/${signupForm.id}/list`}>View</Anchor></td>
<td><Anchor to={`${URL}/${signupForm.id}/email`}>Send</Anchor></td>
<td><Link to={`${URL}/${signupForm.id}/list`}>View</Link></td>
<td><Link to={`${URL}/${signupForm.id}/email`}>Send</Link></td>
</tr>
))}
</tbody>
@@ -5,7 +5,7 @@ import HonoraryPageView from "@views/HonoraryPage/HonoraryPageView";
const HonoraryPage: React.FC = () => (
<>
<Helmet>
<link rel="canonical" href="https://sik.ayy.fi/toiminta/kunnia" />
<link rel="canonical" href="https://sik.ayy.fi/kilta/kunnia" />
</Helmet>
<HonoraryPageView />
</>
+48 -63
View File
@@ -1,47 +1,36 @@
import React from "react";
import { Switch, Route } from "react-router-dom";
import { Helmet } from "react-helmet";
import FrontPage from "./pages";
import GuildPage from "./pages/GuildPage";
import NotFoundPage from "./pages/NotFoundPage";
import CommonPage from "./pages/CommonPage";
import JsonLD from "@components/JsonLD";
import "./index.scss";
import AdminFrontPage from "./pages/admin/AdminFrontView";
import AdminEventPage from "./pages/admin/AdminEventPage";
import AdminFeedPage from "./pages/admin/AdminFeedPage";
import AdminCommonPage from "./pages/admin/AdminCommonPage";
import AdminSignupPage from "./pages/admin/AdminSignupPage";
import AdminLoginPage from "./pages/admin/AdminLoginPage";
import AdminLogoutPage from "./pages/admin/AdminLogoutPage";
import EventCreatePage from "./pages/admin/EventCreatePage";
import FeedCreatePage from "./pages/admin/FeedCreatePage";
import ContactsPage from "./pages/ContactsPage";
import SignupCreatePage from "./pages/admin/SignupCreatePage";
import SignupEmailPage from "./pages/admin/SignupEmailPage";
import SignupListPage from "./pages/admin/SignupListPage";
import SignUpPage from "./pages/SignUpPage";
import ActualPage from "./pages/ActualPage";
import FreshmenPage from "./pages/FreshmenPage";
import HonoraryPage from "./pages/HonoraryPage";
import StudiesPage from "./pages/StudiesPage";
import CorporatePage from "./pages/CorporatePage";
import InEnglishPage from "./pages/InEnglishPage";
import EventPage from "./pages/EventPage";
import AdminJobAdPage from "@pages/admin/AdminJobAdPage";
import JobAdCreatePage from "@pages/admin/JobAdCreatePage";
const renderPage = (Page) => (props): JSX.Element => {
return <CommonPage page={Page} {...props} />;
};
const renderAdminLoginPage = (Page) => (props): JSX.Element => {
return <AdminCommonPage page={Page} {...props} />;
};
const renderAdminPage = (Page) => (props): JSX.Element => {
return <AdminCommonPage page={Page} {...props} requireAuthentication />;
};
import FrontPage from "./pages";
import GuildPage from "./pages/kilta";
import NotFoundPage from "./pages/404";
import AdminFrontPage from "./pages/admin";
import AdminEventPage from "./pages/admin/events";
import AdminFeedPage from "./pages/admin/feed";
import AdminSignupPage from "./pages/admin/signups";
import AdminLoginPage from "./pages/admin/login";
import AdminLogoutPage from "./pages/admin/logout";
import EventCreatePage from "./pages/admin/events/create";
import FeedCreatePage from "./pages/admin/feed/create";
import ContactsPage from "./pages/yhteystiedot";
import SignupCreatePage from "./pages/admin/signups/create";
import SignupEmailPage from "./pages/admin/signups/[id]/email";
import SignupListPage from "./pages/admin/signups/[id]/list";
import SignUpPage from "./pages/signup/[id]";
import ActualPage from "./pages/kilta/toiminta";
import FreshmenPage from "./pages/kilta/fuksi";
import HonoraryPage from "./pages/kilta/kunnia";
import StudiesPage from "./pages/opinnot_ja_ura";
import CorporatePage from "./pages/yritysyhteistyo";
import InEnglishPage from "./pages/in_english";
import EventPage from "./pages/events/[id]";
import AdminJobAdPage from "@pages/admin/jobads";
import JobAdCreatePage from "@pages/admin/jobads/create";
import commonPageWrapper from "@views/common/PageWrapper";
import adminPageWrapper from "@views/common/AdminPageWrapper";
const commonRoutes = [
{ path: "/", page: FrontPage },
@@ -81,30 +70,26 @@ const adminRoutes = [
{ path: "/admin", page: AdminFrontPage },
];
class Routes extends React.Component {
render() {
return (
<React.Fragment>
<Helmet>
<title>Aalto-yliopiston Sähköinsinoorikilta ry</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="Aalto-yliopiston Sähköinsinoorikillan verkkosivut" />
<link rel="canonical" href="https://sik.ayy.fi" />
</Helmet>
<JsonLD data={{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "https://sik.ayy.fi",
}} />
<Switch>
{commonRoutes.map(r => <Route key={r.path} exact path={r.path} render={renderPage(r.page)} />)}
{adminLoginRoutes.map(r => <Route key={r.path} exact path={r.path} render={renderAdminLoginPage(r.page)} />)}
{adminRoutes.map(r => <Route key={r.path} exact path={r.path} render={renderAdminPage(r.page)} />)}
<Route component={NotFoundPage} />
</Switch>
</React.Fragment>
);
}
}
const Routes: React.FC = () => (
<>
<Helmet>
<title>Aalto-yliopiston Sähköinsinoorikilta ry</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="Aalto-yliopiston Sähköinsinoorikillan verkkosivut" />
<link rel="canonical" href="https://sik.ayy.fi" />
</Helmet>
<JsonLD data={{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "https://sik.ayy.fi",
}} />
<Switch>
{commonRoutes.map(r => <Route key={r.path} exact path={r.path} render={commonPageWrapper(r.page)} />)}
{adminLoginRoutes.map(r => <Route key={r.path} exact path={r.path} render={adminPageWrapper(r.page, false)} />)}
{adminRoutes.map(r => <Route key={r.path} exact path={r.path} render={adminPageWrapper(r.page, true)} />)}
<Route component={NotFoundPage} />
</Switch>
</>
);
export default Routes;
+1 -1
View File
@@ -1,3 +1,3 @@
// eslint-disable-next-line @typescript-eslint/no-empty-function
const noop = () => {};
const noop = (): void => {};
export default noop;
+5 -5
View File
@@ -1,6 +1,6 @@
import React from "react";
import { Hero, HeroPrimarySection, HeroSecondarySection, HeroSecondarySectionItem, HeroAside, HeroAsideItem, HeroPrimaryButtons } from "@components/Hero";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import noop from "@utils/noop";
const ActualPageHero: React.FC = () => (
@@ -10,16 +10,16 @@ const ActualPageHero: React.FC = () => (
text="Teekkarielämä ei ole pelkkää saunomista, juhlimista ja muita huvituksia—tai no, on se sitäkin."
>
<HeroPrimaryButtons row>
<Anchor to="#tapahtumat">
<Link to="#tapahtumat">
<button onClick={noop}>
<span>Tapahtumat&nbsp;</span>
</button>
</Anchor>
<Anchor to="#uutiset">
</Link>
<Link to="#uutiset">
<button onClick={noop}>
<span>Uutiset&nbsp;</span>
</button>
</Anchor>
</Link>
</HeroPrimaryButtons>
</HeroPrimarySection>
<HeroAside bgColor="lightTurquoise">
+2 -2
View File
@@ -4,14 +4,14 @@ import { Occupation, Committee } from "@models/Contacts";
import CommitteeContainer from "@components/CommitteeContainer";
import { Divider, TextSection } from "@components/index";
import { colors } from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
interface ContactsPageViewProps {
contacts: Occupation[];
committees: Committee[];
}
const BlueLink = styled(Anchor)`
const BlueLink = styled(Link)`
color: ${colors.blue1};
&:hover {
@@ -1,6 +1,6 @@
import React from "react";
import CorporatePageHero from "./CorporatePageHero";
import { CTASection, TextSection, PageLink } from "@components/index";
import { CTASection, TextSection, PageLink, Link } from "@components/index";
import { JobAd } from "@models/JobAd";
import JobAdList from "./JobAdList";
@@ -44,13 +44,13 @@ const CorporatePageView: React.FC<CorporatePageViewProps> = ({ jobAds }) => (
<p>Excursioiden tarkoituksena on tarjota opiskelijoille mahdollisuus tutustua yritysmaailmaan. Excursioita, tai tuttavallisemmin excuja, järjestetään niin lähelle kuin kauaskin ja niillä tarkoituksena on päästä vierailemaan yrityksen tiloihin ja tutustumaan yrityksen kiinnostaviin työntekijöihin ja työtehtäviin. Hauskanpito ja teekkariperinteiden vaaliminen ovat tärkeä osa jokaista excua.</p>
<h6>Potentiaalin Tasaus</h6>
<p>Kiltamme viettää perinteikkäitä vuosijuhliaan helmikuun kolmantena lauantaina. Potentiaalin Tasaus on kiltamme juhlavin ja rakkain tapahtuma. Yrityksillä on mahdollisuus osallistua vuosijuhliin niin pienellä kuin suurellakin panoksella. Killan 100-vuotisjuhla PoTa100 lähestyy myös kovaa vauhtia. Jos yrityksesi on kiinnostunut 100-vuotisjuhlasta, kannattaa ohjautua osoitteeseen <a href="https://sik100.fi">sik100.fi</a>.</p>
<p>Kiltamme viettää perinteikkäitä vuosijuhliaan helmikuun kolmantena lauantaina. Potentiaalin Tasaus on kiltamme juhlavin ja rakkain tapahtuma. Yrityksillä on mahdollisuus osallistua vuosijuhliin niin pienellä kuin suurellakin panoksella. Killan 100-vuotisjuhla PoTa100 lähestyy myös kovaa vauhtia. Jos yrityksesi on kiinnostunut 100-vuotisjuhlasta, kannattaa ohjautua osoitteeseen <Link to="https://sik100.fi">sik100.fi</Link>.</p>
<h6>Killan nettisivut ja työpaikkamainokset</h6>
<p>Killan nettisivuilla on listattu killan yritysyhteistyökumppanit. Killan sivuilta löytyvät myös yritysyhteistyökumppaneiden avoimet työpaikkamainokset. Nämä mainokset ohjataan killan jäsenistölle eteenpäin myös viikottaisin kiltamailin kautta, jotta kaikki mainokset saavat parhaan mahdollisen näkyvyyden kiltalaisten arjessa.</p>
<h6>Sössö</h6>
<p><a href="https://sosso.fi">Sössö</a> on Sähköinsinöörikillan hauska ja rakas opiskelijalehti. Sössö on kerännyt suosiota ja kartuttanut lukijamäärää jo vuodesta 1969 asti. Sössö ilmestyy perinteisesti paperisena, mutta myös Netti-Sössössä julkaistaan jatkuvasti uusia artikkeleja. Sössö tavoittaa noin tuhat elektroniikan, sähkötekniikan ja tietoliikennetekniikan opiskelijaa sekä koko tiedekunnan henkilökunnan. Lisäksi lehti lähetetään muille opiskelijajärjestöille. Yritysten on mahdollista saada mainostilaa Sössön sivuilta.</p>
<p><Link to="https://sosso.fi">Sössö</Link> on Sähköinsinöörikillan hauska ja rakas opiskelijalehti. Sössö on kerännyt suosiota ja kartuttanut lukijamäärää jo vuodesta 1969 asti. Sössö ilmestyy perinteisesti paperisena, mutta myös Netti-Sössössä julkaistaan jatkuvasti uusia artikkeleja. Sössö tavoittaa noin tuhat elektroniikan, sähkötekniikan ja tietoliikennetekniikan opiskelijaa sekä koko tiedekunnan henkilökunnan. Lisäksi lehti lähetetään muille opiskelijajärjestöille. Yritysten on mahdollista saada mainostilaa Sössön sivuilta.</p>
</div>
</TextSection>
+1 -1
View File
@@ -1,7 +1,7 @@
import React from "react";
import styled from "styled-components";
import { JobAd } from "@models/JobAd";
// import Anchor from "@components/Anchor";
// import { Link } from "@components/index";
import { Accordion } from "@components/index";
import ReactMarkdown from "react-markdown";
+3 -3
View File
@@ -3,7 +3,7 @@ import styled from "styled-components";
import colors from "@theme/colors";
import { Event } from "@models/Event";
import Button from "@components/Button";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import noop from "@utils/noop";
import { TextSection } from "@components/index";
import MarkdownStyles from "@views/common/MarkdownStyles";
@@ -56,11 +56,11 @@ const EventPageView: React.FC<EventPageViewProps> = ({ event }) => {
{/* We may have multiple signup forms. Generate own Button for each one */}
<SignupButtons>
{event.signupForm.map(sf => (
<Anchor key={sf.id} to={`/signup/${sf.id}`}>
<Link key={sf.id} to={`/signup/${sf.id}`}>
<Button type="filled" onClick={noop}>
{sf.title_fi}
</Button>
</Anchor>
</Link>
)
)}
</SignupButtons>
+7 -7
View File
@@ -1,7 +1,7 @@
import React from "react";
import styled from "styled-components";
import FreshmenPageHero from "./FreshmenPageHero";
import { CTASection, TextSection, InfoBox, PageLink } from "@components/index";
import { CTASection, TextSection, InfoBox, PageLink, Link } from "@components/index";
const KippariImage = styled.img`
max-width:100%;
@@ -21,17 +21,17 @@ const FreshmenPageView: React.FC = () => (
<h3 id="abeille">Onnittelut hyvästä opiskeluvalinnasta</h3>
<div>
<p>Olet tehnyt upean valinnan ottamalla askeleen matkalla, jossa sinusta ensin kehkeytyy teekkari ja myöhemmin diplomi-insinööri. Sinusta on juuri tullut tekniikan ylioppilas ja fuksi. Hieno saavutus, jota tietysti on syytä juhlia, ja tähän juhlaan paras sijainti on ehdottomasti Otaniemi. Tervetuloa!</p>
<p>Ensi askeleina suosittelen, että liityt teille fukseille tehdyille Telegram-kanaville. <a href={TG_NOTIFICATIONS_LINK}>Tästä</a> pääset tiedotuskanavalle ja <a href={TG_GROUP_CHAT_LINK}>tästä</a> tutustumaan fuksikavereihin ja ISOihisi.</p>
<p>Ensi askeleina suosittelen, että liityt teille fukseille tehdyille Telegram-kanaville. <Link to={TG_NOTIFICATIONS_LINK}>Tästä</Link> pääset tiedotuskanavalle ja <Link to={TG_GROUP_CHAT_LINK}>tästä</Link> tutustumaan fuksikavereihin ja ISOihisi.</p>
<h6>Matka nimeltä Teekkarius</h6>
<p>Teekkarin matka on jokaiselle oman näköisensä. Kilta, ylioppilaskunta ja Otaniemen muut järjestöt tarjoavat varmasti jokaiselle omanlaista tekemistä ja harrastusta. Olet nyt osa Aalto-yliopiston Sähköinsinöörikiltaa ja me tulemme tukemaan sinua teekkariuden matkalla, jotta löydät juuri sinulle sopivat paikat, joissa vaikuttaa ja harrastaa. Jotta tämä onnistuisi, olemme esimerkiksi sijoittaneet sinut fuksiryhmään, johon tulet Orientaatioviikolla tutustumaan ja josta saat oman tukiryhmän uusiin seikkailuihin. Fuksiryhmääsi kuuluu myös muutama ISO. Heistä löydät lisää tietoa <a href="#isot">alempaa</a>.</p>
<p>Teekkarin matka on jokaiselle oman näköisensä. Kilta, ylioppilaskunta ja Otaniemen muut järjestöt tarjoavat varmasti jokaiselle omanlaista tekemistä ja harrastusta. Olet nyt osa Aalto-yliopiston Sähköinsinöörikiltaa ja me tulemme tukemaan sinua teekkariuden matkalla, jotta löydät juuri sinulle sopivat paikat, joissa vaikuttaa ja harrastaa. Jotta tämä onnistuisi, olemme esimerkiksi sijoittaneet sinut fuksiryhmään, johon tulet Orientaatioviikolla tutustumaan ja josta saat oman tukiryhmän uusiin seikkailuihin. Fuksiryhmääsi kuuluu myös muutama ISO. Heistä löydät lisää tietoa <Link to="#isot">alempaa</Link>.</p>
<h6>Fuksikapteenit</h6>
<p>Me olemme fuksikapteenisi <strong>Emmaleena</strong> ja <strong>Jonna</strong> ja tulemme olemaan tukenasi sekä valvomassa suorituksiasi fuksivuoden seikkailuissa kohti teekkarilakkia, jonka voit ansaita mahdollisesti järjestettävänä Wappuna ensi keväällä. Jos sinulla on mitään kysymyksiä, ota ihmeessä meihin yhteyttä esimerkiksi <a href={TG_GROUP_CHAT_LINK}>Telegramissa</a> tai <a href={EMAIL_LINK_MAILTO}>sähköpostitse</a>.</p>
<p>Me olemme fuksikapteenisi <strong>Emmaleena</strong> ja <strong>Jonna</strong> ja tulemme olemaan tukenasi sekä valvomassa suorituksiasi fuksivuoden seikkailuissa kohti teekkarilakkia, jonka voit ansaita mahdollisesti järjestettävänä Wappuna ensi keväällä. Jos sinulla on mitään kysymyksiä, ota ihmeessä meihin yhteyttä esimerkiksi <Link to={TG_GROUP_CHAT_LINK}>Telegramissa</Link> tai <a href={EMAIL_LINK_MAILTO}>sähköpostitse</a>.</p>
<h6>Hymyillään, kun tavataan!</h6>
<p>Vaikka ensimmäiset päivät Otaniemessä saattavatkin tuoda tullessaan hupsuja ja kummallisia kokemuksia, ä säikähdä niitä! Ajan myötä palapelin palat muodostavat sinun näköisesi kuvan ja pääset itse vaikuttamaan siihen, miltä lopputulos näyttää.</p>
<p>Orientaatioviikko järjestetään 31.8-4.9, mutta jo ennen sitä sinulla on mahdollisuus tulla tutustumaan meihin, muihin fuksiehin ja ISOihin Varaslähtöön. Varaslähtö fuksivuoteen järjestetään 22.8. Siitä lisää Telegram-ryhmissä ja <a href={FOPAS_LINK}>fuksioppaassa</a>!</p>
<p>Orientaatioviikko järjestetään 31.8-4.9, mutta jo ennen sitä sinulla on mahdollisuus tulla tutustumaan meihin, muihin fuksiehin ja ISOihin Varaslähtöön. Varaslähtö fuksivuoteen järjestetään 22.8. Siitä lisää Telegram-ryhmissä ja <Link to={FOPAS_LINK}>fuksioppaassa</Link>!</p>
<h6>Emmaleena</h6>
<p>0504392855 <br/>emmaleena.ahonen (ät) aalto.fi</p>
@@ -55,8 +55,8 @@ const FreshmenPageView: React.FC = () => (
<div>
<InfoBox>
<h6>Telegram?</h6>
<p>Telegram on pikaviestinpalvelu, jota käytetään otaniemessä paljon. Hieman samanlainen kuin Whatsapp, mutta ominaisuuksiltaan paremmaksi todettu. Lisätietoja: <a href="https://telegram.org/faq">https://telegram.org/faq</a>.</p>
<p>SIK:n fukseilla on oma Telegram-ryhmä, jonne pääset liitymään <a href={TG_GROUP_CHAT_LINK}>tästä</a>.</p>
<p>Telegram on pikaviestinpalvelu, jota käytetään otaniemessä paljon. Hieman samanlainen kuin Whatsapp, mutta ominaisuuksiltaan paremmaksi todettu. Lisätietoja: <Link to="https://telegram.org/faq">https://telegram.org/faq</Link>.</p>
<p>SIK:n fukseilla on oma Telegram-ryhmä, jonne pääset liitymään <Link to={TG_GROUP_CHAT_LINK}>tästä</Link>.</p>
</InfoBox>
</div>
</aside>
+5 -5
View File
@@ -1,5 +1,5 @@
import React from "react";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import { Hero, HeroPrimarySection, HeroAside, HeroAsideItem, HeroPrimaryButtons } from "@components/Hero";
import noop from "@utils/noop";
@@ -10,16 +10,16 @@ const FrontPageHero: React.FC = () => (
text="on opiskelijajärjestö, joka kokoaa yhteen laaja-alaisesti sähkötekniikan osaajia elektroniikasta nanoteknologiaan ja akustiikkaan. Kiltalaisista valmistuu alansa huippuja, jotka ovat avainasemassa vauhdilla sähköistyvän maailmamme kehityksessä."
>
<HeroPrimaryButtons>
<Anchor to="/kilta">
<Link to="/kilta">
<button onClick={noop}>
<span>Tietoa killasta&nbsp;</span>
</button>
</Anchor>
<Anchor to="/kilta/toiminta">
</Link>
<Link to="/kilta/toiminta">
<button onClick={noop}>
<span>Vastapainoa opiskelulle&nbsp;</span>
</button>
</Anchor>
</Link>
</HeroPrimaryButtons>
</HeroPrimarySection>
+13 -13
View File
@@ -5,7 +5,7 @@ import FrontPageHero from "./FrontPageHero";
import { Event } from "@models/Event";
import { Post } from "@models/Feed";
import { colors } from "@theme/colors";
import Anchor from "@components/Anchor";
import { Link } from "@components/index";
import FullWidthSection from "@components/Sections/FullWidthSection";
import noop from "@utils/noop";
@@ -116,19 +116,19 @@ const FrontPageView: React.FC<FrontPageViewProps> = ({ events, feed }) => (
<h6>Yhteistyössä:</h6>
<SponsorReel>
<div>
<Anchor to="https://new.abb.com/fi/uralle"><img src={ABB} /></Anchor>
<Anchor to="https://www.capgemini.com/"><img src={Capgemini} /></Anchor>
<Anchor to="https://www.caruna.fi/tietoa-meista/tyonhakijalle/tyonantajalupaus"><img src={Caruna} /></Anchor>
<Anchor to="https://www.eaton.com/us/en-us.html"><img src={Eaton} /></Anchor>
<Anchor to="#https://www.ensto.com/fi"><img src={Ensto} /></Anchor>
<Anchor to="https://www.esett.com/"><img src={eSett} /></Anchor>
<Anchor to="https://www.fennovoima.fi/"><img src={Fennovoima} /></Anchor>
<Anchor to="https://www.fingrid.fi/"><img src={Fingrid} /></Anchor>
<Anchor to="https://www.nrcgroup.fi/"><img src={NRCGroup} /></Anchor>
<Anchor to="https://www.okmetic.com/fi/"><img src={Okmetic} /></Anchor>
<Anchor to="https://www.sogeti.com/"><img src={Sogeti} /></Anchor>
<Link to="https://new.abb.com/fi/uralle"><img src={ABB} /></Link>
<Link to="https://www.capgemini.com/"><img src={Capgemini} /></Link>
<Link to="https://www.caruna.fi/tietoa-meista/tyonhakijalle/tyonantajalupaus"><img src={Caruna} /></Link>
<Link to="https://www.eaton.com/us/en-us.html"><img src={Eaton} /></Link>
<Link to="https://www.ensto.com/fi"><img src={Ensto} /></Link>
<Link to="https://www.esett.com/"><img src={eSett} /></Link>
<Link to="https://www.fennovoima.fi/"><img src={Fennovoima} /></Link>
<Link to="https://www.fingrid.fi/"><img src={Fingrid} /></Link>
<Link to="https://www.nrcgroup.fi/"><img src={NRCGroup} /></Link>
<Link to="https://www.okmetic.com/fi/"><img src={Okmetic} /></Link>
<Link to="https://www.sogeti.com/"><img src={Sogeti} /></Link>
</div>
<Anchor to="/yritysyhteistyo">Haluatko kuulla lisää yhteistyöstä kanssamme?</Anchor>
<Link to="/yritysyhteistyo">Haluatko kuulla lisää yhteistyöstä kanssamme?</Link>
</SponsorReel>
</FullWidthSection>
</main>
+3 -2
View File
@@ -1,13 +1,14 @@
import React from "react";
import { Link } from "@components/index";
import { Hero, HeroPrimarySection, HeroAside, HeroAsideItem } from "@components/Hero";
const GuildPageHero: React.FC = () => (
<Hero>
<HeroPrimarySection header="Kilta koostuu Aalto-yliopiston opiskelijoista, joita yhdistää erilaiset sähkötekniikkaan liittyvät alat">
<p>
Killan tehtäviin kuuluu varmistaa, että sen jäsenet saavat laadukasta <a href="/opinnot_ja_ura">opetusta</a>, ja että heistä valmistuu alansa huippuosaajia. Uusille opiskelijoille kilta järjestää <a href="/kilta/fuksi">fuksikasvatusta</a>, joka tutustuttaa teekkarikulttuuriin ja opiskeluun yliopistossa. Kilta tarjoaa vastapainoa opiskelulle erilaisten <a href="/kilta/toiminta">tapahtumien</a> muodossa ja välittää jäsenilleen tietoa alan <a href="/yritysyhteistyo">työpaikoista ja yrityksistä</a>.
Killan tehtäviin kuuluu varmistaa, että sen jäsenet saavat laadukasta <Link to="/opinnot_ja_ura">opetusta</Link>, ja että heistä valmistuu alansa huippuosaajia. Uusille opiskelijoille kilta järjestää <Link to="/kilta/fuksi">fuksikasvatusta</Link>, joka tutustuttaa teekkarikulttuuriin ja opiskeluun yliopistossa. Kilta tarjoaa vastapainoa opiskelulle erilaisten <Link to="/kilta/toiminta">tapahtumien</Link> muodossa ja välittää jäsenilleen tietoa alan <Link to="/yritysyhteistyo">työpaikoista ja yrityksistä</Link>.
</p>
<p>Kilta toimii opiskelijoiden voimin. Killan <a href="#toimintaan">vapaaehtoisena</a> pääset kartuttamaan kokemusta, josta on valtavasti hyötyä myös myöhemmin työelämässä.</p>
<p>Kilta toimii opiskelijoiden voimin. Killan <Link to="#toimintaan">vapaaehtoisena</Link> pääset kartuttamaan kokemusta, josta on valtavasti hyötyä myös myöhemmin työelämässä.</p>
</HeroPrimarySection>
<HeroAside bgColor="lightTurquoise">
+7 -7
View File
@@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import { CTASection, TextSection, PageLink } from "@components/index";
import { CTASection, TextSection, PageLink, Link } from "@components/index";
import GuildPageHero from "./GuildPageHero";
import FullWidthSection from "@components/Sections/FullWidthSection";
import colors from "@theme/colors";
@@ -51,9 +51,9 @@ const GuildPageView: React.FC = () => (
<TextSection>
<div>
<h6>Aalto-yliopiston Sähköinsinöörikilta ry</h6>
<p>on opiskelijajärjestö, joka kokoaa yhteen laaja-alaisesti sähkötekniikan osaajia elektroniikasta nanoteknologiaan ja akustiikkaan. Sähköinsinöörikilta, tuttavallisemmin SIK, on perustettu vuonna 1921, ja sillä on nykyään yli 500 sähkötekniikkaa opiskelevaa tai yhdistyksestä muuten kiinnostunutta jäsentä. Killan tarkoitus on ajaa jäsentensä etua Aalto-yliopistossa ja <a href="https://www.aalto.fi/fi/sahkotekniikan-korkeakoulu">Sähkötekniikan korkeakoulussa ELEC:ssä</a>, huolehtia jäsenten hyvinvoinnista, edistää jäsenten ammatillista osaamista ja ylläpitää teekkarihenkeä.</p>
<p>Jäsenten hyvinvoinnista kilta huolehtii järjestämällä vastapainoa opiskelulle erilaisten tapahtumien, kuten juhlien, saunailtojen ja urheilun muodossa. Kiltalaisten kokoontumispaikkana toimiva <a href="#palvelut">kiltahuone</a> sijaitsee osoitteessa Maarintie 8. Kiltahuoneella jäsenet voivat opiskella, rentoutua opiskelun ohessa ja tavata muita kiltalaisia.</p>
<p>Kilta järjestää vierailuja monipuolisesti alan yrityksiin ja järjestää yritystapahtumia. Kiltatoiminnassa käytetään samoja työkaluja, kuin yritysmaailmassa, ja kiltatoiminta pyrkii myös valmentamaan opiskelijoita työelämään. Ammatillista osaamista ja sähkötekniikan harrastamista tuetaan ylläpitämällä <a href="#palvelut">Elektroniikkapajaa</a>, jossa kiltalaiset voivat tehdä omia projektejaan. Kiltalaisten voimin julkaistaan myös kiltalehti <a href="https://sosso.fi">Sössöä</a>, jossa on artikkeleita koskien niin kiltatoimintaa, opiskelua kuin vapaa-ajan harrastuksiakin.</p>
<p>on opiskelijajärjestö, joka kokoaa yhteen laaja-alaisesti sähkötekniikan osaajia elektroniikasta nanoteknologiaan ja akustiikkaan. Sähköinsinöörikilta, tuttavallisemmin SIK, on perustettu vuonna 1921, ja sillä on nykyään yli 500 sähkötekniikkaa opiskelevaa tai yhdistyksestä muuten kiinnostunutta jäsentä. Killan tarkoitus on ajaa jäsentensä etua Aalto-yliopistossa ja <Link to="https://www.aalto.fi/fi/sahkotekniikan-korkeakoulu">Sähkötekniikan korkeakoulussa ELEC:ssä</Link>, huolehtia jäsenten hyvinvoinnista, edistää jäsenten ammatillista osaamista ja ylläpitää teekkarihenkeä.</p>
<p>Jäsenten hyvinvoinnista kilta huolehtii järjestämällä vastapainoa opiskelulle erilaisten tapahtumien, kuten juhlien, saunailtojen ja urheilun muodossa. Kiltalaisten kokoontumispaikkana toimiva <Link to="#palvelut">kiltahuone</Link> sijaitsee osoitteessa Maarintie 8. Kiltahuoneella jäsenet voivat opiskella, rentoutua opiskelun ohessa ja tavata muita kiltalaisia.</p>
<p>Kilta järjestää vierailuja monipuolisesti alan yrityksiin ja järjestää yritystapahtumia. Kiltatoiminnassa käytetään samoja työkaluja, kuin yritysmaailmassa, ja kiltatoiminta pyrkii myös valmentamaan opiskelijoita työelämään. Ammatillista osaamista ja sähkötekniikan harrastamista tuetaan ylläpitämällä <Link to="#palvelut">Elektroniikkapajaa</Link>, jossa kiltalaiset voivat tehdä omia projektejaan. Kiltalaisten voimin julkaistaan myös kiltalehti <Link to="https://sosso.fi">Sössöä</Link>, jossa on artikkeleita koskien niin kiltatoimintaa, opiskelua kuin vapaa-ajan harrastuksiakin.</p>
</div>
<aside>
@@ -96,7 +96,7 @@ const GuildPageView: React.FC = () => (
<Column>
<FullWidthSection>
<h6>Miksi lähteä kiltatoimintaan?</h6>
<p>Kiltatoiminnassa tutustut uusiin ihmisiin ja opit monia työelämässä tarpeellisia taitoja. Kiltatoiminta on hyvä tilaisuus kokeilla ja opetella aivan uusia asioita, sillä missään tehtävässä ei vaadita pitkää listaa esitietoja. Tehtävien työmäärä riippuu tehtävästä ja toimikunnasta, mutta yleisesti toiminta on hyvin joustavaa. Jos sinulla on kysymyksiä koskien kiltatoimintaa tai jotain tiettyä tehtävää, ota yhteyttä <a href="/yhteystiedot">nykyisiin toimijoihin!</a></p>
<p>Kiltatoiminnassa tutustut uusiin ihmisiin ja opit monia työelämässä tarpeellisia taitoja. Kiltatoiminta on hyvä tilaisuus kokeilla ja opetella aivan uusia asioita, sillä missään tehtävässä ei vaadita pitkää listaa esitietoja. Tehtävien työmäärä riippuu tehtävästä ja toimikunnasta, mutta yleisesti toiminta on hyvin joustavaa. Jos sinulla on kysymyksiä koskien kiltatoimintaa tai jotain tiettyä tehtävää, ota yhteyttä <Link to="/yhteystiedot">nykyisiin toimijoihin!</Link></p>
</FullWidthSection>
<FullWidthSection>
<h6>Runsaasti erilaisia tehtäviä</h6>
@@ -117,8 +117,8 @@ const GuildPageView: React.FC = () => (
<h3>Kilta tarjoaa palveluita</h3>
<div>
<p>Tapahtumien, edunvalvonnan ja yrityskontaktien lisäksi kilta ylläpitää Maarintie 8:ssa sijaitsevaa kiltahuonetta, jossa kiltalaiset voivat viettää vapaasti aikaa opiskellen tai vapaa-ajan merkeissä. Kiltahuone on kaikille avoin tila, johon voi kuka tahansa vapaasti tulla rakennuksen aukioloaikojen puitteissa. Kiltahuoneella voi pelailla, lukea lehtiä ja nauttia kiltahuoneen myyntituotteista. Kiltahuoneella pidetään monesti kokouksia, peli-iltoja ja käytetään sitä myös opiskeluun. Tilavaan huoneeseen mahtuu tekemään monenlaista samaan aikaan!</p>
<p>Kilta toimittaa myös <a href="https://sosso.fi">Sössöä</a>, joka on Sähköinsinöörikillan oma kiltalehti. Lehti ilmestyy fyysisenä lehtenä pari kertaa vuodessa, ja lisäksi artikkeleita ilmestyy sähköisessä muodossa painettujen lehtien välillä.</p>
<p>Kiltalaisten omia projekteja varten kilta ylläpitää Otakaari 1:ssä sijaitsevaa <a href="https://elepaja.aalto.fi">Elektroniikkapajaa</a>, josta löytyy tarvikkeita, työkaluja ja tilat monenlaisia töitä varten. Jos haluat tutustua tiloihin, ota yhteyttä <a href="/yhteystiedot#elepaja">pajavastaavaan</a>!</p>
<p>Kilta toimittaa myös <Link to="https://sosso.fi">Sössöä</Link>, joka on Sähköinsinöörikillan oma kiltalehti. Lehti ilmestyy fyysisenä lehtenä pari kertaa vuodessa, ja lisäksi artikkeleita ilmestyy sähköisessä muodossa painettujen lehtien välillä.</p>
<p>Kiltalaisten omia projekteja varten kilta ylläpitää Otakaari 1:ssä sijaitsevaa <Link to="https://elepaja.aalto.fi">Elektroniikkapajaa</Link>, josta löytyy tarvikkeita, työkaluja ja tilat monenlaisia töitä varten. Jos haluat tutustua tiloihin, ota yhteyttä <Link to="/yhteystiedot#elepaja">pajavastaavaan</Link>!</p>
</div>
<aside>
<div>
+2 -2
View File
@@ -1,6 +1,6 @@
import React from "react";
import styled from "styled-components";
import { CTASection, TextSection, PageLink, Accordion } from "@components/index";
import { CTASection, TextSection, PageLink, Accordion, Link } from "@components/index";
import StudiesPageHero from "./StudiesPageHero";
// TODO: Responsive
@@ -20,7 +20,7 @@ const StudiesPageView: React.FC = () => (
<p>Sähkö- ja elektronniikkatekniikan opiskelu antaa valmiudet tehdä työelämässä tehtäviä laidasta laitaan. Sähkön opinnoista saat varmat opit matematiikasta ja fysiikasta ja opit samalla myös hyödyntämään komplekseja ohjelmistoja ja pääset kosketuksiin tulevaisuudessa keskeisten koodaustaitojen kanssa. Opintoja on siis laajasti sähkötekniikan kursseista matematiikan kursseihin ja koodauskursseihin. Lisäksi voit tehdä opinnoistasi yksilölliset valitsemalla sinua kiinnostavan sivuaineen vaikka jonkun toisenkin korkeakoulun puolelta ja testata ihan mitä vain kursseja vapaavalintaisten kurssien muodossa.</p>
<h6>Killan rooli opiskelijan elämässä</h6>
<p>Killan pääasiallisena tehtävänä on pitää jäsenistöstään huolta. Tämä tarkoittaa sitä, että kilta järjestää jäsenilleen hyvinvointitapahtumia, urheilumahdollisuuksia, iltajuhlia, yhteyksiä yritysmaailmaan ja tukee tietysti myös opinnoissa. Löydät tietoa kaikista näistä killan tehtävistä lisää, tutustumalla killan toimintaan esimerkiksi <a href="/kilta">täältä</a>.</p>
<p>Killan pääasiallisena tehtävänä on pitää jäsenistöstään huolta. Tämä tarkoittaa sitä, että kilta järjestää jäsenilleen hyvinvointitapahtumia, urheilumahdollisuuksia, iltajuhlia, yhteyksiä yritysmaailmaan ja tukee tietysti myös opinnoissa. Löydät tietoa kaikista näistä killan tehtävistä lisää, tutustumalla killan toimintaan esimerkiksi <Link to="/kilta">täältä</Link>.</p>
</div>
<aside>
+96
View File
@@ -0,0 +1,96 @@
import React, { useEffect, useState, ReactNode, ComponentType } from "react";
import styled from "styled-components";
import { RouteComponentProps, Redirect } from "react-router-dom";
import colors from "@theme/colors";
import breakpoints from "@theme/breakpoints";
import AdminHeader from "@components/AdminHeader";
import AdminSidebar from "@components/AdminSidebar";
import { isAuthenticated } from "@utils/auth";
const Main = styled.main`
display: flex;
color: ${colors.white};
background-color: ${colors.darkBlue};
flex-flow: row nowrap;
justify-content: flex-start;
align-items: flex-start;
flex: 1;
h1 {
margin-top: 0;
}
& > div {
padding: 0 1rem;
width: 100%;
max-width: 1000px;
margin: 0 auto;
}
@media screen and (max-width: ${breakpoints.mobile}) {
flex-flow: column nowrap;
& > nav {
width: 100%;
}
}
`;
const useShouldRedirect = (enabled = true) => {
const [redirecting, setRedirect] = useState(false);
const [completed, setCompleted] = useState(!enabled);
useEffect(() => {
if (enabled) {
isAuthenticated().then((result) => {
setRedirect(!result);
setCompleted(true);
});
}
}, []);
return {
redirecting,
completed
};
}
type PageProps = RouteComponentProps & {
page: ComponentType;
requiresAuthentication: boolean;
}
const PageWrapper: React.FC<PageProps> = ({ page, requiresAuthentication, ...props }) => {
const { path } = props.match;
const Page = page;
const { completed, redirecting } = useShouldRedirect(requiresAuthentication);
if (redirecting) {
const loginURL = `/admin/login?next=${path}`;
return <Redirect to={loginURL} />;
}
// TODO: Loading screen
if (!completed) {
return <>Loading</>;
}
return (
<>
<AdminHeader />
<Main>
<AdminSidebar path={path} />
<Page {...props} />
</Main>
</>
)
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
const renderPage = (Page: ReactNode, requiresAuthentication = true) => (props: any): JSX.Element => (
<PageWrapper page={Page} requiresAuthentication={requiresAuthentication} {...props} />
);
export default renderPage;
+25
View File
@@ -0,0 +1,25 @@
import React, { ReactNode, ComponentType } from "react";
import Header from "@components/Header";
import Footer from "@components/Footer/Footer";
interface PageProps {
page: ComponentType;
}
const PageWrapper: React.FC<PageProps> = ({ page, ...props }) => {
const Page = page;
return (
<>
<Header />
<Page {...props} />
<Footer />
</>
)
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
const renderPage = (Page: ReactNode) => (props: any): JSX.Element => (
<PageWrapper page={Page} {...props} />
);
export default renderPage;