import * as React from 'react'; import { inject, injectable } from 'inversify'; import { WindowService } from '@theia/core/lib/browser/window/window-service'; import { Installable } from '../../../common/protocol/installable'; import { ArduinoComponent } from '../../../common/protocol/arduino-component'; import { ComponentListItem } from './component-list-item'; @injectable() export class ListItemRenderer { @inject(WindowService) protected windowService: WindowService; protected onMoreInfoClick = (event: React.SyntheticEvent) => { const { target } = event.nativeEvent; if (target instanceof HTMLAnchorElement) { this.windowService.openNewWindow(target.href, { external: true }); event.nativeEvent.preventDefault(); } } renderItem( input: ComponentListItem.State & { item: T }, install: (item: T) => Promise, uninstall: (item: T) => Promise, onVersionChange: (version: Installable.Version) => void ): React.ReactNode { const { item } = input; let nameAndAuthor: JSX.Element; if (item.name && item.author) { const name = {item.name}; const author = {item.author}; nameAndAuthor = {name} by {author} } else if (item.name) { nameAndAuthor = {item.name}; } else if ((item as any).id) { nameAndAuthor = {(item as any).id}; } else { nameAndAuthor = Unknown; } const onClickUninstall = () => uninstall(item); const installedVersion = !!item.installedVersion &&
Version {item.installedVersion}
; const summary =
{item.summary}
; const description =
{item.description}
; const moreInfo = !!item.moreInfoLink && More info; const onClickInstall = () => install(item); const installButton = item.installable && ; const onSelectChange = (event: React.ChangeEvent) => { const version = event.target.value; if (version) { onVersionChange(version); } } const versions = (() => { const { availableVersions } = item; if (availableVersions.length === 0) { return undefined; } else if (availableVersions.length === 1) { return } else { return ; } })(); return
{nameAndAuthor} {installedVersion}
{summary} {description}
{moreInfo}
{installButton} {versions}
; } }