0.2.0 • Published 3 years ago

@rogu/tracker-runtime v0.2.0

Weekly downloads
14
License
MIT
Repository
-
Last release
3 years ago

@rogu/tracker-runtime

This is a runtime library for @rogu/tracker-codegen. However, you still need to setup the provider manually to make it works.

Overview

tracker

Tracker Provider

Tracker Provider is a collection of modules that act as a container for your tracking service.

module __Your_Tracking_Service__ = {
  type t;
  let handler: t => unit
}

Full Example

module Firebase = {
  type t = [ | `firebase];
  let handler = properties => {
    fun
    | `firebase => {
        Firebase.Analytics.make().logEvent(.
          properties##eventType,
          properties##context,
        );
      };
  };
};

module Internal = {
  type t = [ | `internal];

  let transform = properties =>
    Js.Json.[
      ("clientTimestamp", string @@ Js.Date.toString @@ Js.Date.make()),
      ("appVersion", string("0.0")),
      ("clientDevice", string("WEB")),
      ("clientOS", string("")),
      ("clientOSVersion", string("")),
      ("context", properties##context),
      ("deviceId", string("")),
      ("eventType", string @@  properties##eventType),
      ("eventVersion", number(0.0)),
      ("cookiesId", string @@ Session.make()),
      ("isLogged", boolean @@ false),
      ("memberId", string @@ UOC.get()),
      ("sessionId", string @@ Session.make()),
    ]
    |> Js.Dict.fromList
    |> Js.Json.object_
    |> Js.Json.stringify;

  let handler = properties =>
    fun
    | `internal => {
        Bs_fetch.(
          fetchWithInit(
            Config.config.apiEndpoint ++ "/event/tracker",
            RequestInit.make(
              ~method_=Post,
              ~body=BodyInit.make @@ transform(properties),
              (),
            ),
          )
        )
        |> ignore;
      };
};

Tracker Module

This is the main module where you need to compose between the code from code generator and your own provider implementation.

module Make = RgTracker.Runtime.Make(LMS__Tracker);

include Make({

  type t = [ TrackerProvider.Internal.t | TrackerProvider.Firebase.t];

  let required = [|`internal|];

  let handler = properties =>
    fun
    | `internal as provider => TrackerProvider.Internal.handler(properties, provider)
    | `firebase as provider => TrackerProvider.Firebase.handler(properties, provider);
});

After you setup those two modules. You can use tracker as followings:

[@react.component]
let make = () => {
  <Button onPress={_ => Tracker.make(`generatedEvent(some_payload))}>
  </Button>
}

That code will only fire internal since it's the only required tracker to track.

However, if you want to track internal and firebase. You can do followings:

[@react.component]
let make = () => {
  <Button onPress={_ => Tracker.make(~providers=[|`firebase|],`generatedEvent(some_payload))}>
  </Button>
}
0.2.0

3 years ago

0.1.0-alpha-0

4 years ago

0.1.0-dev-1

4 years ago

0.1.0

4 years ago

0.0.1

4 years ago