├── .gitignore ├── .npmignore ├── .travis.yml ├── components ├── category.js ├── filter-button.js ├── footer.js ├── list-item.js ├── list.js ├── meta.js └── page-title.js ├── contributing.md ├── license ├── package.json ├── pages └── index.js ├── readme.md ├── services └── get-languages.js ├── static ├── analytics.js └── oss.png ├── utils └── language.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | # Others 40 | .next 41 | env.js 42 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # include secrets when deploying to now 2 | !.env 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '6' 4 | -------------------------------------------------------------------------------- /components/category.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const { 4 | string 5 | } = React.PropTypes 6 | 7 | const Category = props => ( 8 | 9 | {props.language} 10 | 11 | 24 | 25 | ) 26 | 27 | Category.propTypes = { 28 | language: string 29 | } 30 | 31 | export default Category 32 | -------------------------------------------------------------------------------- /components/filter-button.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const { 4 | string, 5 | number, 6 | func, 7 | oneOfType 8 | } = React.PropTypes 9 | 10 | const FilterButton = props => { 11 | const filterBtnSelected = props.currentFilter === props.value ? 'filter__btn--selected' : '' 12 | 13 | return ( 14 | 71 | ) 72 | } 73 | 74 | FilterButton.propTypes = { 75 | value: string, 76 | secondaryText: oneOfType([string, number]), 77 | onFilter: func, 78 | currentFilter: string 79 | } 80 | 81 | export default FilterButton 82 | -------------------------------------------------------------------------------- /components/footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Footer = () => { 4 | return ( 5 | 54 | ) 55 | } 56 | 57 | export default Footer 58 | -------------------------------------------------------------------------------- /components/list-item.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Category from './category' 3 | 4 | const { 5 | string, 6 | arrayOf 7 | } = React.PropTypes 8 | 9 | const ListItem = props => { 10 | const categories = props.languages.map((language, index) => ( 11 |
  • 12 | 13 |
  • 14 | )) 15 | 16 | return ( 17 |
  • 18 | 19 |

    {props.title}

    20 | 21 | 22 |
    23 | 24 | 74 |
  • 75 | ) 76 | } 77 | 78 | ListItem.propTypes = { 79 | title: string, 80 | html_url: string, 81 | languages: arrayOf(string) 82 | } 83 | 84 | export default ListItem 85 | -------------------------------------------------------------------------------- /components/list.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ListItem from './list-item' 3 | 4 | const { 5 | arrayOf, 6 | object 7 | } = React.PropTypes 8 | 9 | const List = props => { 10 | const list = props.list.map(issue => ( 11 | this.setState({languageFilter})}/> 12 | )) 13 | 14 | return ( 15 | 35 | ) 36 | } 37 | 38 | List.propTypes = { 39 | list: arrayOf(object) 40 | } 41 | 42 | export default List 43 | -------------------------------------------------------------------------------- /components/meta.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Head from 'next/head' 3 | 4 | export default () => ( 5 |
    6 | 7 | Open Source — It's never too late to join the party 🎉🎉 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |