import { useEffect } from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { dateTimeFormat } from '@grafana/data'; import { LinkButton, Spinner, IconButton } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; import { contextSrv } from 'app/core/core'; import { Trans, t } from 'app/core/internationalization'; import { AccessControlAction, StoreState } from 'app/types'; import { loadBundles, removeBundle, checkBundles } from './state/actions'; 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.hasPermission(AccessControlAction.ActionSupportBundlesCreate); const hasDeleteAccess = contextSrv.hasPermission(AccessControlAction.ActionSupportBundlesDelete); const actions = hasAccess ? NewBundleButton : undefined; const subTitle = ( Support bundles allow you to easily collect and share Grafana logs, configuration, and data with the Grafana Labs team. ); return ( {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" tooltip={t('support-bundles.support-bundles-unconnected.tooltip-remove-bundle', 'Remove bundle')} /> )}
); }; export default connector(SupportBundlesUnconnected);