'use client' import type { FC } from 'react' import React from 'react' import { useTranslation } from 'react-i18next' import { useBoolean } from 'ahooks' import { isEqual } from 'lodash-es' import produce from 'immer' import FeaturePanel from '@/app/components/app/configuration/base/feature-panel' import OperationBtn from '@/app/components/app/configuration/base/operation-btn' import CardItem from '@/app/components/app/configuration/dataset-config/card-item' import SelectDataSet from '@/app/components/app/configuration/dataset-config/select-dataset' import type { DataSet } from '@/models/datasets' type Props = { readonly?: boolean dataSets: DataSet[] onChange?: (data: DataSet[]) => void } const DatasetConfig: FC = ({ readonly, dataSets, onChange, }) => { const { t } = useTranslation() const selectedIds = dataSets.map(item => item.id) const hasData = dataSets.length > 0 const [isShowSelectDataSet, { setTrue: showSelectDataSet, setFalse: hideSelectDataSet }] = useBoolean(false) const handleSelect = (data: DataSet[]) => { if (isEqual(data.map(item => item.id), dataSets.map(item => item.id))) { hideSelectDataSet() return } if (data.find(item => !item.name)) { // has not loaded selected dataset const newSelected = produce(data, (draft) => { data.forEach((item, index) => { if (!item.name) { // not fetched database const newItem = dataSets.find(i => i.id === item.id) if (newItem) draft[index] = newItem } }) }) onChange?.(newSelected) } else { onChange?.(data) } hideSelectDataSet() } const onRemove = (id: string) => { onChange?.(dataSets.filter(item => item.id !== id)) } return ( } hasHeaderBottomBorder={!hasData} > {hasData ? (
{dataSets.map(item => ( ))}
) : (
{t('appDebug.feature.dataSet.noData')}
)} {isShowSelectDataSet && ( )}
) } export default React.memo(DatasetConfig)