Synchro-TEC / apollo-11

Failure is not an option
http://espresso.synchro.com.br/
MIT License
4 stars 2 forks source link

Componente para modal #35

Open studiojms opened 7 years ago

studiojms commented 7 years ago

Algo que muitas vezes dá trabalho é criar janelas modais (inclusive modais de confirmação, em que o usuário deve escolher se continua ou não a ação solicitada). O apollo poderia ter um componente que facilite esta operação, algo como as imagens:

image image

studiojms commented 7 years ago

Alguns projetos que participei utilizam soluções similares para resolver o mesmo problema. Se ficasse unificado no apollo, todos ganhariam com atualizações / correções e seria mais fácil para outros projetos utilizarem o mesmo componente

marcio commented 7 years ago

Acho bacana,

Acho só que temos que separar dialog de um confirm dialog, pois acho que o confirm vc tem sempre duas ações (callbacks) distintos o que já não faz sentido no dialog genérico.

Outra opção é o dialog sempre ser o mesmo, e por exemplo ele receber footer como prop, e o footer pode ser comum(ou nem ser passado) ou um confirm por exemplo:

Exemplo bem simplificado, sem levar em consideração as demais props, só pra ilustrar a ideia

//Modal simples
const myHeader = () => <h4>Meu modal</h4>
<modal header={myHeader}>
  <p>meu modal</p>
</modal>

//Modal Confirm
const confirmFooter = () => 
  <ConfirmAction onConfirm={} onDeny={} confirmLabel="Aceitar" denyLabel="Rejeitar" />

const confirmHeader = () => <h4>Aceita esse proposta</h4>

<modal header={confirmHeader} footer={confirmFooter}>
  <p>meu modal</p>
</modal>

É uma idea, o que acham?

poltronieri commented 7 years ago

Concordo com a ideia de separar bem um dialog de um confirm dialog, pois assim podemos manter a boa prática que o próprio React prega, componentes que fazem o mínimo necessário são mais fáceis de manter, evoluir e até mesmo serem substituídos caso haja necessidade.

studiojms commented 7 years ago

Legal, é essa mesmo a ideia. Ter dois componentes distintos, embora possam compartilhar particularidades em comum (pode ser o mesmo componente de dialog etc.)