Skip to content

Commit 89925d7

Browse files
committed
migrate JournalRow to use react hooks
Wasn't so hard! Redux part was a little harder to wrap my head around.
1 parent 0f3bf31 commit 89925d7

File tree

2 files changed

+100
-1
lines changed

2 files changed

+100
-1
lines changed

src/components/hookJournalRow.jsx

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import '../../node_modules/chartist/dist/chartist.min.css'
2+
import React, {useState} from 'react';
3+
import '../index.css';
4+
import {userSelector } from '../utils/stateMaps.js'
5+
import SessionInfo from '../components/sessionInfo.js'
6+
import JournalForm from './journalForm.js'
7+
import firebase from '../firebase.js'
8+
import StarRating from './star-rating.jsx'
9+
import {getSpot} from '../utils/utils.js'
10+
import Markdown from 'markdown-to-jsx'
11+
import moment from 'moment'
12+
import { useSelector, useDispatch } from 'react-redux'
13+
14+
export default function HookJournalRow(props) {
15+
const [showInfo, setShowInfo] = useState(false);
16+
const [showForm, setShowForm] = useState(props.showForm);
17+
const uid = useSelector( userSelector)
18+
const dispatch = useDispatch()
19+
const name=getSpot(props.spot).name
20+
21+
const toggleShowForm = () => setShowForm(!showForm);
22+
const toggleShowInfo = () => setShowInfo(!showInfo);
23+
24+
function updateStars(rating) {
25+
rating= Number(rating)
26+
const {id, entry, spot, date } = props
27+
const updated = Date.now()
28+
dispatch({
29+
type: 'UPDATE_ENTRY',
30+
payload: {id, entry, spot, date, rating, updated: updated }})
31+
uid && firebase.database()
32+
.ref(`journal/${uid}/${id}`)
33+
.set({
34+
spot: spot,
35+
date: date,
36+
entry: entry,
37+
rating: rating,
38+
updated: updated
39+
})
40+
}
41+
42+
43+
function deleteEntry () {
44+
const doIt = window.confirm("Delete this item? This can't be undone.")
45+
if (doIt) {
46+
firebase.database().ref(`journal/${uid}/${props.id}`).remove()
47+
dispatch({
48+
type: 'DELETE_ENTRY',
49+
payload: {id: props.id}
50+
})}
51+
}
52+
53+
return (
54+
<div className="journal-row">
55+
<div className ="entry">
56+
<div className="buttons">
57+
<button className ="button success"
58+
onClick={toggleShowInfo}>
59+
{showInfo ?
60+
`Hide Graphs` : `Show Graphs`}
61+
</button>
62+
<button className ="secondary"
63+
onClick={toggleShowForm}>
64+
{showForm ?
65+
`Hide Update Form` : `Update Entry` }
66+
</button>
67+
<button className ="button error"
68+
onClick={deleteEntry}>
69+
Delete Entry (Danger!)
70+
</button>
71+
</div>
72+
<div className="meta">
73+
<div className="spot-field">{name}</div>
74+
<div className="date-field">{moment(props.date).format('MMM DD, YYYY')}</div>
75+
<StarRating
76+
numberOfStars="5"
77+
currentRating={props.rating || 0 }
78+
onClick={updateStars}
79+
/>
80+
81+
</div>
82+
<div className="journal-field">
83+
<Markdown>{props.entry || ''}</Markdown>
84+
</div>
85+
</div>
86+
{showForm &&
87+
<JournalForm id={props.id}
88+
spot={props.spot}
89+
entry={props.entry}
90+
date={props.date}
91+
rating={props.rating}
92+
submit="update"
93+
submitCallback={toggleShowForm}
94+
/> }
95+
<SessionInfo forceHidden={!showInfo} className={showInfo ? "active" : "hidden"} spot={props.spot} date={props.date}/>
96+
</div>
97+
)
98+
}
99+

src/components/journal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import '../index.css';
44
import moment from 'moment'
55
import { connect } from 'react-redux';
66
import JournalForm from './journalForm.js'
7-
import JournalRow from './journalRow.js'
7+
import JournalRow from './hookJournalRow.jsx'
88
import JournalFilter from './journalFilter.js'
99
import {journalRef,} from '../firebase'
1010
import {compareJournals} from '../utils/utils.js'

0 commit comments

Comments
 (0)