* Support the mark as unread flag
* Add mark as unread menu option
and make clering notifications also clear the unread flag
* Mark as read on viewing room
* Tests
* Remove random import
* Don't show mark as unread for historical rooms
* Fix tests & add test for menu option
* Test RoomNotificationState updates on unread flag change
* Test it doesn't update on other room account data
* New icon for mark as unread
* Add analytics events for mark as (un)read
* Bump to new analytics-events package
* Read from both stable & unstable prefixes
* Cast to boolean before checking
to avoid setting state unnecessarily
* Typo
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Doc external interface (and the rest at the same time)
* Doc & rename unread market set function
* Doc const exports
* Remove listener on destroy
* Add playwright test
* Clearer language, hopefully
* Move comment
* Add reference to the MSC
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Expand on function doc
* Remove empty beforeEach
* Rejig badge logic a little and add tests
* Fix basdges to not display dots in room sublists again
and hopefully rename the forceDot option to something that better
indicates what it does, and add tests.
* Remove duplicate license header (?)
* Missing word (several times...)
* Incorporate PR suggestion on badge type switch
* Better description in doc comment
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Update other doc comments in the same way
* Remove duplicate quote
* Use quotes consistently
* Better test name
* c+p fail
---------
Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com>
* Add `Thread Activity centre` labs flag
* Rename translation string
* Update supportedLevels
* Fix labs subsection test
* Update Threads Activity Centre label
* Make threads activity centre labs flag split out unread counts
Just shows notif & unread counts for main thread if the TAC is enabled.
* Fix tests
* Simpler fix
* Pass in & cache the status of the TAC labs flag
* Pass includeThreads as setting to doesRoomHaveUnreadMessages too
* Fix tests
---------
Co-authored-by: David Baker <dbkr@users.noreply.github.com>
* Don't reference the notification levels by colour
We're about to change what colours they are so either we'd have to rename
a bunch of constants. We may as well make things not reference what colour
anything is in the actual UI. Hopefully these constants are clear enough.
* Rename NotificationColor -> NotificationLevel
* Red -> Highlight
* Grey -> Notification
* Bold -> Activity
* Anywhere else that calls it 'color' -> 'level'
Also fixes some weird mixes of US & UK English.
It turns out this is referenced in... quite a lot of places, so this is
quite a large PR. It can't really be much smaller, sorry.
* One test rename & some hiding due to ts-ignore
* More hiding behind ts-ignore
* Damn you, @ts-ignore...
* Fix test CSS values
* Missed some colour -> level
Co-authored-by: Florian Duros <florianduros@element.io>
* Change other instances of variables renamed in suggestion
* Update new test for renames
---------
Co-authored-by: Florian Duros <florianduros@element.io>
* Switch to importing TypedEventEmitter from main js-sdk export
* Switch to importing js-sdk/matrix in cypress
* Remove duplicated imports
* Fix lint:js-fix to run prettier last otherwise ESLint --fix may cause a mess
* Add lint rule
* Switch to importing models/Room from main js-sdk export
* Fix cypress-axe import
* Fix more imports
* Fix cypress-axe import
* Fix duplicated lint rule
* muted-to-the-bottom POC
* split muted rooms in natural algorithm
* add previous event to account data dispatch
* add muted to notification state
* sort muted rooms to the bottom
* only split muted rooms when sorting is RECENT
* remove debugs
* use RoomNotifState better
* add default notifications test util
* test getChangedOverrideRoomPushRules
* remove file
* test roomudpate in roomliststore
* unit test ImportanceAlgorithm
* strict fixes
* test recent x importance with muted rooms
* unit test NaturalAlgorithm
* test naturalalgorithm with muted rooms
* strict fixes
* comments
* add push rules test utility
* strict fixes
* more strict
* tidy comment
* document previousevent on account data dispatch event
* simplify (?) room mute rule utilities, comments
* remove debug
* Add tests for unread notification facilities
Add some tests to guarantee some consistency in `useUnreadNotifications` and
`RoomNotificationState`.
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
* Add RoomNotifs#determineUnreadState
Intended as a singular replacement for the divergent implementations before.
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
* Unify room unread state determination
Have both the class-based facility and the hook use the new unified logic in
`RoomNotifs#determineUnreadState`.
Addresses https://github.com/vector-im/element-web/issues/24229
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
---------
Signed-off-by: Clark Fischer <clark.fischer@gmail.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
Pass an explicit client into `RoomNotifs.getRoomNotifsState`, rather than
relying on `MatrixClientPeg`. This resolves a race condition where we have a
component which thinks it is using a particular component, but
`MatrixClientPeg` has been updated.
* Listen for and update the notification state when they change
* Remove unnecessary listeners: justify each listener left remaining
* Update removeListener too
Previously we were creating a notification state whenever we needed one, which was leading to hundreds of listeners even on a small account. To ease the burden, and reduce the load of having to wake so many listeners, we now record a single listener for each tag ID and room combination.
This commit also introduces a number of utilities to make future notification work a bit of an easier transition, such as the `isX` and `hasX` getters on the new NotificationState abstract class. Similarly, "snapshots" have been added to reduce code duplication between different kinds of states checking for updates.
The ListNotificationState is now heavily tied into the store which offers it to help reuse the cache of room notification states.
Fixes https://github.com/vector-im/riot-web/issues/14370