import React, { Component } from "react"; import { NavLink } from "react-router-dom"; import CustomInput from "components/CustomInput.jsx"; import CustomMessages from "components/CustomMessages.jsx"; import PropTypes from "prop-types"; import { translate, Trans } from "react-i18next"; import { connect } from "react-redux"; import { actionCreators as homepageActionCreators } from "ducks/homepage"; import { bindActionCreators } from "redux"; import StationCard from "./StationCard"; import io from "io"; import config from "config"; @connect(state => ({ user: { loggedIn: state.session.get("loggedIn"), userId: state.session.get("userId"), role: state.session.get("role"), }, officialStations: state.homepage.getIn(["stations", "official"]), communityStations: state.homepage.getIn(["stations", "community"]), }), (dispatch) => ({ onStationIndex: bindActionCreators(homepageActionCreators.stationIndex, dispatch), onStationCreate: bindActionCreators(homepageActionCreators.stationCreate, dispatch), onStationRemove: bindActionCreators(homepageActionCreators.stationRemove, dispatch), onStationSongUpdate: bindActionCreators(homepageActionCreators.stationSongUpdate, dispatch), onStationUserCountUpdate: bindActionCreators(homepageActionCreators.stationUserCountUpdate, dispatch), })) @translate(["home", "createCommunityStation"], { wait: true }) export default class Homepage extends Component { static propTypes = { t: PropTypes.func, }; static defaultProps = { t: () => {}, }; constructor() { super(); CustomInput.initialize(this); this.state = { createStation: { private: false, }, }; io.getSocket(socket => { socket.emit("stations.index", data => { if (data.status === "success") { this.props.onStationIndex(data.stations); } }); }); } isOwner = (ownerId) => { if (this.props.loggedIn) { if (this.props.user.role === "admin") return true; if (this.props.user.userId === ownerId) return true; } return false; }; /*listStations = (type) => { let stations = []; this.state.stations[type].forEach((station) => { stations.push(); }); return stations; };*/ togglePrivate = () => { this.setState({ createStation: { private: !this.state.createStation.private, }, }); }; createCommunity = () => { this.messages.clearErrorSuccess(); if (CustomInput.hasInvalidInput(this.input)) { this.messages.clearAddError(this.props.t("general:someFieldsAreIncorrectError")); } else { io.getSocket(socket => { //TODO Add private value socket.emit("stations.create", { name: this.input.stationName.getValue(), type: "community", displayName: this.input.stationDisplayName.getValue(), description: this.input.stationDescription.getValue(), }, res => { if (res.status === "success") { location.href = "/community/" + this.input.stationName.getValue();//TODO Remove } else { this.messages.addError(res.message); } }); }); } }; render() { const { t } = this.props; //TODO Make this not re-render a lot return (

{ t("home:title") }

(this.messages = ref) } />

{ t("home:officialStations") }

{ this.props.officialStations.map((station) => { return ; }) }

{ t("home:communityStations") }

{ (this.props.user.loggedIn) ? (

Create community station

add
(this.input.stationDisplayName = ref) } /> (this.input.stationDescription = ref) } />
musare.com/c/ (this.input.stationName = ref) } />
{(this.state.createStation.private) ? lock : lock}
) : null } { this.props.communityStations.map((station) => { return ; }) }
); } }