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 (
+
+
+
{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 (
+
+ )
+}
+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',
+}