mirror of
https://github.com/m1ngsama/documents.git
synced 2025-12-24 10:51:23 +00:00
65 lines
1.4 KiB
TypeScript
65 lines
1.4 KiB
TypeScript
import { scanDir } from "../utils/sidebar"
|
|
import dayjs from "dayjs"
|
|
|
|
|
|
type MeetingMinutesParsed = {
|
|
date: Date
|
|
fileNameWithoutDate: string
|
|
fileName: string
|
|
link: string
|
|
}
|
|
|
|
export const stripFileExtension = (filename: string) => {
|
|
return filename.split(".").slice(0, -1).join(".")
|
|
}
|
|
|
|
const parseFileName = (fileName: string, link: string): MeetingMinutesParsed => {
|
|
const dateString = fileName.slice(0, 10)
|
|
const date = new Date(dateString)
|
|
|
|
return {
|
|
date,
|
|
fileNameWithoutDate: stripFileExtension(fileName.slice(10)),
|
|
fileName: fileName,
|
|
link: link
|
|
}
|
|
}
|
|
|
|
export const getMeetingMinutesSidebar = () => {
|
|
|
|
const items = scanDir("meetings").filter(v => {
|
|
return v.filename != "index.md"
|
|
})
|
|
|
|
const groupedItems = items.reduce((acc, item) => {
|
|
const parsed = parseFileName(item.filename, item.link)
|
|
const year = parsed.date.getFullYear()
|
|
if (!acc[year]) {
|
|
acc[year] = []
|
|
}
|
|
acc[year].push(parsed)
|
|
return acc
|
|
}, {} as Record<number, MeetingMinutesParsed[]>)
|
|
|
|
const groupedSidebarItems = Object.keys(groupedItems).map(v => {
|
|
const items: MeetingMinutesParsed[] = groupedItems[v]
|
|
return {
|
|
text: v.toString(),
|
|
items: items
|
|
.sort((a, b) => {
|
|
return a.date > b.date ? 1 : -1
|
|
})
|
|
.map(v => {
|
|
return {
|
|
text: `${dayjs(v.date).format("YYYY-MM-DD")} ${v.fileNameWithoutDate}`,
|
|
link: v.link
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
return groupedSidebarItems.sort((a, b) => {
|
|
return b.text > a.text ? 1 : -1
|
|
})
|
|
|
|
}
|