docs: ai 协作文档体系重构与多 ai 仲裁结果落地
1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md) 2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration) 3.各服务 01/02 文档补全 4.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens) 5.Proto 契约补全 6.004 架构影响地图更新 7.端口分配表 8.设计规格文档
This commit is contained in:
65
packages/hooks/src/use-viewports.ts
Normal file
65
packages/hooks/src/use-viewports.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import { useMemo } from "react";
|
||||
import type { Viewport } from "./types.js";
|
||||
|
||||
/**
|
||||
* useViewports - 视口列表查询
|
||||
*
|
||||
* 用途:按 scope 过滤当前用户的可用视口(iam 4 层视口模型)。
|
||||
* 视口数据由调用方注入(apps/* 从 iam /iam/viewports 获取后传入)。
|
||||
*
|
||||
* iam 视口 4 层:admin / teacher / student / parent
|
||||
*
|
||||
* @example
|
||||
* const { viewports, getByType, hasViewport } = useViewports({ viewports });
|
||||
* const teacherViewports = getByType("teacher");
|
||||
*/
|
||||
|
||||
export interface UseViewportsProps {
|
||||
/** 当前用户的视口列表(从 iam 获取) */
|
||||
viewports: Viewport[] | null;
|
||||
}
|
||||
|
||||
export interface UseViewportsReturn {
|
||||
/** 全部视口 */
|
||||
viewports: Viewport[];
|
||||
/** 按类型过滤 */
|
||||
getByType: (type: Viewport["type"]) => Viewport[];
|
||||
/** 检查是否拥有指定类型视口 */
|
||||
hasViewport: (type: Viewport["type"]) => boolean;
|
||||
/** 按 ID 查找 */
|
||||
getById: (id: string) => Viewport | undefined;
|
||||
}
|
||||
|
||||
export function useViewports({
|
||||
viewports: input,
|
||||
}: UseViewportsProps): UseViewportsReturn {
|
||||
const viewports = useMemo(() => input ?? [], [input]);
|
||||
|
||||
const getByType = useMemo(
|
||||
() =>
|
||||
(type: Viewport["type"]): Viewport[] =>
|
||||
viewports.filter((v) => v.type === type),
|
||||
[viewports],
|
||||
);
|
||||
|
||||
const hasViewport = useMemo(
|
||||
() =>
|
||||
(type: Viewport["type"]): boolean =>
|
||||
viewports.some((v) => v.type === type),
|
||||
[viewports],
|
||||
);
|
||||
|
||||
const getById = useMemo(
|
||||
() =>
|
||||
(id: string): Viewport | undefined =>
|
||||
viewports.find((v) => v.id === id),
|
||||
[viewports],
|
||||
);
|
||||
|
||||
return {
|
||||
viewports,
|
||||
getByType,
|
||||
hasViewport,
|
||||
getById,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user