2017-11-30 17:43:24 +01:00
import React , { Component } from 'react' ;
2017-12-01 11:03:48 +01:00
import { Button , SVGIcon , TextField } from 'react-md' ;
2018-01-14 01:00:35 +01:00
import '../css/components/IntentDetails.css' ;
2018-01-19 22:42:37 +01:00
import '../css/Common.css' ;
import { QUESTION _MAX _LENGTH , ANSWER _MAX _LENGTH , INTENT _NAME _MAX _LENGTH , INTENT _EXPLANATION _MAX _LENGTH } from '../config/constants' ;
2017-11-30 17:43:24 +01:00
class IntentDetails extends Component {
constructor ( props ) {
super ( props ) ;
this . state = { intent : props . selectedIntent } ;
this . addQuestion = this . addQuestion . bind ( this ) ;
this . deleteQuestion = this . deleteQuestion . bind ( this ) ;
2017-12-02 22:48:45 +01:00
this . handleQuestionEdit = this . handleQuestionEdit . bind ( this ) ;
this . handleAnswerEdit = this . handleAnswerEdit . bind ( this ) ;
this . handleIntentNameEdit = this . handleIntentNameEdit . bind ( this ) ;
2018-01-19 22:42:37 +01:00
this . handleIntentExplanationEdit = this . handleIntentExplanationEdit . bind ( this ) ;
2017-11-30 17:43:24 +01:00
}
componentWillReceiveProps ( props ) {
this . setState ( { intent : props . selectedIntent } ) ;
}
render ( ) {
return (
2018-01-14 01:00:35 +01:00
< div className = "RightPanelBox" >
2017-12-02 22:48:45 +01:00
< div className = "QuestionBox" >
2018-01-19 22:42:37 +01:00
< h5 className = "PanelSubTitle" > In introduction , Alexa will help users to ask her the right questions about your business . For Example , she will say : "To ask us about our services, say : What do you do ? " . What do you do ? is defined in question field . Alexa will use first variation of question in intro . < / h 5 >
< TextField
id = "intent explanation"
lineDirection = "center"
placeholder = "To ask us about our services, say "
className = "md-cell md-cell--bottom IntentDetailsInputBoxes"
onChange = { this . handleIntentExplanationEdit }
maxLength = { INTENT _EXPLANATION _MAX _LENGTH }
value = { this . state . intent . intentExplanation } / >
< br / >
2017-12-02 22:48:45 +01:00
< TextField
id = "intent name"
lineDirection = "center"
2018-01-16 13:38:05 +01:00
label = "Question name"
2018-01-14 01:00:35 +01:00
className = "md-cell md-cell--bottom IntentDetailsInputBoxes"
2017-12-02 22:48:45 +01:00
onChange = { this . handleIntentNameEdit }
maxLength = { INTENT _NAME _MAX _LENGTH }
value = { this . state . intent . intentName } / >
< / d i v >
2018-01-16 13:38:05 +01:00
< h5 className = "QuestionTitle" > Question variants < / h 5 >
2017-11-30 17:43:24 +01:00
{
this . state . intent . questions . map ( ( question , index ) => {
return (
< div key = { index } className = "QuestionBox" >
2017-12-01 11:03:48 +01:00
< TextField
2017-12-02 22:48:45 +01:00
id = "intent question"
2017-12-01 11:03:48 +01:00
lineDirection = "center"
placeholder = "Question"
2018-01-14 01:00:35 +01:00
className = "md-cell md-cell--bottom IntentDetailsInputBoxes"
2017-12-02 22:48:45 +01:00
maxLength = { QUESTION _MAX _LENGTH }
2017-12-01 11:03:48 +01:00
rightIcon = { < SVGIcon onClick = { ( ) => { this . deleteQuestion ( question ) } } > < path fill = "#000000" d = "M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z" / > < / S V G I c o n > }
2017-12-02 22:48:45 +01:00
onChange = { ( e ) => { this . handleQuestionEdit ( e , index ) } }
2017-12-01 11:03:48 +01:00
value = { question } / >
2017-11-30 17:43:24 +01:00
< / d i v >
) ;
} )
}
2017-12-01 11:03:48 +01:00
< br > < / b r >
2017-11-30 17:43:24 +01:00
{
2017-12-01 11:03:48 +01:00
< div className = "QuestionBox" >
< TextField
2017-12-02 22:48:45 +01:00
id = "intent answer"
2017-12-01 11:03:48 +01:00
lineDirection = "center"
label = "Answer"
placeholder = "Answer"
2017-12-02 22:48:45 +01:00
maxLength = { ANSWER _MAX _LENGTH }
2018-01-14 01:00:35 +01:00
className = "md-cell md-cell--bottom IntentDetailsInputBoxes"
2017-12-02 22:48:45 +01:00
onChange = { this . handleAnswerEdit }
2017-12-01 11:03:48 +01:00
value = { this . state . intent . answer } / >
< / d i v >
2017-11-30 17:43:24 +01:00
}
< br > < / b r >
< br > < / b r >
2018-01-16 13:38:05 +01:00
< Button className = "IntentDetailsButton" flat primary onClick = { ( ) => { this . props . onDeleteIntentClick ( this . state . intent ) } } disabled = { this . props . waiting } > Delete question < / B u t t o n >
< Button className = "IntentDetailsButton" flat primary swapTheming onClick = { this . addQuestion } disabled = { this . props . waiting } > Add variant < / B u t t o n >
2018-01-14 01:00:35 +01:00
< Button className = "IntentDetailsButton" flat primary swapTheming onClick = { ( ) => { this . props . onSaveIntentClick ( this . state . intent ) } } disabled = { this . props . waiting } > Save < / B u t t o n >
2018-01-10 13:27:09 +01:00
2017-11-30 17:43:24 +01:00
< / d i v >
) ;
}
addQuestion ( ) {
let newIntent = this . state . intent ;
2017-12-02 22:48:45 +01:00
newIntent . questions . push ( '' ) ;
2017-11-30 17:43:24 +01:00
this . setState ( { intent : newIntent } ) ;
}
deleteQuestion ( question ) {
let newIntent = this . state . intent ;
let removeId = newIntent . questions . indexOf ( question ) ;
if ( removeId !== - 1 )
newIntent . questions . splice ( removeId , 1 ) ;
this . setState ( { intent : newIntent } ) ;
}
2017-12-02 22:48:45 +01:00
handleQuestionEdit ( e , index ) {
2018-01-29 21:32:24 +01:00
if ( e . length === QUESTION _MAX _LENGTH || ! ( /^[a-z,.' ]*$/i . test ( e ) ) ) return ;
2017-12-02 22:48:45 +01:00
let newIntent = this . state . intent ;
newIntent . questions [ index ] = e ;
this . setState ( { intent : newIntent } ) ;
}
2018-01-19 22:42:37 +01:00
handleIntentExplanationEdit ( e , index ) {
2018-01-29 21:32:24 +01:00
if ( e . length === INTENT _EXPLANATION _MAX _LENGTH || ! ( /^[a-z,.' ]*$/i . test ( e ) ) ) return ;
2018-01-19 22:42:37 +01:00
let newIntent = this . state . intent ;
newIntent . intentExplanation = e ;
this . setState ( { intent : newIntent } ) ;
}
2017-12-02 22:48:45 +01:00
handleAnswerEdit ( e ) {
2018-01-29 21:32:24 +01:00
if ( e . length === ANSWER _MAX _LENGTH || ! ( /^[a-z,.' ]*$/i . test ( e ) ) ) return ;
2017-12-02 22:48:45 +01:00
let newIntent = this . state . intent ;
newIntent . answer = e ;
this . setState ( { intent : newIntent } ) ;
}
handleIntentNameEdit ( e ) {
2018-01-29 21:32:24 +01:00
if ( e . length === INTENT _NAME _MAX _LENGTH || ! ( /^[a-z]*$/i . test ( e ) ) ) return ;
2017-12-02 22:48:45 +01:00
let newIntent = this . state . intent ;
2018-01-29 21:32:24 +01:00
newIntent . intentName = e ;
2017-12-02 22:48:45 +01:00
this . setState ( { intent : newIntent } ) ;
}
2017-11-30 17:43:24 +01:00
}
export default IntentDetails ;