diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-14 21:34:49 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-14 21:34:49 -0800 |
| commit | 6e28d1530aa08b878f5082bbcd85a95f84f830e8 (patch) | |
| tree | 7f6b1fb3a74166d97f2ba74f50d3cd787ec163dd /frontend/coverage/src/components/FeedItems.tsx.html | |
| parent | 5e2b1b2de36fc63cfa677705388f5701c62ee138 (diff) | |
| download | neko-6e28d1530aa08b878f5082bbcd85a95f84f830e8.tar.gz neko-6e28d1530aa08b878f5082bbcd85a95f84f830e8.tar.bz2 neko-6e28d1530aa08b878f5082bbcd85a95f84f830e8.zip | |
chore: update build artifacts and finalize test improvements
Diffstat (limited to 'frontend/coverage/src/components/FeedItems.tsx.html')
| -rw-r--r-- | frontend/coverage/src/components/FeedItems.tsx.html | 254 |
1 files changed, 154 insertions, 100 deletions
diff --git a/frontend/coverage/src/components/FeedItems.tsx.html b/frontend/coverage/src/components/FeedItems.tsx.html index f6b7493..9811743 100644 --- a/frontend/coverage/src/components/FeedItems.tsx.html +++ b/frontend/coverage/src/components/FeedItems.tsx.html @@ -23,30 +23,30 @@ <div class='clearfix'> <div class='fl pad1y space-right2'> - <span class="strong">88.97% </span> + <span class="strong">89.23% </span> <span class="quiet">Statements</span> - <span class='fraction'>113/127</span> + <span class='fraction'>116/130</span> </div> <div class='fl pad1y space-right2'> - <span class="strong">75.3% </span> + <span class="strong">76.19% </span> <span class="quiet">Branches</span> - <span class='fraction'>61/81</span> + <span class='fraction'>64/84</span> </div> <div class='fl pad1y space-right2'> - <span class="strong">86.2% </span> + <span class="strong">87.09% </span> <span class="quiet">Functions</span> - <span class='fraction'>25/29</span> + <span class='fraction'>27/31</span> </div> <div class='fl pad1y space-right2'> - <span class="strong">88.69% </span> + <span class="strong">89.07% </span> <span class="quiet">Lines</span> - <span class='fraction'>102/115</span> + <span class='fraction'>106/119</span> </div> @@ -296,7 +296,25 @@ <a name='L231'></a><a href='#L231'>231</a> <a name='L232'></a><a href='#L232'>232</a> <a name='L233'></a><a href='#L233'>233</a> -<a name='L234'></a><a href='#L234'>234</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> +<a name='L234'></a><a href='#L234'>234</a> +<a name='L235'></a><a href='#L235'>235</a> +<a name='L236'></a><a href='#L236'>236</a> +<a name='L237'></a><a href='#L237'>237</a> +<a name='L238'></a><a href='#L238'>238</a> +<a name='L239'></a><a href='#L239'>239</a> +<a name='L240'></a><a href='#L240'>240</a> +<a name='L241'></a><a href='#L241'>241</a> +<a name='L242'></a><a href='#L242'>242</a> +<a name='L243'></a><a href='#L243'>243</a> +<a name='L244'></a><a href='#L244'>244</a> +<a name='L245'></a><a href='#L245'>245</a> +<a name='L246'></a><a href='#L246'>246</a> +<a name='L247'></a><a href='#L247'>247</a> +<a name='L248'></a><a href='#L248'>248</a> +<a name='L249'></a><a href='#L249'>249</a> +<a name='L250'></a><a href='#L250'>250</a> +<a name='L251'></a><a href='#L251'>251</a> +<a name='L252'></a><a href='#L252'>252</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> @@ -304,78 +322,78 @@ <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">27x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">36x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">3x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">8x</span> <span class="cline-any cline-yes">8x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">6x</span> +<span class="cline-any cline-yes">9x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">1x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">3x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-no"> </span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">8x</span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">11x</span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">11x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> +<span class="cline-any cline-yes">10x</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">10x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">9x</span> +<span class="cline-any cline-yes">3x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-yes">6x</span> -<span class="cline-any cline-yes">6x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">9x</span> +<span class="cline-any cline-yes">9x</span> +<span class="cline-any cline-yes">9x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1x</span> @@ -384,20 +402,21 @@ <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">7x</span> -<span class="cline-any cline-yes">7x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">8x</span> +<span class="cline-any cline-yes">8x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">5x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">36x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">3x</span> @@ -409,7 +428,7 @@ <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> +<span class="cline-any cline-yes">36x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">2x</span> @@ -421,22 +440,29 @@ <span class="cline-any cline-no"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">23x</span> -<span class="cline-any cline-yes">3x</span> +<span class="cline-any cline-yes">36x</span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">6x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">3x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">2x</span> +<span class="cline-any cline-yes">6x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-yes">5x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">5x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">5x</span> +<span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-no"> </span> <span class="cline-any cline-no"> </span> @@ -455,25 +481,19 @@ <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">23x</span> -<span class="cline-any cline-yes">23x</span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">31x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">24x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> +<span class="cline-any cline-yes">36x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">2x</span> -<span class="cline-any cline-yes">1x</span> -<span class="cline-any cline-yes">1x</span> +<span class="cline-any cline-yes">31x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-neutral"> </span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> <span class="cline-any cline-yes">1x</span> @@ -488,29 +508,45 @@ <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">24x</span> -<span class="cline-any cline-yes">15x</span> -<span class="cline-any cline-yes">15x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">1x</span> +<span class="cline-any cline-yes">1x</span> +<span class="cline-any cline-yes">1x</span> +<span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">24x</span> -<span class="cline-any cline-yes">24x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">24x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">27x</span> -<span class="cline-any cline-yes">14x</span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">31x</span> <span class="cline-any cline-neutral"> </span> -<span class="cline-any cline-yes">13x</span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">31x</span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">31x</span> +<span class="cline-any cline-yes">31x</span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">36x</span> <span class="cline-any cline-yes">21x</span> <span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">20x</span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-neutral"> </span> +<span class="cline-any cline-yes">44x</span> +<span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> <span class="cline-any cline-neutral"> </span> @@ -620,6 +656,7 @@ export default function FeedItems() { useEffect(() => { fetchItems(); setSelectedIndex(-1); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [feedId, tagName, filterFn, searchParams]); @@ -668,6 +705,13 @@ export default function FeedItems() { } scrollToItem(nextIndex); } + + // If we're now on the last item and there are more items to load, + // trigger loading them so the next 'j' press will work + if (nextIndex === items.length - 1 && hasMore && !loadingMore) { + fetchItems(String(items[items.length - 1]._id)); + } + return nextIndex; }); <span class="missing-if-branch" title="if path not taken" >I</span>} else if (e.key === 'k') { @@ -690,22 +734,16 @@ export default function FeedItems() { window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); - }, [items]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [items, hasMore, loadingMore]); useEffect(() => { - const observer = new IntersectionObserver( + // Observer for marking items as read + const itemObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { - // Infinity scroll sentinel - if (entry.target.id === 'load-more-sentinel') { - <span class="missing-if-branch" title="else path not taken" >E</span>if (entry.isIntersecting && !loadingMore && hasMore && items.length > 0) { - fetchItems(String(items[items.length - 1]._id)); - } - return; - } - // If item is not intersecting and is above the viewport, it's been scrolled past <span class="missing-if-branch" title="else path not taken" >E</span>if (!entry.isIntersecting && entry.boundingClientRect.top < 0) { const index = Number(entry.target.getAttribute('data-index')); @@ -721,15 +759,31 @@ export default function FeedItems() { { root: null, threshold: 0 } ); + // Observer for infinite scroll (less aggressive, must be fully visible) + const sentinelObserver = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + <span class="missing-if-branch" title="else path not taken" >E</span>if (entry.isIntersecting && !loadingMore && hasMore && items.length > 0) { + fetchItems(String(items[items.length - 1]._id)); + } + }); + }, + { root: null, threshold: 1.0 } + ); + items.forEach((_, index) => { const el = document.getElementById(`item-${index}`); - <span class="missing-if-branch" title="else path not taken" >E</span>if (el) observer.observe(el); + <span class="missing-if-branch" title="else path not taken" >E</span>if (el) itemObserver.observe(el); }); const sentinel = document.getElementById('load-more-sentinel'); - if (sentinel) observer.observe(sentinel); + if (sentinel) sentinelObserver.observe(sentinel); - return () => observer.disconnect(); + return () => { + itemObserver.disconnect(); + sentinelObserver.disconnect(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps }, [items, loadingMore, hasMore]); if (loading) return <div className="feed-items-loading">Loading items...</div>; @@ -769,7 +823,7 @@ export default function FeedItems() { <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> - at 2026-02-14T18:02:09.004Z + at 2026-02-15T05:30:50.842Z </div> <script src="../../prettify.js"></script> <script> |
