Changelog do Cloudsupport for React Native
Versão 1.21.0
- Melhoramentos no Hook useQueue:
const queue = useQueue();
- Reescrito
queue.enqueue(asyncFunction)
, mesma semântica - Reescrito
queue.enqueueIfIdle(asyncFunction)
, mesma semântica - Novo método
queue.setNextTask(asyncFunction)
: Remove todas as tarefas pendentes de início de processamento e adiciona a tarefa informada na fila
- Reescrito
Versão 1.20.0
- Melhoramento na classe útil Objects:
- Adicionada função cleanNullUndefined
- Melhoramento em Hooks (mudança de impacto):
- useQueue agora retorna { enqueue, enqueueIfIdle } em vez de array para evitar uso indevido
- Corrigido método enqueueIfIdle do Hook useQueue
Versão 1.19.3
- Corrigido Hook useUpdateEffect
Versão 1.19.2
- Ajustes na documentação
Versão 1.19.1
- Ajustes no Tema:
- Removida propriedade contentStyle de Screen (não era usada)
- Adicionado padding defs.spacingVertical no Screen para consistência com o tema padrão de ScrollScreen
Versão 1.19.0
- Melhoramento no componente ScrollScreen:
- Adicionada propagação de ref para o ScrollView interno nativo
- Melhoramento nos componentes Screen e ScrollScreen:
- Atributos adicioanis são propagados para o elemento interno View/ScrollView
- Novos Hooks:
useMountEffect useUpdateEffect useInterval useQueue
Versão 1.18.1
- Remoção de códigos temporários
Versão 1.18.0
- Adicionado namespace no ‘build.gradle’ para suporte a novas versões do Gradle/Metro/ReactNative
- Ajustado ‘package.json’ para suporte a novas versões do Metro/ReactNative
Versão 1.17.0
- Melhoramentos no componente Alert:
- Adicionado método isOpen
- Adicionadas duas novas assinaturas no método show:
show(message, <undefined>, callback) show(message, <undefined>, details)
- Corrigido ZoomableView.isOpen(), fora de sincronia
- Restaurado Confirm.isOpen()
- Restaurado Modal.isOpen()
Versão 1.16.0
- Melhoramentos no componente InputOption:
- Adicionada propriedade sheetTitle
- Melhoramentos no Tema:
- Adicionado estilo sheetTitleStyle ao componente InputOption
- Adicionado estilo optionContainerStyle ao componente InputOption
- Adicionado estilo optionStyle ao componente InputOption
- Adicionada propriedade optionDividerColor ao componente InputOption
- Melhoramentos diversos na documentação
Versão 1.15.0
- Melhoramentos no componente OptionSheet:
- Agora baseado no Modal do Cloudsupport no lugar do padrão do React Native
- Adicionado suporte a lista longa de opções
- Melhoramentos no componente InputOption:
- Agora baseado unicamente no OptionSheet (anteriormente misto com OptionList e OptionListItem)
- Removida propriedade dynamic (não mais necessária)
- Melhoramentos no Tema:
- Aprimorado estilo padrão do Switch para Android and iOS
- Adicionado estilo containerWrapperStyle ao componente OptionSheet
- Adicionado estilo contentContainerStyle ao componente OptionSheet
- Corrigido Modal contendo inputs on Android: Keyboard avoiding não surtia efeito
- Workaround: Removida propriedade statusBarTranslucent do Modal porque KeyboardAvoidingView não suporta esse recurso no Android (bug/limitação do Android ainda não resolvido)
Versão 1.14.0
- Melhoramentos no componente Modal:
- Adicionado suporte para reconhecimento de teclado (Modal com Inputs internos)
- Adicionada propriedade scrollProps (permite personalizar qualquer parâmetro do ScrollView)
- UX de rolagem aprimorado: rolagem de conteúdo em vez de rolagem do Modal completo
- Melhoramentos no Tema:
- Adicionado containerWrapperStyle ao componente Modal
- Adicionado contentContainerStyle ao componente Modal
-
Corrigido o operador “coalesce” ( alterado para ?? em 89 lugares)
Versão 1.13.0
- Novos componentes derivados de InputText:
InputCd InputCep InputCnpj InputCpf InputCpfCnpj InputDatetime InputDecimal InputEmail InputInteger InputMoney InputMonth InputPassword InputTel InputUrl
- Mudança nos componentes InputCd, InputPassword e Type Month (InputMonth):
- Propriedade minLength alterada para min
- Propriedade maxLength alterada para max
- Aprimorado Type Numeric (InputInteger):
- Adicionado suporte para separador de milhar para valores inteiros
- Adicionado message bundle para InputMonth
- Correção da validação min/max de InputDatetime
- Correção da validação min/max no Type Month (InputMonth)
- Correção da formatação no Type Month (InputMonth) quando o usuário insere o valor válido completo
- Correção da formatação no Type Numeric (InputInteger, InputDecimal) quando o componente é instanciado com valor inicial
Versão 1.12.0
- Melhoramento no componente Icon:
- Adicionado suporte ao modificador solid (FontAwesome5)
- Correção do erro “aspectRatio” no componente Image
- Correção da animação “snap to edge” do ZoomableView quando o zoom ultrapassava o maxZoom
- Correção da animação “fade in” na abertura do ZoomableView quando a visualização anterior foi fechada pelo gesto de diminuir o zoom
Versão 1.11.2
- Ajuste no componente Icon:
- Incluído bundle Ionicons
Versão 1.11.1
- Pacote de correções nos componentes InputText, RichInputText, RichInputOption e RichInputImage:
- Mudança no value poderia não ser propagada para o Input
- O método isValid() poderia retornar um estado desatualizado
- Erro “Não é possível ler a propriedade ‘formattedText’ de undefined” ao usar Type Numeric ou Money
- Validação completa quando o Input recebe foco (não apenas validação do campo obrigatório)
- Valores numéricos que terminavam com um símbolo decimal geravam erro desnecessário de número inválido
- Backspace poderia não surtir efeito
- Comportamento inesperado quando o valor era passado no tipo errado (por exemplo: String no lugar de Number para Type Numeric)
- Comportamento inesperado quando o componente era renderizado novamente
Versão 1.11.0
- Melhoramentos nos componentes InputText, InputOption, InputImage e Button:
- Adicionada propriedade disabled
- Melhoramentos no componente Image:
- Efeito de opacidade removido ao tocar na imagem de preview (aplica-se a InputImage)
- Melhoramentos no componente ECharts:
- Um ícone de erro é apresentado no caso de erro no carregamento do ECharts
- O ícone de erro pode ser tocado para mostrar a descrição do erro
- Adicionada propriedade errorIcon
- Adicionada propriedade showError
- Adicionada propriedade showErrorOk
- Melhoramentos no Tema:
- Adicionada propriedade disabledOpacity ao estilo do Button
- Corrigido o travamento do Android quando ECharts (WebView) está dentro de um ScrollView e o usuário rola até o final
- Corrigido o travamento do Android ao abrir InputOption dinâmico ou Modal
- Corrigidos problemas menores de animações do Android do ZoomableView
Versão 1.10.0
- Melhoramentos no componente ZoomableView:
- Gestos simultâneos de panorâmica e pinça
- Novo gesto para fechar: diminuir o zoom quando a escala começar em 100%
- Os gestos Pull down ou Pull up para fechar continuam válidos
- Todas as animações são enfileiradas para evitar qualquer efeito de cintilação
- Melhoramentos no componente Modal:
- “Safe Area” agora é aplicada por padrão
- Adicionada propriedade unsafeEdges
- Adicionada propriedade unsafeTop
- Adicionada propriedade unsafeBottom
- Adicionada propriedade unsafeLeft
- Adicionada propriedade unsafeRight
- Adicionada propriedade center
- O conteúdo será rolável se sua altura for maior que a da tela
- Melhoramentos no componente Alert:
- “Safe Area” agora é aplicada
- Adicionada propriedade center
- Adicionada propriedade title
- Método show agora tem 8 assinaturas:
show(message) show(message, closeCallback) show(message, details) show(message, details closeCallback) show(title, message) show(title, message, closeCallback) show(title, message, details) show(title, message, details closeCallback)
- Melhoramentos no componente Confirm:
- “Safe Area” agora é aplicada
- Adicionada propriedade center
- Melhoramentos nos componentes Modal, Alert, Confirm e OpenSheet:
- Os eventos onPress/onCancel/onClose agora são invocados após o cancelamento total do Modal, o que evita problemas do iOS, como abrir a biblioteca de câmeras (isso não pode ser feito se o Modal não for descartado)
- Melhoramentos no componente OptionListItem:
- Adicionada propriedade center
- Adicionada propriedade hideArrow
- Melhoramentos no componente InputOption:
- Adicionada propriedade dynamic, destinada a apresentar grande conjunto de valores (tela cheia rolável com base em OptionList)
- No modo dinâmico, o OptionListItem é centralizado
- Melhoramentos no Tema:
- Adicionado titleStyle ao componente Alert
- Método isOpen removido dos componentes Modal e Confirm
- Corrigido componente Alert no método show (bug de 1.9.0)
- Corrigido componente InputImage - problemas no iOS
- Corrigido componente ZoomableView - gesto de fechar por zoom out poderia iniciar com zoom acima de 100%
- Corrigido componente ZoomableView - opacidade do overlay poderia ficar errada no gesto zoom out seguido de rápido zoom in
- Corrigido componente ZoomableView - gesto de fechar não era descartado se o zoom subir de 100%
- Corrigido componente ZoomableView - gesto de arrastar poderia sofrer “flicker” em zoom muito alto quando a imagem estava colada nas laterais
- Corrigido componente Image - atualização do Aspect Ratio na mudança de source, style, width ou height
- Corrigido componente Image - imagem borrada no iOS (afetava InputImage e RichInputImage)
- Corrigidos componentes InputOption e OptionSheet - não fechava teclado (dismiss)
Versão 1.9.0
- Melhoramentos nos componentes Modal, Alert e Confirm:
- StatusBar fica oculta no Android para consistência de UX com iOS
- Melhoramentos no componente Alert:
- O mimeType do details é agora ‘text/plain’ por padrão
- O tamanho da fonte do details text/plain agora é baseada no tema (2 x defs.fontSize)
- Melhoramentos no componente Button:
- Atributo title é agora opcional (ícone fica centralizado)
- Melhoramentos no componente Image:
- Adicionada propriedade zoomable (torna a imagem touchable, via ZoomableView)
- Adicionado método showViewer (exibe o visualizador em tela cheia, via ZoomableView)
- Adicionado evento onPress (quando o usuário toca na imagem, por padrão exibe o visualizador ZoomableView)
- Melhoramentos no componente InputImage:
- Adicionada propriedade controls (ativa os botões de ação, por padrão false)
- Adicionado método requestImageFromLibrary
- Adicionado método requestImageFromCamera
- Adicionado método requestImage (o componente mostrará menu com as opções de Biblioteca e Câmera)
- Adicionado método showViewer (exibe o visualizador em tela cheia)
- Adicionado evento onPressPreview (quando o usuário toca no preview, por padrão exibe o visualizador ZoomableView)
- Preview por padrão é touchable e exibe o visualizador ZoomableView
- Os melhoramentos acima (adição da API) permitem um layout customizável
- Novo componente ZoomableView:
- Destaques de UX:
- Animação fade in na abertura
- Animação fade out + zoom out (simultâneo) no fechamento
- Gesto de Pinça centralizado nos dedos
- Adicionado Slop para que a Pinça seja reconhecida de fora do conteúdo
- Se a Pinça reduzir o zoom para menos que 100%, a escala volta para 100%, animada
- Se a Pinça aumentar o zoom para mais que maxZoom, a escala volta para maxZoom, animada (padrão 500%)
- Retorno para maxZoom aplica translação X/Y, animada, para manter a Pinça centralizada nos dedos
- Após gestos de Pinça e Arrastar, aplica-se translação X/Y, animada, para remover espaços vazios nas laterais da tela
- Se o zoom não for grande suficiente, o conteúdo retorna para o centro da tela, animado
- Gestos Puxar para Cima ou para Baixo, se começado na escala 100%, fecham o visualizador
- A opacidade do overlay diminuirá gradativamente durantes os gestos de fechamento, indicando que eles estão em processo de reconhecimento/ativação
- StatusBar oculto no Android (consistência de fullscreen com iOS)
- O botão de voltar do Android fecha o componente
- Destaques de UX:
- Melhoramentos no Tema:
- Adicionado estilo para o componente ZoomableView
- Corrigido paddings do preview image de InputImage
- Corrigido cálculo do aspectRatio de Image, afetava alguns cenários
- Desativado cálculo do aspectRatio de Image se seu valor estiver definido no estilo ou via ambas as propriedades width e height
- Várias correções e refinamentos em toda a documentação do código-fonte
Versão 1.8.0
- Melhoramentos no componente InputOption:
- Adicionada propriedade required
- Adicionada propriedade onValidate
- Adicionada propriedade nullable (onSelect será disparado com valor undefined)
- Propriedade ‘titleAttr’ renomeada para ‘labelAttr’
- Melhoramentos no componente InputImage:
- Adicionada propriedade required
- Adicionada propriedade onValidate
- Adicionado Message bundle para labels e mensagens
- Novo componente RichInputOption
- Novo componente RichInputImage
- Corrigido evento onSelect de InputImage quando o usuário removia a imagem
Versão 1.7.0
- Melhoramentos no componente Icon:
- Adicionado bundle Octicons
- Adicionado bundle Foundation
- Adicionado bundle SimpleLineIcons
Versão 1.6.0
- Melhoramentos no componente Alert:
- Adicionada assinatura do método show:
show(messageText, detailsObj)
- Ajustado tamanho da fonte no details com HTML no Android
- Adicionada assinatura do método show:
- Melhoramentos no componente Image:
- Adicionado suporte a source base64
- Melhoramentos no Tema:
- Adicionada propriedade spacing ao estilo do Switch
- Removidos estilos não usados
- Adicionado estilo para o componente ECharts
- Melhoramentos no componente InputText:
- Adicionada propriedade required
- Adicionado forwarding method para blur()
- Adicionado forwarding method para clear()
- Adicionado forwarding method para isFocused()
- Adicionado framework para validação e formatação
- Exemplo:
import { InputText, Types } from '@bernardo-dias/react-native-cloudsupport'; const { Email } = Types;
- Types incluídos:
Text (default) Email Url Password Number Money Cd (check digits) DateTime Month Tel (BR) Cpf (BR) Cnpj (BR) Cpfcnpj (BR) Cep (BR)
- Criando seu próprio Type (vide detalhes na documentação do código-fonte):
import { Type } from '@bernardo-dias/react-native-cloudsupport'; //... class MyType extends Type { format = (valueOrTypedText, typeProps, previousState) => valueOrTypedText ?? ''; parse = (formattedText, typeProps) => formattedText; validate = (text, typeProps) => { }; defaultInputProps = (typeProps) => { }; }
- Os Types podem ser customizados (vide detalhes na documentação do código-fonte):
<InputText type={Password} typeProps={{minLength: 10, minUpper: 2, minSpecial: 1, specialChars: '!@#$' }} />
- Capturando eventos de validação:
<InputText type={Email} onValidate={(valid, errorMessage) => {...}} />
- Obtendo o valor parsed (string, number, date etc) conforme cada Type:
<InputText onChangeValue={value => {...}} />
- Exemplo:
- Novo componente InputImage
- Requer instalação de https://github.com/react-native-image-picker/react-native-image-picker.
- Novo componente RichInputText
- Novo componente ECharts
- Adicionado suporte ao Apache Theme Builder
- Adicionado framework para internacionalização (i18n):
- Exemplo de como personalizar mensagens (vide detalhes na documentação do código-fonte):
import { setMessages } from '@bernardo-dias/react-native-cloudsupport'; // ... setMessages({ 'input_invalid_text_min': (props) => Informe pelo menos ${props.min} caracteres, 'input_invalid_text_max': (props) => Informe no máximo ${props.max} caracteres, 'input_invalid_cpf': (props) => 'CPF inválido', 'input_invalid_url': (props) => 'Endereço inválido', 'input_invalid_email': (props) => 'E-mail inválido', // ... (see source code for all message keys) });
- Exemplo de como personalizar mensagens (vide detalhes na documentação do código-fonte):
- Melhoramentos nas configurações do node package:
- Dependências movidas para peerDependencies para evitar duplicidade de inicialização no React Native
- Os projetos devem instalar as dependências
- Melhoramentos no Tema:
- Novo hook useTheme() que permite obter a instância do tema da aplicação
- Corrigida marginVertical do componente OptionList
- Corrigido componente Alert ao exibir details text/plain que continha entidades html
Versão 1.5.0
- Descontinuado componete IgnoreLogs em favor do novo componente Log
- Deve ser ativado na primeira linha antes do componente de mais alto nível
- Exemplo:
import React from 'react'; import { Log } from '@bernardo-dias/react-native-cloudsupport'; // more imports Log.ignoreLogs(); // ... export default App = () => { return ( <...> ); }
Versão 1.4.0
- Melhoramentos no componente OptionList:
- Os elementos da lista são agora obtidos da propriedade ‘values’, em vez de tags internas
- Exemplo:
<OptionList values={[ <OptionListItem title='Configurações' onPress={pressItemMenu} />, <OptionListItem title='Sobre esse app' onPress={pressSobre} /> ]} />
- Melhoramentos no Tema:
- Adicionada propriedade dividerColor ao estilo do OptionList
- Adicionada variável de personalização defs.brightnessStep3
- Clareado tom do track do Switch quando desativado (brightnessStep2)
- Corrigido paddings nos ícones de Button
Versão 1.3.0
- Melhoramentos no componente StatusBar:
- Agora suporta todos os atributos do React Native (como transparency)
Versão 1.2.0
- Melhoramentos no Tema:
- Método createTheme tem nova assinatura: (customColors, customDefs, customStyles)
- Novo componente IgnoreLogs:
- Permite desabilitar logs “irritantes” (ex: react-native-snap-carousel)
- Log desabilitado por padrão: “ViewPropTypes will be removed from React Native”
- O aplicativo deve importá-lo no topo de tudo (no App.js)
- Corrigida herança de estilos no Tema
Versão 1.1.0
- Novo componente KeyboardAware
- Melhoramentos no componente ScrollScreen:
- Deixou de ser Novo componente por padrão (adequação ao React Navigation)
- Propriedade keyboardShouldPersistTaps agora vale por padrão ‘handled’
- Adicionada propriedade keyboardAware
Versão 1.0.0
- Primeira versão
- Compatibilidade: React Native 0.68