From 769de9a69ecbf1df5f32d29aef46c69d53564d9c Mon Sep 17 00:00:00 2001 From: jack zhang <1098626505@qq.com> Date: Tue, 16 Apr 2024 09:14:51 +0800 Subject: [PATCH] fix: improve card item (#4036) * fix: add block card item(T-4026 and T-4022) * fix: bug --- .../CollectionDeletedPlaceholder.tsx | 7 +++--- .../antd/block-item/BlockItemCard.tsx | 14 +++++++++++ .../antd/block-item/BlockItemError.tsx | 24 +++++++++++++++++++ .../antd/card-item/CardItem.tsx | 17 +++++++------ .../schema-component/antd/card-item/style.ts | 4 +--- 5 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 packages/core/client/src/schema-component/antd/block-item/BlockItemCard.tsx create mode 100644 packages/core/client/src/schema-component/antd/block-item/BlockItemError.tsx diff --git a/packages/core/client/src/data-source/components/CollectionDeletedPlaceholder.tsx b/packages/core/client/src/data-source/components/CollectionDeletedPlaceholder.tsx index 13470f53e2..aac31b26e1 100644 --- a/packages/core/client/src/data-source/components/CollectionDeletedPlaceholder.tsx +++ b/packages/core/client/src/data-source/components/CollectionDeletedPlaceholder.tsx @@ -1,11 +1,12 @@ import { App, Button, Result, Typography } from 'antd'; import React, { FC, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { CardItem, EllipsisWithTooltip, useCompile, useDesignable } from '../../schema-component'; +import { EllipsisWithTooltip, useCompile, useDesignable } from '../../schema-component'; import { useDataSource } from '../data-source/DataSourceProvider'; import { useDataSourceManager } from '../data-source'; import { DEFAULT_DATA_SOURCE_KEY } from '../../data-source/data-source/DataSourceManager'; import { useCollection } from '../collection'; +import { BlockItemCard } from '../../schema-component/antd/block-item/BlockItemCard'; export interface CollectionDeletedPlaceholderProps { type: 'Collection' | 'Field' | 'Data Source' | 'Block template'; @@ -74,7 +75,7 @@ export const CollectionDeletedPlaceholder: FC } return ( - + } /> - + ); } diff --git a/packages/core/client/src/schema-component/antd/block-item/BlockItemCard.tsx b/packages/core/client/src/schema-component/antd/block-item/BlockItemCard.tsx new file mode 100644 index 0000000000..a3c233c7e6 --- /dev/null +++ b/packages/core/client/src/schema-component/antd/block-item/BlockItemCard.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import { Card, CardProps, theme } from 'antd'; + +export const BlockItemCard = React.forwardRef(({ children, ...props }, ref) => { + const { token } = theme.useToken(); + + return ( + + {children} + + ); +}); + +BlockItemCard.displayName = 'BlockItemCard'; diff --git a/packages/core/client/src/schema-component/antd/block-item/BlockItemError.tsx b/packages/core/client/src/schema-component/antd/block-item/BlockItemError.tsx new file mode 100644 index 0000000000..e01e1ca309 --- /dev/null +++ b/packages/core/client/src/schema-component/antd/block-item/BlockItemError.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { FC } from 'react'; +import { ErrorBoundary, FallbackProps } from 'react-error-boundary'; +import { BlockItemCard } from './BlockItemCard'; +import { ErrorFallback } from '../error-fallback'; + +const FallbackComponent: FC = (props) => { + return ( + + + + ); +}; + +export const BlockItemError: FC = ({ children }) => { + const handleErrors = (error) => { + console.error(error); + }; + return ( + + {children} + + ); +}; diff --git a/packages/core/client/src/schema-component/antd/card-item/CardItem.tsx b/packages/core/client/src/schema-component/antd/card-item/CardItem.tsx index 3dafb82fe7..5fc45aa08a 100644 --- a/packages/core/client/src/schema-component/antd/card-item/CardItem.tsx +++ b/packages/core/client/src/schema-component/antd/card-item/CardItem.tsx @@ -1,10 +1,12 @@ import { useFieldSchema } from '@formily/react'; -import { Card, Skeleton } from 'antd'; +import { Skeleton } from 'antd'; import React from 'react'; import { useSchemaTemplate } from '../../../schema-templates'; import { BlockItem } from '../block-item'; -import useStyles from './style'; import { useInView } from 'react-intersection-observer'; +import { BlockItemCard } from '../block-item/BlockItemCard'; +import { BlockItemError } from '../block-item/BlockItemError'; +import useStyles from './style'; interface Props { children?: React.ReactNode; @@ -18,21 +20,22 @@ export const CardItem = (props: Props) => { const template = useSchemaTemplate(); const fieldSchema = useFieldSchema(); const templateKey = fieldSchema?.['x-template-key']; - const { wrapSSR, componentCls, hashId } = useStyles(); const { ref, inView } = useInView({ threshold: 0, initialInView: true, triggerOnce: true, skip: !!process.env.__E2E__, }); + const { wrapSSR, componentCls, hashId } = useStyles(); + if (templateKey && !template) return null; return wrapSSR( - templateKey && !template ? null : ( + - + {inView ? props.children : } - + - ), + , ); }; diff --git a/packages/core/client/src/schema-component/antd/card-item/style.ts b/packages/core/client/src/schema-component/antd/card-item/style.ts index e37f1d1703..3db97ca30b 100644 --- a/packages/core/client/src/schema-component/antd/card-item/style.ts +++ b/packages/core/client/src/schema-component/antd/card-item/style.ts @@ -5,9 +5,7 @@ const useStyles = genStyleHook('nb-card-item', (token) => { return { [componentCls]: { - '.card': { - marginBottom: token.marginLG, - }, + marginBottom: token.marginLG, }, }; });