Code Monkey home page Code Monkey logo

artis's People

Contributors

allangrds avatar augusto-jm-amaral avatar claytonsilva avatar danielgoncalvesl avatar felquis avatar igorantun avatar lucianopf avatar mathewcst avatar thgmhz avatar vcapretz avatar vhaberkorn avatar zitoloco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

artis's Issues

Estrutura de Componentes

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>

Definição dos dados API (transaction, customer, billing, shipping...)

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.

Estrutura inicial do projeto

Precisamos criar a estrutura inicial do projeto como:

  • bootstrap do create-react-app
  • storybook
  • redux
  • estrutura de pastas
  • travis
  • postcss
  • etc...

Temos um problema de CSS para resolver!

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.

O problema

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?

Dúvida sobre o Render do 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?

Especificações

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. :)

Stylelint não reclama nas builds

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

Background quebrado quando tela não está em full screen

Ao abrir o checkout e abrir o console na parte debaixo, dá pra ver que ao fazer scroll até o fim o background não acompanha:

screen shot 2017-12-22 at 08 44 40

ficando essa parte branca no fim.

Imagino que alguma coisa não está com o height certo, tem q ser verificado

Componente MaskedInput

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

BrowserStack - Testes em Browsers e S.O's

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:

Browsers

Em ordem, os mais utilizados e a versão mínima que devemos oferecer suporte:

  • Chrome - 55.0
  • Firefox - 38.0
  • Android - 30.0
  • Edge - 12.1
  • Safari - 9.0
  • Internet Explorer - 11.0
  • Opera - 42.0

S.O's

Em ordem, os mais utilizados e a versão mínima que devemos oferecer suporte:

  • Windows - 7
  • Android - 5.1.1
  • Mac OS X - 10.12 (Sierra)
  • iOS - 10.2.1

Botão "Voltar" no header deve sumir na primeira página

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)

Move `./src/config/ErrorReport.js` to `./config`?

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 😃

Telas MVP Checkout

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:

  1. Identificação do cliente
  • Dados pessoais (Nome, E-mail, CPF, DDD e telefone);
  1. Endereço de cobrança
  • CEP, Rua, número, complemento, bairro, cidade, estado;
  1. Endereço de entrega
  • mesmo endereço de cobrança e outro endereço já cadastrado;
  • fluxo de excluir endereço cadastrado;
  • fluxo de editar endereço cadastrado;
  • fluxo de cadastrar novo endereço de entrega.
  1. Forma de pagamento

Cartão de crédito:

  • Imagem do cartão sem dados preenchidos (ficará vazio)?
  • Imagem do cartão com dados preenchidos
  • Verso do cartão sem dados preenchidos (ficará vazio)?
  • Verso do cartão com dados preenchidos
  • Valor da compra,
  • Número do cartão
  • Nome
  • Quantidade de parcelas (simular o comportamento)
  • Data de validade
  • Cvv (simular tooltip)

Boleto bancário

  • É necessário ter uma confirmação/ clique para gerar o boleto (manter consistência do fluxo de confirmação da tela de cartão de crédito)
  1. Mensagem feedback da transação
  • Mensagem de sucesso de Cartão de crédito

Mensagem de sucesso de Boleto
Inserir as funcionalidades de:

  • Salvar arquivo
  • Encaminhar por email (comportamento)
  • Copiar código de barras (comportamento)
  • Mensagem aguardando confirmação
  1. Mensagem de transação recusada
    Referência de textos e situações de erro: pagarme-checkout #142
  • Mensagem de recusa de Cartão de crédito
  • Mensagem de recusa de Boleto

Criar parâmetro "customerData"

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

Ref.: https://github.com/pagarme/mercurio/issues/5

Nome do projeto

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 =)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.