fix bug where board viewmodels where re-created
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user