import React, { useEffect } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { dateTimeFormat } from '@grafana/data'; import { config } from '@grafana/runtime'; import { LinkButton, Spinner, IconButton } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/core'; import { AccessControlAction, StoreState } from 'app/types'; import { loadBundles, removeBundle, checkBundles } from './state/actions'; const subTitle = ( Support bundles allow you to easily collect and share Grafana logs, configuration, and data with the Grafana Labs team. ); const NewBundleButton = ( New support bundle ); const mapStateToProps = (state: StoreState) => { return { supportBundles: state.supportBundles.supportBundles, isLoading: state.supportBundles.isLoading, }; }; const mapDispatchToProps = { loadBundles, removeBundle, checkBundles, }; const connector = connect(mapStateToProps, mapDispatchToProps); type Props = ConnectedProps; const SupportBundlesUnconnected = ({ supportBundles, isLoading, loadBundles, removeBundle, checkBundles }: Props) => { const isPending = supportBundles.some((b) => b.state === 'pending'); useEffect(() => { loadBundles(); }, [loadBundles]); useEffect(() => { if (isPending) { checkBundles(); } }); const hasAccess = contextSrv.hasAccess(AccessControlAction.ActionSupportBundlesCreate, contextSrv.isGrafanaAdmin); const hasDeleteAccess = contextSrv.hasAccess( AccessControlAction.ActionSupportBundlesDelete, contextSrv.isGrafanaAdmin ); const actions = config.featureToggles.topnav && hasAccess ? NewBundleButton : undefined; return ( {!config.featureToggles.topnav && hasAccess && NewBundleButton} {supportBundles?.map((bundle) => ( ))}
Created on Requested by Expires
{dateTimeFormat(bundle.createdAt * 1000)} {bundle.creator} {dateTimeFormat(bundle.expiresAt * 1000)} {bundle.state === 'pending' && } Download {hasDeleteAccess && ( removeBundle(bundle.uid)} name="trash-alt" variant="destructive" /> )}
); }; export default connector(SupportBundlesUnconnected);