Optionalbelongs: (discussion: Discussion) => booleanWhether a discussion still belongs here, for columns that can tell from the store (Unread: whether it's still unread), so one can leave without asking the server.
Protected OptionalbelongsWhether a discussion still belongs here, for columns that can tell from the store (Unread: whether it's still unread), so one can leave without asking the server.
ProtectedkeyThe newest lastPostedAt on screen; checks only ask for activity after it.
ReadonlystateProtectedactiveThe column's own request, includes and all, narrowed to activity since the key: a range on an indexed column that usually matches nothing.
ProtectedadvanceRealtime only: put new items straight at the top of the column. Resolves
to how many were added, or null when this column can't (it then falls
back to checkForNew() and the "new" pill).
The column's own filters plus lastPostedAfter: a range on an indexed
column that usually matches nothing, rather than re-running the list.
ProtectedmoveDiscussionListState.addDiscussion() can't be used here: it removes the
discussion through an emitter shared by every list, so it would vanish
from the other columns and the index. This moves it within this list only.
A reply to a discussion already in the column moves it to the top straight from the payload: a new reply doesn't change which column a discussion belongs in. Anything the column doesn't hold yet (a new discussion, a reply elsewhere that may now match) only the server can place.
ProtectedprepareRuns once before the first load, for columns whose params need looking up.
Take out items the store already shows no longer belong, such as a discussion just read, in Unread. Some changes send no realtime event, reading among them, so this runs when the deck is shown again and before every check.
ProtectedremoveWithin this column; realtime's own handler takes it off every other list.
ProtectedshowsProtectedsnapshotProtectedsorts"To the top" only means something when the column is ordered by activity.
A column backed by its own DiscussionListState, so any filter the API understands (including other extensions' filters) works without the client having to decide what belongs in the column.