123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 'use client'
- import type { FC } from 'react'
- import React, { useCallback, useState } from 'react'
- import { DataType } from '../types'
- import ModalLikeWrap from '../../../base/modal-like-wrap'
- import Field from './field'
- import OptionCard from '../../../workflow/nodes/_base/components/option-card'
- import Input from '@/app/components/base/input'
- import { RiArrowLeftLine } from '@remixicon/react'
- import { useTranslation } from 'react-i18next'
- const i18nPrefix = 'dataset.metadata.createMetadata'
- export type Props = {
- onClose?: () => void
- onSave: (data: any) => void
- hasBack?: boolean
- onBack?: () => void
- }
- const CreateContent: FC<Props> = ({
- onClose = () => { },
- hasBack,
- onBack,
- 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<HTMLInputElement>) => {
- setName(e.target.value)
- }, [setName])
- const handleSave = useCallback(() => {
- onSave({
- type,
- name,
- })
- }, [onSave, type, name])
- return (
- <ModalLikeWrap
- title={t(`${i18nPrefix}.title`)}
- onClose={onClose}
- onConfirm={handleSave}
- hideCloseBtn={hasBack}
- beforeHeader={hasBack && (
- <div className='relative left-[-4px] mb-1 flex cursor-pointer items-center space-x-1 py-1 text-text-accent' onClick={onBack}>
- <RiArrowLeftLine className='size-4' />
- <div className='system-xs-semibold-uppercase'>{t(`${i18nPrefix}.back`)}</div>
- </div>
- )}
- >
- <div className='space-y-3'>
- <Field label={t(`${i18nPrefix}.type`)}>
- <div className='grid grid-cols-3 gap-2'>
- <OptionCard
- title='String'
- selected={type === DataType.string}
- onSelect={handleTypeChange(DataType.string)}
- />
- <OptionCard
- title='Number'
- selected={type === DataType.number}
- onSelect={handleTypeChange(DataType.number)}
- />
- <OptionCard
- title='Time'
- selected={type === DataType.time}
- onSelect={handleTypeChange(DataType.time)}
- />
- </div>
- </Field>
- <Field label={t(`${i18nPrefix}.name`)}>
- <Input
- value={name}
- onChange={handleNameChange}
- placeholder={t(`${i18nPrefix}.namePlaceholder`)}
- />
- </Field>
- </div>
- </ModalLikeWrap>
- )
- }
- export default React.memo(CreateContent)
|