|
|
|
|
|
|
|
|
import cn from 'classnames' |
|
|
import cn from 'classnames' |
|
|
import { useTranslation } from 'react-i18next' |
|
|
import { useTranslation } from 'react-i18next' |
|
|
import Link from 'next/link' |
|
|
import Link from 'next/link' |
|
|
|
|
|
import produce from 'immer' |
|
|
import TypeIcon from '../type-icon' |
|
|
import TypeIcon from '../type-icon' |
|
|
import s from './style.module.css' |
|
|
import s from './style.module.css' |
|
|
import Modal from '@/app/components/base/modal' |
|
|
import Modal from '@/app/components/base/modal' |
|
|
|
|
|
|
|
|
onSelect, |
|
|
onSelect, |
|
|
}) => { |
|
|
}) => { |
|
|
const { t } = useTranslation() |
|
|
const { t } = useTranslation() |
|
|
const [selected, setSelected] = React.useState<DataSet[]>([]) |
|
|
|
|
|
|
|
|
const [selected, setSelected] = React.useState<DataSet[]>(selectedIds.map(id => ({ id }) as any)) |
|
|
const [loaded, setLoaded] = React.useState(false) |
|
|
const [loaded, setLoaded] = React.useState(false) |
|
|
const [datasets, setDataSets] = React.useState<DataSet[] | null>(null) |
|
|
const [datasets, setDataSets] = React.useState<DataSet[] | null>(null) |
|
|
const hasNoData = !datasets || datasets?.length === 0 |
|
|
const hasNoData = !datasets || datasets?.length === 0 |
|
|
|
|
|
|
|
|
const newList = [...(datasets || []), ...data] |
|
|
const newList = [...(datasets || []), ...data] |
|
|
setDataSets(newList) |
|
|
setDataSets(newList) |
|
|
setLoaded(true) |
|
|
setLoaded(true) |
|
|
setSelected(newList.filter(item => selectedIds.includes(item.id))) |
|
|
|
|
|
|
|
|
if (!selected.find(item => !item.name)) |
|
|
|
|
|
return { list: [] } |
|
|
|
|
|
|
|
|
|
|
|
const newSelected = produce(selected, (draft) => { |
|
|
|
|
|
selected.forEach((item, index) => { |
|
|
|
|
|
if (!item.name) { // not fetched database |
|
|
|
|
|
const newItem = newList.find(i => i.id === item.id) |
|
|
|
|
|
if (newItem) |
|
|
|
|
|
draft[index] = newItem |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
}) |
|
|
|
|
|
setSelected(newSelected) |
|
|
} |
|
|
} |
|
|
return { list: [] } |
|
|
return { list: [] } |
|
|
}, |
|
|
}, |