refactor: 优化viewed实例初始化,rowStyle rowClassName 从最新的配置中读取

This commit is contained in:
layhuts
2026-05-09 18:27:09 +08:00
parent 28905b0bec
commit 9c49f4bb1e
5 changed files with 107 additions and 59 deletions

View File

@@ -373,6 +373,8 @@ export function useViewedRow<T = any>(
};
}
export type ViewedRowHelper<T = any> = ReturnType<typeof useViewedRow<T>>;
// ========== 工具函数 ==========
function normalizeClassName(value: any): string {
@@ -445,24 +447,64 @@ export function applyViewedRowOptions(
viewedRowConfig: boolean | ViewedRowOptions,
helper: ReturnType<typeof useViewedRow>,
) {
// 从最新的配置中读取 rowClassName 和 rowStyle支持运行时修改
const viewedRowClassName = isBoolean(viewedRowConfig)
? undefined
: viewedRowConfig.rowClassName;
const viewedRowStyle = isBoolean(viewedRowConfig)
? undefined
: viewedRowConfig.rowStyle;
// 注入 rowClassName
const originalRowClassName = mergedOptions.rowClassName;
mergedOptions.rowClassName = (params: any) => {
if (!helper.isViewed(params.row)) {
return normalizeClassName(
isFunction(originalRowClassName)
? originalRowClassName(params)
: originalRowClassName,
);
}
let viewedClass: string;
if (viewedRowClassName === undefined || viewedRowClassName === null) {
viewedClass = DEFAULT_VIEWED_CLASS;
} else if (typeof viewedRowClassName === 'string') {
viewedClass = viewedRowClassName;
} else if (isFunction(viewedRowClassName)) {
viewedClass = normalizeClassName(viewedRowClassName(params));
} else {
viewedClass = DEFAULT_VIEWED_CLASS;
}
return mergeClassNames(
isFunction(originalRowClassName)
? originalRowClassName(params)
: originalRowClassName,
helper.getRowClassName(params),
viewedClass,
);
};
// 注入 rowStyle
const originalRowStyle = mergedOptions.rowStyle;
mergedOptions.rowStyle = (params: any) => {
const viewedStyle = helper.getRowStyle(params);
const originalStyle = isFunction(originalRowStyle)
? originalRowStyle(params)
: originalRowStyle;
if (!helper.isViewed(params.row)) {
return originalStyle || undefined;
}
let viewedStyle: any;
if (viewedRowStyle === undefined || viewedRowStyle === null) {
viewedStyle = undefined;
} else if (isFunction(viewedRowStyle)) {
viewedStyle = viewedRowStyle(params);
} else {
viewedStyle = viewedRowStyle;
}
if (!viewedStyle && !originalStyle) return undefined;
if (!originalStyle) return viewedStyle;
if (!viewedStyle) return originalStyle;