All files / src/views/Package/PackageHeader Install.tsx

0% Statements 0/36
0% Branches 0/28
0% Functions 0/2
0% Lines 0/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122                                                                                                                                                                                                                                                   
import {
  Box,
  Flex,
  FlexProps,
  Collapse,
  useDisclosure,
} from "@chakra-ui/react";
import type { Assembly } from "@jsii/spec";
import type { Language as PrismLanguage } from "prism-react-renderer";
import type { FunctionComponent } from "react";
import { ToggleButton } from "./ToggleButton";
import { Code } from "../../../components/Code";
import { Language } from "../../../constants/languages";
import { usePackageState } from "../PackageState";
 
const getCodeSample = ({
  language,
  assembly,
}: {
  language: Language;
  assembly: Assembly;
}): string | undefined => {
  const version = assembly.version;
  if (language === Language.TypeScript) {
    const packageName = assembly.name;
 
    return `npm install ${packageName}@${version}`;
  } else if (language === Language.Python) {
    const packageName = assembly.targets?.python?.distName;
 
    if (!packageName) {
      return undefined;
    }
 
    return `pip install ${packageName}==${version}`;
  } else if (language === Language.Java) {
    const groupId = assembly.targets?.java?.maven?.groupId;
    const artifactId = assembly.targets?.java?.maven?.artifactId;
 
    if (!groupId || !artifactId) return undefined;
 
    return [
      "// add this to your pom.xml",
      "<dependency>",
      `    <groupId>${groupId}</groupId>`,
      `    <artifactId>${artifactId}</artifactId>`,
      `    <version>${version}</version>`,
      "</dependency>",
    ].join("\n");
  } else if (language === Language.DotNet) {
    const packageId = assembly.targets?.dotnet?.packageId;
    if (!packageId) return undefined;
    return `dotnet add package ${packageId} --version ${version}`;
  } else if (language === Language.Go) {
    const repositoryUrl = assembly?.targets?.go?.moduleName;
 
    if (!repositoryUrl) return undefined;
 
    return `go get ${repositoryUrl}`;
  }
 
  return undefined;
};
 
export const Install: FunctionComponent<FlexProps> = (props) => {
  const {
    language,
    assembly: { data: assembly },
  } = usePackageState();
 
  const collapse = useDisclosure();
 
  if (!assembly) return null;
 
  const code = getCodeSample({ language, assembly });
 
  if (!code || !language) return null;
 
  return (
    <Flex
      align="start"
      direction="column"
      fontSize=".75rem"
      w="full"
      {...props}
    >
      {language === Language.Java ? (
        <>
          <ToggleButton
            closeText="Hide"
            fontSize="inherit"
            isOpen={collapse.isOpen}
            mt={2}
            onClick={collapse.onToggle}
            openText="Install"
          />
          <Box maxW="full" overflow="hidden">
            <Collapse in={collapse.isOpen}>
              <Code
                boxShadow="none"
                code={code}
                fontSize="inherit"
                language={language as PrismLanguage}
                mt={2}
              />
            </Collapse>
          </Box>
        </>
      ) : (
        <Code
          boxShadow="none"
          code={code}
          fontSize="inherit"
          language={language as PrismLanguage}
          lineHeight="2"
          w="full"
        />
      )}
    </Flex>
  );
};