refactor: split sorting functions for clarity

- Split byDateAndAlphabetical into two separate functions\n- byDateAndAlphabetical: sorts strictly by date and alphabetically\n- byDateAndAlphabeticalFolderFirst: sorts with folders first\n- Updated RecentNotes to use date-only sorting
This commit is contained in:
K Gopal Krishna 2025-04-04 22:24:22 +05:30
parent b50d95005a
commit 6a37414aba
2 changed files with 26 additions and 8 deletions

View File

@ -6,16 +6,34 @@ import { GlobalConfiguration } from "../cfg"
export type SortFn = (f1: QuartzPluginData, f2: QuartzPluginData) => number export type SortFn = (f1: QuartzPluginData, f2: QuartzPluginData) => number
export function byDateAndAlphabetical(cfg: GlobalConfiguration, prioritizeFolders: boolean = true): SortFn { export function byDateAndAlphabetical(cfg: GlobalConfiguration): SortFn {
return (f1, f2) => { return (f1, f2) => {
if (prioritizeFolders) { // Sort by date/alphabetical
// Sort folders first if (f1.dates && f2.dates) {
const f1IsFolder = isFolderPath(f1.slug ?? "") // sort descending
const f2IsFolder = isFolderPath(f2.slug ?? "") return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime()
if (f1IsFolder && !f2IsFolder) return -1 } else if (f1.dates && !f2.dates) {
if (!f1IsFolder && f2IsFolder) return 1 // prioritize files with dates
return -1
} else if (!f1.dates && f2.dates) {
return 1
} }
// otherwise, sort lexographically by title
const f1Title = f1.frontmatter?.title.toLowerCase() ?? ""
const f2Title = f2.frontmatter?.title.toLowerCase() ?? ""
return f1Title.localeCompare(f2Title)
}
}
export function byDateAndAlphabeticalFolderFirst(cfg: GlobalConfiguration): SortFn {
return (f1, f2) => {
// Sort folders first
const f1IsFolder = isFolderPath(f1.slug ?? "")
const f2IsFolder = isFolderPath(f2.slug ?? "")
if (f1IsFolder && !f2IsFolder) return -1
if (!f1IsFolder && f2IsFolder) return 1
// If both are folders or both are files, sort by date/alphabetical // If both are folders or both are files, sort by date/alphabetical
if (f1.dates && f2.dates) { if (f1.dates && f2.dates) {
// sort descending // sort descending

View File

@ -22,7 +22,7 @@ const defaultOptions = (cfg: GlobalConfiguration): Options => ({
linkToMore: false, linkToMore: false,
showTags: true, showTags: true,
filter: () => true, filter: () => true,
sort: byDateAndAlphabetical(cfg, false), sort: byDateAndAlphabetical(cfg),
}) })
export default ((userOpts?: Partial<Options>) => { export default ((userOpts?: Partial<Options>) => {