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; } } }