@@ -36,6 +36,10 @@ class DocumentMenu extends React.Component<Props> {
|
||||
this.props.history.push(documentMoveUrl(this.props.document));
|
||||
};
|
||||
|
||||
handleDuplicate = async (ev: SyntheticEvent<*>) => {
|
||||
this.props.document.duplicate();
|
||||
};
|
||||
|
||||
handlePin = (ev: SyntheticEvent<*>) => {
|
||||
this.props.document.pin();
|
||||
};
|
||||
@@ -100,6 +104,9 @@ class DocumentMenu extends React.Component<Props> {
|
||||
>
|
||||
New child document
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem onClick={this.handleDuplicate}>
|
||||
Duplicate
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem onClick={this.handleMove}>Move…</DropdownMenuItem>
|
||||
</React.Fragment>
|
||||
)}
|
||||
|
||||
@@ -270,6 +270,10 @@ class Document extends BaseModel {
|
||||
return false;
|
||||
};
|
||||
|
||||
duplicate = () => {
|
||||
this.emit('documents.duplicate', this);
|
||||
};
|
||||
|
||||
download() {
|
||||
const a = window.document.createElement('a');
|
||||
a.textContent = 'download';
|
||||
|
||||
@@ -203,6 +203,26 @@ class DocumentsStore extends BaseStore {
|
||||
}
|
||||
};
|
||||
|
||||
@action
|
||||
duplicate = async (document: Document): * => {
|
||||
const res = await client.post('/documents.create', {
|
||||
publish: true,
|
||||
parentDocument: document.parentDocumentId,
|
||||
collection: document.collection.id,
|
||||
title: `${document.title} (duplicate)`,
|
||||
text: document.text,
|
||||
});
|
||||
|
||||
if (res && res.data) {
|
||||
const duped = res.data;
|
||||
this.emit('documents.create', duped);
|
||||
this.emit('documents.publish', {
|
||||
id: duped.id,
|
||||
collectionId: duped.collection.id,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@action
|
||||
add = (document: Document): void => {
|
||||
this.data.set(document.id, document);
|
||||
@@ -235,6 +255,9 @@ class DocumentsStore extends BaseStore {
|
||||
this.on('documents.create', (data: Document) => {
|
||||
this.add(new Document(data));
|
||||
});
|
||||
this.on('documents.duplicate', (data: Document) => {
|
||||
this.duplicate(data);
|
||||
});
|
||||
|
||||
// Re-fetch dashboard content so that we don't show deleted documents
|
||||
this.on('collections.delete', () => {
|
||||
|
||||
Reference in New Issue
Block a user