fix bug where board viewmodels where re-created

This commit is contained in:
marlon-erler
2026-04-14 09:20:44 +00:00
parent 3a0278884d
commit 0c525de404
14 changed files with 109 additions and 62 deletions
+4 -5
View File
@@ -23,9 +23,8 @@ export function BoardPage(
// main content
const persistenceId = boardViewModel.boardInfo.fileId;
const pages = ViewPersistence.boardPages.setPages(persistenceId, ()=>React.createProxyState(
[boardViewModel.selectedPage],
() => {
const pages = ViewPersistence.boardPages.setPages(persistenceId, () =>
React.createProxyState([boardViewModel.selectedPage], () => {
switch (boardViewModel.selectedPage.value) {
case BoardPageTypes.Kanban: {
return BoardKanbanPage(coreViewModel, boardViewModel);
@@ -45,8 +44,8 @@ export function BoardPage(
);
}
}
},
));
}),
);
// task modal
const taskSettingsModal = React.createProxyState(
+4 -5
View File
@@ -22,9 +22,8 @@ export function TaskPage(
);
const persistenceId = taskPageViewModel.chatViewModel.chatModel.id;
const pages = ViewPersistence.taskPages.setPages(persistenceId, ()=>React.createProxyState(
[taskPageViewModel.selectedBoardId],
() => {
const pages = ViewPersistence.taskPages.setPages(persistenceId, () =>
React.createProxyState([taskPageViewModel.selectedBoardId], () => {
const selectedBoardId = taskPageViewModel.selectedBoardId.value;
if (selectedBoardId == undefined) {
return PlaceholderView(
@@ -47,8 +46,8 @@ export function TaskPage(
}
return BoardPage(coreViewModel, selectedBoard);
},
));
}),
);
return (
<div
+4 -1
View File
@@ -130,7 +130,10 @@ export function ChatPage(
)}
</span>
</div>
<div id="main" children:set={ViewPersistence.chatPages.pages}></div>
<div
id="main"
children:set={ViewPersistence.chatPages.pages}
></div>
</div>
</article>
);
+9 -6
View File
@@ -10,13 +10,16 @@ class PageTrackerMap {
private register = (key: string): PageTracker => {
if (this.trackers.has(key)) {
return this.trackers.get(key);
};
}
const tracker = new PageTracker();
this.trackers.set(key, tracker);
return tracker
}
return tracker;
};
setPages = (key: string, pages: () => React.State<HTMLElement>): React.State<HTMLElement | undefined> | undefined => {
setPages = (
key: string,
pages: () => React.State<HTMLElement>,
): React.State<HTMLElement | undefined> | undefined => {
const tracker: PageTracker = this.register(key);
if (tracker.pages != undefined) {
@@ -25,11 +28,11 @@ class PageTrackerMap {
tracker.pages = pages();
return tracker.pages;
}
}
};
}
export class ViewPersistence {
static readonly chatPages = new PageTracker();
static readonly taskPages = new PageTrackerMap();
static readonly boardPages = new PageTrackerMap();
}
}