Co-authored-by: github-merge-queue <118344674+github-merge-queue@users.noreply.github.com> Co-authored-by: github-merge-queue <github-merge-queue@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Florian Duros <florian.duros@ormaz.fr> Co-authored-by: Kim Brose <kim.brose@nordeck.net> Co-authored-by: Florian Duros <florianduros@element.io> Co-authored-by: R Midhun Suresh <hi@midhun.dev> Co-authored-by: dbkr <986903+dbkr@users.noreply.github.com> Co-authored-by: ElementRobot <releases@riot.im> Co-authored-by: dbkr <dbkr@users.noreply.github.com> Co-authored-by: David Baker <dbkr@users.noreply.github.com> Co-authored-by: Michael Telatynski <7t3chguy@gmail.com> Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Co-authored-by: David Langley <davidl@element.io> Co-authored-by: Michael Weimann <michaelw@matrix.org> Co-authored-by: Timshel <Timshel@users.noreply.github.com> Co-authored-by: Sahil Silare <32628578+sahil9001@users.noreply.github.com> Co-authored-by: Will Hunt <will@half-shot.uk> Co-authored-by: Hubert Chathi <hubert@uhoreg.ca> Co-authored-by: Andrew Ferrazzutti <andrewf@element.io> Co-authored-by: Robin <robin@robin.town> Co-authored-by: Tulir Asokan <tulir@maunium.net>
2.1 KiB
Local echo (developer docs)
The React SDK provides some local echo functionality to allow for components to do something
quickly and fall back when it fails. This is all available in the local-echo
directory within
stores
.
Echo is handled in EchoChambers, with GenericEchoChamber
being the base implementation for all
chambers. The EchoChamber
class is provided as semantic access to a GenericEchoChamber
implementation, such as the RoomEchoChamber
(which handles echoable details of a room).
Anything that can be locally echoed will be provided by the GenericEchoChamber
implementation.
The echo chamber will also need to deal with external changes, and has full control over whether
or not something has successfully been echoed.
An EchoContext
is provided to echo chambers (usually with a matching type: RoomEchoContext
gets provided to a RoomEchoChamber
for example) with details about their intended area of
effect, as well as manage EchoTransaction
s. An EchoTransaction
is simply a unit of work that
needs to be locally echoed.
The EchoStore
manages echo chamber instances, builds contexts, and is generally less semantically
accessible than the EchoChamber
class. For separation of concerns, and to try and keep things
tidy, this is an intentional design decision.
Note: The local echo stack uses a "whenable" pattern, which is similar to thenables and
EventEmitter
. Whenables are ways of actioning a changing condition without having to deal
with listeners being torn down. Once the reference count of the Whenable causes garbage collection,
the Whenable's listeners will also be torn down. This is accelerated by the IDestroyable
interface
usage.
Audit functionality
The UI supports a "Server isn't responding" dialog which includes a partial audit log-like
structure to it. This is partially the reason for added complexity of EchoTransaction
s
and EchoContext
s - this information feeds the UI states which then provide direct retry
mechanisms.
The EchoStore
is responsible for ensuring that the appropriate non-urgent toast (lower left)
is set up, where the dialog then drives through the contexts and transactions.