9097c48b1f
- 新增 dashboardFeatures.ts 和 useDashboard.ts 文件,封装仪表板功能的解析和状态管理逻辑。 - 更新 Dashboard 组件,使用 useDashboard 钩子简化可见工具和最近使用工具的处理。 - 添加仪表板功能的单元测试,确保功能正确性。 - 更新 README.md,移除不再使用的 ToolCard 组件说明。
39 lines
1006 B
TypeScript
39 lines
1006 B
TypeScript
import { getFeatureByKey, type FeatureConfig } from '@/config/features';
|
|
import type { PageType } from '@/types/storage';
|
|
|
|
export type DashboardFeature = FeatureConfig & {
|
|
icon: NonNullable<FeatureConfig['icon']>;
|
|
};
|
|
|
|
export interface DashboardFeatureItem {
|
|
key: PageType;
|
|
feature: DashboardFeature;
|
|
}
|
|
|
|
function isDashboardFeature(feature: FeatureConfig): feature is DashboardFeature {
|
|
return feature.icon != null;
|
|
}
|
|
|
|
/**
|
|
* 将页面 key 列表解析为 Dashboard 可展示的工具项。
|
|
* 过滤条件:在 visiblePages 中且 feature 配置了 icon。
|
|
*/
|
|
export function resolveDashboardFeatures(
|
|
keys: PageType[],
|
|
visiblePages: PageType[],
|
|
): DashboardFeatureItem[] {
|
|
const visibleSet = new Set(visiblePages);
|
|
const items: DashboardFeatureItem[] = [];
|
|
|
|
for (const key of keys) {
|
|
if (!visibleSet.has(key)) continue;
|
|
|
|
const feature = getFeatureByKey(key);
|
|
if (!feature || !isDashboardFeature(feature)) continue;
|
|
|
|
items.push({ key, feature });
|
|
}
|
|
|
|
return items;
|
|
}
|