Repository: LarissaAbreu/contrata-se-dev Branch: master Commit: 8180650b44aa Files: 14 Total size: 15.9 KB Directory structure: gitextract_5xcr95ty/ ├── .gitignore ├── CNAME ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── package.json ├── src/ │ ├── assets/ │ │ ├── scripts/ │ │ │ ├── App.js │ │ │ ├── components/ │ │ │ │ ├── Card.js │ │ │ │ ├── Label.js │ │ │ │ └── SelectLabel.js │ │ │ └── index.js │ │ └── styles/ │ │ └── style.css │ └── index.html └── webpack.config.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ .DS_Store desktop.ini icon npm-debug.log node_modules/ dist/ yarn-error.log .out/ ================================================ FILE: CNAME ================================================ contrata-se.dev ================================================ FILE: CONTRIBUTING.md ================================================ # Contribuição 1. Fork o projeto! 2. Crie sua feature branch: `git checkout -b my-new-feature` 3. Commit suas alterações: `git commit -m 'Add some feature'` 4. Suba sua branch: `git push origin my-new-feature` 5. Envie um pull request **Depois que seu pull requeste for mergeado** Depois que seu pull request for mergeado você pode deletar sua branch. ## Atenção: É importante tentar manter o padrão de desenvolvimento que está sendo seguido no projeto e sempre tentar fazer o seu código de uma maneira que seja escalável e manutenível. ### [<-- Voltar](https://github.com/LarissaAbreu/contrata-se-dev) ================================================ FILE: LICENSE.md ================================================ Copyright (c) 2019 Larissa Abreu, [afonsopacifer.com](http://afonsopacifer.com/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # Contrata-se.dev > Agregador de vagas para pessoas desenvolvedoras :) ## Rodando o projeto localmente **1 -** Clone o projeto e instale as dependêcias: ```sh $ git clone https://github.com/LarissaAbreu/contrata-se-dev.git $ cd contrata-se-dev $ yarn ``` **3 -** Rode o servidor estático com livereload: ```sh $ yarn start ``` ## Versionamento Para manter uma melhor organização, seguiremos as diretrizes do [Versionamento Semântico 2.0.0](http://semver.org/). ## Contribuição Veja no [guia](https://github.com/LarissaAbreu/contrata-se-dev/issues) os próximos passos do projeto ;) Quer contrinuir? [Siga essas recomendações](https://github.com/LarissaAbreu/contrata-se-dev/blob/master/CONTRIBUTING.md). ## Licença [Licença MIT](https://github.com/LarissaAbreu/contrata-se-dev/blob/master/LICENSE.md) © [Larissa Abreu](http://larissaabreu.github.io/), [Afonso Pacifer](https://afonsopacifer.github.io/) ================================================ FILE: package.json ================================================ { "name": "contrata-se-dev", "version": "0.1.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "./node_modules/.bin/webpack-dev-server", "build": "./node_modules/.bin/webpack", "deploy": "gh-pages-deploy" }, "repository": { "type": "git", "url": "git+https://github.com/LarissaAbreu/contrata-se-dev.git" }, "author": "Larissa Abreu, Afonso Pacifer", "license": "MIT", "bugs": { "url": "https://github.com/LarissaAbreu/contrata-se-dev/issues" }, "homepage": "https://github.com/LarissaAbreu/contrata-se-dev#readme", "dependencies": { "react": "^16.8.1", "react-dom": "^16.8.1", "react-select": "^3.1.1", "tinycolor2": "^1.4.1" }, "devDependencies": { "@babel/core": "^7.2.2", "@babel/preset-env": "^7.3.1", "@babel/preset-react": "^7.0.0", "babel-loader": "^8.0.5", "copy-webpack-plugin": "^4.6.0", "css-loader": "^2.1.0", "style-loader": "^0.23.1", "svg-react-loader": "^0.4.6", "webpack": "^4.29.3", "webpack-cli": "^3.2.3", "webpack-dev-server": "^3.1.14" }, "gh-pages-deploy": { "staticpath": "dist", "cname": "contrata-se.dev" } } ================================================ FILE: src/assets/scripts/App.js ================================================ import React, { useState, useEffect } from 'react'; import '../styles/style.css'; import Card from './components/Card'; import Label from './components/Label'; import SelectLabel from './components/SelectLabel'; const App = () => { const [issues, setIssues] = useState([]); const [pages, setPages] = useState(1); const [filteredLabels, setFilteredLabels] = useState([]); useEffect(() => { fetch(`https://api.github.com/repos/frontendbr/vagas/issues?state=open&page=1&labels=${_formateLabelsQuery(filteredLabels)}`) .then((res) => res.json()) .then((json) => setIssues(json)); }, [filteredLabels]); const formateDate = (date) => { const dateSplit = date.split('T'); const ymd = dateSplit[0].split('-'); return `${ymd[2]}/${ymd[1]}/${ymd[0]}`; }; const _formateLabelsQuery = (labels) => { const valueLabel = (Array.isArray(labels) ? labels : []).map((label) => label.value); return valueLabel.join(','); }; const _showMore = () => { fetch(`https://api.github.com/repos/frontendbr/vagas/issues?state=open&page=${pages + 1}&labels=${_formateLabelsQuery(filteredLabels)}`) .then((res) => res.json()) .then((json) => { setIssues([...issues, ...json]); setPages(pages + 1); }); }; const $issues = issues.map((issue, i) => { if (!issue.pull_request) { const date = formateDate(issue.created_at); const $labels = issue.labels.map((label, i) => { return ( ); }); return ( ); }; }); return ( Contrata-se.dev Agregador de vagas para pessoas desenvolvedoras :) Postar uma nova vaga setFilteredLabels(filteredLabels)}/> {$issues} _showMore()}>Mostrar mais Feito com ); }; export default App; ================================================ FILE: src/assets/scripts/components/Card.js ================================================ import React from 'react'; const Card = ({url, title, labels, date}) => { return ( {title} {labels} Publicada em: {date} ) } export default Card; ================================================ FILE: src/assets/scripts/components/Label.js ================================================ import React from 'react'; import tinyColor from 'tinycolor2'; const Label = ({color, name}) => { const resolveColor = hex => { const color = tinyColor(hex); return color.isLight() ? '000' : 'fff'; }; return ( {name} ); }; export default Label; ================================================ FILE: src/assets/scripts/components/SelectLabel.js ================================================ import React, { useState, useEffect } from 'react'; import Select from 'react-select'; const SelectLabel = ({ setFilteredLabels }) => { const [labels, setLabels] = useState([]); useEffect(() => { fetch('https://api.github.com/repos/frontendbr/vagas/labels?per_page=100') .then((res) => res.json()) .then((json) => setLabels(json)); }, []); const options = labels.map((label) => { return { value: label.name, label: label.name, }; }); return ( setFilteredLabels(option)} /> ); }; export default SelectLabel; ================================================ FILE: src/assets/scripts/index.js ================================================ import React from 'react'; import ReactDom from 'react-dom'; import App from './App.js'; const app = document.getElementById('app'); ReactDom.render( , app ); ================================================ FILE: src/assets/styles/style.css ================================================ * { font-family: 'Muli', sans-serif; } .topo { box-sizing: border-box; width: 100%; background: rgb(24, 132, 132); display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 64px; } .topo__titulo { color: #fff; font-size: 60px; padding: 0; margin: 0; font-family: 'Fugaz One', cursive; letter-spacing: 5px; } @media (max-width: 600px) { .topo__titulo { font-size: 40px; } } .topo__texto { color: #b5d4b5; font-size: 24px; width: 100%; max-width: 500px; box-sizing: border-box; text-align: center; margin: 0; padding: 32px 0; } .social { display: flex; align-items: center; } .nova-vaga { box-sizing: border-box; background-color: #21e0a0; color: #00333a; padding: 0 10px; display: flex; align-items: center; height: 30px; font-size: 14px; text-decoration: none; border-radius: 3px; transition: opacity .2s; margin-right: 8px; } .nova-vaga:hover { opacity: .8; } .main { box-sizing: border-box; padding: 32px; background-color: #efefef; } .filter-container { box-sizing: border-box; margin: 16px auto; margin-top: 0; max-width: 1200px; padding: 0 8px; } .lista-vagas { box-sizing: border-box; display: flex; flex-wrap: wrap; margin: 16px auto; max-width: 1200px; } .card-vaga { box-sizing: border-box; width: 100%; --cols: 3; max-width: calc(100% / var(--cols) - 20px); margin: 0 10px; margin-bottom: 16px; padding: 16px; background-color: #fbfffc; border-radius: 5px; box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); } @media (max-width: 900px) { .card-vaga { --cols: 2; } } @media (max-width: 600px) { .card-vaga { --cols: 1; } } .card-vaga a { text-decoration: none; display: flex; flex-direction: column; justify-content: space-between; height: 100%; } .titulo { color: #4e7355; margin: 0; font-size: 18px; } .lista-labels { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; margin: 10px 0; } .label { color: var(--color-label, #fff); background-color: var(--background-label, #374047); border-radius: 3px; padding: 5px; font-size: 14px; margin-bottom: 3px; } .label:not(:last-child) { margin-right: 3px; } .data { color: #4e7355; } .mais { box-sizing: border-box; padding: 10px 16px; color: #ffffff; background-color: #3c8585; margin: 0 auto; display: block; border-radius: 3px; transition: opacity .2s; box-shadow: none; border: none; } .mais:hover { cursor: pointer; opacity: .8; } .rodape { box-sizing: border-box; width: 100%; margin: 0 auto; display: flex; align-items: center; justify-content: center; height: 50px; background: rgb(24, 132, 132); color: #b5d4b5; } .rodape__heart { animation: pulse .5s infinite alternate ease-in; background-color: #b5d4b5; display: inline-block; height: 10px; margin: 0 15px; position: relative; width: 10px; } .rodape__heart:before { background-color: #b5d4b5; border-radius: 50%; content: ""; height: 10px; left: 50%; position: absolute; top: 0; width: 10px; } .rodape__heart:after { background-color: #b5d4b5; border-radius: 50%; content: ""; height: 10px; left: 0; position: absolute; top: 50%; width: 10px; } @keyframes pulse { from { transform: rotate(-135deg) scale(1); } to { transform: rotate(-135deg) scale(1.2); } } ================================================ FILE: src/index.html ================================================ Contrata-se dev ================================================ FILE: webpack.config.js ================================================ const webpack = require('webpack'); const path = require('path'); const copyWebpackPlugin = require('copy-webpack-plugin'); module.exports = { entry: './src/assets/scripts/index.js', module: { rules: [{ test: /\.js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env', '@babel/preset-react'] } } }, { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.svg$/, exclude: /node_modules/, loader: ['svg-react-loader'] }] }, plugins: [ new copyWebpackPlugin([ {from: './src/index.html', to: './'}, {from: './src/favicon.png', to: './'}, {from: './src/assets/icons/open-graph.png', to: './assets/icons/'}, {from: './CNAME', to: './'} ]), new webpack.HotModuleReplacementPlugin(), ], mode: 'development', devServer: { contentBase: './dist/', port: '8000', historyApiFallback: true, hot: true, open: true }, watch: true, output: { path: path.resolve(__dirname, './dist/'), filename: 'bundle.js' } }
Agregador de vagas para pessoas desenvolvedoras :)