Skip to content

Instantly share code, notes, and snippets.

@rcapeto
Last active May 30, 2023 22:42
Show Gist options
  • Save rcapeto/9b67a4e91f104a65c82b864ddb268eb9 to your computer and use it in GitHub Desktop.
Save rcapeto/9b67a4e91f104a65c82b864ddb268eb9 to your computer and use it in GitHub Desktop.
Proposta Eventos

Event Manager

Fluxo atual

  • Cada plataforma de dados existe um método específico para disparos, então para cada plataforma é um jeito diferente de diparo;

Exemplo de disparo Firebase

 analytics().logEvent(event_type, {
    event_screen_id,
    event_name,
    event_value,
  });
  • Então, se eu for adicionar um disparo de evento na interação do usuário em um botão ficaria:
function dispatchEvent() {
   analytics().logEvent('interaction', {
      event_screen_id: 'Tela de teste',
      event_name: 'clique_no_botao',
      event_value: {},
    });
}

<Button onPress={dispatchEvent}> 
  Clique aqui para enviar evento
</Button>

Explicando um pouco o código acima, existe um botão que recebe o parâmetro onPress, que seria o click no botão, quando ele clicar no botão vai disparar a função dispatchEvent que vai acabar enviando o evento para o Firebase

Adicionando outros métodos de dados:

  • Bom, agora precisamos adicionar outra plataforma para o disparo nesse click, como ficaria?
function dispatchEvent() {
   analytics().logEvent('interaction', {
      event_screen_id: 'Tela de teste',
      event_name: 'clique_no_botao',
      event_value: {},
    });
    
    // {{ método de exemplo }}
  insider.pushEvent({
      event_screen_id: 'Tela de teste',
      event_name: 'clique_no_botao',
      event_value: {},
      event_type: 'interaction'
  })
}

Então, como cada plataforma tem um método diferente, cada plataforma deve ser chamada nesse onPress

Reflexão

  • O exemplo acima é apenas um botão, agora vamos pensar na aplicação toda?
  • Imagina o tempo necessário para remover, adicionar outras plataformas

Proposta

Criação de um manager que recebe os parâmetros padrões com os repositórios [plataformas de dados] para disparar todos os eventos

Iniciando o Manager

  • Onde inicio o manager, adicionando todos os manager disponíveis na aplicação
  manager.startEvents([InsiderRepo, FirebaseRepo])

Repositorios

  • Todos poderiam ter apenas um método de envio, como por exemplo, sendEvent | pushEvent ou etc. Nesse método recebe parâmetros padronizados para todos!
class FirebaseRepository {
  pushEvent(params) {
    const { screen, type, name, value } = params
     analytics().logEvent(type, {
          event_screen_id: screen,
          event_name: name,
          event_value: value,
        });
  }
}

Disparo pelo manager

  • Onde eu faço o disparo apenas em um local
function dispatchEvent() {
  manager.dispatchEvent('clique_no_botao', {
    screen: 'Tela de teste',
    type: 'interaction',
    value: {}
  })

  // Caso eu queria adicionar o evneto somente em repositórios específicos eu poderia passar para o dispatch:
  // Exemplo em repositórios específicos
  manager.dispatchEvent('clique_no_botao', {
    screen: 'Tela de teste',
    type: 'interaction',
    value: {}
  }, [FirebaseRepository])
}

<Button onPress={dispatchEvent}> 
  Clique aqui para enviar evento
</Button>
  • Então, amanhã se eu quiser remover qualquer plataforma para sempre é só apagar o arquivo do Repositório da plataforma e tirar do manager.startEvents.

Requesitos

  • Padronização dos parâmetros;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment