mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-06 22:32:39 +02:00
33 lines
944 B
TypeScript
33 lines
944 B
TypeScript
|
|
import { type App, FuzzySuggestModal, type TFolder } from "obsidian";
|
||
|
|
|
||
|
|
/** Folder picker built on Obsidian's stock {@link FuzzySuggestModal}. */
|
||
|
|
export class FolderSuggestModal extends FuzzySuggestModal<TFolder> {
|
||
|
|
private readonly onPick: (path: string) => void;
|
||
|
|
private readonly excluded: Set<string>;
|
||
|
|
|
||
|
|
constructor(app: App, onPick: (path: string) => void, excluded: string[] = []) {
|
||
|
|
super(app);
|
||
|
|
this.onPick = onPick;
|
||
|
|
this.excluded = new Set(excluded.map((p) => p.replace(/^\/+|\/+$/g, "")));
|
||
|
|
this.setPlaceholder("Type to filter folders…");
|
||
|
|
}
|
||
|
|
|
||
|
|
getItems(): TFolder[] {
|
||
|
|
return this.app.vault
|
||
|
|
.getAllFolders(true)
|
||
|
|
.filter((f) => !this.excluded.has(this.toPath(f)));
|
||
|
|
}
|
||
|
|
|
||
|
|
getItemText(folder: TFolder): string {
|
||
|
|
return this.toPath(folder) || "/";
|
||
|
|
}
|
||
|
|
|
||
|
|
onChooseItem(folder: TFolder): void {
|
||
|
|
this.onPick(this.toPath(folder));
|
||
|
|
}
|
||
|
|
|
||
|
|
private toPath(folder: TFolder): string {
|
||
|
|
return folder.isRoot() ? "" : folder.path;
|
||
|
|
}
|
||
|
|
}
|