'use client' import type { Dependency, GitHubItemAndMarketPlaceDependency, PackageDependency, Plugin, VersionInfo } from '../../../types' import * as React from 'react' import { useImperativeHandle } from 'react' import LoadingError from '../../base/loading-error' import GithubItem from '../item/github-item' import MarketplaceItem from '../item/marketplace-item' import PackageItem from '../item/package-item' import { getPluginKey, useInstallMultiState } from './hooks/use-install-multi-state' type Props = { allPlugins: Dependency[] selectedPlugins: Plugin[] onSelect: (plugin: Plugin, selectedIndex: number, allCanInstallPluginsLength: number) => void onSelectAll: (plugins: Plugin[], selectedIndexes: number[]) => void onDeSelectAll: () => void onLoadedAllPlugin: (installedInfo: Record) => void isFromMarketPlace?: boolean ref?: React.Ref } export type ExposeRefs = { selectAllPlugins: () => void deSelectAllPlugins: () => void } const InstallByDSLList = ({ allPlugins, selectedPlugins, onSelect, onSelectAll, onDeSelectAll, onLoadedAllPlugin, isFromMarketPlace, ref, }: Props) => { const { plugins, errorIndexes, handleGitHubPluginFetched, handleGitHubPluginFetchError, getVersionInfo, handleSelect, isPluginSelected, getInstallablePlugins, } = useInstallMultiState({ allPlugins, selectedPlugins, onSelect, onLoadedAllPlugin, }) useImperativeHandle(ref, () => ({ selectAllPlugins: () => { const { installablePlugins, selectedIndexes } = getInstallablePlugins() onSelectAll(installablePlugins, selectedIndexes) }, deSelectAllPlugins: onDeSelectAll, })) return ( <> {allPlugins.map((d, index) => { if (errorIndexes.includes(index)) return const plugin = plugins[index] const checked = isPluginSelected(index) const versionInfo = getVersionInfo(getPluginKey(plugin)) if (d.type === 'github') { return ( ) } if (d.type === 'marketplace') { return ( ) } return ( ) })} ) } export default InstallByDSLList