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>
);
};
|