From f60e65040094a0e531cd4adc4a0eb6ea91dae1f7 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 13 Feb 2025 15:34:09 +0800 Subject: [PATCH] feat: create metadata modal --- web/app/(commonLayout)/datasets/Container.tsx | 3 +- .../components/base/modal-like-wrap/index.tsx | 51 +++++++++++++ .../datasets/metadata/create-modal.tsx | 71 +++++++++++++++++++ .../components/datasets/metadata/field.tsx | 23 ++++++ web/app/components/datasets/metadata/types.ts | 5 ++ 5 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 web/app/components/base/modal-like-wrap/index.tsx create mode 100644 web/app/components/datasets/metadata/create-modal.tsx create mode 100644 web/app/components/datasets/metadata/field.tsx create mode 100644 web/app/components/datasets/metadata/types.ts diff --git a/web/app/(commonLayout)/datasets/Container.tsx b/web/app/(commonLayout)/datasets/Container.tsx index f484d30a3d..d91af7aad0 100644 --- a/web/app/(commonLayout)/datasets/Container.tsx +++ b/web/app/(commonLayout)/datasets/Container.tsx @@ -20,7 +20,7 @@ import Button from '@/app/components/base/button' 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 CreateModal from '@/app/components/datasets/metadata/create-modal' // Services import { fetchDatasetApiBaseUrl } from '@/service/datasets' @@ -83,6 +83,7 @@ const Container = () => { return (
+ { console.log(data) }} />
void + onConfirm: () => void + children: React.ReactNode +} + +const ModalLikeWrap: FC = ({ + title, + className, + children, + onClose, + onConfirm, +}) => { + const { t } = useTranslation() + + return ( +
+
+
{title}
+
+ +
+
+
{children}
+
+ + +
+
+ ) +} + +export default React.memo(ModalLikeWrap) diff --git a/web/app/components/datasets/metadata/create-modal.tsx b/web/app/components/datasets/metadata/create-modal.tsx new file mode 100644 index 0000000000..ffb2325201 --- /dev/null +++ b/web/app/components/datasets/metadata/create-modal.tsx @@ -0,0 +1,71 @@ +'use client' +import type { FC } from 'react' +import React, { useCallback, useState } from 'react' +import ModalLikeWrap from '../../base/modal-like-wrap' +import { useTranslation } from 'react-i18next' +import { DataType } from './types' +import Field from './field' +import OptionCard from '../../workflow/nodes/_base/components/option-card' +import Input from '@/app/components/base/input' + +type Props = { + onSave: (data: any) => void +} + +const CreateModal: FC = ({ + onSave, +}) => { + const { t } = useTranslation() + const [type, setType] = useState(DataType.string) + const handleTypeChange = useCallback((newType: DataType) => { + return () => setType(newType) + }, [setType]) + const [name, setName] = useState('') + const handleNameChange = useCallback((e: React.ChangeEvent) => { + setName(e.target.value) + }, [setName]) + + const handleSave = useCallback(() => { + onSave({ + type, + name, + }) + }, [onSave, type, name]) + return ( + { }} + onConfirm={handleSave} + > +
+ +
+ + + +
+
+ + + +
+
+ ) +} +export default React.memo(CreateModal) diff --git a/web/app/components/datasets/metadata/field.tsx b/web/app/components/datasets/metadata/field.tsx new file mode 100644 index 0000000000..bdeb6c3150 --- /dev/null +++ b/web/app/components/datasets/metadata/field.tsx @@ -0,0 +1,23 @@ +'use client' +import type { FC } from 'react' +import React from 'react' + +type Props = { + className?: string + label: string + children: React.ReactNode +} + +const Field: FC = ({ + className, + label, + children, +}) => { + return ( +
+
{label}
+
{children}
+
+ ) +} +export default React.memo(Field) diff --git a/web/app/components/datasets/metadata/types.ts b/web/app/components/datasets/metadata/types.ts new file mode 100644 index 0000000000..fe60f237c9 --- /dev/null +++ b/web/app/components/datasets/metadata/types.ts @@ -0,0 +1,5 @@ +export enum DataType { + string = 'string', + number = 'number', + time = 'time', +}