From fa6c02d3213dfd4e6da8e78bd3a2e7004555fd01 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Wed, 24 Jan 2024 01:08:56 +0000
Subject: [PATCH] fix: make search result card block
---
docs/features/explorer.md | 117 ++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 89 insertions(+), 28 deletions(-)
diff --git a/docs/features/explorer.md b/docs/features/explorer.md
index fd656a8..b5fd379 100644
--- a/docs/features/explorer.md
+++ b/docs/features/explorer.md
@@ -26,7 +26,7 @@
title: "Explorer", // title of the explorer component
folderClickBehavior: "collapse", // what happens when you click a folder ("link" to navigate to folder page on click or "collapse" to collapse folder on click)
folderDefaultState: "collapsed", // default state of folders ("collapsed" or "open")
- useSavedState: true, // wether to use local storage to save "state" (which folders are opened) of explorer
+ useSavedState: true, // whether to use local storage to save "state" (which folders are opened) of explorer
// Sort order: folders first, then files. Sort folders and files alphabetically
sortFn: (a, b) => {
... // default implementation shown later
@@ -179,6 +179,34 @@
## Advanced examples
+> [!tip]
+> When writing more complicated functions, the `layout` file can start to look very cramped.
+> You can fix this by defining your functions in another file.
+>
+> ```ts title="functions.ts"
+> import { Options } from "./quartz/components/ExplorerNode"
+> export const mapFn: Options["mapFn"] = (node) => {
+> // implement your function here
+> }
+> export const filterFn: Options["filterFn"] = (node) => {
+> // implement your function here
+> }
+> export const sortFn: Options["sortFn"] = (a, b) => {
+> // implement your function here
+> }
+> ```
+>
+> You can then import them like this:
+>
+> ```ts title="quartz.layout.ts"
+> import { mapFn, filterFn, sortFn } from "./functions.ts"
+> Component.Explorer({
+> mapFn: mapFn,
+> filterFn: filterFn,
+> sortFn: sortFn,
+> })
+> ```
+
### Add emoji prefix
To add emoji prefixes (ð for folders, ð for files), you could use a map function like this:
@@ -216,30 +244,63 @@
To fix this, we just changed around the order and apply the `sort` function before changing the display names in the `map` function.
-> [!tip]
-> When writing more complicated functions, the `layout` file can start to look very cramped.
-> You can fix this by defining your functions in another file.
->
-> ```ts title="functions.ts"
-> import { Options } from "./quartz/components/ExplorerNode"
-> export const mapFn: Options["mapFn"] = (node) => {
-> // implement your function here
-> }
-> export const filterFn: Options["filterFn"] = (node) => {
-> // implement your function here
-> }
-> export const sortFn: Options["sortFn"] = (a, b) => {
-> // implement your function here
-> }
-> ```
->
-> You can then import them like this:
->
-> ```ts title="quartz.layout.ts"
-> import { mapFn, filterFn, sortFn } from "./functions.ts"
-> Component.Explorer({
-> mapFn: mapFn,
-> filterFn: filterFn,
-> sortFn: sortFn,
-> })
-> ```
+### Use `sort` with pre-defined sort order
+
+Here's another example where a map containing file/folder names (as slugs) is used to define the sort order of the explorer in quartz. All files/folders that aren't listed inside of `nameOrderMap` will appear at the top of that folders hierarchy level.
+
+It's also worth mentioning, that the smaller the number set in `nameOrderMap`, the higher up the entry will be in the explorer. Incrementing every folder/file by 100, makes ordering files in their folders a lot easier. Lastly, this example still allows you to use a `mapFn` or frontmatter titles to change display names, as it uses slugs for `nameOrderMap` (which is unaffected by display name changes).
+
+```ts title="quartz.layout.ts"
+Component.Explorer({
+ sortFn: (a, b) => {
+ const nameOrderMap: Record<string, number> = {
+ "poetry-folder": 100,
+ "essay-folder": 200,
+ "research-paper-file": 201,
+ "dinosaur-fossils-file": 300,
+ "other-folder": 400,
+ }
+
+ let orderA = 0
+ let orderB = 0
+
+ if (a.file && a.file.slug) {
+ orderA = nameOrderMap[a.file.slug] || 0
+ } else if (a.name) {
+ orderA = nameOrderMap[a.name] || 0
+ }
+
+ if (b.file && b.file.slug) {
+ orderB = nameOrderMap[b.file.slug] || 0
+ } else if (b.name) {
+ orderB = nameOrderMap[b.name] || 0
+ }
+
+ return orderA - orderB
+ },
+})
+```
+
+For reference, this is how the quartz explorer window would look like with that example:
+
+```
+ð Poetry Folder
+ð Essay Folder
+ âïļ Research Paper File
+ðĶī Dinosaur Fossils File
+ðŪ Other Folder
+```
+
+And this is how the file structure would look like:
+
+```
+index.md
+poetry-folder
+ index.md
+essay-folder
+ index.md
+ research-paper-file.md
+dinosaur-fossils-file.md
+other-folder
+ index.md
+```
--
Gitblit v1.10.0