Skip to content

Commit

Permalink
feat(fe-handler): focused folder now auto unfold and scroll into view
Browse files Browse the repository at this point in the history
  • Loading branch information
aidenlx committed Nov 28, 2021
1 parent f61b44f commit a872028
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
32 changes: 27 additions & 5 deletions src/modules/fe-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -329,13 +329,35 @@ export default class FEHandler extends FEHandler_Base {
//#endregion

//#region folder focus setup
private _focusedFolder: FolderItem | null = null;
private _focusedFolder: {
folder: FolderItem;
collapsedCache: boolean;
} | null = null;
get focusedFolder() {
return this._focusedFolder;
return this._focusedFolder?.folder ?? null;
}
set focusedFolder(val: FolderItem | null) {
this._focusedFolder = val;
this.fileExplorer.dom.navFileContainerEl.toggleClass(focusModeCls, !!val);
set focusedFolder(item: FolderItem | null) {
// restore previous folder collapse state
if (this._focusedFolder) {
const { folder, collapsedCache } = this._focusedFolder;
if (folder.collapsed !== collapsedCache)
folder.setCollapsed(collapsedCache);
}
this._focusedFolder = item
? { folder: item, collapsedCache: item.collapsed }
: null;
// unfold folder if it's collapsed
if (item && item.collapsed) {
item.setCollapsed(false);
// @ts-ignore
this.plugin.app.nextFrame(() => {
// @ts-ignore
this.fileExplorer.dom.infinityScroll.computeSync();
// @ts-ignore
this.fileExplorer.dom.infinityScroll.scrollIntoView(item);
});
}
this.fileExplorer.dom.navFileContainerEl.toggleClass(focusModeCls, !!item);
}
toggleFocusFolder(folder: TFolder | null) {
const folderItem = folder
Expand Down
2 changes: 2 additions & 0 deletions src/typings/obsidian-ex.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ declare module "obsidian" {
getDisplayText(): string;
onClose(): Promise<void>;
dom: {
infinityScroll: HTMLDivElement;
navFileContainerEl: HTMLDivElement;
};
}
Expand Down Expand Up @@ -37,6 +38,7 @@ declare module "obsidian" {
collapseIndicatorEl: HTMLDivElement;
collapsed: boolean;
pusherEl: HTMLDivElement;
setCollapsed(collapsed: boolean): Promise<void>;
}

interface Vault {
Expand Down

0 comments on commit a872028

Please sign in to comment.