From 649fec4f153ea1c72d2fa3ea89d7d3998237de3a Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Fri, 17 Jul 2020 19:42:40 +0200 Subject: paragraph to make paragraphs blockquote, hidden, etc --- .../views/paragraph/components/paragraph.form.js | 196 +++++++-------------- 1 file changed, 65 insertions(+), 131 deletions(-) (limited to 'animism-align/frontend/views/paragraph/components/paragraph.form.js') diff --git a/animism-align/frontend/views/paragraph/components/paragraph.form.js b/animism-align/frontend/views/paragraph/components/paragraph.form.js index d90b663..de3114c 100644 --- a/animism-align/frontend/views/paragraph/components/paragraph.form.js +++ b/animism-align/frontend/views/paragraph/components/paragraph.form.js @@ -1,153 +1,87 @@ import React, { Component } from 'react' -import { Link } from 'react-router-dom' +// import { Link } from 'react-router-dom' +import { bindActionCreators } from 'redux' +import { connect } from 'react-redux' -import { session } from '../../../session' +import actions from '../../../actions' -import { TextInput, LabelDescription, TextArea, Checkbox, SubmitButton, Loader } from '../../../common' +import { clamp, timestamp, capitalize } from '../../../util' +import { Select } from '../../../common' -const newGraph = () => ({ - path: '', - title: '', - username: session('username'), - description: '', -}) +const PARAGRAPH_TYPES = [ + 'paragraph', 'blockquote', 'hidden', +].map(name => ({ name, label: capitalize(name.replace('_', ' ')) })) -export default class GraphForm extends Component { - state = { - title: "", - submitTitle: "", - data: { ...newGraph() }, - errorFields: new Set([]), +class ParagraphForm extends Component { + constructor(props){ + super(props) + this.handleChange = this.handleChange.bind(this) + this.handleSelect = this.handleSelect.bind(this) + this.handleSubmit = this.handleSubmit.bind(this) } - componentDidMount() { - const { data, isNew } = this.props - const title = isNew ? 'new project' : 'editing ' + data.title - const submitTitle = isNew ? "Create Graph" : "Save Changes" - this.setState({ - title, - submitTitle, - errorFields: new Set([]), - data: { - ...newGraph(), - ...data - }, - }) + if (this.textareaRef && this.textareaRef.current) { + this.textareaRef.current.focus() + } } - handleChange(e) { - const { errorFields } = this.state const { name, value } = e.target - if (errorFields.has(name)) { - errorFields.delete(name) - } - let sanitizedValue = value - if (name === 'path') { - sanitizedValue = sanitizedValue.toLowerCase().replace(/ /, '-').replace(/[!@#$%^&*()[\]{}]/, '-').replace(/-+/, '-') - } - this.setState({ - errorFields, - data: { - ...this.state.data, - [name]: sanitizedValue, - } - }) + this.handleSelect(name, value) } - handleSelect(name, value) { - const { errorFields } = this.state - if (errorFields.has(name)) { - errorFields.delete(name) - } - this.setState({ - errorFields, - data: { - ...this.state.data, - [name]: value, - } + const { onUpdate, paragraph } = this.props + onUpdate({ + ...paragraph, + [name]: value, }) } - - handleSubmit(e) { - e.preventDefault() - const { isNew, onSubmit } = this.props - const { data } = this.state - const requiredKeys = "title username path description".split(" ") - const validKeys = "title username path description".split(" ") - const validData = validKeys.reduce((a,b) => { a[b] = data[b]; return a }, {}) - const errorFields = requiredKeys.filter(key => !validData[key]) - if (errorFields.length) { - console.log('error', errorFields, validData) - this.setState({ errorFields: new Set(errorFields) }) - } else { - if (isNew) { - // side effect: set username if we're creating a new graph - session.set('username', data.username) - } else { - validData.id = data.id - } - console.log('submit', validData) - onSubmit(validData) - } + handleSubmit() { + const { paragraph, onClose } = this.props + actions.paragraph.update(paragraph) + .then(response => { + console.log(response) + onClose() + }) } - render() { - const { isNew } = this.props - const { title, submitTitle, errorFields, data } = this.state + const { paragraph, y } = this.props return ( -
-

{title}

-
- - - {data.path - ? 'Project URLs will be: /' + data.path + '/example' - : 'Enter the base path for this project.'} - - - -