const preact = require('preact'); const { Component } = require('preact') const { connect } = require('preact-redux'); const linkState = require('linkstate').default; const SpawnButton = require('./spawn.button'); const { postData, errorToast, infoToast } = require('../utils'); const actions = require('../actions'); const addState = connect( function receiveState(state) { const { account, subscription, email, ping, ws, } = state; function sendSetPassword(current, password) { postData('/account/password', { current, password }) .then(res => res.json()) .then(data => { if (data.error) return errorToast(data.error); infoToast('Password changed. Reloading...') setTimeout(() => window.location.reload(), 5000); }) .catch(error => errorToast(error)); } function sendSetEmail(email) { postData('/account/email', { email }) .then(res => res.json()) .then(data => { if (data.error) return errorToast(data.error); infoToast('Email set. Please confirm your address.'); return true; }) .catch(error => errorToast(error)); } function logout() { postData('/account/logout').then(() => window.location.reload(true)); } function sendConstructSpawn(name) { return ws.sendMtxConstructSpawn(name); } function sendSubscriptionEnding(enabled) { return ws.sendSubscriptionEnding(enabled); } return { account, subscription, ping, email, logout, sendSetPassword, sendSetEmail, sendConstructSpawn, sendSubscriptionEnding, }; }, ); class AccountStatus extends Component { constructor(props) { super(props); this.state = { passwordState: { current: '', password: '', confirm: ''}, emailState: null, unsubState: false, }; } render(args, state) { const { account, subscription, ping, email, logout, sendSetEmail, sendSetPassword, sendConstructSpawn, sendSubscriptionEnding, } = args; const { passwordState, emailState, unsubState, } = state; if (!account) return null; const passwordsEqual = () => passwordState.password === passwordState.confirm; const setPasswordDisabled = () => { const { current, password, confirm } = passwordState; return !(passwordsEqual() && password && current && confirm); } const tlClick = e => { e.stopPropagation(); return this.setState({ unsubState: false }); } const subInfo = () => { const unsubBtn = () => { if (!subscription) return false; // resub button if (subscription.cancel_at_period_end) { return } const classes = `unsub ${unsubState ? 'confirming' : ''}`; const text = unsubState ? 'Confirm' : 'Unsubscribe' return } const unsub = e => { if (unsubState) { return sendSubscriptionEnding(true); } e.stopPropagation(); return this.setState({ unsubState: true }); } if (!subscription) return false; return