import * as React from '@theia/core/shared/react'; import { inject, injectable } from '@theia/core/shared/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'; import { nls } from '@theia/core/lib/common'; import { Unknown } from '../../../common/nls'; @injectable() export class ListItemRenderer { @inject(WindowService) protected windowService: WindowService; protected onMoreInfoClick = ( event: React.SyntheticEvent ): void => { 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, focus } = input; let nameAndAuthor: JSX.Element; if (item.name && item.author) { const name = {item.name}; const author = {item.author}; nameAndAuthor = ( {name} {nls.localize('arduino/component/by', '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 && (
{nls.localize( 'arduino/component/version', 'Version {0}', item.installedVersion )}
); const summary =
{item.summary}
; const description =
{item.description}
; const moreInfo = !!item.moreInfoLink && ( {nls.localize('arduino/component/moreInfo', '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}
{focus && (
{versions} {installButton}
)}
); } }