sage-mem 1.5.1 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client.js +93 -75
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -3741,6 +3741,90 @@ h("span", { key: "sep", className: "smem-actions-sep", "aria-hidden": "true" }),
|
|
|
3741
3741
|
notice ? h("div", { className: "smem-ok", key: "ok" }, "✓ " + notice) : null,
|
|
3742
3742
|
]);
|
|
3743
3743
|
}
|
|
3744
|
+
// ── 筛选条(1.5.2 从 Section 里抽出)────────────────────────────────
|
|
3745
|
+
// 只接收 props、只渲染;筛选语义(哪些项互斥、怎么 AND/OR)仍在 Section 里算好再传进来。
|
|
3746
|
+
// 抽出来的收益是 Section 少了 60 行 UI 细节,而筛选条可以单独看、单独改(比如以后再加
|
|
3747
|
+
// 「只显示锁定」这类维度),不用在一千行的 Section 里翻。
|
|
3748
|
+
function FilterBar(props) {
|
|
3749
|
+
const { hasFilter, statusFilter, setStatusFilter, totalCount, items, archiveItems, statusItems, typeFilter, setTypeFilter, typeList, typeCounts, tagList, tagShown, tagHiddenCount, tagCounts, tagFilter, setTagFilter, tagOpen, setTagOpen, TAG_VISIBLE_MAX, query, setQuery, toggleIn, sumItem } = props;
|
|
3750
|
+
return h("div", { className: "smem-filters" }, [
|
|
3751
|
+
hasFilter
|
|
3752
|
+
? h("div", { className: "smem-filter-summary", key: "sum" }, [
|
|
3753
|
+
statusFilter !== "all"
|
|
3754
|
+
? sumItem("状态:" + (statusFilter === "active" ? "活动中" : "已归档"), function () { setStatusFilter("all"); })
|
|
3755
|
+
: null,
|
|
3756
|
+
typeFilter.map(function (t) {
|
|
3757
|
+
return sumItem("类型:" + (TYPE_LABEL[t] || t), function () { toggleIn(setTypeFilter, t); });
|
|
3758
|
+
}),
|
|
3759
|
+
tagFilter.map(function (g) {
|
|
3760
|
+
return sumItem("标签:#" + g, function () { toggleIn(setTagFilter, g); });
|
|
3761
|
+
}),
|
|
3762
|
+
query.trim() ? sumItem("搜索:" + query.trim(), function () { setQuery(""); }) : null,
|
|
3763
|
+
h("button", {
|
|
3764
|
+
type: "button", className: "smem-sum-clear", key: "all",
|
|
3765
|
+
onClick: function () { setStatusFilter("all"); setTypeFilter([]); setTagFilter([]); setQuery(""); },
|
|
3766
|
+
}, "清除全部"),
|
|
3767
|
+
])
|
|
3768
|
+
: null,
|
|
3769
|
+
h("span", { className: "smem-filters-label", key: "lst" }, "状态"),
|
|
3770
|
+
h("button", {
|
|
3771
|
+
type: "button", key: "st-all", className: "smem-chip",
|
|
3772
|
+
"data-on": statusFilter === "all" ? "1" : "0",
|
|
3773
|
+
title: "活动与已归档一起看(归档条走灰色)",
|
|
3774
|
+
onClick: function () { setStatusFilter("all"); },
|
|
3775
|
+
}, ["全部", h("span", { className: "smem-chip-n", key: "n" }, String(totalCount))]),
|
|
3776
|
+
h("button", {
|
|
3777
|
+
type: "button", key: "st-active", className: "smem-chip",
|
|
3778
|
+
"data-on": statusFilter === "active" ? "1" : "0",
|
|
3779
|
+
title: "正在参与检索与星图的记忆",
|
|
3780
|
+
onClick: function () { setStatusFilter("active"); },
|
|
3781
|
+
}, ["活动中", h("span", { className: "smem-chip-n", key: "n" }, String(items.length))]),
|
|
3782
|
+
h("button", {
|
|
3783
|
+
type: "button", key: "st-arch", className: "smem-chip",
|
|
3784
|
+
"data-on": statusFilter === "archived" ? "1" : "0",
|
|
3785
|
+
title: "已收进档案馆:不参与检索与星图,可编辑 / 恢复",
|
|
3786
|
+
onClick: function () { setStatusFilter("archived"); },
|
|
3787
|
+
}, ["已归档", h("span", { className: "smem-chip-n", key: "n" }, String(archiveItems.length))]),
|
|
3788
|
+
h("span", { className: "smem-sep", key: "sep0" }),
|
|
3789
|
+
h("span", { className: "smem-filters-label", key: "lt" }, "类型"),
|
|
3790
|
+
h("button", {
|
|
3791
|
+
type: "button", key: "all", className: "smem-chip",
|
|
3792
|
+
"data-on": typeFilter.length ? "0" : "1",
|
|
3793
|
+
onClick: function () { setTypeFilter([]); },
|
|
3794
|
+
}, ["全部", h("span", { className: "smem-chip-n", key: "n" }, String(statusItems.length))]),
|
|
3795
|
+
typeList.map(function (t) {
|
|
3796
|
+
return h("button", {
|
|
3797
|
+
type: "button", key: t, className: "smem-chip",
|
|
3798
|
+
"data-on": typeFilter.indexOf(t) >= 0 ? "1" : "0",
|
|
3799
|
+
onClick: function () { toggleIn(setTypeFilter, t); },
|
|
3800
|
+
}, [TYPE_LABEL[t] || t, h("span", { className: "smem-chip-n", key: "n" }, String(typeCounts[t]))]);
|
|
3801
|
+
}),
|
|
3802
|
+
tagList.length ? h("span", { className: "smem-sep", key: "sep" }) : null,
|
|
3803
|
+
tagList.length ? h("span", { className: "smem-filters-label", key: "lgt" }, "标签") : null,
|
|
3804
|
+
tagShown.map(function (g) {
|
|
3805
|
+
return h("button", {
|
|
3806
|
+
type: "button", key: "tag-" + g, className: "smem-chip",
|
|
3807
|
+
"data-on": tagFilter.indexOf(g) >= 0 ? "1" : "0",
|
|
3808
|
+
onClick: function () { toggleIn(setTagFilter, g); },
|
|
3809
|
+
}, ["#" + g, h("span", { className: "smem-chip-n", key: "n" }, String(tagCounts[g]))]);
|
|
3810
|
+
}),
|
|
3811
|
+
tagList.length > TAG_VISIBLE_MAX
|
|
3812
|
+
? h("button", {
|
|
3813
|
+
type: "button", key: "moretag", className: "smem-btn",
|
|
3814
|
+
title: tagOpen ? "收起标签" : "还有一些标签没显示",
|
|
3815
|
+
onClick: function () { setTagOpen(!tagOpen); },
|
|
3816
|
+
}, tagOpen ? "收起标签" : ("更多标签 (" + String(tagHiddenCount) + ")") )
|
|
3817
|
+
: null,
|
|
3818
|
+
hasFilter
|
|
3819
|
+
? h("button", {
|
|
3820
|
+
type: "button", key: "clear", className: "smem-btn",
|
|
3821
|
+
onClick: function () { setStatusFilter("all"); setTypeFilter([]); setTagFilter([]); setQuery(""); },
|
|
3822
|
+
}, "清除筛选")
|
|
3823
|
+
: null,
|
|
3824
|
+
|
|
3825
|
+
]);
|
|
3826
|
+
}
|
|
3827
|
+
|
|
3744
3828
|
function Section(props) {
|
|
3745
3829
|
// 走 stableRemote:真实宿主里 `ctx.get()` 每次返回新对象(issue #3 的成因)。
|
|
3746
3830
|
// 这个面板的 effect 依赖是 `[]`、暂时不会爆,但引用稳定是**所有**面板的共同前提。
|
|
@@ -4620,81 +4704,15 @@ h("span", { key: "sep", className: "smem-actions-sep", "aria-hidden": "true" }),
|
|
|
4620
4704
|
: null,
|
|
4621
4705
|
// 三排筛选:状态 / 类型 / 标签。组内 OR、组间 AND,再与搜索框 AND。
|
|
4622
4706
|
tab === "files" && totalCount
|
|
4623
|
-
? h(
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
tagFilter.map(function (g) {
|
|
4633
|
-
return sumItem("标签:#" + g, function () { toggleIn(setTagFilter, g); });
|
|
4634
|
-
}),
|
|
4635
|
-
query.trim() ? sumItem("搜索:" + query.trim(), function () { setQuery(""); }) : null,
|
|
4636
|
-
h("button", {
|
|
4637
|
-
type: "button", className: "smem-sum-clear", key: "all",
|
|
4638
|
-
onClick: function () { setStatusFilter("all"); setTypeFilter([]); setTagFilter([]); setQuery(""); },
|
|
4639
|
-
}, "清除全部"),
|
|
4640
|
-
])
|
|
4641
|
-
: null,
|
|
4642
|
-
h("span", { className: "smem-filters-label", key: "lst" }, "状态"),
|
|
4643
|
-
h("button", {
|
|
4644
|
-
type: "button", key: "st-all", className: "smem-chip",
|
|
4645
|
-
"data-on": statusFilter === "all" ? "1" : "0",
|
|
4646
|
-
title: "活动与已归档一起看(归档条走灰色)",
|
|
4647
|
-
onClick: function () { setStatusFilter("all"); },
|
|
4648
|
-
}, ["全部", h("span", { className: "smem-chip-n", key: "n" }, String(totalCount))]),
|
|
4649
|
-
h("button", {
|
|
4650
|
-
type: "button", key: "st-active", className: "smem-chip",
|
|
4651
|
-
"data-on": statusFilter === "active" ? "1" : "0",
|
|
4652
|
-
title: "正在参与检索与星图的记忆",
|
|
4653
|
-
onClick: function () { setStatusFilter("active"); },
|
|
4654
|
-
}, ["活动中", h("span", { className: "smem-chip-n", key: "n" }, String(items.length))]),
|
|
4655
|
-
h("button", {
|
|
4656
|
-
type: "button", key: "st-arch", className: "smem-chip",
|
|
4657
|
-
"data-on": statusFilter === "archived" ? "1" : "0",
|
|
4658
|
-
title: "已收进档案馆:不参与检索与星图,可编辑 / 恢复",
|
|
4659
|
-
onClick: function () { setStatusFilter("archived"); },
|
|
4660
|
-
}, ["已归档", h("span", { className: "smem-chip-n", key: "n" }, String(archiveItems.length))]),
|
|
4661
|
-
h("span", { className: "smem-sep", key: "sep0" }),
|
|
4662
|
-
h("span", { className: "smem-filters-label", key: "lt" }, "类型"),
|
|
4663
|
-
h("button", {
|
|
4664
|
-
type: "button", key: "all", className: "smem-chip",
|
|
4665
|
-
"data-on": typeFilter.length ? "0" : "1",
|
|
4666
|
-
onClick: function () { setTypeFilter([]); },
|
|
4667
|
-
}, ["全部", h("span", { className: "smem-chip-n", key: "n" }, String(statusItems.length))]),
|
|
4668
|
-
typeList.map(function (t) {
|
|
4669
|
-
return h("button", {
|
|
4670
|
-
type: "button", key: t, className: "smem-chip",
|
|
4671
|
-
"data-on": typeFilter.indexOf(t) >= 0 ? "1" : "0",
|
|
4672
|
-
onClick: function () { toggleIn(setTypeFilter, t); },
|
|
4673
|
-
}, [TYPE_LABEL[t] || t, h("span", { className: "smem-chip-n", key: "n" }, String(typeCounts[t]))]);
|
|
4674
|
-
}),
|
|
4675
|
-
tagList.length ? h("span", { className: "smem-sep", key: "sep" }) : null,
|
|
4676
|
-
tagList.length ? h("span", { className: "smem-filters-label", key: "lgt" }, "标签") : null,
|
|
4677
|
-
tagShown.map(function (g) {
|
|
4678
|
-
return h("button", {
|
|
4679
|
-
type: "button", key: "tag-" + g, className: "smem-chip",
|
|
4680
|
-
"data-on": tagFilter.indexOf(g) >= 0 ? "1" : "0",
|
|
4681
|
-
onClick: function () { toggleIn(setTagFilter, g); },
|
|
4682
|
-
}, ["#" + g, h("span", { className: "smem-chip-n", key: "n" }, String(tagCounts[g]))]);
|
|
4683
|
-
}),
|
|
4684
|
-
tagList.length > TAG_VISIBLE_MAX
|
|
4685
|
-
? h("button", {
|
|
4686
|
-
type: "button", key: "moretag", className: "smem-btn",
|
|
4687
|
-
title: tagOpen ? "收起标签" : "还有一些标签没显示",
|
|
4688
|
-
onClick: function () { setTagOpen(!tagOpen); },
|
|
4689
|
-
}, tagOpen ? "收起标签" : ("更多标签 (" + String(tagHiddenCount) + ")") )
|
|
4690
|
-
: null,
|
|
4691
|
-
hasFilter
|
|
4692
|
-
? h("button", {
|
|
4693
|
-
type: "button", key: "clear", className: "smem-btn",
|
|
4694
|
-
onClick: function () { setStatusFilter("all"); setTypeFilter([]); setTagFilter([]); setQuery(""); },
|
|
4695
|
-
}, "清除筛选")
|
|
4696
|
-
: null,
|
|
4697
|
-
])
|
|
4707
|
+
? h(FilterBar, {
|
|
4708
|
+
hasFilter: hasFilter, statusFilter: statusFilter, setStatusFilter: setStatusFilter,
|
|
4709
|
+
totalCount: totalCount, items: items, archiveItems: archiveItems, statusItems: statusItems,
|
|
4710
|
+
typeFilter: typeFilter, setTypeFilter: setTypeFilter, typeList: typeList, typeCounts: typeCounts,
|
|
4711
|
+
tagList: tagList, tagShown: tagShown, tagHiddenCount: tagHiddenCount, tagCounts: tagCounts,
|
|
4712
|
+
tagFilter: tagFilter, setTagFilter: setTagFilter, tagOpen: tagOpen, setTagOpen: setTagOpen,
|
|
4713
|
+
TAG_VISIBLE_MAX: TAG_VISIBLE_MAX, query: query, setQuery: setQuery,
|
|
4714
|
+
toggleIn: toggleIn, sumItem: sumItem,
|
|
4715
|
+
})
|
|
4698
4716
|
: null,
|
|
4699
4717
|
error ? h("div", { className: "smem-err", key: "err", role: "alert" }, "⚠ " + error) : null,
|
|
4700
4718
|
notice && !error ? h("div", { className: "smem-ok", key: "ok", role: "status" }, "✓ " + notice) : null,
|
package/package.json
CHANGED