summaryrefslogtreecommitdiff
path: root/animism-align/frontend/views/media/components/media.form.js
diff options
context:
space:
mode:
Diffstat (limited to 'animism-align/frontend/views/media/components/media.form.js')
-rw-r--r--animism-align/frontend/views/media/components/media.form.js272
1 files changed, 0 insertions, 272 deletions
diff --git a/animism-align/frontend/views/media/components/media.form.js b/animism-align/frontend/views/media/components/media.form.js
deleted file mode 100644
index 1463041..0000000
--- a/animism-align/frontend/views/media/components/media.form.js
+++ /dev/null
@@ -1,272 +0,0 @@
-import React, { Component } from 'react'
-import { Link } from 'react-router-dom'
-
-import { session } from '../../../session'
-import { capitalize } from '../../../util'
-
-import { TextInput, LabelDescription, Select, TextArea, Checkbox, SubmitButton, Loader } from '../../../common'
-
-import MediaImageForm from './media.formImage'
-import MediaVideoForm from './media.formVideo'
-
-const newMedia = () => ({
- type: 'image',
- tag: 'media',
- url: '',
- title: '',
- author: '',
- pre_title: '',
- post_title: '',
- translated_title: '',
- date: '',
- source: '',
- medium: '',
- start_ts: 0,
- settings: {},
-})
-
-const MEDIA_TYPES = [
- 'image', 'video'
-].map(name => ({ name, label: capitalize(name) }))
-
-export default class MediaForm extends Component {
- state = {
- title: "",
- submitTitle: "",
- data: { ...newMedia() },
- errorFields: new Set([]),
- }
-
- constructor(props) {
- super(props)
- this.handleKeyDown = this.handleKeyDown.bind(this)
- this.handleSelect = this.handleSelect.bind(this)
- this.handleChange = this.handleChange.bind(this)
- this.handleSettingsChange = this.handleSettingsChange.bind(this)
- this.handleSettingsChangeEvent = this.handleSettingsChangeEvent.bind(this)
- this.handleSubmit = this.handleSubmit.bind(this)
- }
-
- componentDidMount() {
- const { data, isNew } = this.props
- const title = isNew ? 'New media' : 'Editing ' + data.title
- const submitTitle = isNew ? "Add Media" : "Save Changes"
- this.setState({
- title,
- submitTitle,
- errorFields: new Set([]),
- data: {
- ...newMedia(),
- ...data
- },
- })
- window.addEventListener('keydown', this.handleKeyDown)
- }
-
- componentWillUnmount() {
- window.removeEventListener('keydown', this.handleKeyDown)
- }
-
- handleKeyDown(e) {
- // console.log(e, e.keyCode)
- if ((e.ctrlKey || e.metaKey) && e.keyCode === 83) {
- if (e) {
- e.preventDefault()
- }
- this.handleSubmit()
- }
- }
-
- handleChange(e) {
- const { name, value } = e.target
- 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,
- }
- })
- }
-
- handleSettingsChangeEvent(e) {
- const { name, value } = e.target
- this.handleSettingsChange(name, value)
- }
-
- handleSettingsChange(name, value) {
- console.log(name, value)
- if (name !== 'multiple') {
- value = { [name]: value }
- }
- this.setState({
- data: {
- ...this.state.data,
- settings: {
- ...this.state.data.settings,
- ...value,
- }
- }
- })
- }
-
- handleSubmit(e) {
- if (e) {
- e.preventDefault()
- }
- const { isNew, onSubmit } = this.props
- const { data } = this.state
- const requiredKeys = "author title date".split(" ")
- const validKeys = "type tag url title author pre_title post_title translated_title date source medium start_ts settings".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 media
- // session.set('username', data.username)
- } else {
- validData.id = data.id
- }
- console.log('submit', validData)
- onSubmit(validData)
- }
- }
-
- render() {
- const { isNew } = this.props
- const { title, submitTitle, errorFields, data } = this.state
- // console.log(data)
- return (
- <div className='form'>
- <h1>{title}</h1>
- <form onSubmit={this.handleSubmit}>
- <Select
- title='Media Type'
- name='type'
- selected={data.type}
- options={MEDIA_TYPES}
- onChange={this.handleSelect}
- />
-
- {data.type === 'image' &&
- <MediaImageForm
- data={data}
- onChange={this.handleSelect}
- onSettingsChange={this.handleSettingsChange}
- />
- }
-
- {data.type === 'video' &&
- <MediaVideoForm
- data={data}
- onChange={this.handleSelect}
- onSettingsChange={this.handleSettingsChange}
- />
- }
-
- <TextInput
- title="Author"
- name="author"
- required
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextInput
- title="Title"
- name="title"
- required
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextInput
- title="Title Prefix"
- name="pre_title"
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextInput
- title="Title Suffix"
- name="post_title"
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextInput
- title="Translated Title"
- name="translated_title"
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextInput
- title="Date"
- name="date"
- required
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextInput
- title="Medium"
- name="medium"
- required
- data={data}
- onChange={this.handleChange}
- />
- <TextInput
- title="Source"
- name="source"
- placeholder="Courtesy of / Copyright"
- required
- data={data}
- onChange={this.handleChange}
- autoComplete="off"
- />
- <TextArea
- title="Citation"
- name="bibliography"
- placeholder="Use if special HTML formatting needed"
- data={data.settings}
- onChange={this.handleSettingsChangeEvent}
- />
- <Checkbox
- label="Hide in list of works"
- name="hide_in_bibliography"
- checked={data.settings.hide_in_bibliography}
- onChange={this.handleSettingsChange}
- autoComplete="off"
- />
- <TextArea
- title="Description"
- name="description"
- data={data}
- onChange={this.handleChange}
- />
- <SubmitButton
- title={submitTitle}
- onClick={this.handleSubmit}
- />
- {!!errorFields.size &&
- <label>
- <span></span>
- <span>Please complete the required fields</span>
- </label>
- }
- </form>
- </div>
- )
- }
-}