workspace-ionic-app/src/app/model/sorting.ts

49 lines
1.8 KiB
TypeScript

import { WSItem } from "./ws-item";
export enum SortName {
Name = "Name",
LastModificationTime = "Last Modified",
FolderFirst = "Folders First"
}
export enum SortType {
Asc = "arrow_upward",
Desc = "arrow_downward"
}
export class Sorting {
private static sortByNameASC = (item1: WSItem, item2: WSItem) => item1.getTitle().toLowerCase() > item2.getTitle().toLowerCase() ? -1 : 1;
private static sortByNameDESC = (item1: WSItem, item2: WSItem) => item1.getTitle().toLowerCase() > item2.getTitle().toLowerCase() ? 1 : -1;
private static sortByLastModificationASC = (item1: WSItem, item2: WSItem) => item1.item.lastModificationTime > item2.item.lastModificationTime ? 1 : -1;
private static sortByLastModificationDESC = (item1: WSItem, item2: WSItem) => item1.item.lastModificationTime > item2.item.lastModificationTime ? -1 : 1;
private static folderFirst(item1: WSItem, item2: WSItem) {
if (item1.isFolder() && !item2.isFolder()) return -1;
if (!item1.isFolder() && item2.isFolder()) return 1;
if (item1.item.title > item2.item.title) return 1;
if (item1.item.title < item2.item.title) return -1;
return 0;
}
static getSortFunction(name: SortName, type: SortType): (a: WSItem, b: WSItem) => number {
switch (name) {
case SortName.Name:
switch (type) {
case SortType.Asc: return this.sortByNameASC;
case SortType.Desc: return this.sortByNameDESC;
}
case SortName.LastModificationTime:
switch (type) {
case SortType.Asc: return this.sortByLastModificationASC;
case SortType.Desc: return this.sortByLastModificationDESC;
}
case SortName.FolderFirst:
return this.folderFirst;
}
}
}