Submit
Path:
~
/
/
usr
/
share
/
grafana
/
public
/
app
/
features
/
dashboard
/
components
/
VersionHistory
/
File Content:
useDashboardRestore.tsx
import { useEffect } from 'react'; import { useAsyncFn } from 'react-use'; import { locationUtil } from '@grafana/data'; import { locationService } from '@grafana/runtime'; import { useAppNotification } from 'app/core/copy/appNotification'; import { historySrv } from 'app/features/dashboard-scene/settings/version-history'; import { useSelector } from 'app/types'; import { dashboardWatcher } from '../../../live/dashboard/dashboardWatcher'; import { DashboardModel } from '../../state'; const restoreDashboard = async (version: number, dashboard: DashboardModel) => { // Skip the watcher logic for this save since it's handled by the hook dashboardWatcher.ignoreNextSave(); return await historySrv.restoreDashboard(dashboard.uid, version); }; export const useDashboardRestore = (version: number) => { const dashboard = useSelector((state) => state.dashboard.getModel()); const [state, onRestoreDashboard] = useAsyncFn(async () => await restoreDashboard(version, dashboard!), []); const notifyApp = useAppNotification(); useEffect(() => { if (state.value) { const location = locationService.getLocation(); const newUrl = locationUtil.stripBaseFromUrl(state.value.url); const prevState = (location.state as any)?.routeReloadCounter; locationService.replace({ ...location, pathname: newUrl, state: { routeReloadCounter: prevState ? prevState + 1 : 1 }, }); notifyApp.success('Dashboard restored', `Restored from version ${version}`); } }, [state, version, notifyApp]); return { state, onRestoreDashboard }; };
Submit
FILE
FOLDER
INFO
Name
Size
Permission
Action
RevertDashboardModal.tsx
940 bytes
0644
VersionHistoryComparison.tsx
2877 bytes
0644
VersionHistoryTable.tsx
2770 bytes
0644
useDashboardRestore.tsx
1600 bytes
0644
N4ST4R_ID | Naxtarrr