Added: sort Folders on add/rename folder

This commit is contained in:
djmaze 2021-12-09 11:24:30 +01:00
parent 65e192cc54
commit a512759289
4 changed files with 42 additions and 44 deletions

View file

@ -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);
}
}, },
/** /**

View file

@ -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({

View file

@ -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 => {

View file

@ -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));