mirror of
https://github.com/Alamantus/Lexiconga.git
synced 2025-05-14 14:11:16 +02:00
166 lines
No EOL
3.6 KiB
JavaScript
166 lines
No EOL
3.6 KiB
JavaScript
import React from 'react';
|
|
import marked from 'marked';
|
|
|
|
import {WordForm} from './WordForm';
|
|
import {Button} from './Button';
|
|
|
|
const saveIcon = <i>💾</i>;
|
|
const editIcon = <i>🖉</i>;
|
|
|
|
export class Word extends React.Component {
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this.state = {
|
|
editWord: false,
|
|
editName: false,
|
|
editPronunciation: false,
|
|
editPartOfSpeech: false,
|
|
editSimpleDefinition: false,
|
|
editLongDefinition: false
|
|
};
|
|
}
|
|
|
|
/*
|
|
{
|
|
name: word,
|
|
pronunciation: pronunciation,
|
|
partOfSpeech: ((partOfSpeech.length > 0) ? partOfSpeech : " "),
|
|
simpleDefinition: simpleDefinition,
|
|
longDefinition: longDefinition,
|
|
wordId: currentDictionary.nextWordId++
|
|
}
|
|
*/
|
|
|
|
showName() {
|
|
return (
|
|
<div className='name'>
|
|
{this.props.name}
|
|
</div>
|
|
);
|
|
}
|
|
|
|
showPronunciation() {
|
|
if (this.props.pronunciation !== '') {
|
|
return (
|
|
<div className='pronunciation'>
|
|
{this.props.pronunciation}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
showPartOfSpeech() {
|
|
if (this.props.partOfSpeech !== '') {
|
|
return (
|
|
<div className='part-of-speech'>
|
|
{this.props.partOfSpeech}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
showSimpleDefinition() {
|
|
if (this.props.simpleDefinition !== '') {
|
|
return (
|
|
<div className='simple-definition'>
|
|
{this.props.simpleDefinition}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
showLongDefinition() {
|
|
if (this.props.longDefinition !== '') {
|
|
return (
|
|
<div className='long-definition' dangerouslySetInnerHTML={{__html: marked(this.props.longDefinition)}} />
|
|
);
|
|
}
|
|
}
|
|
|
|
showWordOrEdit() {
|
|
if (this.state.editWord) {
|
|
return (
|
|
<WordForm
|
|
partsOfSpeech={this.props.dictionary.props.settings.partsOfSpeech}
|
|
updateWord={(wordObject) => this.updateWord(wordObject)}
|
|
wordValues={this.packageThisWordIntoObject()}
|
|
submitLabel='Update' />
|
|
);
|
|
} else {
|
|
return (
|
|
<div>
|
|
{this.showName()}
|
|
|
|
{this.showPronunciation()}
|
|
|
|
{this.showPartOfSpeech()}
|
|
|
|
<br />
|
|
|
|
{this.showSimpleDefinition()}
|
|
|
|
{this.showLongDefinition()}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
showManagementArea() {
|
|
if (this.props.isEditing) {
|
|
if (this.state.editWord) {
|
|
return (
|
|
<Button
|
|
action={() => this.setState({editWord: false})}
|
|
label='Cancel' />
|
|
);
|
|
} else {
|
|
return (
|
|
<Button
|
|
action={() => this.setState({editWord: true})}
|
|
label='Edit Word' />
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
updateWord(wordObject) {
|
|
this.props.updateWord(this.props.wordId, {
|
|
name: wordObject.name || this.props.name,
|
|
pronunciation: wordObject.pronunciation || this.props.pronunciation,
|
|
partOfSpeech: wordObject.partOfSpeech || this.props.partOfSpeech,
|
|
simpleDefinition: wordObject.simpleDefinition || this.props.simpleDefinition,
|
|
longDefinition: wordObject.longDefinition || this.props.longDefinition
|
|
});
|
|
|
|
this.setState({editWord: false});
|
|
}
|
|
|
|
packageThisWordIntoObject() {
|
|
return {
|
|
name: this.props.name,
|
|
pronunciation: this.props.pronunciation,
|
|
partOfSpeech: this.props.partOfSpeech,
|
|
simpleDefinition: this.props.simpleDefinition,
|
|
longDefinition: this.props.longDefinition
|
|
};
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div id={'entry' + this.props.wordId} className='word'>
|
|
|
|
{this.showWordOrEdit()}
|
|
|
|
<div className='management'>
|
|
{this.showManagementArea()}
|
|
</div>
|
|
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
Word.defaultProps = {
|
|
isEditing: false
|
|
} |