functional application without amazon update
This commit is contained in:
174
web/src/App.js
174
web/src/App.js
@@ -2,86 +2,152 @@ import React, { Component } from 'react';
|
||||
import './css/App.css';
|
||||
import IntentList from './components/IntentList';
|
||||
import IntentDetails from './components/IntentDetails';
|
||||
import LaunchRequest from './components/LaunchRequest';
|
||||
|
||||
import {getAllIntents, deleteIntent, updateIntent} from './lib/api'
|
||||
import {getSkill, updateSkill} from './lib/api'
|
||||
|
||||
class App extends Component {
|
||||
|
||||
constructor(props){
|
||||
super(props);
|
||||
|
||||
this.state={allIntents:[], selectedIntent: {questions:[''],answer:''}, selectedIndex:-1};
|
||||
this.state={_id:'5a22ffd36ce046c749739453',
|
||||
skillID:'',
|
||||
invocationName:'Saburly',
|
||||
invocationAnswer:'We are saburly',
|
||||
allIntents:[],
|
||||
selectedIntent: {intentName:'',questions:[''],answer:''},
|
||||
selectedIndex:-1,
|
||||
launchRequest:false};
|
||||
|
||||
getAllIntents().then(l=> l.text()).then(result=>{
|
||||
this.setState({allIntents: JSON.parse(result), selectedIntent: this.state.selectedIntent})
|
||||
getSkill(this.state._id).then(l=> l.text()).then(result=>{
|
||||
let jResult = JSON.parse(result)[0];
|
||||
if (jResult===undefined) return;
|
||||
this.setState({ skillID:jResult.skillID, invocationName: jResult.invocationName,
|
||||
invocationAnswer: jResult.invocationAnswer,
|
||||
allIntents: jResult.intents})
|
||||
})
|
||||
|
||||
this.handleIntentClick = this.handleIntentClick.bind(this);
|
||||
this.handleLaunchRequestClick = this.handleLaunchRequestClick.bind(this);
|
||||
this.handleDeleteIntentClick = this.handleDeleteIntentClick.bind(this);
|
||||
this.handleSaveIntentClick = this.handleSaveIntentClick.bind(this);
|
||||
this.handleAddIntentClick = this.handleAddIntentClick.bind(this);
|
||||
this.handleSaveLaunchRequestClick = this.handleSaveLaunchRequestClick.bind(this);
|
||||
this.createSkill = this.createSkill.bind(this);
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="App">
|
||||
<div className="App-header">
|
||||
<h1> Tell All </h1>
|
||||
if(this.state.launchRequest){
|
||||
return (
|
||||
<div className="App">
|
||||
<div className="App-header">
|
||||
<h1> Tell All </h1>
|
||||
</div>
|
||||
<IntentList allIntents={this.state.allIntents}
|
||||
onLaunchRequestClick={this.handleLaunchRequestClick}
|
||||
onIntentClick={this.handleIntentClick}
|
||||
onAddIntentClick={this.handleAddIntentClick}
|
||||
selectedIndex={this.state.selectedIndex}>
|
||||
</IntentList>
|
||||
<LaunchRequest invocationName={this.state.invocationName}
|
||||
invocationAnswer={this.state.invocationAnswer}
|
||||
onSaveClick={this.handleSaveLaunchRequestClick}> </LaunchRequest>
|
||||
</div>
|
||||
<IntentList allIntents={this.state.allIntents}
|
||||
onIntentClick={this.handleIntentClick}
|
||||
onAddIntentClick={this.handleAddIntentClick}
|
||||
selectedIndex={this.state.selectedIndex}>
|
||||
</IntentList>
|
||||
<IntentDetails selectedIntent={this.state.selectedIntent}
|
||||
onDeleteIntentClick={this.handleDeleteIntentClick}
|
||||
onSaveIntentClick={this.handleSaveIntentClick}>
|
||||
</IntentDetails>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
handleIntentClick(selectedIntent, index){
|
||||
this.setState({selectedIntent:selectedIntent, selectedIndex: index});
|
||||
}
|
||||
|
||||
handleDeleteIntentClick(selectedIntent){
|
||||
if (selectedIntent._id){
|
||||
deleteIntent(selectedIntent._id).then(l=>l.text()).then(result=>{
|
||||
if (JSON.parse(result).n===1){
|
||||
let id = this.state.allIntents.indexOf(selectedIntent);
|
||||
if (id!==-1){
|
||||
this.state.allIntents.splice(id,1);
|
||||
this.setState({allIntents: this.state.allIntents, selectedIntent: {questions:[''],answer:''}});
|
||||
}else{
|
||||
alert("Error");
|
||||
}
|
||||
}else{
|
||||
alert("Error");
|
||||
}
|
||||
});
|
||||
);
|
||||
}else{
|
||||
return (
|
||||
<div className="App">
|
||||
<div className="App-header">
|
||||
<h1> Tell All </h1>
|
||||
</div>
|
||||
<IntentList allIntents={this.state.allIntents}
|
||||
onLaunchRequestClick={this.handleLaunchRequestClick}
|
||||
onIntentClick={this.handleIntentClick}
|
||||
onAddIntentClick={this.handleAddIntentClick}
|
||||
selectedIndex={this.state.selectedIndex}>
|
||||
</IntentList>
|
||||
<IntentDetails selectedIntent={this.state.selectedIntent}
|
||||
onDeleteIntentClick={this.handleDeleteIntentClick}
|
||||
onSaveIntentClick={this.handleSaveIntentClick}>
|
||||
</IntentDetails>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
handleSaveIntentClick(selectedIntent){
|
||||
updateIntent(selectedIntent._id, selectedIntent).then(l=>l.text()).then(result=>{
|
||||
if (JSON.parse(result).nModified===1){
|
||||
this.state.allIntents.map((intent,index)=>{
|
||||
if (intent._id === selectedIntent._id){
|
||||
let newAllIntents = this.state.allIntents;
|
||||
newAllIntents[index] = selectedIntent;
|
||||
this.setState({allIntents: newAllIntents, selectedIntent: selectedIntent});
|
||||
return 1;
|
||||
}
|
||||
createSkill(intents, name, answer){
|
||||
return {
|
||||
_id: this.state._id,
|
||||
skillID: this.state.skillID,
|
||||
intents: intents,
|
||||
invocationName: (name===undefined) ? this.state.invocationName : name,
|
||||
invocationAnswer: (answer===undefined)? this.state.invocationAnswer: answer
|
||||
};
|
||||
}
|
||||
|
||||
handleIntentClick(selectedIntent, index){
|
||||
this.setState({selectedIntent:selectedIntent, selectedIndex: index, launchRequest:false});
|
||||
}
|
||||
|
||||
handleLaunchRequestClick(){
|
||||
this.setState({selectedIndex: -2, launchRequest:true});
|
||||
}
|
||||
|
||||
handleSaveLaunchRequestClick(name, answer){
|
||||
this.setState({invocationName: name, invocationAnswer: answer});
|
||||
try{
|
||||
updateSkill(this.createSkill(this.state.allIntents,name,answer)).then(l=>l.text()).then(result=>{
|
||||
if (JSON.parse(result).nModified!==1)
|
||||
alert("Error");
|
||||
});
|
||||
}catch(e){
|
||||
alert("exception");
|
||||
}
|
||||
}
|
||||
|
||||
handleDeleteIntentClick(selectedIntent){
|
||||
let id = this.state.allIntents.indexOf(selectedIntent);
|
||||
if (id!==-1){
|
||||
try{
|
||||
//I don't like this, state in database is different than component state, for some time
|
||||
//TODO : move database operation in componentWillUpdate or componentDidUpdate
|
||||
let newAllIntents = this.state.allIntents;
|
||||
newAllIntents.splice(id,1);
|
||||
this.setState({allIntents: newAllIntents, selectedIntent: {intentName:'', questions:[''],answer:''}});
|
||||
updateSkill(this.createSkill(newAllIntents)).then(l=>l.text()).then(result=>{
|
||||
if (JSON.parse(result).nModified!==1)
|
||||
alert("Error");
|
||||
});
|
||||
}else{
|
||||
alert("error - update went wrong");
|
||||
}catch(e){
|
||||
alert("exception");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
handleSaveIntentClick(selectedIntent){
|
||||
let newAllIntents = this.state.allIntents;
|
||||
if (this.state.selectedIndex === -1){
|
||||
//new intent
|
||||
newAllIntents.push(selectedIntent);
|
||||
this.setState({allIntents: newAllIntents, selectedIntent: selectedIntent, selectedIndex: newAllIntents.length-1});
|
||||
}else{
|
||||
newAllIntents[this.state.selectedIndex] = selectedIntent;
|
||||
this.setState({allIntents: newAllIntents, selectedIntent: selectedIntent});
|
||||
}
|
||||
try{
|
||||
updateSkill(this.createSkill(newAllIntents)).then(l=>l.text()).then(result=>{
|
||||
if (JSON.parse(result).nModified!==1)
|
||||
alert("Error");
|
||||
});
|
||||
}catch(e){
|
||||
alert("exception");
|
||||
}
|
||||
}
|
||||
|
||||
handleAddIntentClick(){
|
||||
this.setState({allIntents: this.state.allIntents, selectedIntent: {questions:[''], answer:''}});
|
||||
this.setState({allIntents: this.state.allIntents, selectedIndex: -1,launchRequest:false,selectedIntent: {intentName:'',questions:[''], answer:''}});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user