mirror of
https://github.com/nocobase/nocobase
synced 2024-11-16 03:35:10 +00:00
refactor(CardItem): remove lazy render
This commit is contained in:
parent
ff978c5328
commit
3ee1f18068
@ -8,9 +8,8 @@
|
||||
*/
|
||||
|
||||
import { useFieldSchema } from '@formily/react';
|
||||
import { Skeleton, CardProps } from 'antd';
|
||||
import { CardProps } from 'antd';
|
||||
import React, { FC } from 'react';
|
||||
import { IntersectionOptions, useInView } from 'react-intersection-observer';
|
||||
import { useSchemaTemplate } from '../../../schema-templates';
|
||||
import { BlockItem } from '../block-item';
|
||||
import { BlockItemCard } from '../block-item/BlockItemCard';
|
||||
@ -20,38 +19,22 @@ import useStyles from './style';
|
||||
export interface CardItemProps extends CardProps {
|
||||
name?: string;
|
||||
children?: React.ReactNode;
|
||||
/**
|
||||
* lazy render options
|
||||
* @default { threshold: 0, initialInView: true, triggerOnce: true }
|
||||
* @see https://github.com/thebuilder/react-intersection-observer
|
||||
*/
|
||||
lazyRender?: IntersectionOptions & { element?: React.JSX.Element };
|
||||
heightMode?: string;
|
||||
height?: number;
|
||||
}
|
||||
|
||||
export const CardItem: FC<CardItemProps> = (props) => {
|
||||
const { children, name, lazyRender = {}, heightMode, ...restProps } = props;
|
||||
const { children, name, heightMode, ...restProps } = props;
|
||||
const template = useSchemaTemplate();
|
||||
const fieldSchema = useFieldSchema();
|
||||
const templateKey = fieldSchema?.['x-template-key'];
|
||||
const { element: lazyRenderElement, ...resetLazyRenderOptions } = lazyRender;
|
||||
const { ref, inView } = useInView({
|
||||
threshold: 0,
|
||||
initialInView: true,
|
||||
triggerOnce: true,
|
||||
skip: !!process.env.__E2E__,
|
||||
...resetLazyRenderOptions,
|
||||
});
|
||||
const { wrapSSR, componentCls, hashId } = useStyles();
|
||||
|
||||
if (templateKey && !template) return null;
|
||||
return wrapSSR(
|
||||
<BlockItemError>
|
||||
<BlockItem name={name} className={`${componentCls} ${hashId} noco-card-item`}>
|
||||
<BlockItemCard ref={ref} {...restProps}>
|
||||
{inView ? props.children : lazyRenderElement ?? <Skeleton paragraph={{ rows: 4 }} />}
|
||||
</BlockItemCard>
|
||||
<BlockItemCard {...restProps}>{props.children}</BlockItemCard>
|
||||
</BlockItem>
|
||||
</BlockItemError>,
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user