View Source LifeCycleHook

Hex Version Hex Docs Total Download License Last Updated

LifeCycleHook is a simple hook that logs each life-cycle step of LiveView.

It is good for learning Phoenix LiveView life-cycle.

Overview

By mounting LifeCycleHook on LiveView with use LifeCycleHook, you can see logs for each life-cycle of LiveView.

defmodule MyApp.MyLive do
  use Phoenix.LiveView
  use LifeCycleHook

  @impl true
  def render(assigns) do
    ...
  end
end
[debug] Elixir.MyApp.MyLive mount with HTTP
[debug] Elixir.MyApp.MyLive handle_params with HTTP
[debug] Elixir.MyApp.MyLive mount with WebSocket
[debug] Elixir.MyApp.MyLive handle_params with WebSocket

only/except options

If you want to choose specific stages to log, you can use only or except option in use LifeCycleHook. For example, you can set only: [:mount] option to use LifeCycleHook in sticky nested LiveView which doesn't support handle_params hook.

defmodule MyApp.MyStickyNestedLive do
  use Phoenix.LiveView
  use LifeCycleHook, only: [:mount]

  @impl true
  def render(assigns) do
    ...
  end
end
[debug] Elixir.MyApp.MyStickyNestedLive mount with HTTP
[debug] Elixir.MyApp.MyStickyNestedLive mount with WebSocket

log_level option

You can change log level of LifeCycleHook with log_level option.

defmodule MyApp.MyWarnLogLevelLive do
  use Phoenix.LiveView
  use LifeCycleHook, log_level: :warn

  @impl true
  def render(assigns) do
    ...
  end
end
[warning] Elixir.MyApp.MyWarnLogLevelLive mount with HTTP
[warning] Elixir.MyApp.MyWarnLogLevelLive mount with WebSocket

Installation

The package can be installed by adding :life_cycle_hook to your list of dependencies in mix.exs:

def deps do
  [
    {:life_cycle_hook, "~> 0.5"}
  ]
end

TO DO

  • [x] Add handle_params hook
  • [x] Add macro that replace on_mount({LifeCycleHook, __MODULE__})
  • [ ] Support nested LiveView with sticky: true option
  • [ ] Add handle_event hook
  • [ ] Add handle_info hook
  • [x] Support only, except options in use LifeCycleHook
  • [x] Support setting log level
  • [ ] Support watching params of each hook

Copyright (c) 2022 Jinkyou Son (Json)

This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See the LICENSE.md file for more details.