import React, { useEffect, useState } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { getNavModel } from 'app/core/selectors/navModel'; import Page from 'app/core/components/Page/Page'; import { ServiceAccountProfile } from './ServiceAccountProfile'; import { StoreState, ServiceAccountDTO, ApiKey } from 'app/types'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; import { deleteServiceAccountToken, loadServiceAccount, loadServiceAccountTokens, createServiceAccountToken, } from './state/actions'; import { ServiceAccountTokensTable } from './ServiceAccountTokensTable'; import { getTimeZone, NavModel } from '@grafana/data'; import { Button, VerticalGroup } from '@grafana/ui'; import { CreateTokenModal } from './CreateTokenModal'; interface OwnProps extends GrafanaRouteComponentProps<{ id: string }> { navModel: NavModel; serviceAccount?: ServiceAccountDTO; tokens: ApiKey[]; isLoading: boolean; } function mapStateToProps(state: StoreState) { return { navModel: getNavModel(state.navIndex, 'serviceaccounts'), serviceAccount: state.serviceAccountProfile.serviceAccount, tokens: state.serviceAccountProfile.tokens, isLoading: state.serviceAccountProfile.isLoading, timezone: getTimeZone(state.user), }; } const mapDispatchToProps = { loadServiceAccount, loadServiceAccountTokens, createServiceAccountToken, deleteServiceAccountToken, }; const connector = connect(mapStateToProps, mapDispatchToProps); type Props = OwnProps & ConnectedProps; const ServiceAccountPageUnconnected = ({ navModel, match, serviceAccount, tokens, timezone, isLoading, loadServiceAccount, loadServiceAccountTokens, createServiceAccountToken, deleteServiceAccountToken, }: Props) => { const [isModalOpen, setIsModalOpen] = useState(false); const [newToken, setNewToken] = useState(''); useEffect(() => { const serviceAccountId = parseInt(match.params.id, 10); loadServiceAccount(serviceAccountId); loadServiceAccountTokens(serviceAccountId); }, [match, loadServiceAccount, loadServiceAccountTokens]); const onDeleteServiceAccountToken = (key: ApiKey) => { deleteServiceAccountToken(parseInt(match.params.id, 10), key.id!); }; const onCreateToken = (token: ApiKey) => { createServiceAccountToken(serviceAccount.id, token, setNewToken); }; const onModalClose = () => { setIsModalOpen(false); setNewToken(''); }; return ( {serviceAccount && ( <> { console.log(`not implemented`); }} onServiceAccountUpdate={() => { console.log(`not implemented`); }} onServiceAccountDisable={() => { console.log(`not implemented`); }} onServiceAccountEnable={() => { console.log(`not implemented`); }} /> )}

Tokens

{tokens && ( )}
); }; export const ServiceAccountPage = connector(ServiceAccountPageUnconnected);