mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-07 16:37:02 +03:00
Improved "delete folder" error handling.
This commit is contained in:
parent
503219c70e
commit
1d9c772b94
4 changed files with 42 additions and 36 deletions
14
dev/External/ko.js
vendored
14
dev/External/ko.js
vendored
|
|
@ -3,15 +3,17 @@ import { doc, createElement } from 'Common/Globals';
|
||||||
import { SaveSettingsStep } from 'Common/Enums';
|
import { SaveSettingsStep } from 'Common/Enums';
|
||||||
import { arrayLength, isFunction } from 'Common/Utils';
|
import { arrayLength, isFunction } from 'Common/Utils';
|
||||||
|
|
||||||
const
|
|
||||||
koValue = value => !ko.isObservable(value) && isFunction(value) ? value() : ko.unwrap(value);
|
|
||||||
|
|
||||||
ko.bindingHandlers.tooltipErrorTip = {
|
ko.bindingHandlers.tooltipErrorTip = {
|
||||||
init: element => {
|
init: (element, fValueAccessor) => {
|
||||||
doc.addEventListener('click', () => element.removeAttribute('data-rainloopErrorTip'));
|
doc.addEventListener('click', () => {
|
||||||
|
let value = fValueAccessor();
|
||||||
|
ko.isObservable(value) && value('');
|
||||||
|
element.removeAttribute('data-rainloopErrorTip');
|
||||||
|
});
|
||||||
},
|
},
|
||||||
update: (element, fValueAccessor) => {
|
update: (element, fValueAccessor) => {
|
||||||
const value = koValue(fValueAccessor());
|
let value = ko.unwrap(fValueAccessor());
|
||||||
|
value = isFunction(value) ? value() : value;
|
||||||
if (value) {
|
if (value) {
|
||||||
setTimeout(() => element.setAttribute('data-rainloopErrorTip', value), 100);
|
setTimeout(() => element.setAttribute('data-rainloopErrorTip', value), 100);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -219,6 +219,7 @@ export class FolderModel extends AbstractModel {
|
||||||
deleteAccess: false,
|
deleteAccess: false,
|
||||||
|
|
||||||
nameForEdit: '',
|
nameForEdit: '',
|
||||||
|
errorMsg: '',
|
||||||
|
|
||||||
privateMessageCountAll: 0,
|
privateMessageCountAll: 0,
|
||||||
privateMessageCountUnread: 0,
|
privateMessageCountUnread: 0,
|
||||||
|
|
|
||||||
|
|
@ -121,39 +121,40 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ {
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteFolder(folderToRemove) {
|
deleteFolder(folderToRemove) {
|
||||||
if (
|
if (folderToRemove
|
||||||
folderToRemove &&
|
&& folderToRemove.canBeDeleted()
|
||||||
folderToRemove.canBeDeleted() &&
|
&& folderToRemove.deleteAccess()
|
||||||
folderToRemove.deleteAccess() &&
|
|
||||||
0 === folderToRemove.privateMessageCountAll()
|
|
||||||
) {
|
) {
|
||||||
folderForDeletion(null);
|
if (0 < folderToRemove.privateMessageCountAll()) {
|
||||||
|
// FolderUserStore.folderListError(getNotification(Notification.CantDeleteNonEmptyFolder));
|
||||||
|
folderToRemove.errorMsg(getNotification(Notification.CantDeleteNonEmptyFolder));
|
||||||
|
} else {
|
||||||
|
folderForDeletion(null);
|
||||||
|
|
||||||
if (folderToRemove) {
|
if (folderToRemove) {
|
||||||
Remote.abort('Folders').post('FolderDelete', FolderUserStore.foldersDeleting, {
|
Remote.abort('Folders').post('FolderDelete', FolderUserStore.foldersDeleting, {
|
||||||
Folder: folderToRemove.fullName
|
Folder: folderToRemove.fullName
|
||||||
}).then(
|
}).then(
|
||||||
() => {
|
() => {
|
||||||
// folderToRemove.flags.push('\\nonexistent');
|
// folderToRemove.flags.push('\\nonexistent');
|
||||||
folderToRemove.selectable(false);
|
folderToRemove.selectable(false);
|
||||||
// folderToRemove.subscribed(false);
|
// folderToRemove.subscribed(false);
|
||||||
// folderToRemove.checkable(false);
|
// folderToRemove.checkable(false);
|
||||||
if (!folderToRemove.subFolders.length) {
|
if (!folderToRemove.subFolders.length) {
|
||||||
removeFolderFromCacheList(folderToRemove.fullName);
|
removeFolderFromCacheList(folderToRemove.fullName);
|
||||||
const folder = getFolderFromCacheList(folderToRemove.parentName);
|
const folder = getFolderFromCacheList(folderToRemove.parentName);
|
||||||
(folder ? folder.subFolders : FolderUserStore.folderList).remove(folderToRemove);
|
(folder ? folder.subFolders : FolderUserStore.folderList).remove(folderToRemove);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error => {
|
||||||
|
FolderUserStore.folderListError(
|
||||||
|
getNotification(error.code, '', Notification.CantDeleteFolder)
|
||||||
|
+ '.\n' + error.message
|
||||||
|
);
|
||||||
}
|
}
|
||||||
},
|
);
|
||||||
error => {
|
}
|
||||||
FolderUserStore.folderListError(
|
|
||||||
getNotification(error.code, '', Notification.CantDeleteFolder)
|
|
||||||
+ '.\n' + error.message
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
} else if (0 < folderToRemove.privateMessageCountAll()) {
|
|
||||||
FolderUserStore.folderListError(getNotification(Notification.CantDeleteNonEmptyFolder));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
<tr data-bind="css: { 'selectable': selectable, 'system': isSystemFolder }">
|
<tr data-bind="css: { 'selectable': selectable, 'system': isSystemFolder }">
|
||||||
<td data-bind="css: 'deep-' + deep">
|
<td data-bind="css: 'deep-' + deep">
|
||||||
<span class="folder-name" data-bind="text: name, visible: !edited(), css: { 'can-be-edited': canBeEdited }, click: function (oFolder) { oFolder.canBeEdited() && $root.folderForEdit(oFolder); }"></span>
|
<span class="folder-name" data-bind="text: name, visible: !edited(), css: { 'can-be-edited': canBeEdited },
|
||||||
|
click: function (oFolder) { oFolder.canBeEdited() && $root.folderForEdit(oFolder); },
|
||||||
|
tooltipErrorTip: errorMsg"></span>
|
||||||
<input type="text"
|
<input type="text"
|
||||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||||
data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }" />
|
data-bind="value: nameForEdit, visible: edited, hasfocus: edited, onEnter: function () { $root.folderEditOnEnter($data); }, onEsc: function () { $root.folderEditOnEsc($data); }" />
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue