diff options
Diffstat (limited to 'frontend/views/page/components/tile.form.js')
| -rw-r--r-- | frontend/views/page/components/tile.form.js | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/frontend/views/page/components/tile.form.js b/frontend/views/page/components/tile.form.js index a59a433..0935538 100644 --- a/frontend/views/page/components/tile.form.js +++ b/frontend/views/page/components/tile.form.js @@ -79,6 +79,7 @@ class TileForm extends Component { title: "", submitTitle: "", errorFields: new Set([]), + modified: false, } componentDidMount() { @@ -104,8 +105,19 @@ class TileForm extends Component { } componentDidUpdate(prevProps) { - if (this.props.initialData !== prevProps.initialData) { + if (!this.props.isNew && this.props.initialData !== prevProps.initialData) { + this.handleSubmit() this.props.tileActions.updateTemporaryTile({ ...this.props.initialData }) + this.setState({ + errorFields: new Set([]), + }) + } + } + + componentWillUnmount() { + // if the item has changed, save before we close the form! + if (!this.props.isNew && this.state.modified) { + this.handleSubmit() } } @@ -126,7 +138,7 @@ class TileForm extends Component { page_id: temporaryTile.page_id, }) newTile.settings.align = temporaryTile.settings.align - this.setState({ errorFields: new Set([]) }) + this.clearErrorField('type') this.props.tileActions.updateTemporaryTile(newTile) } @@ -200,20 +212,28 @@ class TileForm extends Component { errorFields.delete(name) this.setState({ errorFields, + modified: true, + }) + } else if (!this.state.modified) { + this.setState({ + errorFields, + modified: true, }) } } handleSubmit(e) { - e.preventDefault() - const { isNew, temporaryTile, onSubmit } = this.props + if (e) e.preventDefault() + const { isNew, temporaryTile, onSubmit, onClose } = this.props const requiredSettings = REQUIRED_KEYS[temporaryTile.type] const validKeys = "id graph_id page_id target_page_id type settings".split(" ") const validData = validKeys.reduce((a,b) => { a[b] = temporaryTile[b]; return a }, {}) const errorFields = requiredSettings.filter(key => !validData.settings[key]) if (errorFields.length) { console.log('error', errorFields, validData) - this.setState({ errorFields: new Set(errorFields) }) + if (e) { + this.setState({ errorFields: new Set(errorFields) }) + } } else { if (isNew) { // side effect: set username if we're creating a new tile @@ -224,6 +244,10 @@ class TileForm extends Component { } console.log('submit', validData) onSubmit(validData) + // if submitting after switching elements, don't close the form + if (e && onClose) { + onClose() + } } } |
