mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-11 00:14:50 +03:00
Improved knockout observables management to prevent memory leaks
This commit is contained in:
parent
b165a1de4f
commit
3eb6ab1ef7
46 changed files with 1020 additions and 1013 deletions
|
|
@ -10,6 +10,10 @@ export class AbstractCollectionModel extends Array
|
|||
super();
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
this.forEach(item => item.onDestroy && item.onDestroy());
|
||||
}
|
||||
|
||||
/**
|
||||
* @static
|
||||
* @param {FetchJson} json
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class FolderModel extends AbstractModel {
|
|||
this.interval = 0;
|
||||
|
||||
this.selectable = false;
|
||||
this.existen = true;
|
||||
this.exists = true;
|
||||
|
||||
this.addObservables({
|
||||
name: '',
|
||||
|
|
@ -29,7 +29,7 @@ class FolderModel extends AbstractModel {
|
|||
focused: false,
|
||||
selected: false,
|
||||
edited: false,
|
||||
subScribed: true,
|
||||
subscribed: true,
|
||||
checkable: false,
|
||||
deleteAccess: false,
|
||||
|
||||
|
|
@ -54,10 +54,6 @@ class FolderModel extends AbstractModel {
|
|||
const folder = super.reviveFromJson(json);
|
||||
if (folder) {
|
||||
folder.deep = json.FullNameRaw.split(folder.delimiter).length - 1;
|
||||
folder.selectable = !!json.IsSelectable;
|
||||
folder.existen = !!json.IsExists;
|
||||
|
||||
folder.subScribed(!!json.IsSubscribed);
|
||||
|
||||
folder.messageCountAll = ko.computed({
|
||||
read: folder.privateMessageCountAll,
|
||||
|
|
@ -87,26 +83,26 @@ class FolderModel extends AbstractModel {
|
|||
|
||||
isInbox: () => FolderType.Inbox === folder.type(),
|
||||
|
||||
hasSubScribedSubfolders:
|
||||
hasSubscribedSubfolders:
|
||||
() =>
|
||||
!!folder.subFolders().find(
|
||||
oFolder => (oFolder.subScribed() || oFolder.hasSubScribedSubfolders()) && !oFolder.isSystemFolder()
|
||||
oFolder => (oFolder.subscribed() || oFolder.hasSubscribedSubfolders()) && !oFolder.isSystemFolder()
|
||||
),
|
||||
|
||||
canBeEdited: () => FolderType.User === folder.type() && folder.existen && folder.selectable,
|
||||
canBeEdited: () => FolderType.User === folder.type() && folder.exists && folder.selectable,
|
||||
|
||||
visible: () => {
|
||||
const isSubScribed = folder.subScribed(),
|
||||
isSubFolders = folder.hasSubScribedSubfolders();
|
||||
const isSubscribed = folder.subscribed(),
|
||||
isSubFolders = folder.hasSubscribedSubfolders();
|
||||
|
||||
return isSubScribed || (isSubFolders && (!folder.existen || !folder.selectable));
|
||||
return isSubscribed || (isSubFolders && (!folder.exists || !folder.selectable));
|
||||
},
|
||||
|
||||
isSystemFolder: () => FolderType.User !== folder.type(),
|
||||
|
||||
hidden: () => {
|
||||
const isSystem = folder.isSystemFolder(),
|
||||
isSubFolders = folder.hasSubScribedSubfolders();
|
||||
isSubFolders = folder.hasSubscribedSubfolders();
|
||||
|
||||
return (isSystem && !isSubFolders) || (!folder.selectable && !isSubFolders);
|
||||
},
|
||||
|
|
@ -137,7 +133,7 @@ class FolderModel extends AbstractModel {
|
|||
|
||||
selectableForFolderList: () => !folder.isSystemFolder() && folder.selectable,
|
||||
|
||||
canBeSubScribed: () => !folder.isSystemFolder() && folder.selectable,
|
||||
canBeSubscribed: () => !folder.isSystemFolder() && folder.selectable,
|
||||
|
||||
canBeChecked: () => !folder.isSystemFolder() && folder.selectable,
|
||||
|
||||
|
|
@ -221,9 +217,9 @@ class FolderModel extends AbstractModel {
|
|||
|
||||
hasUnreadMessages: () => 0 < folder.messageCountUnread() && folder.printableUnreadCount(),
|
||||
|
||||
hasSubScribedUnreadMessagesSubfolders: () =>
|
||||
hasSubscribedUnreadMessagesSubfolders: () =>
|
||||
!!folder.subFolders().find(
|
||||
folder => folder.hasUnreadMessages() || folder.hasSubScribedUnreadMessagesSubfolders()
|
||||
folder => folder.hasUnreadMessages() || folder.hasSubscribedUnreadMessagesSubfolders()
|
||||
)
|
||||
});
|
||||
|
||||
|
|
@ -246,7 +242,7 @@ class FolderModel extends AbstractModel {
|
|||
* @returns {string}
|
||||
*/
|
||||
collapsedCss() {
|
||||
return 'e-collapsed-sign ' + (this.hasSubScribedSubfolders()
|
||||
return 'e-collapsed-sign ' + (this.hasSubscribedSubfolders()
|
||||
? (this.collapsed() ? 'icon-right-mini' : 'icon-down-mini')
|
||||
: 'icon-none'
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue