11import { transient , prop , inject } from '@difizen/libro-common/app' ;
2+ import { ConfigurationService } from '@difizen/libro-common/app' ;
23
34import type { NotebookModel } from './libro-protocol.js' ;
45import { VirtualizedManagerOption } from './libro-protocol.js' ;
6+ import {
7+ VirtualizationEnabled ,
8+ VirtualizationThresholdFileSize ,
9+ VirtualizationThresholdCellCount ,
10+ } from './libro-setting.js' ;
511
612export interface IVirtualizedManager {
713 openVirtualized : ( length : number , size ?: number , path ?: string ) => Promise < boolean > ;
@@ -18,32 +24,49 @@ export class VirtualizedManager implements IVirtualizedManager {
1824 isVirtualized = false ;
1925
2026 libroModel : NotebookModel ;
27+ protected configurationService : ConfigurationService ;
2128
2229 constructor (
2330 @inject ( VirtualizedManagerOption )
2431 virtualizedManagerOption : VirtualizedManagerOption ,
32+ @inject ( ConfigurationService ) configurationService : ConfigurationService ,
2533 ) {
2634 this . libroModel = virtualizedManagerOption . libroModel ;
35+ this . configurationService = configurationService ;
2736 }
2837
2938 /**
3039 *
3140 * @param length cell个数
32- * @param size undefined 或者 单位 为B
41+ * @param size undefined 或者 number,单位为 byte
3342 * @returns 是否使用虚拟滚动
3443 */
35- // eslint-disable-next-line @typescript-eslint/no-unused-vars
3644 openVirtualized = async ( length : number , size ?: number , path ?: string ) => {
45+ // 获取配置项
46+ const virtualizationEnabled =
47+ await this . configurationService . get ( VirtualizationEnabled ) ;
48+ const virtualizationThresholdFileSize = await this . configurationService . get (
49+ VirtualizationThresholdFileSize ,
50+ ) ;
51+ const virtualizationThresholdCellCount = await this . configurationService . get (
52+ VirtualizationThresholdCellCount ,
53+ ) ;
54+
55+ if ( ! virtualizationEnabled ) {
56+ this . isVirtualized = false ;
57+ return false ;
58+ }
59+
60+ // 如果启用虚拟化,根据阈值判断是否使用虚拟滚动
61+ if (
62+ length >= virtualizationThresholdCellCount ||
63+ ( size && size >= virtualizationThresholdFileSize )
64+ ) {
65+ this . isVirtualized = true ;
66+ return true ;
67+ }
68+
3769 this . isVirtualized = false ;
3870 return false ;
39- // this.isVirtualized = true;
40- // return true;
41- // if (length > 100 || (size && size > 4)) {
42- // this.isVirtualized = true;
43- // return true;
44- // } else {
45- // this.isVirtualized = false;
46- // return false;
47- // }
4871 } ;
4972}
0 commit comments