docbrown/app/javascript/listings/listingForm.jsx
Andy Zhao bb75ee3fc6 WIP Add proper error handling when creating a listing (#2755)
* Add proper error handling when creating a listing

* Remove accidentally committed stylesheet

* Make error text

* Preserve input values if the submission is invalid
2019-05-07 18:25:25 -04:00

65 lines
2.2 KiB
JavaScript

import { h, Component } from 'preact';
import linkState from 'linkstate';
import Title from './elements/title';
import BodyMarkdown from './elements/bodyMarkdown';
import Categories from './elements/categories';
import Tags from './elements/tags';
export default class ListingForm extends Component {
constructor(props) {
super(props);
this.listing = JSON.parse(this.props.listing);
this.categoriesForDetails = JSON.parse(this.props.categoriesForDetails);
this.categoriesForSelect = JSON.parse(this.props.categoriesForSelect);
const organizations = this.props.organizations
? JSON.parse(this.props.organizations) : null;
this.url = window.location.href;
this.state = {
id: this.listing.id || null,
title: this.listing.title || '',
category: this.listing.category || '',
tagList: this.listing.cached_tag_list || '',
bodyMarkdown: this.listing.body_markdown || '',
organizations: organizations || null,
categoriesForSelect: this.categoriesForSelect,
categoriesForDetails: this.categoriesForDetails,
}
}
render() {
const {
id,
title,
bodyMarkdown,
tagList,
category,
organizations,
categoriesForDetails,
categoriesForSelect,
} = this.state;
if (id === null) {
return(
<div>
<Title defaultValue={title} onChange={linkState(this, 'title')} />
<BodyMarkdown defaultValue={bodyMarkdown} onChange={linkState(this, 'bodyMarkdown')} />
<Categories categoriesForSelect={categoriesForSelect} categoriesForDetails={categoriesForDetails} onChange={linkState(this, 'category')} category={category} />
<Tags defaultValue={tagList} category={category} onInput={linkState(this, 'tagList')} />
{/* add contact via connect checkbox later */}
</div>
)
}
return(
<div>
<Title defaultValue={title} onChange={linkState(this, 'title')} />
<BodyMarkdown defaultValue={bodyMarkdown} onChange={linkState(this, 'bodyMarkdown')} />
<Tags defaultValue={tagList} onInput={linkState(this, 'tagList')} />
{/* add contact via connect checkbox later */}
</div>
)
}
}