pagarme / artis Goto Github PK
View Code? Open in Web Editor NEW:credit_card: Projeto de Checkout desenvolvido em parceria entre MundiPagg e Pagar.me.
License: MIT License
:credit_card: Projeto de Checkout desenvolvido em parceria entre MundiPagg e Pagar.me.
License: MIT License
Fizemos uma reunião para definir a estrutura de componentes do Checkout e chegamos no resultado abaixo. Essa estrutura não é definitiva, ela deve apenas nortear o desenvolvimento dos componentes.
Layout Mobile: https://app.zeplin.io/project/59e66a2ad508e5fb822f1776/screen/59e75a8daa565b58180d071b
Layout Desktop: https://app.zeplin.io/project/59e66a2ad508e5fb822f1776/screen/59e75a07380b7f748505409e
<Header>
<Logo />
<Title text='Dados Pessoais'/>
<Button>X</Button>
</Header>
<ProgressBar step='1'/>
<Content>
<Steps>
<Step>
<CustomerData>
<Input
name='name'
icon={<Icon className='icon-customer'/>}
/>
</CustomerData>
</Step>
<Step>
<AddressData>
<Input
name='zipcode'
icon={<Icon className='icon-zipcode'/>}
/>
</AddressData>
</Step>
<Step>
<PaymentMethod>
<Radio title="Cartão" subtitle="Em até 4x"/>
<Radio title="Boleto" subtitle="10% de desconto"/>
<PaymentCard>
<Input
name='card-number'
icon={<Icon className='icon-payment-card'/>}
/>
</PaymentCard>
<PaymentBoleto>
<Button
iconAlign='right'
icon={<Icon className='icon-barcode'/>}>
Copiar código de barras
</Button>
<Button
iconAlign='right'
icon={<Icon className='icon-mail'/>}>
Encaminhar por e-mail
</Button>
<Button
iconAlign='right'
icon={<Icon className='icon-download'/>}>
Salvar arquivo
</Button>
</PaymentBoleto>
</PaymentMethod>
</Step>
<Step>
<Result type='success'/>
</Step>
</Steps>
</Content>
<Footer>
Valor a pagar: R$ 99,99
<Button>Continuar</Button>
Ambiente Seguro - Pagar.me
</Footer>
"deploy-storybook": "storybook-to-ghpages"
Precisamos definir uma interface para receber os dados de transaction
, customer
, billing
, shipping
e items
.
Essa interface deve atender tanto a API da Pagar.me quanto a API da MundiPagg, será necessário 'casar' os dados iguais e definir uma interface final.
Dado que o backend está sob responsabilidade da MundiPagg, precisamos de uma call com eles para alinhar isso.
Precisamos criar a estrutura inicial do projeto como:
create-react-app
E preciso deixar o mais próximo possível do layout exposto no Zeplin.
Conversando com algumas pessoas da Pagar.me, inclusive com aval do time de Segurança, optamos por não fazer o checkout dentro de um iframe
. Porém, nos deparamos com um problema e não sabemos exatamente como resolver, então vamos discutir nessa issue soluções para isso.
Basicamente o checkout será montado dentro uma div
especificada pelo cliente:
<html>
<body>
<!-- o cliente escolheu essa div para montar o checkout -->
<div id="wrapper-checkout">
<!-- o checkout cria uma outra div aqui dentro -->
<div class="checkout">
...
</div>
</div>
</body>
</html>
O checkout terá seus próprios styles a partir da div com a classe .checkout
. Porém, o cliente pode definir algum style do seu site com !important
, e isso pode sobrescrever os styles do checkout, exemplo:
/* style do cliente */
h1 { font-size: 50px !important; }
/* style do checkout */
.checkout h1 { font-size: 30px; }
Como podemos resolver isso?
Escrever um README para o projeto.
Questão levantada pelo @vcapretz no Slack:
só que o ponto é: um app react de verdade tem um public/index.html, que contém um div pai, ou mesmo só o body, o webpack processa isso e adiciona o js gerado nos scripts, dentro do header, pra fazer a parada funcionar.
o src/index.js tem o render master do react, que pega o componente paizão e renderiza na div root (ou dentro do body).
a questão aqui é: nós nao sabemos onde renderizar até o cliente dizer em qual elemento o checkout vai abrir. uma possível solução é tirarmos a opcao do cliente de escolher onde renderizar, e deixar com o nosso app a responsabilidade de criar uma div com uma classe/id aleatorio pra nao dar conflito com o html dele e renderizarmos lá.
outra questão que fico pensando: o JS final gerado pelo webpack na build nao faz com o que o React seja dependencia né? pode ser colocado em qualquer pagina que funciona?
O ProgressBar ainda está sem testes de componente, precisamos adicionar alguns!
Tivemos algumas mudanças de layout e agora temos titulo na Progressbar e na Página:
https://app.zeplin.io/project/59e66a2ad508e5fb822f1776/screen/5a2ed6521e5fb8ed46013511
Vamos manter a discussão das especificações neste tópico. Abaixo podemos comentar o que cada um de nós já tem no "checkout atual" e o que queremos pro próximo. :)
Assim como o eslint, o stylelint deve rodar junto com os comandos de build (storybook
, build
e start
), atualmente se um erro de CSS é apitado ao rodar yarn lint
ele não apita também nas builds.
O comportamento esperado é que seja mostrado o log também do stylelint
This const is used (and declared) in a lot of different places, we should export it on a helper file and import where needed
Podemos aproveitar o componente Grid que o Pagar.me criou no projeto Pilot da nova dashboard.
Precisamos desenvolver um componente de MaskedInput, ele basicamente vai ser um wrapper do input, mas contará com a opção de definir qual máscara ele recebe, para que possamos aplicar telefone, cep, cpf, etc
Precisamos desenvolver um bot
que utiliza o serviço do BrowserStack para automatizar nossos testes e gerar prints de navegação das páginas do Checkout em diversos browsers e sistemas operacionais diferentes. Esses prints deverão ser analisados pela equipe do Checkout com objetivo de encontrar problemas críticos no layout.
Para isso, eu fiz um levantamento pelo Google Analytics dos Browsers e S.O's mais utilizados no Checkout da Pagar.me no período de 1 ano: entre 07/12/2016 à 07/12/2017.
Abaixo, segue os dados coletados que deverão nortear o desenvolvimento do bot
:
Em ordem, os mais utilizados e a versão mínima que devemos oferecer suporte:
Em ordem, os mais utilizados e a versão mínima que devemos oferecer suporte:
Atualmente o Header possui um botão com o ícone da flecha de voltar para navegar para trás, mas ele fica visível mesmo na primeira página e clicar nele não gera ação nenhuma.
Seria massa se ele sumisse ou simplesmente ficasse desabilitado se não houver mais páginas para trás.
(O mesmo acontece com o botão continuar, mas esse não é no Header)
Precisamos criar um Error Boundary para exibir mensagens de erro amigáveis ao usuário. Podemos usar um método chamado componentDidCatch
adicionado no lifecycle do React 1.6.
Exemplo: https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html
Is there a reason for the ErrorReport config file be placed under the src
folder instead of the config
folder directly?
This way we are creating two config folders and IMO we could move the ErrorReport file outside the src
folder!
Let me know if there's a specific reason, otherwise I will open a PR changing it 😃
Pretendemos usar a seguinte lib para theming
: https://github.com/javivelasco/react-css-themr
Quando digitar o CEP buscar por nome de rua, bairro, cidade e estado. Mudar o foco para o input de número da casa.
Aqui teremos que usar container com a lógica de busca e preenchimento
Erro acontece ao modificar qualquer CSS/JS, logo que ele recompila tudo.
O que é o MPV de Checkout?
Corresponde ao processo de finalização de uma compra usando cartão de crédito ou boleto bancário. Faremos de forma responsiva, então precisaremos das telas desktop e mobile, mantendo consistência entre eles.
Telas MVP
Tema: Dark
Cor default: Situação/cor default caso o lojista não escolha a cor primária do checkout.
Erros: exemplo campos com dados inconsistentes.
Textos: atualizar com textos finais revisados pela Bia
Passos:
Cartão de crédito:
Boleto bancário
Mensagem de sucesso de Boleto
Inserir as funcionalidades de:
No checkout 1.0 e 1.1 uma das propriedades que o cliente passa é data-customer-data
, que habilita os passos necessários para que sejam incluídas informações sobre o comprador e serão posteriormente enviadas para o antifraude.
Isso é algo que pensamos nesse checkout? Se sim, talvez seja necessário criar uma task para que possamos inserir no App alguma prop que valide se deve ou não mostrar os primeiros passos
Nosso squad acredita que mercurio-checkout
não é um nome adequado para o projeto. O nome mercurio
foi dado ao nosso squad e é um nome apenas para uso interno aqui na Pagar.me.
Chegou a hora de fazermos um brainstorm! Então convocamos todo mundo para comentar nessa issue sugerindo um nome legal para o projeto. Depois disso podemos fazer uma votação para escolher o nome final.
Se você tem uma sugestão comente aqui, toda ideia é bem vinda =)
Precisamos implementar o guia de estilos criado pela equipe de UI: tipografias, espaçamentos, parágrafos, etc.
Referência:
https://app.zeplin.io/project/59e66a2ad508e5fb822f1776/screen/59e8c0ba367525f917d5019c
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.