83 lines
1.6 KiB
TypeScript
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();
|