Problem creating button with drab

I need some help creating a trigger … with the “drab”

can you help me?

scenarios is that:

He calls this drab:

html
<li class="nav-item"><a drab="click:test_start('test')" class="nav-link"><i class="nav-link"></i><span class="nav-link-text">start</span></a></li>

He calls this drab:

  defhandler click:test_start(socket, sender, name_project) do
    user = socket.assigns.current_user.username
    user_id = socket.assigns.current_user.id
    query_password = from [p] in "test", select: p.password_project, where: p.name == ^name_project and p.user_id == ^user_id
    query_languagecode = from [p] in "test", select: p.languagecode, where: p.name == ^name_project and p.user_id == ^user_id
    passwd = Repo.one(query_password_project)
    languagecode = Repo.one(query_languagecode)
    databasedb = "#{name_project}"
    TestWeb.CustomController.create_function1(user, passwd)
    TestWeb.CustomController.create_function2(user, passwd)
    TestWeb.CustomController.create_function3(user, passwd)
    TestWeb.CustomController.create_function4(user, passwd)

    IO.puts("start!")
  end

problem is …

If the person clicks on this drab, and then immediately “refresh” the page, he cancels this function entirely.

Currently I need this drab to continue running even if the client refresh the page.

Would it be possible to do that?

You need to move your logic out of your handlers. I haven’t tried drab, but in LiveView I would start a new GenServer on mount. Then if my LiveView dies, my GenServer is still running.

Would you have any examples, that can help me?

Sorry no specific examples. But do read up on DynamicSupervisor. Try to write a GenServer that can be started dynamically with some params (like user_id for example). Play with it in the IEx and make sure you understand how to start the process and find it later by params.

Then once you got that - do the same in Drab. In the onload callback, locate or start your GenServer like you did in IEx. Now your GenServer will survive reload of page/Drab.

Edit
I think you’d start your GenServer in the click:test_start callback. Or maybe a Task will also be fine here.

1 Like

I’m reading this,
maybe I can send him …