<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="296607" data-post-id="296607">
  <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>Since you are using the classic assign and assuming <code>list_items()</code> always returns a list, you could conditionally show/hide with something like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">&lt;.table :if={Enum.any?(@items)} ...&gt;...&lt;/.table&gt;
&lt;span :if={Enum.empty?(@items)}&gt;No Articles&lt;/span&gt;
</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="296607" data-batch-url="/posts/batch_likers">
                        1
                      </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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-296607" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="296607"
                     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 #21"></div>
  </section>
</div>
    <div class="postbit" id="296702" data-post-id="296702">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Unless something has changed very recently, the generator is coded in a way that works with both a stream or a regular list.  Perhaps the <code>with</code> line at the top of the <code>table</code> component that is confusing?  The <code>case</code> version would look like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">assigns =
  case assigns do
    %{rows: %Phoenix.LiveView.LiveStream{} -&gt;
      assign(assigns, row_id: assigns.row_id || fn {id, _item} -&gt; id end)

    assigns -&gt;
      assigns
  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="296702" 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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-296702" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="296702"
                     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 #22"></div>
  </section>
</div>
    <div class="postbit" id="299564" data-post-id="299564">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="rbino" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/rbino/120/28598_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  rbino
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Ash Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I was experimenting with a similar setup and I was having the same problem, adding an id to the empty placeholder block (in your case, the <code>.empty</code> component) fixed the issue</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="299564" data-batch-url="/posts/batch_likers">
                        2
                      </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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-299564" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="299564"
                     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 #23"></div>
  </section>
</div>
    <div class="postbit" id="301875" data-post-id="301875">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This CSS trick works for my use case.</p>
<p>My try:</p>
<pre data-code-wrap="html"><code class="lang-html">&lt;ul phx-update="stream"&gt;
  &lt;li class="hidden last:block"&gt;
    No items here.
  &lt;/li&gt;
  &lt;li :for={{dom_id, item} &lt;- @streams.items} id={dom_id}&gt;
    ...
  &lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p>However, even if it works, my tests fail with:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"> 30) test something (MyApp.MyTest)
     test/my_app_web/live/my_liveview_test.exs:32
     ** (EXIT from #PID&lt;0.1200.0&gt;) an exception was raised:
         ** (ArgumentError) setting phx-update to "stream" requires setting an ID on each child. No ID was found on:
     
     &lt;li class="hidden last:block"&gt;
              No items here.
           &lt;/li&gt;
             (phoenix_live_view 0.19.5) lib/phoenix_live_view/test/dom.ex:520: anonymous fn/3 in Phoenix.LiveViewTest.DOM.apply_phx_update_children_id/2
             (elixir 1.15.5) lib/enum.ex:2510: Enum."-reduce/3-lists^foldl/2-0-"/3
             (phoenix_live_view 0.19.5) lib/phoenix_live_view/test/dom.ex:518: Phoenix.LiveViewTest.DOM.apply_phx_update_children_id/2
             (phoenix_live_view 0.19.5) lib/phoenix_live_view/test/dom.ex:397: Phoenix.LiveViewTest.DOM.apply_phx_update/4
             (floki 0.34.3) lib/floki/traversal.ex:6: anonymous fn/3 in Floki.Traversal.traverse_and_update/2
             (floki 0.34.3) lib/floki/traversal.ex:18: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:23: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:37: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:18: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:23: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:37: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:18: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:23: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:37: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:18: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:37: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:18: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:23: Floki.Traversal.traverse_and_update/3
             (floki 0.34.3) lib/floki/traversal.ex:6: Floki.Traversal.traverse_and_update/2
             (phoenix_live_view 0.19.5) lib/phoenix_live_view/test/dom.ex:299: Phoenix.LiveViewTest.DOM.patch_id/4
</code></pre>
<p>I’m looking for a way to say to my liveview that I have a static (and so without ID) DOM element in my <code>&lt;ul phx-update="stream"&gt;</code>. I didn’t find yet. Maybe it just doesn’t exists for now <img src="https://forum.elixirforum.com/images/emoji/apple/scream.png?v=15" title=":scream:" class="emoji" alt=":scream:" loading="lazy" width="20" height="20"></p>
<p>I’m surprised nobody already mentions this issue here <img src="https://forum.elixirforum.com/images/emoji/apple/stuck_out_tongue_closed_eyes.png?v=15" title=":stuck_out_tongue_closed_eyes:" class="emoji" alt=":stuck_out_tongue_closed_eyes:" loading="lazy" width="20" height="20"></p>
<p>This happen after an update from v0.18.18 to v0.19.5 of <code>phoenix_live_view</code>.</p>
<p><strong>Edit:</strong> my workaround for now is using <code>&lt;li class="hidden last:block" id="untracked"&gt;</code>, not sure it’s a good idea <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="301875" data-batch-url="/posts/batch_likers">
                        1
                      </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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-301875" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="301875"
                     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 #24"></div>
  </section>
</div>
    <div class="postbit" id="302023" data-post-id="302023">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="KP123" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  KP123
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="loics2" data-post="7" data-topic="57219">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/l/7ba0ec/48.png" class="avatar"> loics2:</div>
<blockquote>
<p>I tried to do something with the <code>:empty</code> pseudoselector, but it’s sensible to whitespace which makes it hard to have something generic</p>
</blockquote>
</aside>
<p>How did the <code>:empty</code> psuedoselector fail you? Does the code below suit your needs?</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">&lt;style&gt;
    /* Target contains children */
    .track-empty &gt; .track-empty__target + .track-empty__message { display: none; }

    /* Target contains no children */
    .track-empty &gt; .track-empty__target:empty { display: none; }
    .track-empty &gt; .track-empty__target:empty + .track-empty__message { display: block; }
&lt;/style&gt;

&lt;div class="track-empty"&gt;
    &lt;ul class="track-empty__target" phx-update="stream"&gt;
        &lt;li :for={{dom_id, item} &lt;- @streams.items} id={dom_id}&gt;...&lt;/li&gt;
    &lt;/ul&gt;

    &lt;div class="track-empty__message"&gt;
        &lt;p&gt;No items here.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</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="302023" 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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-302023" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="302023"
                     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 #25"></div>
  </section>
</div>
    <div class="postbit" id="315622" data-post-id="315622">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I found this to be the most straightforward. I was hitting this error as well I guess the workaround is simply:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">&lt;.empty icon="clock-off" class="hidden only:block" id="insert-id-here"&gt;
    &lt;:title&gt;&lt;%= dgettext("events", "No shifts") %&gt;&lt;/:title&gt;
    &lt;:subtitle&gt;&lt;%= dgettext("events", "There are no shifts for this event.") %&gt;&lt;/:subtitle&gt;
  &lt;/.empty&gt;
</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="315622" data-batch-url="/posts/batch_likers">
                        1
                      </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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-315622" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="315622"
                     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 #26"></div>
  </section>
</div>
    <div class="postbit" id="368336" data-post-id="368336">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This is a pretty old post, but it’s never too late to document more tricks… In case you want to do this from the parent and can’t rely on <code>:empty</code> (because of whitespaces), you can always use the <code>:has()</code> pseudo selector: <code>&lt;div phx-update="stream" class="hidden has-[div]:block"&gt;</code> (assuming your have divs inside of the parent) <img src="https://forum.elixirforum.com/images/emoji/apple/victory_hand.png?v=15" title=":victory_hand:" class="emoji" alt=":victory_hand:" loading="lazy" width="20" height="20">.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="368336" data-batch-url="/posts/batch_likers">
                        1
                      </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/stream-empty-state-is-there-a-way-to-check-when-a-stream-is-empty/57219/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-368336" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="368336"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></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>