From ea781b8850cda274d24e4cc5f196dfb7e5b37732 Mon Sep 17 00:00:00 2001 From: fragosti Date: Thu, 20 Dec 2018 16:32:00 -0800 Subject: feat: remove unused files --- .../dialogs/u2f_not_supported_dialog.tsx | 46 -- .../dialogs/wrapped_eth_section_notice_dialog.tsx | 33 -- .../website/ts/components/forms/subscribe_form.tsx | 127 ----- packages/website/ts/components/layout.tsx | 177 ------ packages/website/ts/components/redirector.tsx | 9 - packages/website/ts/components/separator.tsx | 7 - packages/website/ts/components/ui/filled_image.tsx | 18 - packages/website/ts/components/ui/input.tsx | 49 -- .../website/ts/components/ui/simple_loading.tsx | 17 - packages/website/ts/components/ui/typed_text.tsx | 75 --- packages/website/ts/containers/about.ts | 25 - packages/website/ts/containers/jobs.ts | 28 - packages/website/ts/containers/landing.ts | 27 - packages/website/ts/containers/launch_kit.ts | 27 - packages/website/ts/icons/form-arrow.svg | 1 - packages/website/ts/pages/about/about.tsx | 421 -------------- packages/website/ts/pages/about/profile.tsx | 80 --- .../ts/pages/instant/introducing_0x_instant.tsx | 57 -- packages/website/ts/pages/instant/need_more.tsx | 62 --- packages/website/ts/pages/instant/screenshots.tsx | 35 -- packages/website/ts/pages/jobs/benefits.tsx | 158 ------ packages/website/ts/pages/jobs/jobs.tsx | 71 --- packages/website/ts/pages/jobs/join_0x.tsx | 64 --- packages/website/ts/pages/jobs/mission.tsx | 47 -- packages/website/ts/pages/jobs/open_positions.tsx | 179 ------ packages/website/ts/pages/jobs/photo_rail.tsx | 22 - packages/website/ts/pages/landing/landing.tsx | 620 --------------------- .../website/ts/pages/launch_kit/launch_kit.tsx | 335 ----------- 28 files changed, 2817 deletions(-) delete mode 100644 packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx delete mode 100644 packages/website/ts/components/dialogs/wrapped_eth_section_notice_dialog.tsx delete mode 100644 packages/website/ts/components/forms/subscribe_form.tsx delete mode 100644 packages/website/ts/components/layout.tsx delete mode 100644 packages/website/ts/components/redirector.tsx delete mode 100644 packages/website/ts/components/separator.tsx delete mode 100644 packages/website/ts/components/ui/filled_image.tsx delete mode 100644 packages/website/ts/components/ui/input.tsx delete mode 100644 packages/website/ts/components/ui/simple_loading.tsx delete mode 100644 packages/website/ts/components/ui/typed_text.tsx delete mode 100644 packages/website/ts/containers/about.ts delete mode 100644 packages/website/ts/containers/jobs.ts delete mode 100644 packages/website/ts/containers/landing.ts delete mode 100644 packages/website/ts/containers/launch_kit.ts delete mode 100644 packages/website/ts/icons/form-arrow.svg delete mode 100644 packages/website/ts/pages/about/about.tsx delete mode 100644 packages/website/ts/pages/about/profile.tsx delete mode 100644 packages/website/ts/pages/instant/introducing_0x_instant.tsx delete mode 100644 packages/website/ts/pages/instant/need_more.tsx delete mode 100644 packages/website/ts/pages/instant/screenshots.tsx delete mode 100644 packages/website/ts/pages/jobs/benefits.tsx delete mode 100644 packages/website/ts/pages/jobs/jobs.tsx delete mode 100644 packages/website/ts/pages/jobs/join_0x.tsx delete mode 100644 packages/website/ts/pages/jobs/mission.tsx delete mode 100644 packages/website/ts/pages/jobs/open_positions.tsx delete mode 100644 packages/website/ts/pages/jobs/photo_rail.tsx delete mode 100644 packages/website/ts/pages/landing/landing.tsx delete mode 100644 packages/website/ts/pages/launch_kit/launch_kit.tsx (limited to 'packages/website/ts') diff --git a/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx b/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx deleted file mode 100644 index bbec1d649..000000000 --- a/packages/website/ts/components/dialogs/u2f_not_supported_dialog.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { colors } from '@0x/react-shared'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as React from 'react'; -import { constants } from 'ts/utils/constants'; - -interface U2fNotSupportedDialogProps { - isOpen: boolean; - onToggleDialog: () => void; -} - -export const U2fNotSupportedDialog = (props: U2fNotSupportedDialogProps) => { - return ( - ]} - open={props.isOpen} - onRequestClose={props.onToggleDialog} - autoScrollBodyContent={true} - > -
-
- It looks like your browser does not support U2F connections required for us to communicate with your - hardware wallet. Please use a browser that supports U2F connections and try again. -
-
-
    -
  • Chrome version 38 or later
  • -
  • Opera version 40 of later
  • -
  • - Firefox with{' '} - - this extension - . -
  • -
-
-
-
- ); -}; diff --git a/packages/website/ts/components/dialogs/wrapped_eth_section_notice_dialog.tsx b/packages/website/ts/components/dialogs/wrapped_eth_section_notice_dialog.tsx deleted file mode 100644 index cf2c4dda5..000000000 --- a/packages/website/ts/components/dialogs/wrapped_eth_section_notice_dialog.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import { colors } from 'material-ui/styles'; -import * as React from 'react'; - -interface WrappedEthSectionNoticeDialogProps { - isOpen: boolean; - onToggleDialog: () => void; -} - -export const WrappedEthSectionNoticeDialog = (props: WrappedEthSectionNoticeDialogProps) => { - return ( - , - ]} - open={props.isOpen} - onRequestClose={props.onToggleDialog} - autoScrollBodyContent={true} - modal={true} - > -
-
- We have recently updated the Wrapped Ether token (WETH) used by 0x Portal. Don't worry, unwrapping - Ether tied to the old Wrapped Ether token can be done at any time by clicking on the "Wrap ETH" - section in the menu to the left. -
-
-
- ); -}; diff --git a/packages/website/ts/components/forms/subscribe_form.tsx b/packages/website/ts/components/forms/subscribe_form.tsx deleted file mode 100644 index f5560cfa7..000000000 --- a/packages/website/ts/components/forms/subscribe_form.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; - -import { Button } from 'ts/components/ui/button'; -import { Container } from 'ts/components/ui/container'; -import { Input } from 'ts/components/ui/input'; -import { Text } from 'ts/components/ui/text'; -import { analytics } from 'ts/utils/analytics'; -import { backendClient } from 'ts/utils/backend_client'; - -export interface SubscribeFormProps {} - -export enum SubscribeFormStatus { - None, - Error, - Success, - Loading, - Other, -} - -export interface SubscribeFormState { - emailText: string; - lastSubmittedEmail: string; - status: SubscribeFormStatus; -} - -const FORM_FONT_SIZE = '15px'; - -// TODO: Translate visible strings. https://app.asana.com/0/628666249318202/697485674422001 -export class SubscribeForm extends React.Component { - public state = { - emailText: '', - lastSubmittedEmail: '', - status: SubscribeFormStatus.None, - }; - public render(): React.ReactNode { - return ( - - - - Subscribe to our newsletter for 0x relayer and dApp updates - - -
- - - - - - - - -
- {this._renderMessage()} -
- ); - } - private _renderMessage(): React.ReactNode { - let message = null; - switch (this.state.status) { - case SubscribeFormStatus.Error: - message = 'Sorry, something went wrong. Try again later.'; - break; - case SubscribeFormStatus.Loading: - message = 'One second...'; - break; - case SubscribeFormStatus.Success: - message = `Thanks! ${this.state.lastSubmittedEmail} is now on the mailing list.`; - break; - case SubscribeFormStatus.None: - break; - default: - throw new Error( - 'The SubscribeFormStatus switch statement is not exhaustive when choosing an error message.', - ); - } - return ( - - - {message || 'spacer text (never shown to user)'} - - - ); - } - private _handleEmailInputChange(event: React.ChangeEvent): void { - this.setState({ emailText: event.target.value }); - } - private async _handleFormSubmitAsync(event: React.FormEvent): Promise { - event.preventDefault(); - if (_.isUndefined(this.state.emailText) || _.isEmpty(this.state.emailText)) { - return; - } - this.setState({ - status: SubscribeFormStatus.Loading, - lastSubmittedEmail: this.state.emailText, - }); - try { - const response = await backendClient.subscribeToNewsletterAsync(this.state.emailText); - const status = response.status === 200 ? SubscribeFormStatus.Success : SubscribeFormStatus.Error; - if (status === SubscribeFormStatus.Success) { - analytics.identify(this.state.emailText, 'email'); - } - this.setState({ status, emailText: '' }); - } catch (error) { - this._setStatus(SubscribeFormStatus.Error); - } - } - private _setStatus(status: SubscribeFormStatus): void { - this.setState({ status }); - } -} diff --git a/packages/website/ts/components/layout.tsx b/packages/website/ts/components/layout.tsx deleted file mode 100644 index 9563f80f8..000000000 --- a/packages/website/ts/components/layout.tsx +++ /dev/null @@ -1,177 +0,0 @@ -import styled from 'styled-components'; -import { getCSSPadding, PADDING_SIZES, PaddingInterface } from 'ts/constants/utilities'; - -interface WrapWidths { - default: string; - full: string; - medium: string; - narrow: string; - [key: string]: string; -} - -interface ColumnWidths { - [key: string]: string; -} - -interface SectionProps { - isNoPadding?: boolean; - isPadLarge?: boolean; - isNoMargin?: boolean; - bgColor?: string; - isFullWidth?: boolean; - isRelative?: boolean; -} - -interface WrapProps extends PaddingInterface { - width?: 'default' | 'full' | 'medium' | 'narrow'; - bgColor?: string; - isWrapped?: boolean; - isCentered?: boolean; - isReversed?: boolean; -} - -interface ColumnProps { - colWidth?: '1/4' | '1/3' | '1/2' | '2/3'; - isNoPadding?: boolean; - isNoMargin?: boolean; - isPadLarge?: boolean; - isFlexGrow?: boolean; - isMobileCentered?: boolean; - bgColor?: string; -} - -interface GetColWidthArgs { - span?: number; - columns: number; -} - -export interface WrapStickyInterface { - offsetTop?: string; -} - -const _getColumnWidth = (args: GetColWidthArgs): string => { - const { span = 1, columns } = args; - const percentWidth = span / columns * 100; - const gutterDiff = GUTTER * (columns - 1) / columns; - return `calc(${percentWidth}% - ${gutterDiff}px)`; -}; - -const GUTTER = 30 as number; -const MAX_WIDTH = 1500; -export const BREAKPOINTS = { - mobile: '768px', -}; -const WRAPPER_WIDTHS: WrapWidths = { - default: `${MAX_WIDTH}px`, // tbd - full: '100%', - medium: '1136px', - narrow: '930px', -}; -const COLUMN_WIDTHS: ColumnWidths = { - '1/4': _getColumnWidth({ columns: 4 }), - '1/3': _getColumnWidth({ columns: 3 }), - '1/2': _getColumnWidth({ columns: 2 }), - '2/3': _getColumnWidth({ span: 2, columns: 3 }), -}; - -export const Main = styled.main` - max-width: ${MAX_WIDTH}px; - margin: 0 auto; - - @media (min-width: ${BREAKPOINTS.mobile}) { - width: calc(100% - 60px); - } -`; - -// We can also turn Section into a stateless comp, -// passing a asElement (same patter nas Heading) so we dont have to -// make a const on every route to withComponent-size it. -// just
? -export const Section = - styled.section < - SectionProps > - ` - width: ${props => (props.isFullWidth ? `calc(100% + ${GUTTER * 2}px)` : '100%')}; - padding: ${props => !props.isNoPadding && (props.isPadLarge ? `${PADDING_SIZES.large}` : PADDING_SIZES.default)}; - background-color: ${props => props.bgColor}; - position: ${props => props.isRelative && 'relative'}; - overflow: ${props => props.isRelative && 'hidden'}; - margin-bottom: ${props => !props.isNoMargin && `${GUTTER}px`}; - - @media (min-width: 1560px) { - width: ${props => props.isFullWidth && '100vw'}; - margin-left: ${props => props.isFullWidth && `calc(750px - 50vw)`}; - } - - @media (max-width: ${BREAKPOINTS.mobile}) { - margin-bottom: ${props => !props.isNoMargin && `${GUTTER / 2}px`}; - padding: ${props => - props.isPadLarge ? `${PADDING_SIZES.large} ${PADDING_SIZES.default}` : PADDING_SIZES.default}; - } -`; - -const WrapBase = - styled.div < - WrapProps > - ` - max-width: ${props => WRAPPER_WIDTHS[props.width || 'default']}; - padding: ${props => props.padding && getCSSPadding(props.padding)}; - background-color: ${props => props.bgColor}; - margin: 0 auto; -`; - -export const Wrap = styled(WrapBase)` - @media (min-width: ${BREAKPOINTS.mobile}) { - display: flex; - justify-content: space-between; - flex-wrap: wrap; - flex-direction: ${props => props.isReversed && 'row-reverse'}; - } -`; - -export const WrapCentered = styled(WrapBase)` - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - text-align: center; -`; - -export const WrapSticky = - styled.div < - WrapStickyInterface > - ` - position: sticky; - top: ${props => props.offsetTop || '60px'}; -`; - -export const WrapGrid = styled(WrapBase)` - display: flex; - flex-wrap: ${props => props.isWrapped && `wrap`}; - justify-content: ${props => (props.isCentered ? `center` : 'space-between')}; -`; - -export const Column = - styled.div < - ColumnProps > - ` - background-color: ${props => props.bgColor}; - flex-grow: ${props => props.isFlexGrow && 1}; - - @media (min-width: ${BREAKPOINTS.mobile}) { - padding: ${props => - !props.isNoPadding && - (props.isPadLarge ? `${PADDING_SIZES.large} ${PADDING_SIZES.default}` : PADDING_SIZES.default)}; - width: ${props => (props.colWidth ? COLUMN_WIDTHS[props.colWidth] : '100%')}; - } - - @media (max-width: ${BREAKPOINTS.mobile}) { - padding: ${props => !props.isNoPadding && (props.isPadLarge ? '40px 30px' : 0)}; - margin-bottom: 20px; - text-align: ${props => props.isMobileCentered && 'center'}; - } -`; - -WrapGrid.defaultProps = { - isCentered: true, -}; diff --git a/packages/website/ts/components/redirector.tsx b/packages/website/ts/components/redirector.tsx deleted file mode 100644 index a02693003..000000000 --- a/packages/website/ts/components/redirector.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { constants } from 'ts/utils/constants'; - -interface RedirectorProps { - location: string; -} - -export function Redirector(_props: RedirectorProps): void { - window.location.href = constants.URL_ANGELLIST; -} diff --git a/packages/website/ts/components/separator.tsx b/packages/website/ts/components/separator.tsx deleted file mode 100644 index 0b8b8d766..000000000 --- a/packages/website/ts/components/separator.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import styled from 'styled-components'; - -export const Separator = styled.hr` - background: #eaeaea; - height: 1px; - border: 0; -`; diff --git a/packages/website/ts/components/ui/filled_image.tsx b/packages/website/ts/components/ui/filled_image.tsx deleted file mode 100644 index 7f58ee5b9..000000000 --- a/packages/website/ts/components/ui/filled_image.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import * as React from 'react'; - -export interface FilledImageProps { - src: string; -} -export const FilledImage = (props: FilledImageProps) => ( -
-); diff --git a/packages/website/ts/components/ui/input.tsx b/packages/website/ts/components/ui/input.tsx deleted file mode 100644 index d21b9fd0e..000000000 --- a/packages/website/ts/components/ui/input.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as React from 'react'; -import { styled } from 'ts/style/theme'; - -export interface InputProps { - className?: string; - value?: string; - width?: string; - fontSize?: string; - fontColor?: string; - border?: string; - padding?: string; - placeholderColor?: string; - placeholder?: string; - backgroundColor?: string; - onChange?: (event: React.ChangeEvent) => void; -} - -const PlainInput: React.StatelessComponent = ({ value, className, placeholder, onChange }) => ( - -); - -export const Input = styled(PlainInput)` - font-size: ${props => props.fontSize}; - width: ${props => props.width}; - padding: ${props => props.padding}; - border-radius: 3px; - box-sizing: border-box; - font-family: 'Roboto Mono'; - color: ${props => props.fontColor}; - border: ${props => props.border}; - outline: none; - background-color: ${props => props.backgroundColor}; - &::placeholder { - color: ${props => props.placeholderColor}; - } -`; - -Input.defaultProps = { - width: 'auto', - backgroundColor: colors.white, - fontColor: colors.darkestGrey, - placeholderColor: colors.darkGrey, - fontSize: '12px', - border: 'none', - padding: '0.8em 1.2em', -}; - -Input.displayName = 'Input'; diff --git a/packages/website/ts/components/ui/simple_loading.tsx b/packages/website/ts/components/ui/simple_loading.tsx deleted file mode 100644 index 81744196d..000000000 --- a/packages/website/ts/components/ui/simple_loading.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import CircularProgress from 'material-ui/CircularProgress'; -import * as React from 'react'; - -export interface SimpleLoadingProps { - message: string; -} - -export const SimpleLoading = (props: SimpleLoadingProps) => { - return ( -
-
- -
{props.message}
-
-
- ); -}; diff --git a/packages/website/ts/components/ui/typed_text.tsx b/packages/website/ts/components/ui/typed_text.tsx deleted file mode 100644 index 6d38580b9..000000000 --- a/packages/website/ts/components/ui/typed_text.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; -import Typist from 'react-typist'; - -import { Text, TextProps } from 'ts/components/ui/text'; - -import 'react-typist/dist/Typist.css'; - -export interface TypedTextProps extends TextProps { - textList: string[]; - shouldRepeat?: boolean; - wordDelayMs?: number; - avgKeystrokeDelayMs?: number; - stdKeystrokeDelay?: number; -} - -export interface TypedTextState { - cycleCount: number; -} - -export class TypedText extends React.Component { - public static defaultProps = { - shouldRepeat: false, - avgKeystrokeDelayMs: 90, - wordDelayMs: 1000, - }; - public state = { - cycleCount: 0, - }; - public render(): React.ReactNode { - const { - textList, - shouldRepeat, - wordDelayMs, - avgKeystrokeDelayMs, - stdKeystrokeDelay, - // tslint:disable-next-line - ...textProps - } = this.props; - const { cycleCount } = this.state; - if (_.isEmpty(textList)) { - return null; - } - const typistChildren: React.ReactNode[] = []; - _.forEach(textList, text => { - typistChildren.push( - - {text} - , - ); - if (wordDelayMs) { - typistChildren.push(); - } - typistChildren.push(); - }); - return ( - - {typistChildren} - - ); - } - private _onTypingDone(): void { - if (this.props.shouldRepeat) { - this.setState({ - cycleCount: this.state.cycleCount + 1, - }); - } - } -} diff --git a/packages/website/ts/containers/about.ts b/packages/website/ts/containers/about.ts deleted file mode 100644 index 3b1c99d79..000000000 --- a/packages/website/ts/containers/about.ts +++ /dev/null @@ -1,25 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; -import { About as AboutComponent, AboutProps } from 'ts/pages/about/about'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { State } from 'ts/redux/reducer'; -import { Translate } from 'ts/utils/translate'; - -interface ConnectedState { - translate: Translate; -} - -interface ConnectedDispatch { - dispatcher: Dispatcher; -} - -const mapStateToProps = (state: State, _ownProps: AboutProps): ConnectedState => ({ - translate: state.translate, -}); - -const mapDispatchToProps = (dispatch: Dispatch): ConnectedDispatch => ({ - dispatcher: new Dispatcher(dispatch), -}); - -export const About: React.ComponentClass = connect(mapStateToProps, mapDispatchToProps)(AboutComponent); diff --git a/packages/website/ts/containers/jobs.ts b/packages/website/ts/containers/jobs.ts deleted file mode 100644 index b18485882..000000000 --- a/packages/website/ts/containers/jobs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; -import { Jobs as JobsComponent, JobsProps } from 'ts/pages/jobs/jobs'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { State } from 'ts/redux/reducer'; -import { ScreenWidths } from 'ts/types'; -import { Translate } from 'ts/utils/translate'; - -interface ConnectedState { - translate: Translate; - screenWidth: ScreenWidths; -} - -interface ConnectedDispatch { - dispatcher: Dispatcher; -} - -const mapStateToProps = (state: State, _ownProps: JobsProps): ConnectedState => ({ - translate: state.translate, - screenWidth: state.screenWidth, -}); - -const mapDispatchToProps = (dispatch: Dispatch): ConnectedDispatch => ({ - dispatcher: new Dispatcher(dispatch), -}); - -export const Jobs: React.ComponentClass = connect(mapStateToProps, mapDispatchToProps)(JobsComponent); diff --git a/packages/website/ts/containers/landing.ts b/packages/website/ts/containers/landing.ts deleted file mode 100644 index 972ed4c23..000000000 --- a/packages/website/ts/containers/landing.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; -import { Landing as LandingComponent, LandingProps } from 'ts/pages/landing/landing'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { State } from 'ts/redux/reducer'; -import { Translate } from 'ts/utils/translate'; - -interface ConnectedState { - translate: Translate; -} - -interface ConnectedDispatch { - dispatcher: Dispatcher; -} - -const mapStateToProps = (state: State, _ownProps: LandingProps): ConnectedState => ({ - translate: state.translate, -}); - -const mapDispatchToProps = (dispatch: Dispatch): ConnectedDispatch => ({ - dispatcher: new Dispatcher(dispatch), -}); - -export const Landing: React.ComponentClass = connect(mapStateToProps, mapDispatchToProps)( - LandingComponent, -); diff --git a/packages/website/ts/containers/launch_kit.ts b/packages/website/ts/containers/launch_kit.ts deleted file mode 100644 index 2557f38a5..000000000 --- a/packages/website/ts/containers/launch_kit.ts +++ /dev/null @@ -1,27 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; -import { LaunchKit as LaunchKitComponent, LaunchKitProps } from 'ts/pages/launch_kit/launch_kit'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { State } from 'ts/redux/reducer'; -import { Translate } from 'ts/utils/translate'; - -interface ConnectedState { - translate: Translate; -} - -interface ConnectedDispatch { - dispatcher: Dispatcher; -} - -const mapStateToProps = (state: State, _ownProps: LaunchKitProps): ConnectedState => ({ - translate: state.translate, -}); - -const mapDispatchToProps = (dispatch: Dispatch): ConnectedDispatch => ({ - dispatcher: new Dispatcher(dispatch), -}); - -export const LaunchKit: React.ComponentClass = connect(mapStateToProps, mapDispatchToProps)( - LaunchKitComponent, -); diff --git a/packages/website/ts/icons/form-arrow.svg b/packages/website/ts/icons/form-arrow.svg deleted file mode 100644 index 2070a6d48..000000000 --- a/packages/website/ts/icons/form-arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/website/ts/pages/about/about.tsx b/packages/website/ts/pages/about/about.tsx deleted file mode 100644 index 39bbc584f..000000000 --- a/packages/website/ts/pages/about/about.tsx +++ /dev/null @@ -1,421 +0,0 @@ -import { colors, Link, Styles } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import * as DocumentTitle from 'react-document-title'; -import { Footer } from 'ts/components/old_footer'; -import { TopBar } from 'ts/components/top_bar/top_bar'; -import { Profile } from 'ts/pages/about/profile'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { ProfileInfo, WebsitePaths } from 'ts/types'; -import { Translate } from 'ts/utils/translate'; -import { utils } from 'ts/utils/utils'; - -const teamRow1: ProfileInfo[] = [ - { - name: 'Will Warren', - title: 'Co-founder & CEO', - description: `Smart contract R&D. Previously applied physics at Los Alamos \ - Nat Lab. Mechanical engineering at UC San Diego. PhD dropout.`, - image: '/images/team/will.jpg', - linkedIn: 'https://www.linkedin.com/in/will-warren-92aab62b/', - github: 'https://github.com/willwarren89', - medium: 'https://medium.com/@willwarren89', - }, - { - name: 'Amir Bandeali', - title: 'Co-founder & CTO', - description: `Smart contract R&D. Previously fixed income trader at DRW. \ - Finance at University of Illinois, Urbana-Champaign.`, - image: '/images/team/amir.png', - linkedIn: 'https://www.linkedin.com/in/abandeali1/', - github: 'https://github.com/abandeali1', - medium: 'https://medium.com/@abandeali1', - }, - { - name: 'Fabio Berger', - title: 'Senior Engineer', - description: `Full-stack blockchain engineer. Previously software engineer \ - at Airtable and founder of WealthLift. Computer Science at Duke.`, - image: '/images/team/fabio.jpg', - linkedIn: 'https://www.linkedin.com/in/fabio-berger-03ab261a/', - github: 'https://github.com/fabioberger', - medium: 'https://medium.com/@fabioberger', - }, -]; - -const teamRow2: ProfileInfo[] = [ - { - name: 'Alex Xu', - title: 'Director of Operations', - description: `Strategy and operations. Previously digital marketing at Google \ - and vendor management at Amazon. Economics at UC San Diego.`, - image: '/images/team/alex.jpg', - linkedIn: 'https://www.linkedin.com/in/alex-xu/', - github: '', - medium: 'https://medium.com/@aqxu', - }, - { - name: 'Leonid Logvinov', - title: 'Engineer', - description: `Full-stack blockchain engineer. Previously blockchain engineer \ - at Neufund. Computer Science at University of Warsaw.`, - image: '/images/team/leonid.png', - linkedIn: 'https://www.linkedin.com/in/leonidlogvinov/', - github: 'https://github.com/LogvinovLeon', - medium: 'https://medium.com/@Logvinov', - }, - { - name: 'Ben Burns', - title: 'Designer', - description: `Product, motion, and graphic designer. Previously designer \ - at Airtable and Apple. Digital Design at University of Cincinnati.`, - image: '/images/team/ben.jpg', - linkedIn: 'https://www.linkedin.com/in/ben-burns-30170478/', - github: '', - medium: '', - }, -]; - -const teamRow3: ProfileInfo[] = [ - { - name: 'Brandon Millman', - title: 'Senior Engineer', - description: `Full-stack engineer. Previously senior software engineer at \ - Twitter. Computer Science and Electrical Engineering at Duke.`, - image: '/images/team/brandon.png', - linkedIn: 'https://www.linkedin.com/in/brandon-millman-b093a022/', - github: 'https://github.com/BMillman19', - medium: 'https://medium.com/@bchillman', - }, - { - name: 'Tom Schmidt', - title: 'Product Manager', - description: `Previously engineering at Apple, product management at Facebook and Instagram. Computer Science at Stanford.`, - image: '/images/team/tom.jpg', - linkedIn: 'https://www.linkedin.com/in/tomhschmidt/', - github: 'https://github.com/tomhschmidt', - medium: '', - }, - { - name: 'Jacob Evans', - title: 'Ecosystem Engineer', - description: `Previously software engineer at Qantas and RSA Security.`, - image: '/images/team/jacob.jpg', - linkedIn: 'https://www.linkedin.com/in/dekzter/', - github: 'https://github.com/dekz', - medium: '', - }, -]; - -const teamRow4: ProfileInfo[] = [ - { - name: 'Blake Henderson', - title: 'Operations Associate', - description: `Operations and Analytics. Previously analytics at LinkedIn. Economics at UC San Diego.`, - image: '/images/team/blake.jpg', - linkedIn: 'https://www.linkedin.com/in/blakerhenderson/', - github: '', - medium: '', - }, - { - name: 'Zack Skelly', - title: 'Lead Recruiter', - description: `Talent. Previously first recruiter at Heap, recruiting at Dropbox and Google. English Rhetoric and Composition at Pepperdine.`, - image: '/images/team/zach.png', - linkedIn: 'https://www.linkedin.com/in/zackaryskelly/', - github: '', - medium: '', - }, - { - name: 'Greg Hysen', - title: 'Blockchain Engineer', - description: `Smart contract R&D. Previously lead distributed systems engineer at Hivemapper. Computer Science at University of Waterloo.`, - image: '/images/team/greg.jpeg', - linkedIn: 'https://www.linkedin.com/in/gregory-hysen-71741463/', - github: 'https://github.com/hysz', - medium: '', - }, -]; - -const teamRow5: ProfileInfo[] = [ - { - name: 'Remco Bloemen', - title: 'Technical Fellow', - description: `Previously cofounder at Neufund and Coblue. Part III at Cambridge. PhD dropout at Twente Business School.`, - image: '/images/team/remco.jpeg', - linkedIn: 'https://www.linkedin.com/in/remcobloemen/', - github: 'http://github.com/recmo', - medium: '', - }, - { - name: 'Francesco Agosti', - title: 'Engineer', - description: `Full-stack engineer. Previously senior software engineer at Yelp. Computer Science at Duke.`, - image: 'images/team/fragosti.png', - linkedIn: 'https://www.linkedin.com/in/fragosti/', - github: 'http://github.com/fragosti', - }, - { - name: 'Mel Oberto', - title: 'Office Ops / Executive Assistant', - description: `Daily Operations. Previously People Operations Associate at Heap. Marketing and MBA at Sacred Heart University.`, - image: 'images/team/mel.png', - linkedIn: 'https://www.linkedin.com/in/melanieoberto', - }, -]; - -const teamRow6: ProfileInfo[] = [ - { - name: 'Alex Browne', - title: 'Engineer in Residence', - description: `Full-stack blockchain engineer. Previously at Plaid. Open source guru and footgun dismantler. Computer Science and Electrical Engineering at Duke.`, - image: 'images/team/alexbrowne.png', - linkedIn: 'https://www.linkedin.com/in/stephenalexbrowne/', - github: 'http://github.com/albrow', - }, - { - name: 'Peter Zeitz', - title: 'Research Fellow', - description: `Researching decentralized governance. Previously Assistant Professor of Economics at National University of Singapore Business School. PhD in Economics at UCLA.`, - image: 'images/team/peter.jpg', - linkedIn: 'https://www.linkedin.com/in/peter-z-7b9595163/', - }, - { - name: 'Chris Kalani', - title: 'Director of Design', - description: `Previously founded Wake (acquired by InVision). Early Facebook product designer.`, - image: 'images/team/chris.png', - linkedIn: 'https://www.linkedin.com/in/chriskalani/', - github: 'https://github.com/chriskalani', - }, -]; - -const teamRow7: ProfileInfo[] = [ - { - name: 'Clay Robbins', - title: 'Ecosystem Development Lead', - description: `Growth & Business Development. Previously product and partnerships at Square. Economics at Dartmouth College.`, - image: 'images/team/clay.png', - linkedIn: 'https://www.linkedin.com/in/robbinsclay/', - }, - { - name: 'Matt Taylor', - title: 'Marketing Lead', - description: `Growth & Marketing. Previously marketing at Abra and Square. Economics and Philosophy at Claremont McKenna College.`, - image: 'images/team/matt.jpg', - linkedIn: 'https://www.linkedin.com/in/mattytay/', - }, - { - name: 'Eugene Aumson', - title: 'Engineer', - description: `Developer Experience. Previously senior software engineer in foreign exchange applications at Bloomberg LP.`, - image: 'images/team/gene.jpg', - linkedIn: 'https://www.linkedin.com/in/aumson/', - github: 'https://github.com/feuGeneA', - }, -]; - -const teamRow8: ProfileInfo[] = [ - { - name: 'Weijie Wu', - title: 'Research Fellow', - description: `Researching decentralized governance. Previously Researcher at Huawei and Assistant Professor at Shanghai Jiao Tong University. PhD in Computer Science at The Chinese University of Hong Kong.`, - image: 'images/team/weijie.png', - linkedIn: 'https://www.linkedin.com/in/weijiewu/', - }, - { - name: 'Rahul Singireddy', - title: 'Relayer Success Manager', - description: `Previously community at Zeppelin, growth at Dharma, and cryptocurrency contributor at Forbes. Symbolic Systems at Stanford.`, - image: 'images/team/rahul.png', - linkedIn: 'https://www.linkedin.com/in/rahul-singireddy-3037908a/', - }, - { - name: 'Jason Somensatto', - title: 'Strategic Legal Counsel', - description: `Legal. Previously head of blockchain and crypto practice at Orrick. JD from George Washington University and undergrad at UVA.`, - image: 'images/team/jason.png', - linkedIn: 'https://www.linkedin.com/in/jasonsomensatto/', - }, -]; - -const teamRow9: ProfileInfo[] = [ - { - name: 'Steve Klebanoff', - title: 'Senior Engineer', - description: ` Full-stack engineer. Previously Staff Software Engineer at AppFolio. Computer Science & Cognitive Psychology at Northeastern University.`, - image: 'images/team/steve.png', - linkedIn: 'https://www.linkedin.com/in/steveklebanoff/', - github: 'https://github.com/steveklebanoff', - }, - { - name: 'Xianny Ng', - title: 'Engineer', - description: `Developer Experience. Previously telemetry at Mapbox and platform engineering at Bench Accounting.`, - image: 'images/team/xianny.png', - linkedIn: 'https://www.linkedin.com/in/xianny/', - github: 'https://github.com/xianny', - }, -]; - -const advisors1: ProfileInfo[] = [ - { - name: 'Fred Ehrsam', - description: 'Co-founder of Coinbase. Previously FX trader at Goldman Sachs.', - image: '/images/advisors/fred.jpg', - linkedIn: 'https://www.linkedin.com/in/fredehrsam/', - medium: 'https://medium.com/@FEhrsam', - twitter: 'https://twitter.com/FEhrsam', - }, - { - name: 'Olaf Carlson-Wee', - image: '/images/advisors/olaf.png', - description: 'Founder of Polychain Capital. First hire at Coinbase. Angel investor.', - linkedIn: 'https://www.linkedin.com/in/olafcw/', - angellist: 'https://angel.co/olafcw', - }, - { - name: 'Joey Krug', - description: `Co-CIO at Pantera Capital. Founder of Augur. Thiel 20 Under 20 Fellow.`, - image: '/images/advisors/joey.jpg', - linkedIn: 'https://www.linkedin.com/in/joeykrug/', - github: 'https://github.com/joeykrug', - angellist: 'https://angel.co/joeykrug', - }, -]; - -const advisors2: ProfileInfo[] = [ - { - name: 'Linda Xie', - description: 'Co-founder of Scalar Capital. Previously PM at Coinbase.', - image: '/images/advisors/linda.jpg', - linkedIn: 'https://www.linkedin.com/in/lindaxie/', - medium: 'https://medium.com/@linda.xie', - twitter: 'https://twitter.com/ljxie', - }, - { - name: 'David Sacks', - description: 'General Partner at Craft Ventures. Original COO of PayPal. Founder of Yammer.', - image: '/images/advisors/david.png', - linkedIn: 'https://www.linkedin.com/in/davidoliversacks/', - medium: 'https://medium.com/@davidsacks', - twitter: 'https://twitter.com/DavidSacks', - }, -]; - -export interface AboutProps { - source: string; - location: Location; - translate: Translate; - dispatcher: Dispatcher; -} - -interface AboutState {} - -const styles: Styles = { - header: { - fontFamily: 'Roboto Mono', - fontSize: 36, - color: 'black', - paddingTop: 110, - }, - weAreHiring: { - fontSize: 30, - color: colors.darkestGrey, - fontFamily: 'Roboto Mono', - letterSpacing: 7.5, - }, -}; - -export class About extends React.Component { - public componentDidMount(): void { - window.scrollTo(0, 0); - } - public render(): React.ReactNode { - return ( -
- - -
-
-
About us:
-
- Our team is a globally distributed group with backgrounds in engineering, research, business - and design. We are passionate about decentralized technology and its potential to act as an - equalizing force in the world. -
-
-
-
{this._renderProfiles(teamRow1)}
-
{this._renderProfiles(teamRow2)}
-
{this._renderProfiles(teamRow3)}
-
{this._renderProfiles(teamRow4)}
-
{this._renderProfiles(teamRow5)}
-
{this._renderProfiles(teamRow6)}
-
{this._renderProfiles(teamRow7)}
-
{this._renderProfiles(teamRow8)}
-
{this._renderProfiles(teamRow9)}
-
-
-
- Advisors: -
-
{this._renderProfiles(advisors1)}
-
{this._renderProfiles(advisors2)}
-
-
-
- WE'RE HIRING -
-
- We are seeking outstanding candidates to{' '} - - join our team - - . We value passion, diversity and unique perspectives. -
-
-
-
-
- ); - } - private _renderProfiles(profiles: ProfileInfo[]): React.ReactNode { - const numIndiv = profiles.length; - const colSize = utils.getColSize(numIndiv); - return _.map(profiles, profile => { - return ( -
- -
- ); - }); - } -} diff --git a/packages/website/ts/pages/about/profile.tsx b/packages/website/ts/pages/about/profile.tsx deleted file mode 100644 index 2361c6418..000000000 --- a/packages/website/ts/pages/about/profile.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { colors, Styles } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { ProfileInfo } from 'ts/types'; - -const IMAGE_DIMENSION = 149; -const styles: Styles = { - subheader: { - textTransform: 'uppercase', - fontSize: 32, - margin: 0, - }, - imageContainer: { - width: IMAGE_DIMENSION, - height: IMAGE_DIMENSION, - boxShadow: 'rgba(0, 0, 0, 0.19) 2px 5px 10px', - }, -}; - -interface ProfileProps { - colSize: number; - profileInfo: ProfileInfo; -} - -export const Profile = (props: ProfileProps) => { - return ( -
-
-
- -
-
- {props.profileInfo.name} -
- {!_.isUndefined(props.profileInfo.title) && ( -
- {props.profileInfo.title.toUpperCase()} -
- )} -
- {props.profileInfo.description} -
-
- {renderSocialMediaIcons(props.profileInfo)} -
-
-
- ); -}; - -function renderSocialMediaIcons(profileInfo: ProfileInfo): React.ReactNode { - const icons = [ - renderSocialMediaIcon('zmdi-github-box', profileInfo.github), - renderSocialMediaIcon('zmdi-linkedin-box', profileInfo.linkedIn), - renderSocialMediaIcon('zmdi-twitter-box', profileInfo.twitter), - ]; - return icons; -} - -function renderSocialMediaIcon(iconName: string, url: string): React.ReactNode { - if (_.isEmpty(url)) { - return null; - } - - return ( -
- - - -
- ); -} diff --git a/packages/website/ts/pages/instant/introducing_0x_instant.tsx b/packages/website/ts/pages/instant/introducing_0x_instant.tsx deleted file mode 100644 index da3f09faa..000000000 --- a/packages/website/ts/pages/instant/introducing_0x_instant.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import * as React from 'react'; - -import { Button } from 'ts/components/ui/button'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { colors } from 'ts/style/colors'; -import { ScreenWidths } from 'ts/types'; - -export interface Introducing0xInstantProps { - screenWidth: ScreenWidths; - onCTAClick: () => void; -} - -export const Introducing0xInstant = (props: Introducing0xInstantProps) => { - const isSmallScreen = props.screenWidth === ScreenWidths.Sm; - const zero = ( - - 0 - - ); - const title = isSmallScreen ? ( -
- Introducing
- {zero}x Instant -
- ) : ( -
Introducing {zero}x Instant
- ); - return ( -
-
- - - {title} - - - - - A free and flexible way to offer simple crypto -
purchasing in any app or website. -
-
-
- -
-
-
- ); -}; diff --git a/packages/website/ts/pages/instant/need_more.tsx b/packages/website/ts/pages/instant/need_more.tsx deleted file mode 100644 index 70aea7363..000000000 --- a/packages/website/ts/pages/instant/need_more.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import * as React from 'react'; - -import { Button } from 'ts/components/ui/button'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { colors } from 'ts/style/colors'; -import { ScreenWidths, WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { utils } from 'ts/utils/utils'; - -export interface NeedMoreProps { - screenWidth: ScreenWidths; -} -export const NeedMore = (props: NeedMoreProps) => { - const isSmallScreen = props.screenWidth === ScreenWidths.Sm; - const backgroundColor = isSmallScreen ? colors.instantTertiaryBackground : colors.instantSecondaryBackground; - const className = isSmallScreen ? 'flex flex-column items-center' : 'flex'; - const marginRight = isSmallScreen ? undefined : '200px'; - return ( - - - - - Need more flexibility? - - - View our full documentation or reach out if you have any questions. - - - - - - - - - - - ); -}; - -const onGetInTouchClick = () => { - utils.openUrl(constants.URL_ZEROEX_CHAT); -}; -const onDocsClick = () => { - utils.openUrl(`${WebsitePaths.Wiki}#Get-Started-With-Instant`); -}; diff --git a/packages/website/ts/pages/instant/screenshots.tsx b/packages/website/ts/pages/instant/screenshots.tsx deleted file mode 100644 index 7dcf17fd1..000000000 --- a/packages/website/ts/pages/instant/screenshots.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; - -import { Container } from 'ts/components/ui/container'; -import { colors } from 'ts/style/colors'; -import { ScreenWidths } from 'ts/types'; - -export interface ScreenshotsProps { - screenWidth: ScreenWidths; -} - -export const Screenshots = (props: ScreenshotsProps) => { - const isSmallScreen = props.screenWidth === ScreenWidths.Sm; - const images = isSmallScreen - ? [ - 'images/instant/rep_screenshot.png', - 'images/instant/dai_screenshot.png', - 'images/instant/gods_screenshot.png', - ] - : [ - 'images/instant/nmr_screenshot.png', - 'images/instant/kitty_screenshot.png', - 'images/instant/rep_screenshot.png', - 'images/instant/dai_screenshot.png', - 'images/instant/gods_screenshot.png', - 'images/instant/gnt_screenshot.png', - ]; - return ( - - {_.map(images, image => { - return ; - })} - - ); -}; diff --git a/packages/website/ts/pages/jobs/benefits.tsx b/packages/website/ts/pages/jobs/benefits.tsx deleted file mode 100644 index 563b72e63..000000000 --- a/packages/website/ts/pages/jobs/benefits.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; - -import { Circle } from 'ts/components/ui/circle'; -import { Container } from 'ts/components/ui/container'; -import { Image } from 'ts/components/ui/image'; -import { Text } from 'ts/components/ui/text'; -import { colors } from 'ts/style/colors'; -import { styled } from 'ts/style/theme'; -import { ScreenWidths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -const BENEFITS = [ - 'Comprehensive insurance (medical, dental, and vision)', - 'Unlimited vacation (three weeks per year minimum)', - 'Meals and snacks provided in-office daily', - 'Flexible hours and liberal work-from-home-policy', - 'Supportive remote working environment', - 'Transportation, phone, and wellness expense', - 'Relocation assistance', - 'Optional team excursions (fully paid, often international)', - 'Competitive salary and cryptocurrency-based compensation', -]; - -interface Value { - iconSrc: string; - text: string; -} -const VALUES: Value[] = [ - { - iconSrc: 'images/jobs/heart-icon.svg', - text: 'Do the right thing', - }, - { - iconSrc: 'images/jobs/ship-icon.svg', - text: 'Consistently ship', - }, - { - iconSrc: 'images/jobs/calendar-icon.svg', - text: 'Focus on long term impact', - }, -]; - -export interface BenefitsProps { - screenWidth: ScreenWidths; -} - -export const Benefits = (props: BenefitsProps) => { - const isSmallScreen = props.screenWidth === ScreenWidths.Sm; - return ( - - {!isSmallScreen ? ( - - - - - - - ) : ( - - - - - - - )} - - ); -}; - -const Header: React.StatelessComponent = ({ children }) => ( - - - {children} - - -); - -interface BenefitsListProps { - className?: string; -} -const PlainBenefitsList: React.StatelessComponent = ({ className }) => { - return ( - -
Benefits
- {_.map(BENEFITS, benefit => )} -
- ); -}; -const BenefitsList = styled(PlainBenefitsList)` - transform: translateY(30px); -`; - -interface BenefitItemProps { - description: string; -} - -const BenefitItem: React.StatelessComponent = ({ description }) => ( - -
- -
- - {description} - -
-
-
-); - -interface ValuesListProps { - className?: string; -} -const PlainValuesList: React.StatelessComponent = ({ className }) => { - return ( - -
Our Values
- {_.map(VALUES, value => )} - - We care deeply about our culture and values, and encourage you to{' '} - - read more on our blog - . - -
- ); -}; - -const ValuesList = styled(PlainValuesList)` - border-color: ${colors.beigeWhite}; - border-radius: 7px; - border-width: 1px; - border-style: solid; - padding-left: 38px; - padding-right: 38px; - padding-top: 28px; - padding-bottom: 28px; -`; - -type ValueItemProps = Value; -const ValueItem: React.StatelessComponent = ({ iconSrc, text }) => { - return ( - -
- -
- - {text} - -
-
-
- ); -}; diff --git a/packages/website/ts/pages/jobs/jobs.tsx b/packages/website/ts/pages/jobs/jobs.tsx deleted file mode 100644 index 872dc6103..000000000 --- a/packages/website/ts/pages/jobs/jobs.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { colors, utils as sharedUtils } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import * as DocumentTitle from 'react-document-title'; - -import { MetaTags } from 'ts/components/meta_tags'; -import { Footer } from 'ts/components/old_footer'; -import { TopBar } from 'ts/components/top_bar/top_bar'; -import { Container } from 'ts/components/ui/container'; -import { Benefits } from 'ts/pages/jobs/benefits'; -import { Join0x } from 'ts/pages/jobs/join_0x'; -import { Mission } from 'ts/pages/jobs/mission'; -import { OpenPositions } from 'ts/pages/jobs/open_positions'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { ScreenWidths } from 'ts/types'; -import { Translate } from 'ts/utils/translate'; -import { utils } from 'ts/utils/utils'; - -const OPEN_POSITIONS_HASH = 'positions'; -const THROTTLE_TIMEOUT = 100; -const DOCUMENT_TITLE = 'Careers at 0x'; -const DOCUMENT_DESCRIPTION = 'Join 0x in creating a tokenized world where all value can flow freely'; - -export interface JobsProps { - location: Location; - translate: Translate; - dispatcher: Dispatcher; - screenWidth: ScreenWidths; -} - -export interface JobsState {} - -export class Jobs extends React.Component { - // TODO: consolidate this small screen scaffolding into one place (its being used in portal and docs as well) - private readonly _throttledScreenWidthUpdate: () => void; - public constructor(props: JobsProps) { - super(props); - this._throttledScreenWidthUpdate = _.throttle(this._updateScreenWidth.bind(this), THROTTLE_TIMEOUT); - } - public componentDidMount(): void { - window.addEventListener('resize', this._throttledScreenWidthUpdate); - window.scrollTo(0, 0); - } - public render(): React.ReactNode { - return ( - - - - - - - - -