Logo

Challenge Builders React Native

Sobre o Projeto

Este projeto visa a criação de um aplicativo Android e Ios de previsão do tempo para o desafio técnico da Platform Builders.

Feito Com

Abaixo segue o que foi utilizado na criação deste projeto:

Para obter informações do clima, o projeto utiliza a API Open Weather

Para a padronização do código, o projeto utilizar as extensões para Visual Studio Code, como:

  • eslint - Encontre e corrija problemas em seu código JavaScript
  • prettier - Um formatador de código opinativo
  • editorconfig - EditorConfig ajuda a manter estilos de codificação consistentes para vários desenvolvedores
  • eslint-config-airbnb - Guia de estilo JavaScript do Airbnb

Começando

Para conseguir rodar o projeto, clone o mesmo e siga os passos abaixo.

Pré-requisitos

Antes de seguirmos para as configurações do projeto, é ideal que você tenha o ambiente configurado para criar e testar aplicativos em React Native, para isso você pode seguir o guia do link abaixo como exemplo:

Ambiente React Native (Android/iOS)

Estrutura de Arquivos

A estrutura de arquivos está da seguinte maneira:

BuildersChallengeRn
├── .assets
├── .coverage
├── src/
│   ├── assets/
│   │   └── logo.png
│   │   └── plus.png
│   │   └── refresh.png
│   │   └── weather-icon.json
│   ├── components/
│   │   ├── Button/
│   │   │   └── button.spec.tsx
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── CityLocation/
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── ConnectionInfo/
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── DateNow/
│   │   │   └── date-now.spec.tsx
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── ForecastComponents/
│   │   │   ├── ButtonPlus/
│   │   │   │   └── button-plus.spec.tsx
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── ButtonReflesh/
│   │   │   │   └── button-reflesh.spec.tsx
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── ForecastCity/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── ForecastInformations/
│   │   │   │   └── forecast-informations.spec.tsx
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── PanelInformations/
│   │   │   │   └── panel-informations.spec.tsx
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   ├── HomeComponents/
│   │   │   ├── Header/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── WeatherForecast/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   ├── Line/
│   │   │   └── line.spec.tsx
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── LoadingComponents/
│   │   │   ├── LoadingCity/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── LoadingImage/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── LoadingPanel/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── LoadingSearchLocation/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   │   ├── LoadingWeatherInformations/
│   │   │   │   └── index.tsx
│   │   │   │   └── styles.ts
│   │   ├── SearchPlaces/
│   │   │   └── index.tsx
│   ├── config/
│   │   └── ReactotronConfig.ts
│   ├── contexts/
│   │   └── ConnectionInfoContext.tsx
│   ├── functions/
│   │   └── asyncStorage/
│   │       └── index.ts
│   ├── pages/
│   │   ├── Home/
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── NewLocation/
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   │   ├── Welcome/
│   │   │   └── index.tsx
│   │   │   └── styles.ts
│   ├── permissions/
│   │   └── location.ts
│   ├── Router/
│   │   └── ApplicationPages/
│   │   │   └── index.tsx
│   ├── services/
│   │   └── api-open-weather.ts
│   │   └── apkKey-geocoder.ts
│   │   └── apkKey-google-places.ts
│   │   └── apkKey-open-weather.ts
│   ├── styles/
│   │   ├── background/
│   │   │   └── index.js
│   │   ├── colors/
│   │   │   └── index.js
│   │   ├── dimensions/
│   │   │   └── index.js
│   │   ├── fonts/
│   │   │   └── index.js
│   ├── App.js
│   ├── index.js
│   └── routes.js
├── .buckconfig
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .prettierrc.js
├── .ruby-version
├── .watchmanconfig
├── app.json
├── babel.config.js
├── Gemfile
├── Gemfile.lock
├── index.js
├── jest.config.js
├── metro.config.js
├── package.json
├── react-native-config.js
└── README.md
└── ts.d.ts
└── tsconfig.json
└── yarn-error.log
└── yarn.lock

Instalação

  1. Com o projeto clonado, abra o mesmo em seu Terminal, Powershell ou CMD e execute os seguites comandos:

    • Se estiver utilizando Yarn execute:
      •    yarn
    • Se estiver utilizando NPM execute:
      •    npm install
  2. Para executar o projeto em IOS, execute o seguinte comando:

    •      ios/pod install
  3. Depois de todas as dependências tiverem sido baixadas execute o projeto:

    •      yarn run android
    •      yarn run ios

    Caso utilize NPM:

    •     npm run android
    •     npm run ios
  4. Agora com o projeto em executação podemos ver o seu funcionamento, abaixo temos alguns exemplos:

Logo

Logo

Logo

Testes

  1. Para o bom funcionamento da aplicação, realizamos os testes unitários. Nesse projeto podemos executar o seguinte comando para rodar os testes:

    •      yarn test
    •      npm test
  • Obtemos então os resultados:

Logo

  • Você pode acessar também o relatório completo dos testes em:
    BuildersChallengeRn
    ├── coverage/
    │   ├── Icov-report/
    │   │   └── index.html