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
This commit is contained in:
parent
df88b71dbb
commit
991ea4ebe5
4 changed files with 70 additions and 10 deletions
|
@ -14,7 +14,10 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { createMatrixActionCreator } from './actionCreators';
|
||||
import {
|
||||
createMatrixActionCreator,
|
||||
createMatrixSyncActionCreator,
|
||||
} from './actionCreators';
|
||||
|
||||
// Events emitted from the matrixClient that we want to dispatch as actions
|
||||
// via MatrixActionCreators. See createMatrixActionCreator.
|
||||
|
@ -30,6 +33,8 @@ export default {
|
|||
this.actionCreators = REGISTERED_EVENTS.map((eventId) =>
|
||||
createMatrixActionCreator(matrixClient, eventId),
|
||||
);
|
||||
this.actionCreators.push(createMatrixSyncActionCreator(matrixClient));
|
||||
|
||||
this.actionCreatorsStop = this.actionCreators.map((ac) => ac());
|
||||
},
|
||||
|
||||
|
|
|
@ -70,3 +70,36 @@ export function createMatrixActionCreator(matrixClient, eventId) {
|
|||
};
|
||||
};
|
||||
}
|
||||
|
||||
// TODO: migrate from sync_state to MatrixSync so that more js-sdk events
|
||||
// become dispatches in the same place.
|
||||
/**
|
||||
* Create an action creator that will listen to `sync` events emitted
|
||||
* by matrixClient and dispatch a corresponding MatrixSync action. E.g:
|
||||
* {
|
||||
* action: 'MatrixSync',
|
||||
* state: 'SYNCING',
|
||||
* prevState: 'PREPARED'
|
||||
* }
|
||||
* @param {MatrixClient} matrixClient the matrix client with which to register
|
||||
* a listener.
|
||||
* @returns {function} a function that, when called, will begin to listen to
|
||||
* dispatches from matrixClient. The result from that
|
||||
* function can be called to stop listening.
|
||||
*/
|
||||
export function createMatrixSyncActionCreator(matrixClient) {
|
||||
const listener = (state, prevState) => {
|
||||
dis.dispatch({
|
||||
action: 'MatrixSync',
|
||||
state,
|
||||
prevState,
|
||||
matrixClient,
|
||||
});
|
||||
};
|
||||
return () => {
|
||||
matrixClient.on('sync', listener);
|
||||
return () => {
|
||||
matrixClient.removeListener('sync', listener);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue