mirror of https://github.com/grafana/grafana
Feature Management: Update admin page UI after a successful update (#76380)
* Feature Management: Update admin page UI after a successful update * lint * lint * refactorpull/76326/head^2
parent
2857870bfb
commit
9fc0e1566e
@ -1,26 +1,72 @@ |
|||||||
import React from 'react'; |
import { css } from '@emotion/css'; |
||||||
|
import React, { useState } from 'react'; |
||||||
|
|
||||||
|
import { GrafanaTheme2 } from '@grafana/data'; |
||||||
|
import { useStyles2, Icon } from '@grafana/ui'; |
||||||
import { Page } from 'app/core/components/Page/Page'; |
import { Page } from 'app/core/components/Page/Page'; |
||||||
|
|
||||||
import { useGetFeatureTogglesQuery } from './AdminFeatureTogglesAPI'; |
import { useGetFeatureTogglesQuery, useGetManagerStateQuery } from './AdminFeatureTogglesAPI'; |
||||||
import { AdminFeatureTogglesTable } from './AdminFeatureTogglesTable'; |
import { AdminFeatureTogglesTable } from './AdminFeatureTogglesTable'; |
||||||
|
|
||||||
export default function AdminFeatureTogglesPage() { |
export default function AdminFeatureTogglesPage() { |
||||||
const { data: featureToggles, isLoading, isError } = useGetFeatureTogglesQuery(); |
const { data: featureToggles, isLoading, isError } = useGetFeatureTogglesQuery(); |
||||||
|
const { data: featureMgmtState } = useGetManagerStateQuery(); |
||||||
|
const [updateSuccessful, setUpdateSuccessful] = useState(false); |
||||||
|
|
||||||
|
const styles = useStyles2(getStyles); |
||||||
|
|
||||||
const getErrorMessage = () => { |
const getErrorMessage = () => { |
||||||
return 'Error fetching feature toggles'; |
return 'Error fetching feature toggles'; |
||||||
}; |
}; |
||||||
|
|
||||||
|
const handleUpdateSuccess = () => { |
||||||
|
setUpdateSuccessful(true); |
||||||
|
}; |
||||||
|
|
||||||
|
const AlertMessage = () => { |
||||||
|
return ( |
||||||
|
<div className={styles.warning}> |
||||||
|
<div className={styles.icon}> |
||||||
|
<Icon name="exclamation-triangle" /> |
||||||
|
</div> |
||||||
|
<span className={styles.message}> |
||||||
|
{featureMgmtState?.restartRequired || updateSuccessful |
||||||
|
? 'A restart is pending for your Grafana instance to apply the latest feature toggle changes' |
||||||
|
: 'Saving feature toggle changes will prompt a restart of the instance, which may take a few minutes'} |
||||||
|
</span> |
||||||
|
</div> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
return ( |
return ( |
||||||
<Page navId="feature-toggles"> |
<Page navId="feature-toggles"> |
||||||
<Page.Contents> |
<Page.Contents> |
||||||
<> |
<> |
||||||
{isError && getErrorMessage()} |
{isError && getErrorMessage()} |
||||||
{isLoading && 'Fetching feature toggles'} |
{isLoading && 'Fetching feature toggles'} |
||||||
{featureToggles && <AdminFeatureTogglesTable featureToggles={featureToggles} />} |
<AlertMessage /> |
||||||
|
{featureToggles && ( |
||||||
|
<AdminFeatureTogglesTable featureToggles={featureToggles} onUpdateSuccess={handleUpdateSuccess} /> |
||||||
|
)} |
||||||
</> |
</> |
||||||
</Page.Contents> |
</Page.Contents> |
||||||
</Page> |
</Page> |
||||||
); |
); |
||||||
} |
} |
||||||
|
|
||||||
|
function getStyles(theme: GrafanaTheme2) { |
||||||
|
return { |
||||||
|
warning: css({ |
||||||
|
display: 'flex', |
||||||
|
marginTop: theme.spacing(3), |
||||||
|
}), |
||||||
|
icon: css({ |
||||||
|
color: theme.colors.warning.main, |
||||||
|
paddingRight: theme.spacing(), |
||||||
|
}), |
||||||
|
message: css({ |
||||||
|
color: theme.colors.text.secondary, |
||||||
|
marginTop: theme.spacing(0.25), |
||||||
|
}), |
||||||
|
}; |
||||||
|
} |
||||||
|
|||||||
Loading…
Reference in new issue