Skip to content

Commit ec4362e

Browse files
authored
fix: cleanup sidebar duplication (#342)
* fix: gracefully handle closing and unloading windows * chore: bumped version * chore: bump minimum version to 1.7.2 * refactor: use modern leaf API functions * chore: typo in versions.json
1 parent d677631 commit ec4362e

10 files changed

Lines changed: 76 additions & 45 deletions

File tree

.release-please-manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "13.0.19"
3-
}
2+
".": "13.0.20"
3+
}

manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"id": "initiative-tracker",
33
"name": "Initiative Tracker",
4-
"version": "13.0.19",
5-
"minAppVersion": "1.1.0",
4+
"version": "13.0.20",
5+
"minAppVersion": "1.7.2",
66
"author": "Jeremy Valentine",
77
"description": "TTRPG Initiative Tracker for Obsidian.md",
88
"authorUrl": "https://github.com/valentine195/obsidian-initiative-tracker",

package-lock.json

Lines changed: 30 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@javalent/initiative-tracker",
3-
"version": "13.0.19",
3+
"version": "13.0.20",
44
"description": "TTRPG Initiative Tracker for Obsidian.md",
55
"types": "./dist/index.d.ts",
66
"scripts": {
@@ -25,7 +25,7 @@
2525
"esbuild": "^0.19.3",
2626
"esbuild-svelte": "^0.8.0",
2727
"fast-copy": "^3.0.1",
28-
"obsidian": "^1.4.11",
28+
"obsidian": "^1.7.2",
2929
"obsidian-utilities": "^1.1.3",
3030
"svelte": "^4.2.12",
3131
"svelte-dnd-action": "^0.9.29",

src/builder/view.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,20 @@ export default class BuilderView extends ItemView {
2525
constructor(leaf: WorkspaceLeaf, public plugin: InitiativeTracker) {
2626
super(leaf);
2727
}
28-
getState() {
29-
return [...get(encounter).entries()];
28+
getState(): Record<string, unknown> {
29+
return { encounter: [...get(encounter).entries()] };
3030
}
3131
async setState(
32-
state: [SRDMonster, number][],
32+
state: Record<string, unknown>,
3333
result: ViewStateResult
3434
): Promise<void> {
35-
if (state && Array.isArray(state)) encounter.setMultiple(state);
35+
// Support both legacy array format and new object format
36+
const entries = (
37+
Array.isArray(state)
38+
? state
39+
: state?.encounter
40+
) as [SRDMonster, number][] | undefined;
41+
if (entries && Array.isArray(entries)) encounter.setMultiple(entries);
3642
super.setState(state, result);
3743
}
3844
ui: Builder;

src/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
declare const app: import("obsidian").App;
12
declare type DndEventInfo = import("svelte-dnd-action").DndEventInfo;
23
declare interface GenericDndEvent<T extends Record<string, any>> {
34
items: T;

src/main.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ export default class InitiativeTracker extends Plugin {
567567
)
568568
);
569569
this.registerEvent(
570-
app.workspace.on(
570+
this.app.workspace.on(
571571
"initiative-tracker:save-state",
572572
async (state: InitiativeViewState) => {
573573
this.data.state = state;
@@ -618,19 +618,22 @@ export default class InitiativeTracker extends Plugin {
618618

619619
async onunload() {
620620
await this.saveSettings();
621+
622+
this.app.workspace.detachLeavesOfType(INITIATIVE_TRACKER_VIEW);
623+
this.app.workspace.detachLeavesOfType(PLAYER_VIEW_VIEW);
624+
this.app.workspace.detachLeavesOfType(CREATURE_TRACKER_VIEW);
625+
this.app.workspace.detachLeavesOfType(BUILDER_VIEW);
626+
621627
this.app.workspace.trigger("initiative-tracker:unloaded");
622628
console.log("Initiative Tracker unloaded");
623629
}
624630

625631
async addTrackerView() {
626-
if (
627-
this.app.workspace.getLeavesOfType(INITIATIVE_TRACKER_VIEW)?.length
628-
) {
629-
return;
630-
}
631-
await this.app.workspace.getRightLeaf(false).setViewState({
632-
type: INITIATIVE_TRACKER_VIEW
633-
});
632+
await this.app.workspace.ensureSideLeaf(
633+
INITIATIVE_TRACKER_VIEW,
634+
"right",
635+
{ active: false }
636+
);
634637
}
635638
get builder() {
636639
const leaves = this.app.workspace.getLeavesOfType(BUILDER_VIEW);
@@ -721,12 +724,12 @@ export default class InitiativeTracker extends Plugin {
721724
}
722725
async openCombatant(creature: Creature) {
723726
if (!this.canUseStatBlocks) return;
724-
const view = this.combatant;
725-
if (!view) {
726-
const leaf = this.app.workspace.getRightLeaf(true);
727-
await leaf.setViewState({
728-
type: CREATURE_TRACKER_VIEW
729-
});
727+
if (!this.combatant) {
728+
await this.app.workspace.ensureSideLeaf(
729+
CREATURE_TRACKER_VIEW,
730+
"right",
731+
{ active: true }
732+
);
730733
}
731734

732735
await this.combatant.render(creature);

src/tracker/player-view.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@ export default class PlayerView extends ItemView {
2525
props: {}
2626
});
2727
}
28+
async onClose() {
29+
this._app?.$destroy();
30+
}
2831
}

src/tracker/view.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ export default class TrackerView extends ItemView {
3939
});
4040
this.ui.$on("player-view", () => this.openPlayerView());
4141
}
42+
async onClose() {
43+
this.ui?.$destroy();
44+
}
4245
getViewType() {
4346
return INITIATIVE_TRACKER_VIEW;
4447
}
@@ -99,7 +102,7 @@ export class CreatureView extends ItemView {
99102
"a.internal-link",
100103
debounce(
101104
(ev) =>
102-
app.workspace.trigger("hover-link", {
105+
this.app.workspace.trigger("hover-link", {
103106
event: ev,
104107
source: INITIATIVE_TRACKER_VIEW,
105108
hoverParent: this,
@@ -112,7 +115,7 @@ export class CreatureView extends ItemView {
112115
)
113116
);
114117
this.containerEl.on("click", "a.internal-link", (ev) =>
115-
app.workspace.openLinkText(
118+
this.app.workspace.openLinkText(
116119
(ev.target as HTMLAnchorElement).dataset.href,
117120
"initiative-tracker"
118121
)
@@ -182,7 +185,7 @@ export class CreatureView extends ItemView {
182185
if (file) {
183186
const fileContent = await this.app.vault.cachedRead(file);
184187
if (subpath && fileContent) {
185-
const cache = app.metadataCache.getFileCache(file);
188+
const cache = this.app.metadataCache.getFileCache(file);
186189
const subpathResult = resolveSubpath(cache, subpath);
187190
if (subpathResult) {
188191
content = fileContent.slice(

versions.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
"3.2.0": "0.12.10",
88
"4.0.1": "0.12.10",
99
"7.7.0": "0.15.0",
10-
"13.0.19": "1.1.0"
10+
"13.0.19": "1.1.0",
11+
"13.0.20": "1.7.2"
1112
}

0 commit comments

Comments
 (0)