Commit graph

16 commits

Author SHA1 Message Date
Travis Ralston
fa83df4bde Convert dispatcher to TypeScript and replace async usage with new class
Due to TypeScript and flux's types being annoying and highly typesafe, we need an AsyncActionPayload which intentionally doesn't use the 'action' property. This looks a bit awkward, though for the rare cases we do actually fire async actions it should be fine enough.

The call signature changes slightly for async events, therefore this commit also updates its usages for async events. 

The `fire()` function is to be used in a future commit.
Remove biased comment
2020-05-13 21:07:50 -06:00
Luke Barnard
3eeef064bf Remove unused asyncId 2018-02-12 18:37:54 +00:00
lukebarnard
38de8a129b Add transaction capability to asyncActions
for relating pending/success/failure actions. Particularly useful for mapping
a failure to a pending action to roll back any optimistic updates.
2018-01-25 21:45:21 +01:00
lukebarnard
16c13fb079 Replace TagPanel react-dnd with react-beautiful-dnd
This new library handles the simple case of an ordered vertical
(or horizontal) list of items that can be reordered.

It provides animations, handles positioning of items mid-drag
and exposes a much simpler API to react-dnd (with a slight loss
of potential function, but we don't need this flexibility here
anyway).

Apart from this, TagOrderStore had to be changed in a highly
coupled way, but arguably for the better. Instead of being
updated incrementally every time an item is dragged over
another and having a separate "commit" action, the
asyncronous action `moveTag` is used to reposition the tag in
the list and both dispatch an optimistic update and carry out
the request as before. (The MatrixActions.accountData is still
used to indicate a successful reordering of tags).

The view is updated instantly, in an animated way, and this
is handled at the layer "above" React by the DND library.
2018-01-15 18:12:27 +00:00
Luke Barnard
629cd13319 Even better docs 2017-12-13 18:28:43 +00:00
Luke Barnard
6b02f59fb7 Spelling 2017-12-13 17:32:46 +00:00
lukebarnard
5de0559192 Adjust actionCreators doc 2017-12-13 10:39:45 +00:00
lukebarnard
d5534a9ece Copyright 2017-12-13 10:17:38 +00:00
Luke Barnard
13925db251 Refactor to allow dispatching of two kinds of Actions
They are:
 1. The existing type of Action, Objects with an `action` type.
 1. Asyncronous Actions, functions that accept a `dispatch` argument, which can be used to dispatch Actions asyncronously.
2017-12-12 17:32:43 +00:00
Luke Barnard
60d8ebb914 Refactor MatrixActions to something much easier to grok. 2017-12-12 16:05:18 +00:00
Luke Barnard
991ea4ebe5 Fix a few bugs with TagOrderStore:
- Have TagOrderStore listen for MatrixSync actions so that it can initialise
   tag ordering state.
 - Expose an empty list until the client has done its first sync and has
   fetched list of joined groups
2017-12-11 17:17:05 +00:00
Luke Barnard
df88b71dbb Comment typo 2017-12-08 16:47:52 +00:00
Luke Barnard
53e7232a97 Linting 2017-12-08 11:08:57 +00:00
Luke Barnard
31a52c15bd Fix bug with removing matrix listeners 2017-12-08 10:55:29 +00:00
Luke Barnard
12515441cd Handle accountData events from TagOrderStore
This introduces a generic way to register certain events emitted by
the js-sdk as those that should be propagated through as dispatched
actions.

This allows the store to treat the js-sdk as the "Server" in the
Flux data flow model. It also allows for stores to not be aware
specifically of the matrix client if they are only reading from it.
2017-12-08 10:05:18 +00:00
Luke Barnard
ee6df105fe Introduce action creators
These can be used to dispatch actions immediately, or after some asynchronous
work has been done. Also, create GroupActions.fetchJoinedGroups as an example.

The concept of async action creators can be used in the following cases:
 - stores or views that do async work, dispatching based on the results
 - actions that have complicated payloads, would make more sense as functions
   with documentation that dispatch created actions.
2017-12-07 14:17:32 +00:00