跳到主要内容

URL state、已保存视图与预设

V2 将 routing 和 persistence 置于 table 之外,同时提供安全的 state helpers。

URL state

结合 allowlist 使用 encodeTableQuerydecodeTableQuery。adapter 会序列化带有从 1 开始的 pagepageSize、可选 search/sort 和 JSON filters 的 versioned query。

const options = {
filterKeys: ['status', 'createdAt'],
sensitiveFilterKeys: ['customerEmail'],
pageSizeOptions: [25, 50, 100],
};

const search = encodeTableQuery(query, options);
const restoredQuery = decodeTableQuery(search, options);

仅 allowlisted、non-sensitive filters 会被写入或恢复。格式错误的 filter JSON 会整体被拒绝。adapter 没有 router dependency;请使用应用的 routing layer 更新 browser state。

已保存视图与列显隐

TableView 会捕获 TableQuery、visible column keys、owner 和 update timestamp。在应用中实现 TableViewRepository 以处理 storage、authorization、uniqueness 和 conflict responses,然后用 createTableViewManager 包装它来获得 local write state。

在 column schema 改变后恢复 saved view 时,使用 sanitizeVisibleColumnKeysgetVisibleColumnsreconcileVisibleColumnState。visibility 永远不会改变 data,但 reconciliation 会移除已隐藏字段上的 saved sort 或 filter。

Filter presets

TableFilterPreset 是一个 curated shortcut,只包含 ID、label 和 filters。applyFilterPreset(query, preset) 会替换 filters 并将 page 重置为 1;它刻意不能改变 sort、page size 或 visible columns。

领域辅助函数 createProductColumnscreateOrderColumnscreateCustomerColumns 提供起始 column sets。它们不会替应用作出 backend choices。