// Copyright 2015-2017 Parity Technologies (UK) Ltd.
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see .
import { observer } from 'mobx-react';
import React, { Component } from 'react';
import WatchesStore from './watches.store';
import styles from './watches.css';
@observer
export default class Watches extends Component {
watchesStore = WatchesStore.get();
render () {
return (
{ this.renderAddWatch() }
{ this.renderWatches() }
);
}
renderAddForm () {
const { showAdd } = this.watchesStore;
if (!showAdd) {
return null;
}
return (
);
}
renderAddWatch () {
const { showAdd } = this.watchesStore;
const classes = [ styles.add ];
if (showAdd) {
classes.push(styles.selected);
}
return (
{ this.renderAddForm() }
+
);
}
renderWatches () {
const { names } = this.watchesStore;
return names.map((name) => {
const { result, error } = this.watchesStore.get(name);
const classes = [ styles.watch ];
const resultStr = error
? error.toString()
: this.toString(result);
const onClick = () => this.handleRemoveWatch(name);
if (error) {
classes.push(styles.error);
}
return (
✖
{ name }
{ resultStr.toString() }
);
});
}
handleAddFunctionChange = (event) => {
const { value } = event.target;
this.watchesStore.updateAddFunction(value);
};
handleAddContextChange = (event) => {
const { value } = event.target;
this.watchesStore.updateAddContext(value);
};
handleAddNameChange = (event) => {
const { value } = event.target;
this.watchesStore.updateAddName(value);
};
handleAddWatch = () => {
this.watchesStore.addWatch();
};
handleRemoveWatch = (name) => {
this.watchesStore.remove(name);
};
handleToggleAdd = () => {
this.watchesStore.toggleAdd();
};
toString (result) {
if (result === undefined) {
return 'undefined';
}
if (result === null) {
return 'null';
}
if (typeof result.toFormat === 'function') {
return result.toFormat();
}
if (typeof result.toString === 'function') {
return result.toString();
}
return result;
}
}