Files
vscode-front-matter/src/utils/sortPages.ts
2024-01-16 14:22:17 +01:00

39 lines
1.6 KiB
TypeScript

import { SortOption } from '../dashboardWebView/constants/SortOption';
import { Page, SortingOption } from '../dashboardWebView/models';
import { Sorting } from '../helpers/Sorting';
import { SortOrder, SortType } from '../models';
export const sortPages = (pages: Page[], sorting: SortingOption | null) => {
if (sorting && sorting.id === SortOption.FileNameAsc) {
pages = pages.sort(Sorting.alphabetically('fmFileName'));
} else if (sorting && sorting.id === SortOption.FileNameDesc) {
pages = pages.sort(Sorting.alphabetically('fmFileName')).reverse();
} else if (sorting && sorting.id === SortOption.PublishedAsc) {
pages = pages.sort(Sorting.number('fmPublished'));
} else if (sorting && sorting.id === SortOption.LastModifiedAsc) {
pages = pages.sort(Sorting.number('fmModified'));
} else if (sorting && sorting.id === SortOption.PublishedDesc) {
pages = pages.sort(Sorting.number('fmPublished')).reverse();
} else if (sorting && sorting.id === SortOption.LastModifiedDesc) {
pages = pages.sort(Sorting.number('fmModified')).reverse();
} else if (sorting && sorting.id && sorting.name) {
const { order, name, type } = sorting;
if (type === SortType.string) {
pages = pages.sort(Sorting.alphabetically(name));
} else if (type === SortType.date) {
pages = pages.sort(Sorting.date(name));
} else if (type === SortType.number) {
pages = pages.sort(Sorting.number(name));
}
if (order === SortOrder.desc) {
pages = pages.reverse();
}
} else {
pages = pages.sort(Sorting.number('fmModified')).reverse();
}
return pages;
};