From 10fccd2b3f51679490769c802b66f00466dcdef5 Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 19 Feb 2025 18:38:29 +0800 Subject: [PATCH] feat: metadata panel --- web/app/(commonLayout)/datasets/Container.tsx | 6 +- .../edit-metadata-batch/input-combined.tsx | 5 +- .../metadata/metadata-document/field.tsx | 26 ++++++++ .../metadata/metadata-document/index.tsx | 61 +++++++++++++++++ .../metadata/metadata-document/info-group.tsx | 66 +++++++++++++++++++ web/app/components/datasets/metadata/types.ts | 7 +- 6 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 web/app/components/datasets/metadata/metadata-document/field.tsx create mode 100644 web/app/components/datasets/metadata/metadata-document/index.tsx create mode 100644 web/app/components/datasets/metadata/metadata-document/info-group.tsx diff --git a/web/app/(commonLayout)/datasets/Container.tsx b/web/app/(commonLayout)/datasets/Container.tsx index 652cfa69bc..47acc9b51b 100644 --- a/web/app/(commonLayout)/datasets/Container.tsx +++ b/web/app/(commonLayout)/datasets/Container.tsx @@ -21,7 +21,7 @@ import Input from '@/app/components/base/input' import { ApiConnectionMod } from '@/app/components/base/icons/src/vender/solid/development' import CheckboxWithLabel from '@/app/components/datasets/create/website/base/checkbox-with-label' // import DatasetMetadataDrawer from '@/app/components/datasets/metadata/dataset-metadata-drawer' -import NoData from '@/app/components/datasets/metadata/metadata-document/no-data' +import MetaDataDocument from '@/app/components/datasets/metadata/metadata-document' // Services import { fetchDatasetApiBaseUrl } from '@/service/datasets' @@ -92,8 +92,8 @@ const Container = () => { return (
-
- { }} /> +
+ {/* select} onSave={(data) => { console.log(data) }} /> add} hasBack onSave={(data) => { console.log(data) }} /> } + isEdit={isEdit} + onChange={(item) => { + const newList = list.map(i => (i.name === item.name ? item : i)) + setList(newList) + }} + onDelete={(item) => { + const newList = list.filter(i => i.name !== item.name) + setList(newList) + }} + onAdd={() => { + }} + /> + + ) : ( + { }} /> + )} +
+ ) +} + +export default React.memo(MetadataDocument) diff --git a/web/app/components/datasets/metadata/metadata-document/info-group.tsx b/web/app/components/datasets/metadata/metadata-document/info-group.tsx new file mode 100644 index 0000000000..311cb1a29c --- /dev/null +++ b/web/app/components/datasets/metadata/metadata-document/info-group.tsx @@ -0,0 +1,66 @@ +'use client' +import type { FC } from 'react' +import React from 'react' +import type { MetadataItemWithValue } from '../types' +import Field from './field' +import InputCombined from '../edit-metadata-batch/input-combined' +import { RiDeleteBinLine } from '@remixicon/react' +import Tooltip from '@/app/components/base/tooltip' + +type Props = { + title: string + titleTooltip?: string + headerRight?: React.ReactNode + list: MetadataItemWithValue[] + isEdit?: boolean + onChange?: (item: MetadataItemWithValue) => void + onDelete?: (item: MetadataItemWithValue) => void + onAdd?: (item: MetadataItemWithValue) => void +} + +const InfoGroup: FC = ({ + title, + titleTooltip, + headerRight, + list, + isEdit, + onChange, + onDelete, + onAdd, +}) => { + return ( +
+
+
+
{title}
+ {titleTooltip && ( + + )} +
+ {headerRight} + {/*
setIsEdit(true)}> +
*/} +
+
+ {list.map((item, i) => ( + + {isEdit ? ( +
+ onChange?.({ ...item, value })} + /> +
+ +
+
+ ) : (
{item.value}
)} +
+ ))} +
+
+ ) +} +export default React.memo(InfoGroup) diff --git a/web/app/components/datasets/metadata/types.ts b/web/app/components/datasets/metadata/types.ts index 1b4cb06704..dbbe8a95c2 100644 --- a/web/app/components/datasets/metadata/types.ts +++ b/web/app/components/datasets/metadata/types.ts @@ -10,6 +10,10 @@ export type MetadataItem = { name: string } +export type MetadataItemWithValue = MetadataItem & { + value: string | number +} + export type MetadataItemWithValueLength = MetadataItem & { valueLength: number } @@ -17,8 +21,7 @@ export enum UpdateType { changeValue = 'changeValue', delete = 'delete', } -export type MetadataItemWithEdit = MetadataItem & { - value: string | number +export type MetadataItemWithEdit = MetadataItemWithValue & { isMultipleValue?: boolean isUpdated?: boolean updateType?: UpdateType