49 lines
1.8 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} |