import * as _ from 'lodash'; import * as React from 'react'; import { Link } from 'react-router-dom'; import { Deco, Key, WebsitePaths } from 'ts/types'; import { colors } from 'ts/utils/colors'; import { constants } from 'ts/utils/constants'; import { Translate } from 'ts/utils/translate'; interface MenuItemsBySection { [sectionName: string]: FooterMenuItem[]; } interface FooterMenuItem { title: string; path?: string; isExternal?: boolean; } const ICON_DIMENSION = 16; const linkStyle = { color: colors.white, cursor: 'pointer', }; const titleToIcon: { [title: string]: string } = { 'Rocket.chat': 'rocketchat.png', Blog: 'medium.png', Twitter: 'twitter.png', Reddit: 'reddit.png', Forum: 'discourse.png', }; export interface FooterProps { translate?: Translate; } interface FooterState {} export class Footer extends React.Component { public static defaultProps: Partial = { translate: new Translate(), }; public render() { const menuItemsBySection: MenuItemsBySection = { [Key.Documentation]: [ { title: '0x.js', path: WebsitePaths.ZeroExJs, }, { title: this.props.translate.get(Key.SmartContracts, Deco.Cap), path: WebsitePaths.SmartContracts, }, { title: this.props.translate.get(Key.Connect, Deco.Cap), path: WebsitePaths.Connect, }, { title: this.props.translate.get(Key.Whitepaper, Deco.Cap), path: WebsitePaths.Whitepaper, isExternal: true, }, { title: this.props.translate.get(Key.Wiki, Deco.Cap), path: WebsitePaths.Wiki, }, { title: this.props.translate.get(Key.FAQ, Deco.Cap), path: WebsitePaths.FAQ, }, ], [Key.Community]: [ { title: this.props.translate.get(Key.RocketChat, Deco.Cap), isExternal: true, path: constants.URL_ZEROEX_CHAT, }, { title: this.props.translate.get(Key.Blog, Deco.Cap), isExternal: true, path: constants.URL_BLOG, }, { title: 'Twitter', isExternal: true, path: constants.URL_TWITTER, }, { title: 'Reddit', isExternal: true, path: constants.URL_REDDIT, }, { title: this.props.translate.get(Key.Forum, Deco.Cap), isExternal: true, path: constants.URL_DISCOURSE_FORUM, }, ], [Key.Organization]: [ { title: this.props.translate.get(Key.About, Deco.Cap), isExternal: false, path: WebsitePaths.About, }, { title: this.props.translate.get(Key.Careers, Deco.Cap), isExternal: true, path: constants.URL_ANGELLIST, }, { title: this.props.translate.get(Key.Contact, Deco.Cap), isExternal: true, path: 'mailto:team@0xproject.com', }, ], }; return (
© ZeroEx, Intl.
{this._renderHeader(Key.Documentation)} {_.map(menuItemsBySection[Key.Documentation], this._renderMenuItem.bind(this))}
{this._renderHeader(Key.Community)} {_.map(menuItemsBySection[Key.Community], this._renderMenuItem.bind(this))}
{this._renderHeader(Key.Organization)} {_.map(menuItemsBySection[Key.Organization], this._renderMenuItem.bind(this))}
); } private _renderIcon(fileName: string) { return (
); } private _renderMenuItem(item: FooterMenuItem) { const iconIfExists = titleToIcon[item.title]; return (
{item.isExternal ? ( {!_.isUndefined(iconIfExists) ? (
{this._renderIcon(iconIfExists)}
{item.title}
) : ( item.title )}
) : (
{!_.isUndefined(iconIfExists) && (
{this._renderIcon(iconIfExists)}
)} {item.title}
)}
); } private _renderHeader(key: Key) { const headerStyle = { color: colors.grey400, letterSpacing: 2, fontFamily: 'Roboto Mono', fontSize: 13, }; return (
{this.props.translate.get(key, Deco.Upper)}
); } }