mirror of https://gitlab.com/ecentrics/concordia
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.7 KiB
103 lines
3.7 KiB
import { drizzleConnect } from 'drizzle-react'
|
|
import React, { Component } from 'react'
|
|
import PropTypes from 'prop-types'
|
|
import AuthWrapperContainer from './AuthWrapperContainer'
|
|
|
|
const contract = "Forum";
|
|
const signUpMethod = "signUp";
|
|
const updateUsernameMethod ="updateUsername";
|
|
|
|
class UsernameFormContainer extends Component {
|
|
constructor(props, context) {
|
|
super(props);
|
|
|
|
this.handleSignUp = this.handleSignUp.bind(this);
|
|
this.handleSignUpInputChange = this.handleSignUpInputChange.bind(this);
|
|
|
|
this.handleUsernameUpdate = this.handleUsernameUpdate.bind(this);
|
|
this.handleUpdateUsernameInputChange = this.handleUpdateUsernameInputChange.bind(this);
|
|
|
|
this.contracts = context.drizzle.contracts;
|
|
|
|
// Get the contract ABI
|
|
const abi = this.contracts[contract].abi;
|
|
|
|
|
|
this.inputs = {signUp:[], updateUsername:[]};
|
|
let initialState = {signUp:{}, updateUsername:{}};
|
|
|
|
// Iterate over abi for correct function.
|
|
for (let i = 0; i < abi.length; i++) {
|
|
if ((abi[i].name === signUpMethod)) {
|
|
this.inputs.signUp = abi[i].inputs;
|
|
|
|
for (let i = 0; i < this.inputs.signUp.length; i++) {
|
|
initialState.signUp[this.inputs.signUp[i].name] = '';
|
|
}
|
|
|
|
}
|
|
else if ((abi[i].name === updateUsernameMethod)) {
|
|
this.inputs.updateUsername = abi[i].inputs;
|
|
|
|
for (let i = 0; i < this.inputs.updateUsername.length; i++) {
|
|
initialState.updateUsername[this.inputs.updateUsername[i].name] = '';
|
|
}
|
|
|
|
}
|
|
}
|
|
console.dir(initialState);
|
|
this.state = initialState;
|
|
}
|
|
|
|
handleSignUp() {
|
|
this.contracts[contract].methods[signUpMethod].cacheSend(...Object.values(this.state.signUp));
|
|
}
|
|
|
|
handleUsernameUpdate() {
|
|
this.contracts[contract].methods[updateUsernameMethod].cacheSend(...Object.values(this.state.updateUsername));
|
|
}
|
|
|
|
handleSignUpInputChange(event) {
|
|
this.setState({ signUp: { ...this.state.signUp, [event.target.name]: event.target.value} });
|
|
}
|
|
|
|
handleUpdateUsernameInputChange(event) {
|
|
this.setState({ updateUsername: { ...this.state.updateUsername, [event.target.name]: event.target.value} });
|
|
}
|
|
|
|
|
|
render() {
|
|
let signUp = this.inputs.signUp[0].name; //username
|
|
let updateUsername = this.inputs.updateUsername[0].name; //newUsername
|
|
return (
|
|
<AuthWrapperContainer
|
|
authRender={
|
|
<form className="pure-form pure-form-stacked">
|
|
<input key={updateUsername} name={updateUsername} type="text" value={this.state.updateUsername.newUsername} placeholder="Username" onChange={this.handleUpdateUsernameInputChange} />
|
|
<button key="submit" className="pure-button" type="button" onClick={this.handleUsernameUpdate}>Update</button>
|
|
</form>
|
|
}
|
|
guestRender={
|
|
<form className="pure-form pure-form-stacked">
|
|
<input key={signUp} name={signUp} type="text" value={this.state.signUp.username} placeholder="Username" onChange={this.handleSignUpInputChange} />
|
|
<button key="submit" className="pure-button" type="button" onClick={this.handleSignUp}>Sign Up</button>
|
|
</form>
|
|
}
|
|
/>
|
|
|
|
|
|
)
|
|
}
|
|
}
|
|
|
|
UsernameFormContainer.contextTypes = {
|
|
drizzle: PropTypes.object
|
|
};
|
|
|
|
const mapStateToProps = state => {
|
|
return {
|
|
contracts: state.contracts
|
|
}
|
|
};
|
|
|
|
export default drizzleConnect(UsernameFormContainer, mapStateToProps)
|