import React from "react"
import moment from "moment"
import * as post from "misago/reducers/post"
import ajax from "misago/services/ajax"
import snackbar from "misago/services/snackbar"
import store from "misago/services/store"
export default function(props) {
if (isVisible(props.post.acl)) {
return (
)
} else {
return null
}
}
export function isVisible(acl) {
return acl.can_hide
}
export class Hide extends React.Component {
onClick = () => {
store.dispatch(
post.patch(this.props.post, {
is_hidden: true,
hidden_on: moment(),
hidden_by_name: this.props.user.username,
url: Object.assign(this.props.post.url, {
hidden_by: this.props.user.url
})
})
)
const op = { op: "replace", path: "is-hidden", value: true }
ajax.patch(this.props.post.api.index, [op]).then(
patch => {
store.dispatch(post.patch(this.props.post, patch))
},
rejection => {
if (rejection.status === 400) {
snackbar.error(rejection.detail[0])
} else {
snackbar.apiError(rejection)
}
store.dispatch(
post.patch(this.props.post, {
is_hidden: false
})
)
}
)
}
render() {
if (!this.props.post.is_hidden) {
return (
{gettext("Hide")}
)
} else {
return null
}
}
}
export class Unhide extends React.Component {
onClick = () => {
store.dispatch(
post.patch(this.props.post, {
is_hidden: false
})
)
const op = { op: "replace", path: "is-hidden", value: false }
ajax.patch(this.props.post.api.index, [op]).then(
patch => {
store.dispatch(post.patch(this.props.post, patch))
},
rejection => {
if (rejection.status === 400) {
snackbar.error(rejection.detail[0])
} else {
snackbar.apiError(rejection)
}
store.dispatch(
post.patch(this.props.post, {
is_hidden: true
})
)
}
)
}
render() {
if (this.props.post.is_hidden) {
return (
{gettext("Unhide")}
)
} else {
return null
}
}
}
export class Delete extends React.Component {
onClick = () => {
const decision = confirm(
gettext(
"Are you sure you wish to delete this event? This action is not reversible!"
)
)
if (decision) {
this.delete()
}
}
delete = () => {
store.dispatch(
post.patch(this.props.post, {
isDeleted: true
})
)
ajax.delete(this.props.post.api.index).then(
() => {
snackbar.success(gettext("Event has been deleted."))
},
rejection => {
if (rejection.status === 400) {
snackbar.error(rejection.detail[0])
} else {
snackbar.apiError(rejection)
}
store.dispatch(
post.patch(this.props.post, {
isDeleted: false
})
)
}
)
}
render() {
return (
{gettext("Delete")}
)
}
}