snappymail/dev/Settings/User/Folders.js

155 lines
4.1 KiB
JavaScript
Raw Normal View History

2016-07-16 05:29:42 +08:00
import ko from 'ko';
2014-08-25 23:49:01 +08:00
2019-07-05 03:19:24 +08:00
import { ClientSideKeyName, Notification, Magics } from 'Common/Enums';
import { trim } from 'Common/Utils';
2019-07-05 03:19:24 +08:00
import { getNotification, i18n } from 'Common/Translator';
2014-08-21 23:08:34 +08:00
2019-07-05 03:19:24 +08:00
import { removeFolderFromCacheList } from 'Common/Cache';
2014-08-21 23:08:34 +08:00
2019-07-05 03:19:24 +08:00
import { appSettingsGet } from 'Storage/Settings';
2016-07-16 05:29:42 +08:00
import * as Local from 'Storage/Client';
2015-02-22 06:00:51 +08:00
2016-07-16 05:29:42 +08:00
import FolderStore from 'Stores/User/Folder';
2015-02-23 00:35:17 +08:00
2016-07-16 05:29:42 +08:00
import Promises from 'Promises/User/Ajax';
import Remote from 'Remote/User/Ajax';
2015-04-26 06:01:56 +08:00
2019-07-05 03:19:24 +08:00
import { getApp } from 'Helper/Apps/User';
2019-07-05 03:19:24 +08:00
import { showScreenPopup } from 'Knoin/Knoin';
2019-07-05 03:19:24 +08:00
class FoldersUserSettings {
2016-07-16 05:29:42 +08:00
constructor() {
this.displaySpecSetting = FolderStore.displaySpecSetting;
this.folderList = FolderStore.folderList;
2014-08-21 23:08:34 +08:00
2019-07-05 03:19:24 +08:00
this.folderListHelp = ko.observable('').extend({ throttle: Magics.Time100ms });
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
this.loading = ko.computed(() => {
2019-07-05 03:19:24 +08:00
const loading = FolderStore.foldersLoading(),
2016-08-24 06:17:50 +08:00
creating = FolderStore.foldersCreating(),
deleting = FolderStore.foldersDeleting(),
renaming = FolderStore.foldersRenaming();
2014-08-21 23:08:34 +08:00
2016-08-24 06:17:50 +08:00
return loading || creating || deleting || renaming;
2016-07-16 05:29:42 +08:00
});
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
this.folderForDeletion = ko.observable(null).deleteAccessHelper();
2014-08-21 23:08:34 +08:00
2019-07-05 03:19:24 +08:00
this.folderForEdit = ko.observable(null).extend({ toggleSubscribeProperty: [this, 'edited'] });
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
this.useImapSubscribe = !!appSettingsGet('useImapSubscribe');
}
2016-06-30 08:02:45 +08:00
2016-07-16 05:29:42 +08:00
folderEditOnEnter(folder) {
const nameToEdit = folder ? trim(folder.nameForEdit()) : '';
2014-08-25 15:10:51 +08:00
if (nameToEdit && folder.name() !== nameToEdit) {
2016-07-16 05:29:42 +08:00
Local.set(ClientSideKeyName.FoldersLashHash, '');
2014-08-21 23:08:34 +08:00
getApp().foldersPromisesActionHelper(
2016-07-16 05:29:42 +08:00
Promises.folderRename(folder.fullNameRaw, nameToEdit, FolderStore.foldersRenaming),
Notification.CantRenameFolder
);
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
removeFolderFromCacheList(folder.fullNameRaw);
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
folder.name(nameToEdit);
}
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
folder.edited(false);
2016-06-30 08:02:45 +08:00
}
2016-07-16 05:29:42 +08:00
folderEditOnEsc(folder) {
2019-07-05 03:19:24 +08:00
if (folder) {
2016-07-16 05:29:42 +08:00
folder.edited(false);
}
}
2016-06-30 08:02:45 +08:00
2016-07-16 05:29:42 +08:00
onShow() {
FolderStore.folderList.error('');
}
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
onBuild(oDom) {
oDom
.on('mouseover', '.delete-folder-parent', () => {
this.folderListHelp(i18n('SETTINGS_FOLDERS/HELP_DELETE_FOLDER'));
})
.on('mouseover', '.subscribe-folder-parent', () => {
this.folderListHelp(i18n('SETTINGS_FOLDERS/HELP_SHOW_HIDE_FOLDER'));
})
.on('mouseover', '.check-folder-parent', () => {
this.folderListHelp(i18n('SETTINGS_FOLDERS/HELP_CHECK_FOR_NEW_MESSAGES'));
})
.on('mouseout', '.subscribe-folder-parent, .check-folder-parent, .delete-folder-parent', () => {
this.folderListHelp('');
});
}
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
createFolder() {
showScreenPopup(require('View/Popup/FolderCreate'));
}
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
systemFolder() {
showScreenPopup(require('View/Popup/FolderSystem'));
}
2014-08-21 23:08:34 +08:00
2016-07-16 05:29:42 +08:00
deleteFolder(folderToRemove) {
2019-07-05 03:19:24 +08:00
if (
folderToRemove &&
folderToRemove.canBeDeleted() &&
folderToRemove.deleteAccess() &&
0 === folderToRemove.privateMessageCountAll()
) {
2016-07-16 05:29:42 +08:00
this.folderForDeletion(null);
2014-08-21 23:08:34 +08:00
2019-07-05 03:19:24 +08:00
if (folderToRemove) {
const fRemoveFolder = function(folder) {
if (folderToRemove === folder) {
return true;
}
folder.subFolders.remove(fRemoveFolder);
return false;
};
2016-07-16 05:29:42 +08:00
Local.set(ClientSideKeyName.FoldersLashHash, '');
FolderStore.folderList.remove(fRemoveFolder);
getApp().foldersPromisesActionHelper(
2016-07-16 05:29:42 +08:00
Promises.folderDelete(folderToRemove.fullNameRaw, FolderStore.foldersDeleting),
Notification.CantDeleteFolder
);
removeFolderFromCacheList(folderToRemove.fullNameRaw);
}
2019-07-05 03:19:24 +08:00
} else if (0 < folderToRemove.privateMessageCountAll()) {
2016-07-16 05:29:42 +08:00
FolderStore.folderList.error(getNotification(Notification.CantDeleteNonEmptyFolder));
2014-08-21 23:08:34 +08:00
}
2016-06-30 08:02:45 +08:00
}
2015-04-26 06:01:56 +08:00
2016-07-16 05:29:42 +08:00
subscribeFolder(folder) {
Local.set(ClientSideKeyName.FoldersLashHash, '');
Remote.folderSetSubscribe(()=>{}, folder.fullNameRaw, true);
2016-07-16 05:29:42 +08:00
folder.subScribed(true);
}
2015-04-26 06:01:56 +08:00
2016-07-16 05:29:42 +08:00
unSubscribeFolder(folder) {
Local.set(ClientSideKeyName.FoldersLashHash, '');
Remote.folderSetSubscribe(()=>{}, folder.fullNameRaw, false);
2016-07-16 05:29:42 +08:00
folder.subScribed(false);
}
2015-04-26 06:01:56 +08:00
2016-07-16 05:29:42 +08:00
checkableTrueFolder(folder) {
Remote.folderSetCheckable(()=>{}, folder.fullNameRaw, true);
2016-07-16 05:29:42 +08:00
folder.checkable(true);
}
2015-04-26 06:01:56 +08:00
2016-07-16 05:29:42 +08:00
checkableFalseFolder(folder) {
Remote.folderSetCheckable(()=>{}, folder.fullNameRaw, false);
2016-07-16 05:29:42 +08:00
folder.checkable(false);
}
}
2014-08-21 23:08:34 +08:00
2019-07-05 03:19:24 +08:00
export { FoldersUserSettings, FoldersUserSettings as default };