0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-08 09:42:43 +00:00

Separate "style" and "metadata" panels

This commit is contained in:
Trevor Buckner
2021-06-05 15:58:31 -04:00
parent 1bc0964aff
commit e67fadef02
15 changed files with 340 additions and 219 deletions

View File

@@ -24,6 +24,7 @@ const NewPage = createClass({
return {
brew : {
text : '',
style : '',
shareId : null,
editId : null,
createdAt : null,
@@ -44,6 +45,7 @@ const NewPage = createClass({
return {
brew : {
text : this.props.brew.text || '',
style : this.props.brew.style || '',
gDrive : false,
title : this.props.brew.title || '',
description : this.props.brew.description || '',
@@ -55,7 +57,8 @@ const NewPage = createClass({
isSaving : false,
saveGoogle : (global.account && global.account.googleId ? true : false),
errors : []
errors : [],
htmlErrors : Markdown.validate(this.props.brew.text)
};
},
@@ -66,6 +69,11 @@ const NewPage = createClass({
brew : { text: storage }
});
}
this.setState((prevState)=>({
htmlErrors : Markdown.validate(prevState.brew.text)
}));
document.addEventListener('keydown', this.handleControlKeys);
},
componentWillUnmount : function() {
@@ -88,18 +96,29 @@ const NewPage = createClass({
this.refs.editor.update();
},
handleMetadataChange : function(metadata){
this.setState({
brew : _.merge({}, this.state.brew, metadata)
});
handleTextChange : function(text){
//If there are errors, run the validator on every change to give quick feedback
let htmlErrors = this.state.htmlErrors;
if(htmlErrors.length) htmlErrors = Markdown.validate(text);
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, { text: text }),
htmlErrors : htmlErrors
}));
localStorage.setItem(KEY, text);
},
handleTextChange : function(text){
this.setState({
brew : { text: text },
errors : Markdown.validate(text)
});
localStorage.setItem(KEY, text);
handleStyleChange : function(style){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, { style: style }),
}));
},
handleMetaChange : function(metadata){
this.setState((prevState)=>({
brew : _.merge({}, prevState.brew, metadata),
}));
},
save : async function(){
@@ -190,10 +209,12 @@ const NewPage = createClass({
<Editor
ref='editor'
brew={this.state.brew}
onChange={this.handleTextChange}
onMetadataChange={this.handleMetadataChange}
onTextChange={this.handleTextChange}
onStyleChange={this.handleStyleChange}
onMetaChange={this.handleMetaChange}
renderer={this.state.brew.renderer}
/>
<BrewRenderer text={this.state.brew.text} errors={this.state.errors} />
<BrewRenderer text={this.state.brew.text} errors={this.state.htmlErrors} renderer={this.state.brew.renderer} />
</SplitPane>
</div>
</div>;