add inline replies, ui improvements, rename ViewPersistence->ViewController, add scroll method and highlight

This commit is contained in:
marlon-erler
2026-04-14 13:15:38 +00:00
parent 634e898317
commit f4a3450b14
19 changed files with 508 additions and 122 deletions
+48
View File
@@ -0,0 +1,48 @@
import * as React from "bloatless-react";
class ItemTracker<T> {
items: React.State<T | undefined> | undefined;
}
class ViewTrackerMap<T> {
trackers = new Map<string, ItemTracker<T>>();
private register = (key: string): ItemTracker<T> => {
if (this.trackers.has(key)) {
return this.trackers.get(key);
}
const tracker = new ItemTracker<T>();
this.trackers.set(key, tracker);
return tracker;
};
setItems = (
key: string,
views: () => React.State<T>,
): React.State<T | undefined> | undefined => {
const tracker: ItemTracker<T> = this.register(key);
if (tracker.items != undefined) {
return tracker.items;
} else {
tracker.items = views();
return tracker.items;
}
};
}
export class ViewController {
static readonly chatPages = new ItemTracker<HTMLElement>();
static readonly taskPages = new ViewTrackerMap<HTMLElement>();
static readonly boardPages = new ViewTrackerMap<HTMLElement>();
static readonly inlineReplies = new ViewTrackerMap<HTMLElement>();
static readonly messageIcons = new ViewTrackerMap<string>();
static scrollToView(id: string) {
const element = document.getElementById(id);
if (!element) return
element.scrollIntoView();
element.setAttribute("scrolled", "");
setTimeout(()=>element.removeAttribute("scrolled"), 1000);
}
}