resubscribe button

This commit is contained in:
ntr 2019-08-29 12:54:36 +10:00
parent ffc070ed51
commit a5199b7d4b
4 changed files with 37 additions and 32 deletions

View File

@ -50,8 +50,8 @@ const addState = connect(
return ws.sendMtxConstructSpawn(name); return ws.sendMtxConstructSpawn(name);
} }
function sendSubscriptionCancel() { function sendSubscriptionEnding(enabled) {
return ws.sendSubscriptionCancel(); return ws.sendSubscriptionEnding(enabled);
} }
return { return {
@ -63,7 +63,7 @@ const addState = connect(
sendSetPassword, sendSetPassword,
sendSetEmail, sendSetEmail,
sendConstructSpawn, sendConstructSpawn,
sendSubscriptionCancel, sendSubscriptionEnding,
}; };
}, },
); );
@ -90,7 +90,7 @@ class AccountStatus extends Component {
sendSetEmail, sendSetEmail,
sendSetPassword, sendSetPassword,
sendConstructSpawn, sendConstructSpawn,
sendSubscriptionCancel, sendSubscriptionEnding,
} = args; } = args;
const { const {
@ -109,29 +109,34 @@ class AccountStatus extends Component {
return !(passwordsEqual() && password && current && confirm); return !(passwordsEqual() && password && current && confirm);
} }
const unsub = e => {
if (unsubState) {
return sendSubscriptionCancel();
}
e.stopPropagation();
return this.setState({ unsubState: true });
}
const unsubBtn = () => {
if (!account.subscribed) return false;
const classes = `unsub ${unsubState ? 'confirming' : ''}`;
const text = unsubState ? 'Confirm' : 'Unsubscribe'
return <button class={classes} onClick={unsub}>{text}</button>
}
const tlClick = e => { const tlClick = e => {
e.stopPropagation(); e.stopPropagation();
return this.setState({ unsubState: false }); return this.setState({ unsubState: false });
} }
const subInfo = () => { const subInfo = () => {
const unsubBtn = () => {
if (!subscription) return false;
// resub button
if (subscription.cancel_at_period_end) {
return <button class='stripe-btn' onClick={() => sendSubscriptionEnding(false)}>Resubscribe</button>
}
const classes = `unsub ${unsubState ? 'confirming' : ''}`;
const text = unsubState ? 'Confirm' : 'Unsubscribe'
return <button class={classes} onClick={unsub}>{text}</button>
}
const unsub = e => {
if (unsubState) {
return sendSubscriptionEnding(true);
}
e.stopPropagation();
return this.setState({ unsubState: true });
}
if (!subscription) return false; if (!subscription) return false;
return <div> return <div>
<h3>Subscription</h3> <h3>Subscription</h3>
@ -141,6 +146,7 @@ class AccountStatus extends Component {
<dt>Status</dt> <dt>Status</dt>
<dd>{subscription.cancel_at_period_end ? 'Disabled' : 'Active'}</dd> <dd>{subscription.cancel_at_period_end ? 'Disabled' : 'Active'}</dd>
</dl> </dl>
{unsubBtn()}
</div>; </div>;
} }
@ -211,7 +217,6 @@ class AccountStatus extends Component {
</div> </div>
<div> <div>
{subInfo()} {subInfo()}
{unsubBtn()}
</div> </div>
</section> </section>
); );

View File

@ -54,8 +54,8 @@ function createSocket(events) {
send(['AccountSetTeam', { ids }]); send(['AccountSetTeam', { ids }]);
} }
function sendSubscriptionCancel() { function sendSubscriptionEnding(ending) {
send(['SubscriptionCancel', { }]); send(['SubscriptionEnding', { ending }]);
} }
function sendGameState(id) { function sendGameState(id) {
@ -315,7 +315,6 @@ function createSocket(events) {
sendAccountInstances, sendAccountInstances,
sendAccountSetTeam, sendAccountSetTeam,
sendSubscriptionCancel,
sendGameState, sendGameState,
sendGameReady, sendGameReady,
@ -338,6 +337,7 @@ function createSocket(events) {
sendEmailState, sendEmailState,
sendSubscriptionState, sendSubscriptionState,
sendSubscriptionEnding,
sendMtxApply, sendMtxApply,
sendMtxBuy, sendMtxBuy,

View File

@ -36,7 +36,7 @@ pub fn subscription_account(tx: &mut Transaction, sub: String) -> Result<Uuid, E
Ok(row.get(0)) Ok(row.get(0))
} }
pub fn subscription_cancel(tx: &mut Transaction, client: &Client, account: &Account) -> Result<Option<Subscription>, Error> { pub fn subscription_ending(tx: &mut Transaction, client: &Client, account: &Account, ending: bool) -> Result<Option<Subscription>, Error> {
let query = " let query = "
SELECT account, customer, checkout, subscription SELECT account, customer, checkout, subscription
FROM stripe_subscriptions FROM stripe_subscriptions
@ -55,16 +55,16 @@ pub fn subscription_cancel(tx: &mut Transaction, client: &Client, account: &Acco
let id = subscription.parse()?; let id = subscription.parse()?;
let mut params = stripe::UpdateSubscription::new(); let mut params = stripe::UpdateSubscription::new();
params.cancel_at_period_end = Some(true); params.cancel_at_period_end = Some(ending);
match stripe::Subscription::update(client, &id, params) { match stripe::Subscription::update(client, &id, params) {
Ok(s) => { Ok(s) => {
info!("subscription cancelled account={:?} subscription={:?}", account, s); info!("subscription changed ending={:?} account={:?} subscription={:?}", ending, account, s);
Ok(Some(s)) Ok(Some(s))
}, },
Err(e) => { Err(e) => {
warn!("{:?}", e); warn!("{:?}", e);
Err(err_msg("unable to cancel subscription")) Err(err_msg("unable to update subscription"))
} }
} }
} }

View File

@ -81,7 +81,7 @@ enum RpcRequest {
AccountConstructs {}, AccountConstructs {},
AccountSetTeam { ids: Vec<Uuid> }, AccountSetTeam { ids: Vec<Uuid> },
SubscriptionCancel {}, SubscriptionEnding { ending: bool },
SubscriptionState {}, SubscriptionState {},
EmailState {}, EmailState {},
@ -209,8 +209,8 @@ impl Connection {
RpcRequest::MtxBuy { mtx } => RpcRequest::MtxBuy { mtx } =>
Ok(RpcMessage::AccountShop(mtx::buy(&mut tx, account, mtx)?)), Ok(RpcMessage::AccountShop(mtx::buy(&mut tx, account, mtx)?)),
RpcRequest::SubscriptionCancel { } => RpcRequest::SubscriptionEnding { ending } =>
Ok(RpcMessage::SubscriptionState(payments::subscription_cancel(&mut tx, &self.stripe, account)?)), Ok(RpcMessage::SubscriptionState(payments::subscription_ending(&mut tx, &self.stripe, account, ending)?)),
_ => Err(format_err!("unknown request request={:?}", request)), _ => Err(format_err!("unknown request request={:?}", request)),
}; };