import { h, Component } from 'preact'; import { vote } from 'common/api'; import { url, userId } from 'common/settings'; export default class Comment extends Component { constructor(props) { super(props); const { score, votes } = props.data; this.state = { score: score, scoreIncreased: userId in votes && votes[userId], scoreDecreased: userId in votes && !votes[userId], }; this.decreaseScore = this.decreaseScore.bind(this); this.increaseScore = this.increaseScore.bind(this); } increaseScore() { const { score, scoreIncreased, scoreDecreased } = this.state; if (scoreIncreased) return; this.setState({ scoreIncreased: !scoreDecreased, scoreDecreased: false, score: score + 1, }); vote({ id: this.props.data.id, url, value: 1 }); } decreaseScore() { const { score, scoreIncreased, scoreDecreased } = this.state; if (scoreDecreased) return; this.setState({ scoreDecreased: !scoreIncreased, scoreIncreased: false, score: score - 1, }); vote({ id: this.props.data.id, url, value: -1 }); } render(props, { score, scoreIncreased, scoreDecreased }) { const { data, mix, mods = {} } = props; console.log('rerender', data.id) const time = new Date(data.time); // TODO: which format for datetime should we choose? // TODO: add smth that will count 'hours ago' // TODO: check out stash's impl const timeStr = `${time.toLocaleDateString()} ${time.toLocaleTimeString()}`; const o = { ...data, time: timeStr, score: { value: Math.abs(score), sign: score > 0 ? '+' : (score < 0 ? '−' : ''), }, }; return ( // TODO: add default view mod or don't?