Files
beavergram/frontend/src/lib/stores/ui.svelte.ts
T

83 lines
1.6 KiB
TypeScript

export type RightPanel =
| "profile"
| "search"
| "versions"
| "reactions"
| "callbacks"
| "links"
| "annotations"
| "jobs"
| "presence"
| "stories"
| "stories-all"
| "policy"
| "watches"
| "alerts"
| "shares"
| "bots";
export type LeftView = "main" | "settings";
interface JumpTarget {
chatId: number;
messageId: number;
}
function createUi() {
let rightPanel = $state<RightPanel | null>(null);
let panelMessageId = $state<number | null>(null);
let leftColumnOpen = $state(true);
let leftView = $state<LeftView>("main");
let jumpTarget = $state<JumpTarget | null>(null);
return {
clearJump() {
jumpTarget = null;
},
closePanel() {
rightPanel = null;
panelMessageId = null;
},
closeSettings() {
leftView = "main";
},
get jumpTarget() {
return jumpTarget;
},
get leftColumnOpen() {
return leftColumnOpen;
},
get leftView() {
return leftView;
},
openMessagePanel(panel: RightPanel, messageId: number) {
rightPanel = panel;
panelMessageId = messageId;
},
openPanel(panel: RightPanel) {
rightPanel = panel;
panelMessageId = null;
},
openSettings() {
leftView = "settings";
},
get panelMessageId() {
return panelMessageId;
},
requestJump(chatId: number, messageId: number) {
jumpTarget = { chatId, messageId };
},
get rightPanel() {
return rightPanel;
},
setLeftColumn(open: boolean) {
leftColumnOpen = open;
},
toggleLeftColumn() {
leftColumnOpen = !leftColumnOpen;
},
};
}
export const ui = createUi();