v4: what comes into a live list goes where its date puts it — a dump edited into a category stayed out of the index's feed of it until a reload, and a dump or a playlist made public went on top of the others' lists as if just posted. The index's feed now takes a dump edited into its scope, and orders the dumps that arrive by date, as the server pages them; a created playlist goes by date in the profile's and /playlists' lists, a new one first as before. Both use withByDate (utils/feed/pagedList.ts), which leaves an item older than every one loaded to a later page. The search runs again after a reconnection, for every page of dumps loaded, with its users and playlists; it shares refetchPages with usePagedList's resync. injectDump's doc said a private dump is never broadcast, while its poster gets it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ import { useEffect, useLayoutEffect, useRef } from "react";
|
||||
import type { Playlist } from "../../../shared/playlist.ts";
|
||||
import { useWS, useWSEvent } from "../ws/useWS.ts";
|
||||
import { insertAt, usePositionMemory } from "../feed/usePositionMemory.ts";
|
||||
import { withByDate } from "../../utils/feed/pagedList.ts";
|
||||
|
||||
/** Passed to {@link usePlaylistListSync} by each page, to fit its list. */
|
||||
export interface PlaylistListSyncOptions {
|
||||
@@ -29,12 +30,12 @@ export interface PlaylistListSyncOptions {
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the socket's playlist events to `items`, the loaded list, which
|
||||
* `setPlaylists` updates. A created playlist goes first, an updated one
|
||||
* changes in place or leaves when it turns private (unless `isOwner`), one
|
||||
* that left comes back where it was when it returns, a deleted one leaves,
|
||||
* and a playlist's `dumpCount` follows its dumps. A renamed user's playlists
|
||||
* take their new name.
|
||||
* Applies the socket's playlist events to `items`, the loaded list, newest
|
||||
* first, which `setPlaylists` updates. A created playlist goes where its date
|
||||
* puts it, first when new, an updated one changes in place or leaves when it
|
||||
* turns private (unless `isOwner`), one that left comes back where it was
|
||||
* when it returns, a deleted one leaves, and a playlist's `dumpCount` follows
|
||||
* its dumps. A renamed user's playlists take their new name.
|
||||
*/
|
||||
export function usePlaylistListSync(
|
||||
items: Playlist[],
|
||||
@@ -73,7 +74,7 @@ export function usePlaylistListSync(
|
||||
if (oldIdx !== undefined) return insertAt(prev, playlist, oldIdx);
|
||||
// An update never adds a playlist the list doesn't hold.
|
||||
if (ev.type === "updated" || noNewEntries) return prev;
|
||||
return [playlist, ...prev];
|
||||
return withByDate(prev, playlist);
|
||||
}
|
||||
|
||||
if (ev.type === "deleted") {
|
||||
|
||||
Reference in New Issue
Block a user