mirror of
https://github.com/kremalicious/portfolio.git
synced 2025-02-14 21:10:41 +01:00
99 lines
2.1 KiB
JavaScript
99 lines
2.1 KiB
JavaScript
import React, { PureComponent } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import { StaticQuery, graphql } from 'gatsby'
|
|
import posed from 'react-pose'
|
|
import { moveInTop } from '../atoms/Transitions'
|
|
|
|
import Email from '../svg/Email'
|
|
import Blog from '../svg/Blog'
|
|
import Twitter from '../svg/Twitter'
|
|
import GitHub from '../svg/Github'
|
|
import Dribbble from '../svg/Dribbble'
|
|
|
|
import icons from '../atoms/Icons.module.scss'
|
|
import styles from './Networks.module.scss'
|
|
|
|
const query = graphql`
|
|
query {
|
|
dataYaml {
|
|
social {
|
|
Email
|
|
Blog
|
|
Twitter
|
|
GitHub
|
|
Dribbble
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
const NetworkIcon = props => {
|
|
switch (props.title) {
|
|
case 'Email':
|
|
return <Email {...props} />
|
|
case 'Blog':
|
|
return <Blog {...props} />
|
|
case 'Twitter':
|
|
return <Twitter {...props} />
|
|
case 'GitHub':
|
|
return <GitHub {...props} />
|
|
case 'Dribbble':
|
|
return <Dribbble {...props} />
|
|
default:
|
|
return null
|
|
}
|
|
}
|
|
|
|
const Animation = posed.aside(moveInTop)
|
|
|
|
export default class Network extends PureComponent {
|
|
static propTypes = {
|
|
minimal: PropTypes.bool,
|
|
hide: PropTypes.bool
|
|
}
|
|
|
|
state = {
|
|
classes: styles.networks
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.toggleClasses()
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
this.toggleClasses()
|
|
}
|
|
|
|
toggleClasses = () => {
|
|
if (this.props.minimal) {
|
|
this.setState({ classes: `${styles.networks} ${styles.minimal}` })
|
|
} else {
|
|
this.setState({ classes: styles.networks })
|
|
}
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<StaticQuery
|
|
query={query}
|
|
render={data => {
|
|
const meta = data.dataYaml
|
|
|
|
return (
|
|
!this.props.hide && (
|
|
<Animation className={this.state.classes}>
|
|
{Object.keys(meta.social).map((key, i) => (
|
|
<a className={styles.link} href={meta.social[key]} key={i}>
|
|
<NetworkIcon title={key} className={icons.icon} />
|
|
<span className={styles.title}>{key}</span>
|
|
</a>
|
|
))}
|
|
</Animation>
|
|
)
|
|
)
|
|
}}
|
|
/>
|
|
)
|
|
}
|
|
}
|