feat: implement dashboard CRUD status column and toggle actions; refactor related components for improved functionality

This commit is contained in:
mlogclub
2026-05-28 09:08:38 +08:00
parent e8d7565caf
commit b944c3221f
10 changed files with 730 additions and 268 deletions
@@ -75,6 +75,27 @@ describe("buildDashboardCrudQuery", () => {
})
})
describe("buildDashboardCrudInitialFilters", () => {
it("creates stable filter state from defaults", async () => {
const { buildDashboardCrudInitialFilters } = await loadModule()
assert.deepEqual(
plain(
buildDashboardCrudInitialFilters([
{ name: "keyword", defaultValue: "" },
{ name: "status", defaultValue: "all" },
{ name: "companyId", defaultValue: 0 },
])
),
{
keyword: "",
status: "all",
companyId: 0,
}
)
})
})
describe("normalizeDashboardCrudPageResult", () => {
it("returns a stable empty page when the API result is missing", async () => {
const { normalizeDashboardCrudPageResult } = await loadModule()
@@ -143,3 +164,32 @@ describe("normalizeDashboardCrudSubmitValues", () => {
)
})
})
describe("dashboard CRUD action rules", () => {
it("defaults actions to visible and enabled", async () => {
const {
isDashboardCrudActionVisible,
isDashboardCrudActionDisabled,
} = await loadModule()
const action = {}
assert.equal(isDashboardCrudActionVisible(action, { status: 0 }), true)
assert.equal(isDashboardCrudActionDisabled(action, { status: 0 }), false)
})
it("honors visible and disabled predicates", async () => {
const {
isDashboardCrudActionVisible,
isDashboardCrudActionDisabled,
} = await loadModule()
const action = {
visible: (item) => item.status !== 2,
disabled: (item) => item.status === 1,
}
assert.equal(isDashboardCrudActionVisible(action, { status: 2 }), false)
assert.equal(isDashboardCrudActionVisible(action, { status: 0 }), true)
assert.equal(isDashboardCrudActionDisabled(action, { status: 1 }), true)
assert.equal(isDashboardCrudActionDisabled(action, { status: 0 }), false)
})
})