in frontend/src/old-pages/Configure/Components.tsx [616:675]
function IamPoliciesEditor({basePath}: any) {
const {t} = useTranslation()
const policiesPath = [...basePath, 'Iam', 'AdditionalIamPolicies']
const policies = useState(policiesPath) || []
const policyPath = ['app', 'wizard', 'headNode', 'iamPolicy']
const policy = useState(policyPath) || ''
const addPolicy = () => {
updateState(policiesPath, (existing: any) => [
...(existing || []),
{Policy: policy},
])
setState(policyPath, '')
}
const removePolicy = (index: any) => {
setState(policiesPath, [
...policies.slice(0, index),
...policies.slice(index + 1),
])
if (policies.length === 0) clearState(policiesPath)
}
return (
<SpaceBetween direction="vertical" size="s">
<FormField
errorText={
findFirst(policies, (x: any) => x.Policy === policy)
? t('wizard.components.IamPoliciesEditor.policyAlreadyAdded')
: ''
}
>
<SpaceBetween direction="horizontal" size="s">
<div style={{width: '400px'}}>
<Input
placeholder="arn:aws:iam::aws:policy/SecretsManager:ReadWrite"
value={policy}
onChange={({detail}) => setState(policyPath, detail.value)}
/>
</div>
<Button
onClick={addPolicy}
disabled={
policy.length === 0 ||
findFirst(policies, (x: any) => x.Policy === policy)
}
>
{t('wizard.components.IamPoliciesEditor.addButtonLabel')}
</Button>
</SpaceBetween>
</FormField>
{policies.map(
(p: any, i: any) =>
p.Policy !== ssmPolicy && (
<SpaceBetween key={p.Policy} direction="horizontal" size="s">
<div style={{width: '400px'}}>{p.Policy}</div>
<Button onClick={() => removePolicy(i)}>Remove</Button>
</SpaceBetween>
),
)}