mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Use InteractiveTable * Remove unused return * Fix icon alignment * InteractiveTable in LdapUserMappingInfo * Update no teams text * InteractiveTable in LdapUserGroups * Remove unused code * Cleanup * LdapSyncInfo to InteractiveTable * Update more tables * Memoize * Fix connection status * Update lockfile * Refactor LdapSyncInfo * Fix lockfile * Remove showAttributeMapping as it is always true
105 lines
2.6 KiB
TypeScript
105 lines
2.6 KiB
TypeScript
import React, { useMemo } from 'react';
|
|
|
|
import { Alert, CellProps, Column, Icon, InteractiveTable, Stack, Text, Tooltip } from '@grafana/ui';
|
|
import { AppNotificationSeverity, LdapConnectionInfo, LdapServerInfo } from 'app/types';
|
|
|
|
interface Props {
|
|
ldapConnectionInfo: LdapConnectionInfo;
|
|
}
|
|
|
|
interface ServerInfo {
|
|
host: string;
|
|
port: number;
|
|
available: boolean;
|
|
}
|
|
|
|
export const LdapConnectionStatus = ({ ldapConnectionInfo }: Props) => {
|
|
const columns = useMemo<Array<Column<ServerInfo>>>(
|
|
() => [
|
|
{
|
|
id: 'host',
|
|
header: 'Host',
|
|
disableGrow: true,
|
|
},
|
|
{
|
|
id: 'port',
|
|
header: 'Port',
|
|
disableGrow: true,
|
|
},
|
|
{
|
|
id: 'available',
|
|
cell: (serverInfo: CellProps<ServerInfo>) => {
|
|
return serverInfo.cell.value ? (
|
|
<Stack justifyContent="end">
|
|
<Tooltip content="Connection is available">
|
|
<Icon name="check" className="pull-right" />
|
|
</Tooltip>
|
|
</Stack>
|
|
) : (
|
|
<Stack justifyContent="end">
|
|
<Tooltip content="Connection is not available">
|
|
<Icon name="exclamation-triangle" />
|
|
</Tooltip>
|
|
</Stack>
|
|
);
|
|
},
|
|
},
|
|
],
|
|
[]
|
|
);
|
|
|
|
const data = useMemo<ServerInfo[]>(() => ldapConnectionInfo, [ldapConnectionInfo]);
|
|
|
|
return (
|
|
<section>
|
|
<Stack direction="column" gap={2}>
|
|
<Text color="primary" element="h3">
|
|
LDAP Connection
|
|
</Text>
|
|
<InteractiveTable data={data} columns={columns} getRowId={(serverInfo) => serverInfo.host + serverInfo.port} />
|
|
<LdapErrorBox ldapConnectionInfo={ldapConnectionInfo} />
|
|
</Stack>
|
|
</section>
|
|
);
|
|
};
|
|
|
|
interface LdapConnectionErrorProps {
|
|
ldapConnectionInfo: LdapConnectionInfo;
|
|
}
|
|
|
|
export const LdapErrorBox = ({ ldapConnectionInfo }: LdapConnectionErrorProps) => {
|
|
const hasError = ldapConnectionInfo.some((info) => info.error);
|
|
if (!hasError) {
|
|
return null;
|
|
}
|
|
|
|
const connectionErrors: LdapServerInfo[] = [];
|
|
ldapConnectionInfo.forEach((info) => {
|
|
if (info.error) {
|
|
connectionErrors.push(info);
|
|
}
|
|
});
|
|
|
|
const errorElements = connectionErrors.map((info, index) => (
|
|
<div key={index}>
|
|
<span style={{ fontWeight: 500 }}>
|
|
{info.host}:{info.port}
|
|
<br />
|
|
</span>
|
|
<span>{info.error}</span>
|
|
{index !== connectionErrors.length - 1 && (
|
|
<>
|
|
<br />
|
|
<br />
|
|
</>
|
|
)}
|
|
</div>
|
|
));
|
|
|
|
return (
|
|
<Alert title="Connection error" severity={AppNotificationSeverity.Error}>
|
|
{errorElements}
|
|
</Alert>
|
|
);
|
|
};
|