feat: webapp topbar and tab switching

This commit is contained in:
2026-08-16 16:34:39 +08:00
parent f8639917f3
commit 867ba3b098
5 changed files with 220 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
// webAPP 标签状态纯函数:不可变风格,Node 可 require、浏览器挂 window.tabsStore
// webapp tab state pure functions: immutable style, Node-requireable, browser exposes window.tabsStore
(function (root, factory) {
if (typeof module === 'object' && module.exports) module.exports = factory();
else root.tabsStore = factory();
})(typeof self !== 'undefined' ? self : this, function () {
// 新增/激活标签:id 不存在才 push,返回激活 id 的新数组,不修改原数组
// Add/activate a tab: push only if id missing, return a new array with id active
function add(tabs, id, name) {
const base = tabs.some(t => t.id === id) ? tabs : tabs.concat({ id, name });
return base.map(t => ({ ...t, active: t.id === id }));
}
// 删除标签:过滤掉 id,返回新数组,不修改原数组
// Remove a tab: filter out id, return a new array
function remove(tabs, id) {
return tabs.filter(t => t.id !== id);
}
// 切换激活标签:返回激活 id 的新数组,不修改原数组
// Switch active tab: return a new array with id active
function switchTo(tabs, id) {
return tabs.map(t => ({ ...t, active: t.id === id }));
}
return { add, remove, switchTo };
});