Skip to content

Commit f4708e1

Browse files
committedMay 18, 2015
Creating 'RecordForm' component. Adding new records
1 parent bf1d80c commit f4708e1

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed
 
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
@RecordForm = React.createClass
2+
getInitialState: ->
3+
title: ''
4+
date: ''
5+
amount: ''
6+
7+
valid: ->
8+
@state.title && @state.date && @state.amount
9+
10+
handleChange: (e) ->
11+
name = e.target.name
12+
@setState "#{ name }": e.target.value
13+
14+
handleSubmit: (e) ->
15+
e.preventDefault()
16+
$.post '', { record: @state }, (data) =>
17+
@props.handleNewRecord data
18+
@setState @getInitialState()
19+
, 'JSON'
20+
21+
render: ->
22+
React.DOM.form
23+
className: 'form-inline'
24+
onSubmit: @handleSubmit
25+
React.DOM.div
26+
className: 'form-group'
27+
React.DOM.input
28+
type: 'text'
29+
className: 'form-control'
30+
placeholder: 'Date'
31+
name: 'date'
32+
value: @state.date
33+
onChange: @handleChange
34+
React.DOM.div
35+
className: 'form-group'
36+
React.DOM.input
37+
type: 'text'
38+
className: 'form-control'
39+
placeholder: 'Title'
40+
name: 'title'
41+
value: @state.title
42+
onChange: @handleChange
43+
React.DOM.div
44+
className: 'form-group'
45+
React.DOM.input
46+
type: 'number'
47+
className: 'form-control'
48+
placeholder: 'Amount'
49+
name: 'amount'
50+
value: @state.amount
51+
onChange: @handleChange
52+
React.DOM.button
53+
type: 'submit'
54+
className: 'btn btn-primary'
55+
disabled: !@valid()
56+
'Create record'

‎app/assets/javascripts/components/records.js.coffee

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
@Records = React.createClass
22
getInitialState: ->
33
records: @props.data
4+
45
getDefaultProps: ->
56
records: []
7+
8+
addRecord: (record) ->
9+
records = @state.records.slice()
10+
records.push record
11+
@setState records: records
12+
613
render: ->
714
React.DOM.div
815
className: 'records'
916
React.DOM.h2
1017
className: 'title'
1118
'Records'
19+
React.createElement RecordForm, handleNewRecord: @addRecord
20+
React.DOM.hr null
1221
React.DOM.table
1322
className: 'table table-bordered'
1423
React.DOM.thead null,

‎app/controllers/records_controller.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,20 @@ class RecordsController < ApplicationController
22
def index
33
@records = Record.all
44
end
5+
6+
def create
7+
@record = Record.new(record_params)
8+
9+
if @record.save
10+
render json: @record
11+
else
12+
render json: @record.errors, status: :unprocessable_entity
13+
end
14+
end
15+
16+
private
17+
18+
def record_params
19+
params.require(:record).permit(:title, :amount, :date)
20+
end
521
end

0 commit comments

Comments
 (0)