mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Added: sort Folders on add/rename folder
This commit is contained in:
parent
65e192cc54
commit
a512759289
4 changed files with 42 additions and 44 deletions
|
|
@ -8,13 +8,16 @@ import { SettingsUserStore } from 'Stores/User/Settings';
|
||||||
import * as Local from 'Storage/Client';
|
import * as Local from 'Storage/Client';
|
||||||
|
|
||||||
export const
|
export const
|
||||||
/**
|
|
||||||
* @param {(string|number)} value
|
sortFolders = folders => {
|
||||||
* @param {boolean=} includeZero = true
|
try {
|
||||||
* @returns {boolean}
|
let collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
|
||||||
*/
|
folders.sort((a, b) =>
|
||||||
isPosNumeric = (value) => {
|
a.isInbox() ? -1 : (b.isInbox() ? 1 : collator.compare(a.fullName, b.fullName))
|
||||||
return null != value && /^[0-9]*$/.test(value.toString());
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import { SettingsUserStore } from 'Stores/User/Settings';
|
||||||
|
|
||||||
import ko from 'ko';
|
import ko from 'ko';
|
||||||
|
|
||||||
import { isPosNumeric } from 'Common/UtilsUser';
|
import { sortFolders } from 'Common/UtilsUser';
|
||||||
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
import { i18n, trigger as translatorTrigger } from 'Common/Translator';
|
||||||
|
|
||||||
import { AbstractModel } from 'Knoin/AbstractModel';
|
import { AbstractModel } from 'Knoin/AbstractModel';
|
||||||
|
|
@ -23,20 +23,22 @@ import { AbstractModel } from 'Knoin/AbstractModel';
|
||||||
//import { mailBox } from 'Common/Links';
|
//import { mailBox } from 'Common/Links';
|
||||||
|
|
||||||
const
|
const
|
||||||
normalizeFolder = sFolderFullName => ('' === sFolderFullName
|
isPosNumeric = value => null != value && /^[0-9]*$/.test(value.toString()),
|
||||||
|| UNUSED_OPTION_VALUE === sFolderFullName
|
|
||||||
|| null !== getFolderFromCacheList(sFolderFullName))
|
|
||||||
? sFolderFullName
|
|
||||||
: '';
|
|
||||||
|
|
||||||
const SystemFolders = {
|
normalizeFolder = sFolderFullName => ('' === sFolderFullName
|
||||||
Inbox: 0,
|
|| UNUSED_OPTION_VALUE === sFolderFullName
|
||||||
Sent: 0,
|
|| null !== getFolderFromCacheList(sFolderFullName))
|
||||||
Drafts: 0,
|
? sFolderFullName
|
||||||
Spam: 0,
|
: '',
|
||||||
Trash: 0,
|
|
||||||
Archive: 0
|
SystemFolders = {
|
||||||
};
|
Inbox: 0,
|
||||||
|
Sent: 0,
|
||||||
|
Drafts: 0,
|
||||||
|
Spam: 0,
|
||||||
|
Trash: 0,
|
||||||
|
Archive: 0
|
||||||
|
};
|
||||||
|
|
||||||
export class FolderCollectionModel extends AbstractCollectionModel
|
export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
{
|
{
|
||||||
|
|
@ -106,14 +108,7 @@ export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
|
|
||||||
let i = result.length;
|
let i = result.length;
|
||||||
if (i) {
|
if (i) {
|
||||||
try {
|
sortFolders(result);
|
||||||
let collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
|
|
||||||
result.sort((a, b) =>
|
|
||||||
a.isInbox() ? -1 : (b.isInbox() ? 1 : collator.compare(a.fullName, b.fullName))
|
|
||||||
);
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
while (i--) {
|
while (i--) {
|
||||||
let folder = result[i], parent = getFolderFromCacheList(folder.parentName);
|
let folder = result[i], parent = getFolderFromCacheList(folder.parentName);
|
||||||
|
|
@ -257,15 +252,16 @@ export class FolderModel extends AbstractModel {
|
||||||
static reviveFromJson(json) {
|
static reviveFromJson(json) {
|
||||||
const folder = super.reviveFromJson(json);
|
const folder = super.reviveFromJson(json);
|
||||||
if (folder) {
|
if (folder) {
|
||||||
const path = folder.fullName.split(folder.delimiter);
|
const path = folder.fullName.split(folder.delimiter),
|
||||||
|
type = (folder.metadata[FolderMetadataKeys.KolabFolderType]
|
||||||
|
|| folder.metadata[FolderMetadataKeys.KolabFolderTypeShared]
|
||||||
|
|| ''
|
||||||
|
).split('.')[0];
|
||||||
|
|
||||||
folder.deep = path.length - 1;
|
folder.deep = path.length - 1;
|
||||||
path.pop();
|
path.pop();
|
||||||
folder.parentName = path.join(folder.delimiter);
|
folder.parentName = path.join(folder.delimiter);
|
||||||
|
|
||||||
let type = (folder.metadata[FolderMetadataKeys.KolabFolderType]
|
|
||||||
|| folder.metadata[FolderMetadataKeys.KolabFolderTypeShared]
|
|
||||||
|| ''
|
|
||||||
).split('.')[0];
|
|
||||||
type && 'mail' != type && folder.kolabType(type);
|
type && 'mail' != type && folder.kolabType(type);
|
||||||
|
|
||||||
folder.messageCountAll = ko.computed({
|
folder.messageCountAll = ko.computed({
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import { getNotification } from 'Common/Translator';
|
||||||
import { setFolder, getFolderFromCacheList, removeFolderFromCacheList } from 'Common/Cache';
|
import { setFolder, getFolderFromCacheList, removeFolderFromCacheList } from 'Common/Cache';
|
||||||
import { Capa } from 'Common/Enums';
|
import { Capa } from 'Common/Enums';
|
||||||
import { defaultOptionsAfterRender } from 'Common/Utils';
|
import { defaultOptionsAfterRender } from 'Common/Utils';
|
||||||
|
import { sortFolders } from 'Common/UtilsUser';
|
||||||
import { initOnStartOrLangChange, i18n } from 'Common/Translator';
|
import { initOnStartOrLangChange, i18n } from 'Common/Translator';
|
||||||
|
|
||||||
import { FolderUserStore } from 'Stores/User/Folder';
|
import { FolderUserStore } from 'Stores/User/Folder';
|
||||||
|
|
@ -82,14 +83,10 @@ export class FoldersUserSettings /*extends AbstractViewSettings*/ {
|
||||||
// TODO: rename all subfolders with folder.delimiter to prevent reload?
|
// TODO: rename all subfolders with folder.delimiter to prevent reload?
|
||||||
} else {
|
} else {
|
||||||
removeFolderFromCacheList(folder.fullName);
|
removeFolderFromCacheList(folder.fullName);
|
||||||
data = data.Result;
|
folder.fullName = data.Result.FullName;
|
||||||
folder.fullName = data.FullName;
|
|
||||||
setFolder(folder);
|
setFolder(folder);
|
||||||
/*
|
const parent = getFolderFromCacheList(folder.parentName);
|
||||||
const folder = getFolderFromCacheList(folder.parentName);
|
sortFolders(parent ? parent.subFolders : FolderUserStore.folderList);
|
||||||
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
|
|
||||||
console.log((folder ? folder.subFolders : FolderUserStore.folderList).sort(collator.compare));
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import ko from 'ko';
|
||||||
import { Notification } from 'Common/Enums';
|
import { Notification } from 'Common/Enums';
|
||||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||||
import { defaultOptionsAfterRender } from 'Common/Utils';
|
import { defaultOptionsAfterRender } from 'Common/Utils';
|
||||||
import { folderListOptionsBuilder } from 'Common/UtilsUser';
|
import { folderListOptionsBuilder, sortFolders } from 'Common/UtilsUser';
|
||||||
import { getNotification } from 'Common/Translator';
|
import { getNotification } from 'Common/Translator';
|
||||||
|
|
||||||
import { FolderUserStore } from 'Stores/User/Folder';
|
import { FolderUserStore } from 'Stores/User/Folder';
|
||||||
|
|
@ -60,9 +60,11 @@ class FolderCreatePopupView extends AbstractViewPopup {
|
||||||
.then(
|
.then(
|
||||||
data => {
|
data => {
|
||||||
const folder = getFolderFromCacheList(parentFolderName),
|
const folder = getFolderFromCacheList(parentFolderName),
|
||||||
subFolder = FolderModel.reviveFromJson(data.Result);
|
subFolder = FolderModel.reviveFromJson(data.Result),
|
||||||
|
folders = (folder ? folder.subFolders : FolderUserStore.folderList);
|
||||||
setFolder(subFolder);
|
setFolder(subFolder);
|
||||||
(folder ? folder.subFolders : FolderUserStore.folderList).push(subFolder);
|
folders.push(subFolder);
|
||||||
|
sortFolders(folders);
|
||||||
/*
|
/*
|
||||||
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
|
var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
|
||||||
console.log((folder ? folder.subFolders : FolderUserStore.folderList).sort(collator.compare));
|
console.log((folder ? folder.subFolders : FolderUserStore.folderList).sort(collator.compare));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue