D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
app
/
features
/
serviceaccounts
/
components
/
Filename :
ServiceAccountProfile.tsx
back
Copy
import { css } from '@emotion/css'; import React from 'react'; import { dateTimeFormat, GrafanaTheme2, OrgRole, TimeZone } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; import { fetchRoleOptions } from 'app/core/components/RolePicker/api'; import { contextSrv } from 'app/core/core'; import { AccessControlAction, Role, ServiceAccountDTO } from 'app/types'; import { ServiceAccountProfileRow } from './ServiceAccountProfileRow'; import { ServiceAccountRoleRow } from './ServiceAccountRoleRow'; interface Props { serviceAccount: ServiceAccountDTO; timeZone: TimeZone; onChange: (serviceAccount: ServiceAccountDTO) => void; } export function ServiceAccountProfile({ serviceAccount, timeZone, onChange }: Props): JSX.Element { const styles = useStyles2(getStyles); const ableToWrite = contextSrv.hasPermission(AccessControlAction.ServiceAccountsWrite); const [roles, setRoleOptions] = React.useState<Role[]>([]); const onRoleChange = (role: OrgRole) => { onChange({ ...serviceAccount, role: role }); }; const onNameChange = (newValue: string) => { onChange({ ...serviceAccount, name: newValue }); }; React.useEffect(() => { async function fetchOptions() { try { if (contextSrv.hasPermission(AccessControlAction.ActionRolesList)) { let options = await fetchRoleOptions(serviceAccount.orgId); setRoleOptions(options); } } catch (e) { console.error('Error loading options for service account'); } } if (contextSrv.licensedAccessControlEnabled()) { fetchOptions(); } }, [serviceAccount.orgId]); return ( <div className={styles.section}> <h3>Information</h3> <table className="filter-table"> <tbody> <ServiceAccountProfileRow label="Name" value={serviceAccount.name} onChange={onNameChange} disabled={!ableToWrite || serviceAccount.isDisabled} /> <ServiceAccountProfileRow label="ID" value={serviceAccount.login} disabled={serviceAccount.isDisabled} /> <ServiceAccountRoleRow label="Roles" serviceAccount={serviceAccount} onRoleChange={onRoleChange} roleOptions={roles} /> <ServiceAccountProfileRow label="Creation date" value={dateTimeFormat(serviceAccount.createdAt, { timeZone })} disabled={serviceAccount.isDisabled} /> </tbody> </table> </div> ); } export const getStyles = (theme: GrafanaTheme2) => ({ section: css` margin-bottom: ${theme.spacing(4)}; `, });