in public/apps/configuration/panels/role-edit/index-permission-panel.tsx [247:309]
export function generateIndexPermissionPanels(
indexPermissions: RoleIndexPermissionStateClass[],
permisionOptionsSet: ComboBoxOptions,
setRoleIndexPermission: Dispatch<SetStateAction<RoleIndexPermissionStateClass[]>>
) {
const panels = indexPermissions.map((permission, arrayIndex) => {
const onValueChangeHandler = (attributeToUpdate: string) =>
updateElementInArrayHandler(setRoleIndexPermission, [arrayIndex, attributeToUpdate]);
const onCreateOptionHandler = (attributeToUpdate: string) =>
appendOptionToComboBoxHandler(setRoleIndexPermission, [arrayIndex, attributeToUpdate]);
return (
<Fragment key={`index-permission-${arrayIndex}`}>
<EuiAccordion
id={`index-permission-${arrayIndex}`}
initialIsOpen={arrayIndex === 0}
buttonContent={
permission.indexPatterns.map(comboBoxOptionToString).join(', ') ||
'Add index permission'
}
extraAction={
<EuiButton
color="danger"
onClick={() => removeElementFromArray(setRoleIndexPermission, [], arrayIndex)}
>
Remove
</EuiButton>
}
>
<IndexPatternRow
value={permission.indexPatterns}
onChangeHandler={onValueChangeHandler('indexPatterns')}
onCreateHandler={onCreateOptionHandler('indexPatterns')}
/>
<IndexPermissionRow
value={permission.allowedActions}
permisionOptionsSet={permisionOptionsSet}
onChangeHandler={onValueChangeHandler('allowedActions')}
/>
<DocLevelSecurityRow
value={permission.docLevelSecurity}
onChangeHandler={(e) => onValueChangeHandler('docLevelSecurity')(e.target.value)}
/>
<FieldLevelSecurityRow
method={permission.fieldLevelSecurityMethod}
fields={permission.fieldLevelSecurityFields}
onMethodChangeHandler={onValueChangeHandler('fieldLevelSecurityMethod')}
onFieldChangeHandler={onValueChangeHandler('fieldLevelSecurityFields')}
onFieldCreateHandler={onCreateOptionHandler('fieldLevelSecurityFields')}
/>
<AnonymizationRow
value={permission.maskedFields}
onChangeHandler={onValueChangeHandler('maskedFields')}
onCreateHandler={onCreateOptionHandler('maskedFields')}
/>
</EuiAccordion>
<EuiHorizontalRule />
</Fragment>
);
});
return <>{panels}</>;
}