Skip to content

Commit

Permalink
feat: add subscription cancel dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
castrolem committed Oct 14, 2019
1 parent 28f7ff7 commit 2cd19bf
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 15 deletions.
72 changes: 72 additions & 0 deletions app/javascript/bundles/User/components/SubscriptionCancel.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import React, { useState } from 'react'
import Button from '@material-ui/core/Button'
import Dialog from '@material-ui/core/Dialog'
import DialogActions from '@material-ui/core/DialogActions'
import DialogContent from '@material-ui/core/DialogContent'
import DialogContentText from '@material-ui/core/DialogContentText'
import DialogTitle from '@material-ui/core/DialogTitle'

const SUBSCRIPTION_CANCEL_URL = userID => `/users/${userID}/subscription`

function SubscriptionCancelView ({ user, subscription }) {
const [open, setOpen] = useState(false)

const handleClickOpen = () => {
setOpen(true)
}

const handleClose = () => {
setOpen(false)
}

const handleSubscriptionCancellation = async () => {
await fetch(SUBSCRIPTION_CANCEL_URL(user.id), {
method: 'delete'
})

handleClose()
}

if (!subscription.active) {
return null
}

return (
<div>
<Button color='secondary' onClick={handleClickOpen}>
Cancel Subscription
</Button>
<Dialog
open={open}
onClose={handleClose}
id='cancel-subscription-dialog'
aria-labelledby='cancel-subscription-title'
aria-describedby='cancel-subscription-description'
>
<DialogTitle id='cancel-subscription-title'>
Do you want to terminate your current subscription?
</DialogTitle>
<DialogContent>
<DialogContentText id='cancel-subscription-description'>
Terminating your subscription will stop your current plan and the
benefits you receive from it.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color='primary'>
Close
</Button>
<Button
onClick={handleSubscriptionCancellation}
color='primary'
autoFocus
>
Cancel Subscription
</Button>
</DialogActions>
</Dialog>
</div>
)
}

export const SubscriptionCancel = props => <SubscriptionCancelView {...props} />
29 changes: 15 additions & 14 deletions app/javascript/bundles/User/components/UserShow.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,25 @@ function UserShowView ({ user, subscription, streak }) {
const classes = useStyles()

return (
<Paper className={classes.root}>
<h3>Contact Data</h3>
<p>
<strong>Name:</strong>
</p>
<p>{user.name}</p>

<p>
<strong>Email:</strong>
</p>
<p>{user.email}</p>

{subscription && streak && (
<>
{subscription && subscription.active && streak && (
<p className='notice--subscription'>
You have been subscribed for {streak}
</p>
)}
</Paper>
<Paper className={classes.root}>
<h3>Contact Data</h3>
<p>
<strong>Name:</strong>
</p>
<p>{user.name}</p>

<p>
<strong>Email:</strong>
</p>
<p>{user.email}</p>
</Paper>
</>
)
}

Expand Down
4 changes: 3 additions & 1 deletion app/javascript/packs/user-bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ import ReactOnRails from 'react-on-rails'

import { UserShow } from '../bundles/User/components/UserShow'
import { DonationsHistory } from '../bundles/User/components/DonationsHistory'
import { SubscriptionCancel } from '../bundles/User/components/SubscriptionCancel'

ReactOnRails.register({
UserShow,
DonationsHistory
DonationsHistory,
SubscriptionCancel
})
1 change: 1 addition & 0 deletions app/views/users/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@

<%= react_component("UserShow", props: {user: @user, streak: @user.current_streak, subscription: @user.subscription}) %>
<%= react_component("DonationsHistory", props: {activePlan: @user.subscription&.plan, donations: @user.donations}) %>
<%= react_component("SubscriptionCancel", props: {user: @user, subscription: @user.subscription}) %>
</section>

0 comments on commit 2cd19bf

Please sign in to comment.