parityStore.js 1017 B
Newer Older
// Copyright 2015-2019 Parity Technologies (UK) Ltd.
Amaury Martiny's avatar
Amaury Martiny committed
// This file is part of Parity.
//
Amaury Martiny's avatar
Amaury Martiny committed
// SPDX-License-Identifier: BSD-3-Clause
Amaury Martiny's avatar
Amaury Martiny committed

import { observable } from 'mobx';
import Api from '@parity/api';
import { distinctUntilChanged, map } from 'rxjs/operators';
Amaury Martiny's avatar
Amaury Martiny committed
import light from '@parity/light.js';
import { timer } from 'rxjs';
import PostMessageProvider from '../utils/PostMessageProvider';
Amaury Martiny's avatar
Amaury Martiny committed

Amaury Martiny's avatar
Amaury Martiny committed
export class ParityStore {
Axel Chalon's avatar
Axel Chalon committed
  // TODO This is not working
  // api.on('connected', () => ...);
  // api.on('disconnected', () => ...);
  // So instead, we poll every 1s
Axel Chalon's avatar
Axel Chalon committed
  isApiConnected$ = timer(0, 1000).pipe(
    map(_ => Boolean(this.api && this.api.isConnected)),
Axel Chalon's avatar
Axel Chalon committed
    distinctUntilChanged()
Axel Chalon's avatar
Axel Chalon committed
  );
Axel Chalon's avatar
Axel Chalon committed

  @observable
  api = undefined;

Amaury Martiny's avatar
Amaury Martiny committed
  constructor () {
    const provider = new PostMessageProvider();
Amaury Martiny's avatar
Amaury Martiny committed

    const api = new Api(provider);
Amaury Martiny's avatar
Amaury Martiny committed

    // Initialize the light.js lib
    light.setApi(api);

    // Also set api as member for React Components to use it if needed
    this.api = api;
Amaury Martiny's avatar
Amaury Martiny committed
}

export default new ParityStore();