290 lines
9.0 KiB
TypeScript
290 lines
9.0 KiB
TypeScript
import * as _ from 'lodash';
|
|
import * as React from 'react';
|
|
import styled from 'styled-components';
|
|
|
|
import { colors } from 'ts/style/colors';
|
|
|
|
import { Banner } from 'ts/components/banner';
|
|
import { Button } from 'ts/components/button';
|
|
import { Icon } from 'ts/components/icon';
|
|
import { ModalContact } from 'ts/components/modals/modal_contact';
|
|
import { Column, Section, WrapGrid } from 'ts/components/newLayout';
|
|
import { SiteWrap } from 'ts/components/siteWrap';
|
|
import { Heading, Paragraph } from 'ts/components/text';
|
|
|
|
interface EventProps {
|
|
title: string;
|
|
date: string;
|
|
signupUrl: string;
|
|
imageUrl: string;
|
|
}
|
|
|
|
interface CommunityLinkProps {
|
|
bgColor: string;
|
|
title?: string;
|
|
icon?: string;
|
|
url: string;
|
|
}
|
|
|
|
const events: EventProps[] = [
|
|
{
|
|
title: '0x London Meetup',
|
|
date: 'October 20th 2018',
|
|
imageUrl: '/images/events/london.jpg',
|
|
signupUrl: '#',
|
|
},
|
|
{
|
|
title: '0x Berlin Meetup',
|
|
date: 'October 20th 2018',
|
|
imageUrl: '/images/events/berlin.jpg',
|
|
signupUrl: '#',
|
|
},
|
|
{
|
|
title: '0x San Francisco Meetup',
|
|
date: 'October 20th 2018',
|
|
imageUrl: '/images/events/sf.jpg',
|
|
signupUrl: '#',
|
|
},
|
|
];
|
|
const communityLinks: CommunityLinkProps[] = [
|
|
{
|
|
bgColor: '#1DA1F2',
|
|
title: 'Twitter',
|
|
icon: 'social-twitter',
|
|
url: 'https://twitter.com/0xProject',
|
|
},
|
|
{
|
|
bgColor: '#FF4500',
|
|
title: 'Reddit',
|
|
icon: 'social-reddit',
|
|
url: 'https://twitter.com/0xProject',
|
|
},
|
|
{
|
|
bgColor: '#7289DA',
|
|
title: 'Twitter',
|
|
icon: 'social-discord',
|
|
url: 'https://twitter.com/0xProject',
|
|
},
|
|
{
|
|
bgColor: '#3B5998',
|
|
title: 'Facebook',
|
|
icon: 'social-fb',
|
|
url: 'https://twitter.com/0xProject',
|
|
},
|
|
{
|
|
bgColor: '#181717',
|
|
title: 'GitHub',
|
|
icon: 'social-github',
|
|
url: 'https://twitter.com/0xProject',
|
|
},
|
|
{
|
|
bgColor: '#003831',
|
|
title: 'Newsletter',
|
|
icon: 'social-newsletter',
|
|
url: 'https://twitter.com/0xProject',
|
|
},
|
|
];
|
|
|
|
export class NextCommunity extends React.Component {
|
|
public state = {
|
|
isContactModalOpen: false,
|
|
};
|
|
public render(): React.ReactNode {
|
|
return (
|
|
<SiteWrap theme="light">
|
|
<Section isTextCentered={true}>
|
|
<Column>
|
|
<Heading size="medium" isCentered={true}>
|
|
Community
|
|
</Heading>
|
|
<Paragraph size="medium" isCentered={true} isMuted={true} marginBottom="0">
|
|
The 0x community is a global, passionate group of crypto developers and enthusiasts. The
|
|
official channels below provide a great forum for connecting and engaging with the
|
|
community.
|
|
</Paragraph>
|
|
<LinkWrap>
|
|
<Button to="#" isWithArrow={true} isAccentColor={true}>
|
|
Join the 0x community
|
|
</Button>
|
|
</LinkWrap>
|
|
</Column>
|
|
</Section>
|
|
|
|
<Section isFullWidth={true}>
|
|
<WrapGrid
|
|
isTextCentered={true}
|
|
isWrapped={true}
|
|
isFullWidth={false}
|
|
isCentered={false}
|
|
maxWidth="1151px"
|
|
>
|
|
{_.map(communityLinks, (link: CommunityLinkProps, index: number) => (
|
|
<CommunityLink
|
|
key={`cl-${index}`}
|
|
icon={link.icon}
|
|
title={link.title}
|
|
bgColor={link.bgColor}
|
|
url={link.url}
|
|
/>
|
|
))}
|
|
</WrapGrid>
|
|
</Section>
|
|
|
|
<EventsWrapper
|
|
bgColor={colors.backgroundLight}
|
|
isFullWidth={true}
|
|
isCentered={true}
|
|
isTextCentered={true}
|
|
>
|
|
<Column maxWidth="720px">
|
|
<Heading size="medium" asElement="h2" isCentered={true} maxWidth="507px" marginBottom="30px">
|
|
Upcoming Events
|
|
</Heading>
|
|
<Paragraph size="medium" isCentered={true} isMuted={true}>
|
|
0x meetups happen all over the world on a monthly basis and are hosted by devoted members of
|
|
the community. Want to host a meetup in your city? Reach out for help finding a venue,
|
|
connecting with local 0x mentors, and promoting your events.
|
|
</Paragraph>
|
|
<LinkWrap>
|
|
<Button to="#" isWithArrow={true} isAccentColor={true}>
|
|
Get in Touch
|
|
</Button>
|
|
<Button to="#" isWithArrow={true} isAccentColor={true}>
|
|
Join Newsletter
|
|
</Button>
|
|
</LinkWrap>
|
|
</Column>
|
|
<WrapGrid
|
|
isTextCentered={true}
|
|
isWrapped={true}
|
|
isFullWidth={false}
|
|
isCentered={false}
|
|
maxWidth="1149px"
|
|
>
|
|
{_.map(events, (ev: EventProps, index: number) => (
|
|
<Event
|
|
key={`event-${index}`}
|
|
title={ev.title}
|
|
date={ev.date}
|
|
signupUrl={ev.signupUrl}
|
|
imageUrl={ev.imageUrl}
|
|
/>
|
|
))}
|
|
</WrapGrid>
|
|
</EventsWrapper>
|
|
|
|
<Banner
|
|
heading="Ready to get started?"
|
|
subline="Dive into our docs, or contact us if needed"
|
|
mainCta={{ text: 'Get Started', href: '/docs' }}
|
|
secondaryCta={{ text: 'Get in Touch', onClick: this._onOpenContactModal.bind(this) }}
|
|
/>
|
|
<ModalContact isOpen={this.state.isContactModalOpen} onDismiss={this._onDismissContactModal} />
|
|
</SiteWrap>
|
|
);
|
|
}
|
|
|
|
public _onOpenContactModal = (): void => {
|
|
this.setState({ isContactModalOpen: true });
|
|
};
|
|
|
|
public _onDismissContactModal = (): void => {
|
|
this.setState({ isContactModalOpen: false });
|
|
};
|
|
}
|
|
|
|
const Event: React.FunctionComponent<EventProps> = (event: EventProps) => (
|
|
<StyledEvent>
|
|
<EventIcon name="logo-mark" size={30} margin={0} />
|
|
<EventImage src={event.imageUrl} alt="" />
|
|
<EventContent>
|
|
<Heading color={colors.white} size="small" marginBottom="0">
|
|
{event.title}
|
|
</Heading>
|
|
<Paragraph color={colors.white} isMuted={0.65}>
|
|
{event.date}
|
|
</Paragraph>
|
|
<Button color={colors.white} href={event.signupUrl} isWithArrow={true}>
|
|
Sign Up
|
|
</Button>
|
|
</EventContent>
|
|
</StyledEvent>
|
|
);
|
|
|
|
const CommunityLink: React.FunctionComponent<CommunityLinkProps> = (props: CommunityLinkProps) => (
|
|
<StyledCommunityLink bgColor={props.bgColor} href={props.url}>
|
|
<CommunityIcon name={props.icon} size={44} margin={0} />
|
|
<CommunityTitle color={colors.white} isMuted={false} marginBottom="0">
|
|
{props.title}
|
|
</CommunityTitle>
|
|
</StyledCommunityLink>
|
|
);
|
|
|
|
// Events
|
|
const EventsWrapper = styled(Section)`
|
|
display: flex;
|
|
align-items: center;
|
|
flex-direction: column;
|
|
`;
|
|
|
|
// Event
|
|
const StyledEvent = styled.div`
|
|
background-color: ${colors.brandDark};
|
|
width: calc((100% / 3) - 30px);
|
|
text-align: left;
|
|
height: 424px;
|
|
margin-top: 130px;
|
|
position: relative;
|
|
`;
|
|
|
|
const EventIcon = styled(Icon)`
|
|
position: absolute;
|
|
top: 30px;
|
|
left: 30px;
|
|
`;
|
|
|
|
const EventImage = styled.img`
|
|
width: 100%;
|
|
height: 260px;
|
|
object-fit: cover;
|
|
`;
|
|
|
|
const EventContent = styled.div`
|
|
padding: 30px 30px;
|
|
`;
|
|
|
|
interface StyledCommunityLinkProps {
|
|
bgColor: string;
|
|
}
|
|
const StyledCommunityLink = styled.a`
|
|
background-color: ${(props: StyledCommunityLinkProps) => props.bgColor};
|
|
color: ${colors.white};
|
|
width: 175px;
|
|
height: 175px;
|
|
text-align: center;
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
align-items: center;
|
|
`;
|
|
|
|
const CommunityTitle = styled(Paragraph)`
|
|
font-size: 20px;
|
|
font-weight: 400;
|
|
`;
|
|
|
|
const CommunityIcon = styled(Icon)`
|
|
margin-bottom: 20px;
|
|
`;
|
|
|
|
// Misc
|
|
const LinkWrap = styled.div`
|
|
display: inline-flex;
|
|
margin-top: 60px;
|
|
|
|
a + a {
|
|
margin-left: 60px;
|
|
}
|
|
`;
|