import React, {Component} from 'react'; import styles from './Streams.css'; import {connect} from 'react-redux'; import I18n from 'coral-framework/modules/i18n/i18n'; import {fetchAssets, updateAssetState} from '../../actions/assets'; import translations from '../../translations.json'; import { RadioGroup, Radio, Icon, DataTable, TableHeader } from 'react-mdl'; import Pager from 'coral-ui/components/Pager'; const limit = 25; class Streams extends Component { state = { search: '', sort: 'desc', filter: 'all', statusMenus: {}, timer: null, page: 0 } componentDidMount () { this.props.fetchAssets(0, limit, '', this.state.sortBy); } onSettingChange = (setting) => (e) => { let options = this.state; this.setState({[setting]: e.target.value}); options[setting] = e.target.value; this.props.fetchAssets(0, limit, options.search, options.sort, options.filter); } onSearchChange = (e) => { const search = e.target.value; this.setState((prevState) => { prevState.search = search; clearTimeout(prevState.timer); const fetchAssets = this.props.fetchAssets; prevState.timer = setTimeout(() => { fetchAssets(0, limit, search, this.state.sort, this.state.filter); }, 350); return prevState; }); } renderDate = (date) => { const d = new Date(date); return `${d.getMonth() + 1}/${d.getDate()}/${d.getFullYear()}`; } onStatusClick = (closeStream, id, statusMenuOpen) => () => { if (statusMenuOpen) { this.setState(prev => { prev.statusMenus[id] = false; return prev; }); this.props.updateAssetState(id, closeStream ? Date.now() : null) .then(() => { const {search, sort, filter, page} = this.state; this.props.fetchAssets(page, limit, search, sort, filter); }); } else { this.setState(prev => { prev.statusMenus[id] = true; return prev; }); } } renderStatus = (closedAt, {id}) => { const closed = closedAt && new Date(closedAt).getTime() < Date.now(); const statusMenuOpen = this.state.statusMenus[id]; return
{closed ? lang.t('streams.closed') : lang.t('streams.open')} {!statusMenuOpen && }
{ statusMenuOpen &&
{!closed ? lang.t('streams.closed') : lang.t('streams.open')}
}
; } onPageClick = (page) => { this.setState({page}); const {search, sort, filter} = this.state; this.props.fetchAssets((page - 1) * limit, limit, search, sort, filter); } render () { const {search, sort, filter} = this.state; const {assets} = this.props; return (
{lang.t('streams.filter-streams')}
{lang.t('streams.stream-status')}
{lang.t('streams.all')} {lang.t('streams.open')} {lang.t('streams.closed')}
{lang.t('streams.sort-by')}
{lang.t('streams.newest')} {lang.t('streams.oldest')}
assets.byId[id])}> {lang.t('streams.article')} {lang.t('streams.pubdate')} {lang.t('streams.status')}
); } } const mapStateToProps = ({assets}) => { return { assets: assets.toJS() }; }; const mapDispatchToProps = (dispatch) => { return { fetchAssets: (...args) => { dispatch(fetchAssets.apply(this, args)); }, updateAssetState: (...args) => dispatch(updateAssetState.apply(this, args)) }; }; export default connect(mapStateToProps, mapDispatchToProps)(Streams); const lang = new I18n(translations);