mirror of
https://github.com/documize/community.git
synced 2025-07-24 15:49:44 +02:00
move documents new UX
This commit is contained in:
parent
bae1245d47
commit
aee9345886
14 changed files with 141 additions and 207 deletions
|
@ -10,11 +10,14 @@
|
|||
// https://documize.com
|
||||
|
||||
import { computed } from '@ember/object';
|
||||
import { A } from "@ember/array"
|
||||
import Component from '@ember/component';
|
||||
|
||||
export default Component.extend({
|
||||
showDeleteDialog: false,
|
||||
selectedDocuments: [],
|
||||
showMoveDialog: false,
|
||||
selectedDocuments: A([]),
|
||||
selectedCaption: 'document',
|
||||
|
||||
showAdd: computed('permissions', 'documents', function() {
|
||||
return this.get('documents.length') === 0 && this.get('permissions.documentAdd');
|
||||
|
@ -26,23 +29,50 @@ export default Component.extend({
|
|||
return this.get('permissions.documentDelete') || this.get('permissions.documentMove');
|
||||
}),
|
||||
|
||||
didReceiveAttrs() {
|
||||
this._super(...arguments);
|
||||
|
||||
let space = this.get('space');
|
||||
let targets = _.reject(this.get('spaces'), {id: space.get('id')});
|
||||
this.set('moveOptions', A(targets));
|
||||
this.set('selectedDocuments', A([]));
|
||||
},
|
||||
|
||||
actions: {
|
||||
onConfirmDeleteDocuments() {
|
||||
onShowDeleteDocuments() {
|
||||
this.set('showDeleteDialog', true);
|
||||
},
|
||||
|
||||
onDeleteDocuments() {
|
||||
this.set('showDeleteDialog', false);
|
||||
let list = this.get('selectedDocuments');
|
||||
|
||||
// list.forEach(d => {
|
||||
// let doc = this.get('documents').findBy('id', d);
|
||||
// doc.set('selected', false);
|
||||
// });
|
||||
this.set('selectedDocuments', A([]));
|
||||
this.set('showDeleteDialog', false);
|
||||
|
||||
this.attrs.onDeleteDocument(list);
|
||||
|
||||
this.set('selectedDocuments', []);
|
||||
return true;
|
||||
},
|
||||
|
||||
onShowMoveDocuments() {
|
||||
this.set('showMoveDialog', true);
|
||||
},
|
||||
|
||||
onMoveDocuments() {
|
||||
let list = this.get('selectedDocuments');
|
||||
let spaces = this.get('spaces');
|
||||
let moveSpaceId = '';
|
||||
|
||||
spaces.forEach(space => {
|
||||
if (space.get('selected')) {
|
||||
moveSpaceId = space.get('id');
|
||||
}
|
||||
});
|
||||
|
||||
if (moveSpaceId === '') return false;
|
||||
|
||||
this.set('showMoveDialog', false);
|
||||
this.set('selectedDocuments', A([]));
|
||||
this.attrs.onMoveDocument(list, moveSpaceId);
|
||||
|
||||
return true;
|
||||
},
|
||||
|
@ -59,7 +89,8 @@ export default Component.extend({
|
|||
list = _.without(list, documentId);
|
||||
}
|
||||
|
||||
this.set('selectedDocuments', list);
|
||||
this.set('selectedCaption', list.length > 1 ? 'documents' : 'document');
|
||||
this.set('selectedDocuments', A(list));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,95 +0,0 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
import { computed } from '@ember/object';
|
||||
import Component from '@ember/component';
|
||||
import { inject as service } from '@ember/service';
|
||||
import NotifierMixin from '../../mixins/notifier';
|
||||
import TooltipMixin from '../../mixins/tooltip';
|
||||
import AuthMixin from '../../mixins/auth';
|
||||
|
||||
export default Component.extend(NotifierMixin, TooltipMixin, AuthMixin, {
|
||||
folderService: service('folder'),
|
||||
session: service(),
|
||||
appMeta: service(),
|
||||
pinned: service(),
|
||||
showToolbar: false,
|
||||
folder: {},
|
||||
busy: false,
|
||||
moveFolderId: "",
|
||||
drop: null,
|
||||
pinState : {
|
||||
isPinned: false,
|
||||
pinId: '',
|
||||
newName: ''
|
||||
},
|
||||
deleteSpaceName: '',
|
||||
spaceSettings: computed('permissions', function() {
|
||||
return this.get('permissions.spaceOwner') || this.get('permissions.spaceManage');
|
||||
}),
|
||||
|
||||
didReceiveAttrs() {
|
||||
this._super(...arguments);
|
||||
|
||||
let folder = this.get('folder');
|
||||
let targets = _.reject(this.get('folders'), {id: folder.get('id')});
|
||||
|
||||
this.set('movedFolderOptions', targets);
|
||||
},
|
||||
|
||||
didRender() {
|
||||
this._super(...arguments);
|
||||
this.renderTooltips();
|
||||
},
|
||||
|
||||
renderTooltips() {
|
||||
this.destroyTooltips();
|
||||
},
|
||||
|
||||
willDestroyElement() {
|
||||
this._super(...arguments);
|
||||
|
||||
if (this.get('isDestroyed') || this.get('isDestroying')) return;
|
||||
|
||||
if (is.not.null(this.get('drop'))) {
|
||||
this.get('drop').destroy();
|
||||
this.set('drop', null);
|
||||
}
|
||||
|
||||
this.destroyTooltips();
|
||||
},
|
||||
|
||||
actions: {
|
||||
setMoveFolder(folderId) {
|
||||
this.set('moveFolderId', folderId);
|
||||
|
||||
let folders = this.get('folders');
|
||||
|
||||
folders.forEach(folder => {
|
||||
folder.set('selected', folder.id === folderId);
|
||||
});
|
||||
},
|
||||
|
||||
moveDocuments() {
|
||||
if (this.get("moveFolderId") === "") {
|
||||
return false;
|
||||
}
|
||||
|
||||
this.attrs.onMoveDocument(this.get('moveFolderId'));
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
onStartDocument() {
|
||||
this.attrs.onStartDocument();
|
||||
}
|
||||
}
|
||||
});
|
|
@ -9,25 +9,19 @@
|
|||
//
|
||||
// https://documize.com
|
||||
|
||||
import { all } from 'rsvp';
|
||||
|
||||
import { schedule } from '@ember/runloop';
|
||||
import { gt } from '@ember/object/computed';
|
||||
import Component from '@ember/component';
|
||||
import { inject as service } from '@ember/service';
|
||||
import NotifierMixin from '../../mixins/notifier';
|
||||
import TooltipMixin from '../../mixins/tooltip';
|
||||
import { all } from 'rsvp';
|
||||
import { schedule } from '@ember/runloop';
|
||||
import { gt } from '@ember/object/computed';
|
||||
import AuthMixin from '../../mixins/auth';
|
||||
|
||||
export default Component.extend(NotifierMixin, TooltipMixin, AuthMixin, {
|
||||
export default Component.extend(AuthMixin, {
|
||||
router: service(),
|
||||
documentService: service('document'),
|
||||
folderService: service('folder'),
|
||||
localStorage: service('localStorage'),
|
||||
selectedDocuments: [],
|
||||
hasSelectedDocuments: gt('selectedDocuments.length', 0),
|
||||
hasCategories: gt('categories.length', 0),
|
||||
showStartDocument: false,
|
||||
filteredDocs: [],
|
||||
|
||||
didReceiveAttrs() {
|
||||
|
@ -41,20 +35,6 @@ export default Component.extend(NotifierMixin, TooltipMixin, AuthMixin, {
|
|||
this.set('filteredDocs', []);
|
||||
},
|
||||
|
||||
didRender() {
|
||||
this._super(...arguments);
|
||||
|
||||
if (this.get('rootDocCount') > 0) {
|
||||
this.addTooltip(document.getElementById("uncategorized-button"));
|
||||
}
|
||||
},
|
||||
|
||||
willDestroyElement() {
|
||||
this._super(...arguments);
|
||||
|
||||
this.destroyTooltips();
|
||||
},
|
||||
|
||||
setup() {
|
||||
let categories = this.get('categories');
|
||||
let categorySummary = this.get('categorySummary');
|
||||
|
@ -81,22 +61,42 @@ export default Component.extend(NotifierMixin, TooltipMixin, AuthMixin, {
|
|||
},
|
||||
|
||||
actions: {
|
||||
onMoveDocument(folder) {
|
||||
zonMoveDocumentz(documents, targetSpaceId) {
|
||||
let self = this;
|
||||
let documents = this.get('selectedDocuments');
|
||||
|
||||
documents.forEach(function (documentId) {
|
||||
self.get('documentService').getDocument(documentId).then(function (doc) {
|
||||
doc.set('folderId', folder);
|
||||
doc.set('selected', !doc.get('selected'));
|
||||
doc.set('folderId', targetSpaceId);
|
||||
doc.set('selected', false);
|
||||
self.get('documentService').save(doc).then(function () {
|
||||
self.attrs.onRefresh();
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
this.set('selectedDocuments', []);
|
||||
this.send("showNotification", "Moved");
|
||||
onMoveDocument(documents, targetSpaceId) {
|
||||
let self = this;
|
||||
let promises1 = [];
|
||||
let promises2 = [];
|
||||
|
||||
documents.forEach(function(documentId, index) {
|
||||
promises1[index] = self.get('documentService').getDocument(documentId);
|
||||
});
|
||||
|
||||
all(promises1).then(() => {
|
||||
promises1.forEach(function(doc, index) {
|
||||
doc.then((d) => {
|
||||
d.set('folderId', targetSpaceId);
|
||||
d.set('selected', false);
|
||||
promises2[index] = self.get('documentService').save(d);
|
||||
});
|
||||
});
|
||||
|
||||
all(promises2).then(() => {
|
||||
self.attrs.onRefresh();
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
onDeleteDocument(documents) {
|
||||
|
@ -114,7 +114,6 @@ export default Component.extend(NotifierMixin, TooltipMixin, AuthMixin, {
|
|||
});
|
||||
|
||||
this.set('documents', documents);
|
||||
this.set('selectedDocuments', []);
|
||||
this.attrs.onRefresh();
|
||||
});
|
||||
},
|
||||
|
|
|
@ -18,6 +18,7 @@ export default Component.extend({
|
|||
confirmCaption: 'OK',
|
||||
title: 'Confirm',
|
||||
show: false,
|
||||
buttonType: 'btn-secondary',
|
||||
|
||||
didInsertElement() {
|
||||
this._super(...arguments);
|
||||
|
@ -54,7 +55,8 @@ export default Component.extend({
|
|||
return;
|
||||
}
|
||||
|
||||
if (this.attrs.onAction()) {
|
||||
let result = this.attrs.onAction();
|
||||
if (result) {
|
||||
this.set('show', false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,10 +15,19 @@ import Component from '@ember/component';
|
|||
|
||||
export default Component.extend({
|
||||
nameField: 'category',
|
||||
singleSelect: false,
|
||||
items: [],
|
||||
|
||||
actions: {
|
||||
onToggle(item) {
|
||||
if (this.get('singleSelect')) {
|
||||
let items = this.get('items');
|
||||
items.forEach(item => {
|
||||
set(item, 'selected', false);
|
||||
});
|
||||
this.set('items', items);
|
||||
}
|
||||
|
||||
set(item, 'selected', !item.get('selected'));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue