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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarthinL" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarthinL
                    <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="garrison" data-post="49" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>I <em>think</em> that would work.</p>
<p>I don’t know if there are any fancier tools. I have seen some hype about <a href="https://github.com/software-mansion/live-debugger" rel="noopener nofollow ugc">this LiveDebugger tool</a> - I haven’t tried it and I don’t know exactly what it does, but it might be relevant.</p>
</blockquote>
</aside>
<p>Maybe, but I doubt it. All the changes at assign level are one I’d have made, so I know those already. The changes I’m looking for are what LV determines internally based on what assigns were used to produce what part of the HTML that new needs to be rendered again because of the change. I.e. as you described it, the changes at the attribute level compared to the previous value held in memory. My entire approach hinges on determining and retaining only the essential bits of information in memory to detect the changes. I can’t afford to keep all the data in memory and I can’t afford to send data over the wire that didn’t change but LiveView doesn’t know it didn’t because it has no momory of what it was.</p>
<p>I’ve been referred to the LiveDebugger on chat. time will tell.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="363723" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/52">Post #51</a>
	                </div>
	            </div>
              <div id="likers-container-363723" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="363723"
                     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 #51"></div>
  </section>
</div>
    <div class="postbit" id="363725" data-post-id="363725">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="MarthinL" data-post="52" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/m/3da27b/48.png" class="avatar"> MarthinL:</div>
<blockquote>
<p>The changes I’m looking for are what LV determines internally based on what assigns were used to produce what part of the HTML that new needs to be rendered again because of the change. I.e. as you described it, the changes at the attribute level compared to the previous value held in memory.</p>
</blockquote>
</aside>
<p>The dynamics which depend (statically, via <code>@whatever</code>) on the assigns which have changed will be re-sent in full. The static parts are not re-sent. If you look at your template and at the assigns which have changed, it should not be too difficult to infer what will be sent over the wire.</p>
<p>If you want to inspect the actual diffs on the wire, you can look at the browser tools like I mentioned. The diffs are in a JSON format.</p>
<aside class="quote no-group" data-username="MarthinL" data-post="52" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/m/3da27b/48.png" class="avatar"> MarthinL:</div>
<blockquote>
<p>I can’t afford to keep all the data in memory and I can’t afford to send data over the wire that didn’t change but LiveView doesn’t know it didn’t because it has no momory of what it was</p>
</blockquote>
</aside>
<p>If you’re using streams it’s your responsibility to “tell” LiveView which stream items have changed. It will re-send (dynamics for) those stream items in full. I don’t think there is any way to get more granular than a full stream item, there.</p>
<p>Presumably you must have access to some sort of “change feed” directly from the source (the database) here. Otherwise what you’re suggesting is essentially a paradox: you cannot know what has changed unless you have the previous version to check.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="363725" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/53">Post #52</a>
	                </div>
	            </div>
              <div id="likers-container-363725" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="363725"
                     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 #52"></div>
  </section>
</div>
    <div class="postbit" id="363761" data-post-id="363761">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarthinL" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarthinL
                    <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="garrison" data-post="53" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>If you’re using streams it’s your responsibility to “tell” LiveView which stream items have changed. It will re-send (dynamics for) those stream items in full. I don’t think there is any way to get more granular than a full stream item, there.</p>
</blockquote>
</aside>
<p>Yes, I got that. See next response.</p>
<aside class="quote no-group" data-username="garrison" data-post="53" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Presumably you must have access to some sort of “change feed” directly from the source (the database) here. Otherwise what you’re suggesting is essentially a paradox: you cannot know what has changed unless you have the previous version to check.</p>
</blockquote>
</aside>
<p>It would present a paradox if it pertained to the same data, but it’s not the same data. I started with an overall strategy and reported success with the concept of splitting the tree content into two parts. The bulk of the data sits in the node content which naturally inludes in principle also the associations which renders it a recursive hierarchy. Using some cleverness on the server, I extract those association data (abstracted to a association by which each node has 0 or more child nodes in a specified order) into an entirely different dataset akin to another schema. This structural “schema” represents what the UI needs to know about how nodes (known solely by their IDs) are related to each other.</p>
<p>In the LiveView domain I handle the nodes and the structure data separately. After all the filtering and cutting out rectangular view sections, the structure data is small enough to be retained in memory as assigns and since it’s a single record it doesn’t even make sense to conider streaming that as it would always change anyway but without a previous one to compare to. The nodes, i.e. the big data it refers to and which gets rendered to HTML under its ID is a different matter. I don’t need LV to track the changes there because I already track those changes in my application, meaning I know about changes before getting to the presentation stage. When a changed or changing node is displayed or subscribred to, it will be updated as a whole, but here the whole “excludes” its children. Changes to the children will also go through, but under their own steam.</p>
<p>In the end, it comes down to this: As the user navigates through and interacts with the content via this tree view there is smart pagination logic behind it which has all the information it needs to build the correct view window structure from the database and can identify with “surgical accuracy” which of the nodes has to be updated, added because they were excluded from the previous ‘page’ or deleted because they are no longer needed. That’s the part that aligns with the Streams idiom whereas the minimalistic structure reflecting the structural essense of what is on screen is not designed for streaming but rather for direct assigns which renders and drives the container.</p>
<p>The job’s not done yet, so I would only be able to validate my understanding and assumptions about how LV’s JS side conspires with the DOM and how the container I use actually handle the style changes  driving the tree layout holds true or breaks down once I have that running with extensive tracing at every level. It’s tense times, but I’m cautiously optimistic that the inevitable surprises will be technical issues since those always have solutions. It’s the so-called “soft-issues” like unforeseen impedence mismatches and divergent agendas that tends to trip us up.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="363761" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/54">Post #53</a>
	                </div>
	            </div>
              <div id="likers-container-363761" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="363761"
                     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 #53"></div>
  </section>
</div>
    <div class="postbit" id="365074" data-post-id="365074">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Would anyone want to start a repository with examples of every possible implementation good or bad to see the trade offs and what works and what doesn’t?</p>
<p>This has been an insightful topic with all your replies. I’m also working on a recursive tree in LiveView and wondered if I should use LiveComponents or regular functions.</p>
<p>I was looking if <code>assign</code> can track changes to each nodes in a map or list, but it looks like changing one node triggers a render for anything using the whole list. I thought of giving every node an <code>assign</code> based on it’s key or using a LiveComponent to <code>assign</code> for every node.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365074" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/55">Post #54</a>
	                </div>
	            </div>
              <div id="likers-container-365074" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365074"
                     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 #54"></div>
  </section>
</div>
    <div class="postbit" id="365091" data-post-id="365091">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="user20230119" data-post="55" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/user20230119/48/31375_2.png" class="avatar"> user20230119:</div>
<blockquote>
<p>I’m also working on a recursive tree in LiveView and wondered if I should use LiveComponents or regular functions.</p>
</blockquote>
</aside>
<p>You can simply start with a function component and port it to a LiveComponent if you have performance problems. The programming model is essentially the same, the LC will just diff the assigns at the node level instead. Porting to/from streams is more complicated because the programming model is <em>very</em> different (imperative).</p>
<aside class="quote no-group" data-username="user20230119" data-post="55" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/user20230119/48/31375_2.png" class="avatar"> user20230119:</div>
<blockquote>
<p>I was looking if <code>assign</code> can track changes to each nodes in a map or list, but it looks like changing one node triggers a render for anything using the whole list.</p>
</blockquote>
</aside>
<p>That’s correct. It would be nice if LiveView supported a <code>key</code> attribute like React so that we could avoid the LiveComponent trick in more cases, but for now they’re the best way to optimize this IMO.</p>
<aside class="quote no-group" data-username="user20230119" data-post="55" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/user20230119/48/31375_2.png" class="avatar"> user20230119:</div>
<blockquote>
<p>I thought of giving every node an <code>assign</code> based on it’s key</p>
</blockquote>
</aside>
<p>You can’t do this because the assign accesses have to be statically known - that’s how the change tracking works (the <code>@field</code> syntax). Of course it would also blow up the atom table.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365091" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/56">Post #55</a>
	                </div>
	            </div>
              <div id="likers-container-365091" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365091"
                     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 #55"></div>
  </section>
</div>
    <div class="postbit" id="365101" data-post-id="365101">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarthinL" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarthinL
                    <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="user20230119" data-post="55" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/user20230119/48/31375_2.png" class="avatar"> user20230119:</div>
<blockquote>
<p>Would anyone want to start a repository with examples of every possible implementation good or bad to see the trade offs and what works and what doesn’t?</p>
</blockquote>
</aside>
<p>Dunno about an entire collection of good and bad options, but I have been working towards a repository aimed at arriving at a reusable separation of concerns which does what I need and hopefully what others might figure out they need to once they come to know more about it.</p>
<p>I was holding off making any of it public either until it was worthy of sharing with others (which might never happen) or until someone asks for it anyway (which might be what’s happening now). Make no mistake, nothng about it is complete or set in stone and it’s not something (yet) you can just clone, build and have fun with. I’m more than willing to put it out there if it could help someone who would also want to help build it into something that suits their needs too.</p>
<p>There’s very little about indefinitely recursive data that could rightfully be described as trivial, and as <a class="mention" href="/u/garrison" rel="nofollow">@garrison</a> and I more or less discovered there aren’t all that many people with a significant appreciation of the problem space, let alone possible solution spaces. Even my own journey with it had been one of many mistakes, perspective adjustments and even tools which used to proclaim non-support for some database features which has come to support those features after I worked my way around them.</p>
<p>Before I get too carried away. <strong>Are you interested in me sharing ((GitHub’s what I use) the Work in Progress of my “future library” isolating the presentation of indefinitely recursive data in liveview as a separate concern?</strong> If you’d rather wait or go another router, no worries, but if you are keen and on condition that I can somehow explain to you where I’ve been heading with the work I’ve done so far would like to join the effort to turn it into something useful, then let’s go and get it done.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365101" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/57">Post #56</a>
	                </div>
	            </div>
              <div id="likers-container-365101" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365101"
                     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 #56"></div>
  </section>
</div>
    <div class="postbit" id="365107" data-post-id="365107">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="MarthinL" data-post="57" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/m/3da27b/48.png" class="avatar"> MarthinL:</div>
<blockquote>
<p>Are you interested in me sharing ((GitHub’s what I use) the Work in Progress of my “future library” isolating the presentation of indefinitely recursive data in liveview as a separate concern?</p>
</blockquote>
</aside>
<p>Yes, I am interested in what you have so far and your explanations. Also, I’m interested what everyone has tried whether it failed or succeeded to see the trade-offs or reasons they failed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365107" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/58">Post #57</a>
	                </div>
	            </div>
              <div id="likers-container-365107" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365107"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="365109" data-post-id="365109">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="user20230119" data-post="58" data-topic="69023">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/user20230119/48/31375_2.png" class="avatar"> user20230119:</div>
<blockquote>
<p>I’m interested what everyone has tried whether it failed or succeeded</p>
</blockquote>
</aside>
<p>I should mention this for clarity: in past discussions on this topic (on this thread and the others), I had the impression at the time that LiveView Streams were a bad fit for recursive/tree-shaped data because of the imperative API. There was also speculation (from both of us) that this was due to the complexity of the recursive UI, and so on.</p>
<p>In the intervening months I have ended up having to rip Streams out of every single use case I tried to apply them to, including the canonical use-cases presented in the docs (infinite scrolling feeds). It might seem like I’ve been a bit of a hater, but I really did <em>try</em>. At this point I am strongly convinced that streams are not useful for anything, at all, which is of course an extreme opinion which I do not expect anyone to take at face value. I <em>will</em> eventually write something long-form detailing this argument, with clear examples.</p>
<p>But yeah, to be clear, I do have skin in the game here. I did not <em>want</em> to rewrite my code, obviously, but the imperative API causes too many bugs in my case and there is no way around it. If your data does not need to be updated after it’s rendered this may not apply to you, but in any complex UI you are eventually going to be bitten IMO.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365109" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/59">Post #58</a>
	                </div>
	            </div>
              <div id="likers-container-365109" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365109"
                     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 #58"></div>
  </section>
</div>
    <div class="postbit" id="365118" data-post-id="365118">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="MarthinL" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  MarthinL
                    <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>In the light of which I propose that we expect participants to accept your perspective as the sum total of your experiences and the limitations of the tools you have access to, which might be different to mine. Let’s suspend any notion of defence or attack and focus on discovery and learning how we can overcome that what limits us. You may play devil’s advocate when you feel the urge and I will be the eternal optimist when i feel that way, but neither of us are trying to have our positions vindicated. I for one want to meet the expetations of my users which is for the vastness and complexity of the underlying data to simply vanish from their experience. I don’t which technology wins the day and which fails, as long as my users (in terms of simplicity and performance) and I (in terms of server load per user) get the best deal possible.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365118" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/60">Post #59</a>
	                </div>
	            </div>
              <div id="likers-container-365118" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365118"
                     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 #59"></div>
  </section>
</div>
    <div class="postbit" id="365119" data-post-id="365119">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I just wanted to clarify that my view has changed over time based on my experiences. The above represents my <em>current</em> viewpoint. Maybe in the future it will change again! <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<p>Your use-case is unusual and I understand you’ve since spent a lot of time working towards a solution that works for your case. I am not commenting on that (though you of course should, as it may be helpful for others).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="365119" 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/using-streams-with-recursive-and-or-deeply-nested-schemas/69023/61">Post #60</a>
	                </div>
	            </div>
              <div id="likers-container-365119" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="365119"
                     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 #60"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/69023/load_more?page=7">Load more posts (14 remaining)</a>
</div></template></turbo-stream>