Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Entrega do desafio React Native - Lucas Pedro #46

Open
wants to merge 38 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
11ae0b5
feat: inicializando projeto
lucaspedronet Aug 10, 2022
eac7087
feat: configuração da estrutura de pastas, prettier e svg
lucaspedronet Aug 10, 2022
5411f57
style: configuração theme com styled-components, ícones e fontes
lucaspedronet Aug 10, 2022
84abc56
fix: ajustes nas configurações eslint, prettier e babel
lucaspedronet Aug 10, 2022
5c01f01
feat: novo component CardAction
lucaspedronet Aug 10, 2022
3530264
feat: novo componente CardActive
lucaspedronet Aug 10, 2022
daa2dec
feat: novos components <Header />, <CardBase /> e <TexBase />
lucaspedronet Aug 10, 2022
d858b44
feat: novas telas AcoesScreen e DesafioScreen
lucaspedronet Aug 10, 2022
bdf2d8f
feat: novo componente DivisorInLine
lucaspedronet Aug 10, 2022
b5610bd
feat: implementação client service para consumo dos endpoints com Axois
lucaspedronet Aug 11, 2022
2ce2ef0
feat: novo useNetwork, responsável por se existe conexão para realiza…
lucaspedronet Aug 11, 2022
6172fe0
feat: finalizando component <CardAction />
lucaspedronet Aug 11, 2022
3dab964
fix: ajustes no <Header /> e novos parâmetros title e hasArrowLeft
lucaspedronet Aug 11, 2022
5f0bcaa
fix: ajustes de layout no component <DivisorLine />
lucaspedronet Aug 11, 2022
26c3ff6
feat: novo functions de conversão de moeda para BRL
lucaspedronet Aug 11, 2022
cdb4cfe
fix: add prop font
lucaspedronet Aug 11, 2022
c228b90
feat: add useNetwork na screen DesafioScreen e type gobal navegação
lucaspedronet Aug 11, 2022
ce8dfe9
feat: variável ambiente com rn-dotenv
lucaspedronet Aug 12, 2022
8a40b46
Feat: novo component <ButtonSimple />
lucaspedronet Aug 12, 2022
ce82b5c
feat: nova tela de Previdências com integração dos endpoints e filtros
lucaspedronet Aug 12, 2022
63b83c2
refactor: melhorias de componetização dos elemetos na tela de Desafios
lucaspedronet Aug 12, 2022
9e21717
refactor: melhoria no componente <CardAction /> padronizão de projeto…
lucaspedronet Aug 12, 2022
f285556
refactor: melhorias na tipagem dos endpoint
lucaspedronet Aug 12, 2022
a52101d
fix: add controle do estado do erro e loading
lucaspedronet Aug 12, 2022
f67569f
fix: remoção do objetos e funções não utilizadas
lucaspedronet Aug 12, 2022
f21cd86
fix: ajustes na nomeclatura dos props e utilizando o component Render…
lucaspedronet Aug 12, 2022
2699280
feat: novo component <RenderCondition /> responsável por simplificar …
lucaspedronet Aug 12, 2022
7782295
feat: novo component <CardPension />
lucaspedronet Aug 12, 2022
62647c5
fix: ajuste de espaçamento no component <DivisorLine />
lucaspedronet Aug 12, 2022
a07a150
fix: ajustes no theme que nos permitirá escalar mais fácil o desiner …
lucaspedronet Aug 12, 2022
e73601a
refactor: melhorias na Tela de AcoesScreen com chamada de api, ordena…
lucaspedronet Aug 12, 2022
1244163
fix: ajustes na nomeclatura das telas e totas
lucaspedronet Aug 12, 2022
f0c4726
feat: nova tela FundsScreen e component <CardFunds />
lucaspedronet Aug 12, 2022
3d1675b
Merge pull request #1 from lucaspedronet/dev
lucaspedronet Aug 12, 2022
1a63b60
feat: creando readme com instruções de instalação e starting
lucaspedronet Aug 12, 2022
d9d0dbe
Merge pull request #2 from lucaspedronet/dev
lucaspedronet Aug 12, 2022
afa36e1
feat: config redux pension e funds
lucaspedronet Dec 19, 2022
21e77bc
test: correção dos test Funds e useNetwork
lucaspedronet Dec 21, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .DS_Store
Binary file not shown.
6 changes: 6 additions & 0 deletions .buckconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

[android]
target = Google Inc.:Google APIs:23

[maven_repositories]
central = https://repo1.maven.org/maven2
13 changes: 13 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
root = true

[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf

[{package.json}]
indent_style = space
indent_size = 4
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
BASE_URL=6266f62263e0f382568936e4
16 changes: 16 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = {
root: true,
extends: '@react-native-community',
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
overrides: [
{
files: ['*.ts', '*.tsx'],
rules: {
'@typescript-eslint/no-shadow': ['error'],
'no-shadow': 'off',
'no-undef': 'off',
},
},
],
};
63 changes: 63 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# OSX
#
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
ios/.xcode.env.local

# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
*.hprof

# node.js
#
node_modules/
npm-debug.log
yarn-error.log

# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/

**/fastlane/report.xml
**/fastlane/Preview.html
**/fastlane/screenshots
**/fastlane/test_output

# Bundle artifact
*.jsbundle

# Ruby / CocoaPods
/ios/Pods/
/vendor/bundle/
7 changes: 7 additions & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSpacing: true,
singleQuote: true,
trailingComma: 'all',
};
6 changes: 6 additions & 0 deletions .svgrrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"replaceAttrValues": {
"rgba(111, 77, 191, 1)": "{props.fill}",
"rgba(232, 93, 31, 1)": "{props.fillSecondary}"
}
}
1 change: 1 addition & 0 deletions .watchmanconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
21 changes: 21 additions & 0 deletions App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'intl';
import 'intl/locale-data/jsonp/pt-BR';
import React from 'react';
import { Provider } from 'react-redux';
import { StatusBar } from 'react-native';
import { ThemeProvider } from 'styled-components';

import { theme } from '~config/theme';
import { store } from './src/store';
import { AppRoutes } from '~routes';

export function App() {
return (
<Provider store={store}>
<ThemeProvider theme={theme}>
<StatusBar barStyle="dark-content" />
<AppRoutes />
</ThemeProvider>
</Provider>
);
}
6 changes: 6 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
source 'https://rubygems.org'

# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '2.7.5'

gem 'cocoapods', '~> 1.11', '>= 1.11.2'
128 changes: 50 additions & 78 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,108 +1,80 @@
> ![Logo Kinvo](https://github.com/cbfranca/kinvo-front-end-test/blob/master/logo.svg)

# React Native Code Challenge
> ![Logo Kinvo](https://raw.githubusercontent.com/kinvoapp/kinvo-front-end-test/edd338683b58e87db766d6153b0f8908d14cc79b/logo.svg)
# React Native Challenge

Seja bem-vindo! Este desafio foi projetado para avaliar a capacidade técnica de candidatos à vagas de Desenvolvedor voltadas para o desenvolvimento mobile, independente da senioridade, considerando o framework `React Native`. O nível de exigência da avaliação se adequa ao nível da vaga.
Este projeto é a resolução de um desafio projetado para avaliar a capacidade técnica de candidatos à vagas de Desenvolvedor voltadas para o desenvolvimento mobile na empresa `Kinvo`.

## Instruções:
[![Licence](https://img.shields.io/github/license/Ileriayo/markdown-badges?style=for-the-badge)](https://raw.githubusercontent.com/felipegomss/kinvo-mobile-test/master/LICENSE)

1. Faça um `fork` deste repositório;
2. Siga as especificações;
3. Implemente o layout disponível;
4. Após terminar seu teste submeta um `pull request` e aguarde seu feedback.
![React Native](https://img.shields.io/badge/react_native-%2320232a.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB)

### Critérios de avaliação:
## Executar localmente

Nossos critérios de avaliação se baseiam e 3 grandes áreas, sendo elas:
1. Versionamento
2. Projeto e estrutura
3. Qualidade de Código
Clonar o projeto

### Pré-requisitos:
```bash
git clone [email protected]:lucaspedronet/kinvo-mobile-test.git
```

- Criar um passo a passo de como rodar o app - [Sugestão](https://github.com/elsewhencode/project-guidelines/blob/master/README.sample.md);
- Desenvolver o app utilizando `React Native`
- Criar o projeto utilizando a CLI do `React Native` - Siga o passo a passo de instalação e configuração do ambiente de acordo com o seu sistema operacional [React Native CLI Quickstrat -> Seu sistema operacional -> iOS/Android](https://reactnative.dev/docs/environment-setup)
Entrar no diretório do projeto

## Especificações:
```bash
cd kinvo-mobile-test
```

O desafio consiste em desenvolver um aplicativo de **4 telas**. Sendo **3 obrigatórias** e **1 opcional**:
- Obrigatórias:
- Tela "Desafio" (Tela inicial)
- Tela "Ações"
- Tela "Previdências"
- Opcionais:
- Tela "Fundos"
Instalação de dependências

As telas que contem chamadas a API devem estar preparadas para tratar estados de erro (sem internet), carregamento (chamada a API em andamento) e lista vazia (quando o resultado de um filtro não contem itens ou o retorno da API foi vazio).
```bash
yarn install
```

**Atentar para o comportamento dos elementos do layout, como: botão de favorito, classificação em estrelas, rentabilidade, etc (encontram-se no XD).**
Start no server

### Tela "Desafio" (Tela inicial) (Obrigatória)
```bash
yarn android

- A tela inicial contem uma lista que permite o usuário navegar para as três telas: Ações, Fundos e Previdências.
ou

### Tela "Ações" (Obrigatória)
yarn ios
```
## Referencias de API

- A lista de "ações" deve ser carregada através de uma chamada a api.
- Api: https://6266f62263e0f382568936e4.mockapi.io/stocks
- A lista de "ações" deve obedecer a seguinte prioridade:
- Favoritadas deve aparecer primeiro
- Ordem alfabética
- O usuário pode favoritar/desfavoritar uma "ação" tocando no ícone do coração(o coração preenchido indica favoritado e o coração vazado indica desfavoritado).
- A lista de "ações" inicia com todos as "ações" desfavoritadas.
#### API endpoint

### Tela "Fundos" (Opcional)
```https
GET https://BASE_URL.mockapi.io/
```

- A lista de "fundos" deve ser carregada através de uma chamada a api.
- Api: https://6266f62263e0f382568936e4.mockapi.io/funds
- A lista de "fundos" deve estar em ordem alfabética.
- Os estados do fundo são:
- 0: Comum
- 1: Novo
- 2: Fechado
- Um "fundo" com o estado de "comum" deve apresentar o layout básico conforme layout.
- Um "fundo" com o estado de "novo" deve apresentar o layout básico com a adição do label "novo" conforme layout.
- Um "fundo" com o estado de "fechado" tem um layout particular alem do label "fechado" conforme layout.
| Parameter |
| :-------- |
| `BASE_URL` |

### Tela "Previdências" (Obrigatória)
#### Parâmetros da rota

- A lista de "previdências" deve ser carregada através de uma chamada a api.
- Api: https://6266f62263e0f382568936e4.mockapi.io/pension
- A lista de "previdências" deve estar em ordem alfabética.
- A tela contem um filtro de múltipla escolha que atua sobre a lista de "previdências". Quando selecionado os filtros:
- "SEM TAXA": inclui as previdências com taxa igual a zero.
- "R$100,00": inclui as previdências com valor mínimo igual a cem reais.
- "D+1": inclui as previdências com resgate igual a um.

### O que iremos avaliar
| Telas | Ativos |
| :-------- | :-------------------------------- |
| `StocksScreen` | Lista de ações |
| `FundsScreen` | Lista de fundos |
| `PensionScreen` | Lista de previdências |

- Capacidade de abstração;
- Simplicidade da solução;
- Componentização;
- Princípio da reutilização;
- Clean Code;
#### Exemplo

### O que vai te diferenciar
```https
GET https://6266f62263e0f382568936e4.mockapi.io/stocks
```

- Utilizar `TypeScript`;
- Arquitetura limpa e princípios de `SOLID`;
- Utilizar `Styled Components`;
## Tech Stack

#### [`Axios`](https://axios-http.com/ptbr/)
#### [`Typescript`](https://www.typescriptlang.org/)
#### [`React Native`](https://reactnative.dev/)
#### [`Styled-Components`](https://styled-components.com/)
#### [`React Navigation`](https://reactnavigation.org/)
#### [`React Native - CLI`](https://reactnative.dev/docs/environment-setup)

## Material:

- O layout em formato Adobe XD consta no repositório em [/material](/material) ou através [desse link](https://xd.adobe.com/view/bdf98d73-524d-41b3-96ac-1f1813d75809-e8aa/);
- Imagens e Ícones podem ser exportados do Adobe XD (Aalho: CTRL + E / CMD + E)
- Os `assets` para exportação estão agrupados em **Componentes** e podem ser facilmente exportados da seguinte utilizando o grupo Ativos no modo de desnvolvimento do Adobe XD Web.

## Notas:

* ! Importante ! O cumprimento dos requisitos solicitados para uma vaga em determinado nível não é garantia de aprovação. Focamos em avaliar a forma como os requisitos foram cumpridos.
* Apesar da listagem de requisitos mínimos acima, caso não tenha tido tempo suficiente ou tenha se esbarrado em alguma dificuldade, entregue o desafio ainda que incompleto e conte-nos na descrição do pull request quais foram as suas maiores dificuldades. Não se preocupe, avaliaremos ainda assim! :)
* Caso não tenha familiaridade com o Adobe XD, os ativos do protótipo podem ser exportados utilizando o atalho CTRL + E ou CMD + E. Caso o seu sistema operacional não seja compatível com o software, você pode acessar o protótipo também através do link citado no item anterior;
* As bibliotecas e demais recursos sugeridos por nós em todos os níveis de exigência são meras sugestões (com exceção do React Native). Sinta-se a vontade para fazer a escolha que te deixa mais confortável e inclusive para sugerir ;);
* Lembre-se de fazer um fork deste repositório! Apenas cloná-lo vai te impedir de criar o pull request e dificultar a entrega;

Está com alguma dificuldade, encontrou algum problema no desafio ou tem alguma sugestão pra gente? Crie uma issue e descreva o que achar necessário.

**Sucesso!**
14 changes: 14 additions & 0 deletions __tests__/App-test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* @format
*/

import 'react-native';
import React from 'react';
import { App } from '../App';

// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';

it('renders correctly', () => {
renderer.create(<App />);
});
2 changes: 2 additions & 0 deletions _bundle/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
BUNDLE_PATH: "vendor/bundle"
BUNDLE_FORCE_RUBY_PLATFORM: 1
1 change: 1 addition & 0 deletions _ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
2.7.5
55 changes: 55 additions & 0 deletions android/app/_BUCK
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
# - `npm start` - to start the packager
# - `cd android`
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
# - `buck install -r android/app` - compile, install and run application
#

load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")

lib_deps = []

create_aar_targets(glob(["libs/*.aar"]))

create_jar_targets(glob(["libs/*.jar"]))

android_library(
name = "all-libs",
exported_deps = lib_deps,
)

android_library(
name = "app-code",
srcs = glob([
"src/main/java/**/*.java",
]),
deps = [
":all-libs",
":build_config",
":res",
],
)

android_build_config(
name = "build_config",
package = "com.kinvomobiletest",
)

android_resource(
name = "res",
package = "com.kinvomobiletest",
res = "src/main/res",
)

android_binary(
name = "app",
keystore = "//android/keystores:debug",
manifest = "src/main/AndroidManifest.xml",
package_type = "debug",
deps = [
":app-code",
],
)
Loading