parent
8ffe6730fa
commit
3c7b8d2322
@ -271,6 +271,27 @@ export function updateUnpublishedEntryStatus(collection, slug, oldStatus, newSta
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function deleteUnpublishedEntry(collection, slug) {
|
||||||
|
return (dispatch, getState) => {
|
||||||
|
const state = getState();
|
||||||
|
const backend = currentBackend(state.config);
|
||||||
|
const transactionID = uuid.v4();
|
||||||
|
dispatch(unpublishedEntryPublishRequest(collection, slug, transactionID));
|
||||||
|
backend.deleteUnpublishedEntry(collection, slug)
|
||||||
|
.then(() => {
|
||||||
|
dispatch(unpublishedEntryPublished(collection, slug, transactionID));
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
dispatch(notifSend({
|
||||||
|
message: `Failed to close PR: ${ error }`,
|
||||||
|
kind: 'danger',
|
||||||
|
dismissAfter: 8000,
|
||||||
|
}));
|
||||||
|
dispatch(unpublishedEntryPublishError(collection, slug, transactionID));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function publishUnpublishedEntry(collection, slug) {
|
export function publishUnpublishedEntry(collection, slug) {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
|
@ -200,6 +200,9 @@ class Backend {
|
|||||||
return this.implementation.publishUnpublishedEntry(collection, slug);
|
return this.implementation.publishUnpublishedEntry(collection, slug);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deleteUnpublishedEntry(collection, slug) {
|
||||||
|
return this.implementation.deleteUnpublishedEntry(collection, slug);
|
||||||
|
}
|
||||||
|
|
||||||
entryToRaw(collection, entry) {
|
entryToRaw(collection, entry) {
|
||||||
const format = resolveFormat(collection, entry.toJS());
|
const format = resolveFormat(collection, entry.toJS());
|
||||||
|
@ -314,6 +314,14 @@ export default class API {
|
|||||||
.then(updatedMetadata => this.storeMetadata(contentKey, updatedMetadata));
|
.then(updatedMetadata => this.storeMetadata(contentKey, updatedMetadata));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deleteUnpublishedEntry(collection, slug) {
|
||||||
|
const contentKey = slug;
|
||||||
|
let prNumber;
|
||||||
|
return this.retrieveMetadata(contentKey)
|
||||||
|
.then(metadata => this.closePR(metadata.pr, metadata.objects))
|
||||||
|
.then(() => this.deleteBranch(`cms/${ contentKey }`));
|
||||||
|
}
|
||||||
|
|
||||||
publishUnpublishedEntry(collection, slug) {
|
publishUnpublishedEntry(collection, slug) {
|
||||||
const contentKey = slug;
|
const contentKey = slug;
|
||||||
let prNumber;
|
let prNumber;
|
||||||
@ -367,6 +375,18 @@ export default class API {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closePR(pullrequest, objects) {
|
||||||
|
const headSha = pullrequest.head;
|
||||||
|
const prNumber = pullrequest.number;
|
||||||
|
console.log("%c Deleting PR", "line-height: 30px;text-align: center;font-weight: bold"); // eslint-disable-line
|
||||||
|
return this.request(`${ this.repoURL }/pulls/${ prNumber }`, {
|
||||||
|
method: "PATCH",
|
||||||
|
body: JSON.stringify({
|
||||||
|
state: closed,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
mergePR(pullrequest, objects) {
|
mergePR(pullrequest, objects) {
|
||||||
const headSha = pullrequest.head;
|
const headSha = pullrequest.head;
|
||||||
const prNumber = pullrequest.number;
|
const prNumber = pullrequest.number;
|
||||||
|
@ -135,6 +135,9 @@ export default class GitHub {
|
|||||||
return this.api.updateUnpublishedEntryStatus(collection, slug, newStatus);
|
return this.api.updateUnpublishedEntryStatus(collection, slug, newStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deleteUnpublishedEntry(collection, slug) {
|
||||||
|
return this.api.deleteUnpublishedEntry(collection, slug);
|
||||||
|
}
|
||||||
publishUnpublishedEntry(collection, slug) {
|
publishUnpublishedEntry(collection, slug) {
|
||||||
return this.api.publishUnpublishedEntry(collection, slug);
|
return this.api.publishUnpublishedEntry(collection, slug);
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ class UnpublishedListing extends React.Component {
|
|||||||
entries: ImmutablePropTypes.orderedMap,
|
entries: ImmutablePropTypes.orderedMap,
|
||||||
handleChangeStatus: PropTypes.func.isRequired,
|
handleChangeStatus: PropTypes.func.isRequired,
|
||||||
handlePublish: PropTypes.func.isRequired,
|
handlePublish: PropTypes.func.isRequired,
|
||||||
|
handleDelete: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
handleChangeStatus = (newStatus, dragProps) => {
|
handleChangeStatus = (newStatus, dragProps) => {
|
||||||
@ -22,6 +23,11 @@ class UnpublishedListing extends React.Component {
|
|||||||
this.props.handleChangeStatus(collection, slug, oldStatus, newStatus);
|
this.props.handleChangeStatus(collection, slug, oldStatus, newStatus);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
requestDelete = (collection, slug, ownStatus) => {
|
||||||
|
if (window.confirm('Are you sure you want to delete this entry?')) {
|
||||||
|
this.props.handleDelete(collection, slug, ownStatus);
|
||||||
|
}
|
||||||
|
};
|
||||||
requestPublish = (collection, slug, ownStatus) => {
|
requestPublish = (collection, slug, ownStatus) => {
|
||||||
if (ownStatus !== status.last()) return;
|
if (ownStatus !== status.last()) return;
|
||||||
if (window.confirm('Are you sure you want to publish this entry?')) {
|
if (window.confirm('Are you sure you want to publish this entry?')) {
|
||||||
@ -82,6 +88,10 @@ class UnpublishedListing extends React.Component {
|
|||||||
<Link to={link}>
|
<Link to={link}>
|
||||||
<Button>Edit</Button>
|
<Button>Edit</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
<Button
|
||||||
|
onClick={this.requestDelete.bind(this, collection, slug, ownStatus)}>
|
||||||
|
Delete
|
||||||
|
</Button>
|
||||||
{
|
{
|
||||||
(ownStatus === status.last() && !entry.get('isPersisting', false)) &&
|
(ownStatus === status.last() && !entry.get('isPersisting', false)) &&
|
||||||
<Button
|
<Button
|
||||||
|
@ -2,7 +2,12 @@ import React, { Component, PropTypes } from 'react';
|
|||||||
import ImmutablePropTypes from 'react-immutable-proptypes';
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import { OrderedMap } from 'immutable';
|
import { OrderedMap } from 'immutable';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { loadUnpublishedEntries, updateUnpublishedEntryStatus, publishUnpublishedEntry } from '../../actions/editorialWorkflow';
|
import {
|
||||||
|
loadUnpublishedEntries,
|
||||||
|
updateUnpublishedEntryStatus,
|
||||||
|
publishUnpublishedEntry,
|
||||||
|
deleteUnpublishedEntry
|
||||||
|
} from '../../actions/editorialWorkflow';
|
||||||
import { selectUnpublishedEntriesByStatus } from '../../reducers';
|
import { selectUnpublishedEntriesByStatus } from '../../reducers';
|
||||||
import { EDITORIAL_WORKFLOW, status } from '../../constants/publishModes';
|
import { EDITORIAL_WORKFLOW, status } from '../../constants/publishModes';
|
||||||
import UnpublishedListing from '../../components/UnpublishedListing/UnpublishedListing';
|
import UnpublishedListing from '../../components/UnpublishedListing/UnpublishedListing';
|
||||||
@ -16,6 +21,7 @@ class unpublishedEntriesPanel extends Component {
|
|||||||
loadUnpublishedEntries: PropTypes.func.isRequired,
|
loadUnpublishedEntries: PropTypes.func.isRequired,
|
||||||
updateUnpublishedEntryStatus: PropTypes.func.isRequired,
|
updateUnpublishedEntryStatus: PropTypes.func.isRequired,
|
||||||
publishUnpublishedEntry: PropTypes.func.isRequired,
|
publishUnpublishedEntry: PropTypes.func.isRequired,
|
||||||
|
deleteUnpublishedEntry: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@ -26,14 +32,16 @@ class unpublishedEntriesPanel extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { isEditorialWorkflow, isFetching, unpublishedEntries, updateUnpublishedEntryStatus, publishUnpublishedEntry } = this.props;
|
const { isEditorialWorkflow, isFetching, unpublishedEntries, updateUnpublishedEntryStatus, publishUnpublishedEntry, deleteUnpublishedEntry } = this.props;
|
||||||
if (!isEditorialWorkflow) return null;
|
if (!isEditorialWorkflow) return null;
|
||||||
if (isFetching) return <Loader active>Loading Editorial Workflow Entries</Loader>;
|
if (isFetching) return <Loader active>Loading Editorial Workflow Entries</Loader>;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<UnpublishedListing
|
<UnpublishedListing
|
||||||
entries={unpublishedEntries}
|
entries={unpublishedEntries}
|
||||||
handleChangeStatus={updateUnpublishedEntryStatus}
|
handleChangeStatus={updateUnpublishedEntryStatus}
|
||||||
handlePublish={publishUnpublishedEntry}
|
handlePublish={publishUnpublishedEntry}
|
||||||
|
handleDelete={deleteUnpublishedEntry}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -62,4 +70,5 @@ export default connect(mapStateToProps, {
|
|||||||
loadUnpublishedEntries,
|
loadUnpublishedEntries,
|
||||||
updateUnpublishedEntryStatus,
|
updateUnpublishedEntryStatus,
|
||||||
publishUnpublishedEntry,
|
publishUnpublishedEntry,
|
||||||
|
deleteUnpublishedEntry,
|
||||||
})(unpublishedEntriesPanel);
|
})(unpublishedEntriesPanel);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user