/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import styles from "./extension-card.module.scss"; import { withInjectables } from "@ogre-tools/injectable-react"; import { observer } from "mobx-react"; import React from "react"; import installFromInputInjectable from "../+extensions/install-from-input/install-from-input.injectable"; import { Button } from "../button"; import { Icon } from "../icon"; import type { Extension } from "./extension-list"; import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store"; import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; interface Dependencies { installFromInput: (input: string) => Promise; extensionInstallationStateStore: ExtensionInstallationStateStore; } interface Props { extension: Extension } function NonInjectedExtensionCard({ extension, extensionInstallationStateStore, installFromInput }: Props & Dependencies) { const { name, version, totalNumberOfInstallations, shortDescription, publisher, githubRepositoryUrl, appIconUrl } = extension; function onInstall() { installFromInput(extension.binaryUrl); } return (
{name}
{version}
{totalNumberOfInstallations}
{shortDescription}
); } export const ExtensionCard = withInjectables( observer(NonInjectedExtensionCard), { getProps: (di, props) => ({ installFromInput: di.inject(installFromInputInjectable), extensionInstallationStateStore: di.inject(extensionInstallationStateStoreInjectable), ...props, }), }, );