-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
/
Copy pathlambdaLayerDetailClient.tsx
84 lines (73 loc) · 1.83 KB
/
lambdaLayerDetailClient.tsx
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
'use client';
import {useState} from 'react';
import Select from 'react-select';
import styled from '@emotion/styled';
type RegionData = {region: string; version: string};
type LayerData = {
accountNumber: string;
canonical: string;
layerName: string;
regions: RegionData[];
};
const toOption = ({region}: RegionData) => {
return {
label: region,
value: region,
};
};
export function LambdaLayerDetailClient({
canonical,
layerList,
}: {
canonical: string;
layerList: LayerData[];
}) {
const layer = layerList.find(l => l.canonical === canonical);
// if we don't find a matching layer, let the page blow up
// cause the page is useless without it
if (!layer) {
throw new Error(`Could not find layer for: ${canonical}`);
}
const {regions, layerName, accountNumber} = layer;
const [regionOption, setRegion] = useState<{
label: string;
value: string;
}>();
let arn: string = '';
if (regionOption) {
const regionData = regions.find(data => data.region === regionOption.value);
if (regionData) {
const {version, region} = regionData;
arn = `arn:aws:lambda:${region}:${accountNumber}:layer:${layerName}:${version}`;
}
}
return (
<Wrapper>
<Select
styles={{
control: base => ({...base, width: 300}),
}}
placeholder="Select Region"
options={layer.regions.map(toOption)}
value={regionOption}
onChange={setRegion}
/>
{arn && (
<ArnWrapper>
<ArnLabel>ARN</ArnLabel>
<code>{arn}</code>
</ArnWrapper>
)}
</Wrapper>
);
}
// need a min-height so we don't get cropped at the bottom of the page
const Wrapper = styled('div')`
min-height: 50px;
`;
const ArnWrapper = styled('div')`
margin-top: 10px;
`;
const ArnLabel = styled('div')`
font-weight: bold;
`;