<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="304878" data-post-id="304878">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="soup" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/soup/120/31425_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  soup
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="ca1989" data-post="11" data-topic="59037">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/c/57b2e6/48.png" class="avatar"> ca1989:</div>
<blockquote>
<p>I believe this is valid heex, equivalent to <code>&lt;span&gt;&lt;/span&gt;</code> (90% sure :))</p>
</blockquote>
</aside>
<p>Yeah Im an idiot.</p>
<p>This works for me, so, IDK, good luck.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule PhxcomponentsWeb.Index2Live do
  use PhxcomponentsWeb, :live_view

  defmodule Component do
    use PhxcomponentsWeb, :live_component

    def update(assigns, socket) do
      socket =
        socket
        |&gt; assign(:all_columns, assigns.all_columns)
        |&gt; assign(:columns, assigns.all_columns)

      {:ok, socket}
    end

    def handle_event("toggle-one", params, socket) do
      # bit jank but whatever
      columns =
        case params do
          %{"column" =&gt; col_key, "value" =&gt; "on"} -&gt;
            [{col_key, String.to_existing_atom(col_key)} | socket.assigns.columns]
            |&gt; Enum.uniq()

          %{"column" =&gt; col_key} -&gt;
            Enum.reject(socket.assigns.columns, fn {_name, key} -&gt;
              key == String.to_existing_atom(col_key)
            end)
        end

      socket = assign(socket, :columns, columns)

      {:noreply, socket}
    end

    def handle_event("toggle-all", _params, socket) do
      Enum.reduce(
        ["colors", "dogs", "cats"],
        {:noreply, socket},
        fn key_string, {:noreply, socket} -&gt;
          handle_event("toggle-one", %{"column" =&gt; key_string, "value" =&gt; "on"}, socket)
        end
      )
    end

    defp col_checked?(target_key, columns) do
      Enum.any?(columns, fn {_col_name, col_key} -&gt; col_key == target_key end)
    end

    def render(assigns) do
      ~H"""
      &lt;div&gt;
        &lt;%= for {name, key} &lt;- @all_columns do %&gt;
          &lt;input
            type="checkbox"
            id={"id-#{key}"}
            name={"col-#{key}"}
            phx-click="toggle-one"
            phx-value-column={key}
            phx-target={@myself}
            checked={col_checked?(key, @columns)}
          /&gt;
          &lt;label for={"id-#{key}"}&gt;&lt;%= name %&gt;&lt;/label&gt;
        &lt;% end %&gt;
        &lt;button class="ml-8 border" type="button" phx-click={JS.push("toggle-all", target: @myself)}&gt;
          check all
        &lt;/button&gt;
        &lt;div class="flex gap-4"&gt;
          &lt;%= for {name, _key} &lt;- @columns do %&gt;
            &lt;span&gt;&lt;%= name %&gt;&lt;/span&gt;
          &lt;% end %&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      """
    end
  end

  def mount(_params, _session, socket) do
    socket =
      assign(
        socket,
        :all_columns,
        [{"colors", :colors}, {"dogs", :dogs}, {"cats", :cats}]
      )

    {:ok, socket}
  end

  def render(assigns) do
    ~H"""
    &lt;div&gt;
      &lt;.live_component module={Component} all_columns={@all_columns} id={:comp} /&gt;
    &lt;/div&gt;
    """
  end
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="304878" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-liveview-checkboxes-are-not-updated-the-ui/59037/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-304878" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="304878"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="304985" data-post-id="304985">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="codeanpeace" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/codeanpeace/120/10278_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  codeanpeace
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You could streamline this by removing the <code>@columns</code> assign entirely and instead adding a <code>:visible</code> field directly to each element <code>@all_columns</code> assign list and then update that field to true in the event handler for show all columns.</p>
<p>Then in the template, you could just access it directly with something like this:  <code>&lt;input ... checked={col.visible}&gt;</code>. This means you wouldn’t be running a check for every column every time <code>@columns</code> gets updated.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="304985" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-liveview-checkboxes-are-not-updated-the-ui/59037/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-304985" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="304985"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="304998" data-post-id="304998">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ca1989" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ca1989
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="codeanpeace" data-post="13" data-topic="59037">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/codeanpeace/48/10278_2.png" class="avatar"> codeanpeace:</div>
<blockquote>
<p>You could streamline this by removing the <code>@columns</code> assign entirely and instead adding a <code>:visible</code> field directly to each element <code>@all_columns</code> assign list and then update that field to true in the event handler for show all columns.</p>
</blockquote>
</aside>
<p>Indeed. Problem is in the existing code the columns are tuples.<br>
And they have 2 or 3 elements, hence I have some <code>elem</code> scattered around where I would have used pattern matching.</p>
<p>Another option could be to normalize the tuples, adding missing fields and the visible boolean.</p>
<p>I’ll think about that, thank you</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="304998" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-liveview-checkboxes-are-not-updated-the-ui/59037/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-304998" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="304998"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="305593" data-post-id="305593">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="ca1989" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  ca1989
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>The checkboxes were inside a dropdown activated by some old javascript.<br>
I converted that old dropdown logic to LV and everything works fine now.</p>
<p>Thank you</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="305593" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/phoenix-liveview-checkboxes-are-not-updated-the-ui/59037/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-305593" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="305593"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-solved cat-solved" title="Marked as solution"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>