From 0d20b21ee8dfbf21a34702b80dc08dd8459c4924 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 7 Nov 2016 18:25:58 +0100 Subject: [PATCH] Backporting to beta (#3239) * Fixed some typos (#3236) * Add store for dapps state (#3211) * Add mobx * Use mobx store for dapps * Cleanup hidden reads * Remove (now) unused hidden.js * _ denotes internal functions * s/visibleApps/visible/ * AddDapps now use the mobx store as well * Move modalOpen state to store * Simplify * Complete master merge * Remove extra indirection * Remove unneeded check * Readability improvements * Remove final debug info * Load network apps manifests as contentHash (no coding) (#3235) * Add mobx * Use mobx store for dapps * Cleanup hidden reads * Remove (now) unused hidden.js * _ denotes internal functions * s/visibleApps/visible/ * AddDapps now use the mobx store as well * Move modalOpen state to store * Simplify * Complete master merge * Remove extra indirection * Remove unneeded check * Readability improvements * Remove final debug info * Load network manifests from the network * Swallow manifest errors * introduce fetchManifest * Rename cli and config options signer->ui (#3232) * rename options signer->ui * rename config signer->ui Former-commit-id: f4c4934831f80f9217ff4e6afcaa95cdd41caf45 --- js/package.json | 5 +- js/src/contracts/dappreg.js | 4 + js/src/views/Dapp/dapp.js | 53 +---- js/src/views/Dapps/AddDapps/AddDapps.js | 53 +++-- js/src/views/Dapps/Summary/summary.js | 19 +- js/src/views/Dapps/dapps.js | 119 ++--------- js/src/views/Dapps/dappsStore.js | 256 ++++++++++++++++++++++++ js/src/views/Dapps/hidden.js | 35 ---- js/src/views/Dapps/registry.js | 151 -------------- js/src/views/Settings/Proxy/proxy.js | 2 +- js/src/views/Settings/Views/defaults.js | 2 +- js/src/views/Settings/Views/views.js | 2 +- parity/cli/config.full.toml | 2 +- parity/cli/config.toml | 2 +- parity/cli/mod.rs | 42 ++-- parity/cli/usage.txt | 31 +-- parity/configuration.rs | 54 ++--- parity/run.rs | 4 +- parity/signer.rs | 2 +- 19 files changed, 403 insertions(+), 435 deletions(-) create mode 100644 js/src/views/Dapps/dappsStore.js delete mode 100644 js/src/views/Dapps/hidden.js delete mode 100644 js/src/views/Dapps/registry.js diff --git a/js/package.json b/js/package.json index 7f8e0f9cf..45483898c 100644 --- a/js/package.json +++ b/js/package.json @@ -44,7 +44,7 @@ "devDependencies": { "babel-cli": "^6.10.1", "babel-core": "^6.10.4", - "babel-eslint": "^6.1.2", + "babel-eslint": "^7.1.0", "babel-loader": "^6.2.3", "babel-plugin-lodash": "^3.2.2", "babel-plugin-transform-class-properties": "^6.11.5", @@ -126,6 +126,9 @@ "marked": "^0.3.6", "material-ui": "^0.16.1", "material-ui-chip-input": "^0.8.0", + "mobx": "^2.6.1", + "mobx-react": "^3.5.8", + "mobx-react-devtools": "^4.2.9", "moment": "^2.14.1", "qs": "^6.3.0", "react": "^15.2.1", diff --git a/js/src/contracts/dappreg.js b/js/src/contracts/dappreg.js index 5272f6561..ae982af56 100644 --- a/js/src/contracts/dappreg.js +++ b/js/src/contracts/dappreg.js @@ -57,4 +57,8 @@ export default class DappReg { getContent (id) { return this.meta(id, 'CONTENT'); } + + getManifest (id) { + return this.meta(id, 'MANIFEST'); + } } diff --git a/js/src/views/Dapp/dapp.js b/js/src/views/Dapp/dapp.js index 7f5f36d1d..399d7b125 100644 --- a/js/src/views/Dapp/dapp.js +++ b/js/src/views/Dapp/dapp.js @@ -15,12 +15,13 @@ // along with Parity. If not, see . import React, { Component, PropTypes } from 'react'; +import { observer } from 'mobx-react'; -import Contracts from '../../contracts'; -import { fetchAvailable } from '../Dapps/registry'; +import DappsStore from '../Dapps/dappsStore'; import styles from './dapp.css'; +@observer export default class Dapp extends Component { static contextTypes = { api: PropTypes.object.isRequired @@ -30,17 +31,12 @@ export default class Dapp extends Component { params: PropTypes.object }; - state = { - app: null - } - - componentWillMount () { - this.lookup(); - } + store = new DappsStore(this.context.api); render () { - const { app } = this.state; const { dappsUrl } = this.context.api; + const { id } = this.props.params; + const app = this.store.apps.find((app) => app.id === id); if (!app) { return null; @@ -48,12 +44,6 @@ export default class Dapp extends Component { let src = null; switch (app.type) { - case 'builtin': - const dapphost = process.env.NODE_ENV === 'production' && !app.secure - ? `${dappsUrl}/ui` - : ''; - src = `${dapphost}/${app.url}.html`; - break; case 'local': src = `${dappsUrl}/${app.id}/`; break; @@ -61,7 +51,10 @@ export default class Dapp extends Component { src = `${dappsUrl}/${app.contentHash}/`; break; default: - console.error('unknown type', app.type); + const dapphost = process.env.NODE_ENV === 'production' && !app.secure + ? `${dappsUrl}/ui` + : ''; + src = `${dapphost}/${app.url}.html`; break; } @@ -76,30 +69,4 @@ export default class Dapp extends Component { ); } - - lookup () { - const { api } = this.context; - const { id } = this.props.params; - const { dappReg } = Contracts.get(); - - fetchAvailable(api) - .then((available) => { - return available.find((app) => app.id === id); - }) - .then((app) => { - if (app.type !== 'network') { - return app; - } - - return dappReg - .getContent(app.id) - .then((contentHash) => { - app.contentHash = api.util.bytesToHex(contentHash).substr(2); - return app; - }); - }) - .then((app) => { - this.setState({ app }); - }); - } } diff --git a/js/src/views/Dapps/AddDapps/AddDapps.js b/js/src/views/Dapps/AddDapps/AddDapps.js index 208a65004..38bb64792 100644 --- a/js/src/views/Dapps/AddDapps/AddDapps.js +++ b/js/src/views/Dapps/AddDapps/AddDapps.js @@ -15,6 +15,7 @@ // along with Parity. If not, see . import React, { Component, PropTypes } from 'react'; +import { observer } from 'mobx-react'; import DoneIcon from 'material-ui/svg-icons/action/done'; import { List, ListItem } from 'material-ui/List'; import Checkbox from 'material-ui/Checkbox'; @@ -23,57 +24,67 @@ import { Modal, Button } from '../../../ui'; import styles from './AddDapps.css'; +@observer export default class AddDapps extends Component { static propTypes = { - available: PropTypes.array.isRequired, - hidden: PropTypes.array.isRequired, - open: PropTypes.bool.isRequired, - onHideApp: PropTypes.func.isRequired, - onShowApp: PropTypes.func.isRequired, - onClose: PropTypes.func.isRequired + store: PropTypes.object.isRequired }; render () { - const { onClose, open, available } = this.props; + const { store } = this.props; + + if (!store.modalOpen) { + return null; + } return ( } /> +