mirror of https://github.com/grafana/grafana
Alerting: Hoist routes for mute timings (#94201)
parent
87fd36aecf
commit
4224d05934
@ -1,87 +0,0 @@ |
|||||||
import { useEffect, useState } from 'react'; |
|
||||||
import { Route, Switch, useRouteMatch } from 'react-router-dom'; |
|
||||||
import { Navigate } from 'react-router-dom-v5-compat'; |
|
||||||
|
|
||||||
import { NavModelItem } from '@grafana/data'; |
|
||||||
import { useGetMuteTiming } from 'app/features/alerting/unified/components/mute-timings/useMuteTimings'; |
|
||||||
import { useURLSearchParams } from 'app/features/alerting/unified/hooks/useURLSearchParams'; |
|
||||||
|
|
||||||
import { AlertmanagerPageWrapper } from './components/AlertingPageWrapper'; |
|
||||||
import MuteTimingForm from './components/mute-timings/MuteTimingForm'; |
|
||||||
import { useAlertmanager } from './state/AlertmanagerContext'; |
|
||||||
|
|
||||||
const EditTimingRoute = () => { |
|
||||||
const [queryParams] = useURLSearchParams(); |
|
||||||
const { selectedAlertmanager } = useAlertmanager(); |
|
||||||
const name = queryParams.get('muteName')!; |
|
||||||
const { |
|
||||||
isLoading, |
|
||||||
data: timeInterval, |
|
||||||
isError, |
|
||||||
} = useGetMuteTiming({ |
|
||||||
alertmanager: selectedAlertmanager!, |
|
||||||
name, |
|
||||||
}); |
|
||||||
|
|
||||||
if (!name) { |
|
||||||
return <Navigate replace to="/alerting/routes" />; |
|
||||||
} |
|
||||||
|
|
||||||
return ( |
|
||||||
<MuteTimingForm |
|
||||||
editMode |
|
||||||
loading={isLoading} |
|
||||||
showError={isError} |
|
||||||
muteTiming={timeInterval} |
|
||||||
provisioned={timeInterval?.provisioned} |
|
||||||
/> |
|
||||||
); |
|
||||||
}; |
|
||||||
|
|
||||||
const MuteTimings = () => { |
|
||||||
return ( |
|
||||||
<> |
|
||||||
<Switch> |
|
||||||
<Route exact path="/alerting/routes/mute-timing/new"> |
|
||||||
<MuteTimingForm /> |
|
||||||
</Route> |
|
||||||
<Route exact path="/alerting/routes/mute-timing/edit"> |
|
||||||
<EditTimingRoute /> |
|
||||||
</Route> |
|
||||||
</Switch> |
|
||||||
</> |
|
||||||
); |
|
||||||
}; |
|
||||||
|
|
||||||
const MuteTimingsPage = () => { |
|
||||||
const pageNav = useMuteTimingNavData(); |
|
||||||
|
|
||||||
return ( |
|
||||||
<AlertmanagerPageWrapper navId="am-routes" pageNav={pageNav} accessType="notification"> |
|
||||||
<MuteTimings /> |
|
||||||
</AlertmanagerPageWrapper> |
|
||||||
); |
|
||||||
}; |
|
||||||
|
|
||||||
export function useMuteTimingNavData() { |
|
||||||
const { isExact, path } = useRouteMatch(); |
|
||||||
const [pageNav, setPageNav] = useState<Pick<NavModelItem, 'id' | 'text' | 'icon'> | undefined>(); |
|
||||||
|
|
||||||
useEffect(() => { |
|
||||||
if (path === '/alerting/routes/mute-timing/new') { |
|
||||||
setPageNav({ |
|
||||||
id: 'alert-policy-new', |
|
||||||
text: 'Add mute timing', |
|
||||||
}); |
|
||||||
} else if (path === '/alerting/routes/mute-timing/edit') { |
|
||||||
setPageNav({ |
|
||||||
id: 'alert-policy-edit', |
|
||||||
text: 'Edit mute timing', |
|
||||||
}); |
|
||||||
} |
|
||||||
}, [path, isExact]); |
|
||||||
|
|
||||||
return pageNav; |
|
||||||
} |
|
||||||
|
|
||||||
export default MuteTimingsPage; |
|
@ -0,0 +1,54 @@ |
|||||||
|
import { Navigate } from 'react-router-dom-v5-compat'; |
||||||
|
|
||||||
|
import { withErrorBoundary } from '@grafana/ui'; |
||||||
|
import { useGetMuteTiming } from 'app/features/alerting/unified/components/mute-timings/useMuteTimings'; |
||||||
|
import { useURLSearchParams } from 'app/features/alerting/unified/hooks/useURLSearchParams'; |
||||||
|
|
||||||
|
import { useAlertmanager } from '../../state/AlertmanagerContext'; |
||||||
|
import { AlertmanagerPageWrapper } from '../AlertingPageWrapper'; |
||||||
|
|
||||||
|
import MuteTimingForm from './MuteTimingForm'; |
||||||
|
|
||||||
|
const EditTimingRoute = () => { |
||||||
|
const [queryParams] = useURLSearchParams(); |
||||||
|
const { selectedAlertmanager } = useAlertmanager(); |
||||||
|
const name = queryParams.get('muteName')!; |
||||||
|
|
||||||
|
const { |
||||||
|
isLoading, |
||||||
|
data: timeInterval, |
||||||
|
isError, |
||||||
|
} = useGetMuteTiming({ |
||||||
|
alertmanager: selectedAlertmanager!, |
||||||
|
name, |
||||||
|
}); |
||||||
|
|
||||||
|
if (!name) { |
||||||
|
return <Navigate replace to="/alerting/routes" />; |
||||||
|
} |
||||||
|
|
||||||
|
return ( |
||||||
|
<MuteTimingForm |
||||||
|
editMode |
||||||
|
loading={isLoading} |
||||||
|
showError={isError} |
||||||
|
muteTiming={timeInterval} |
||||||
|
provisioned={timeInterval?.provisioned} |
||||||
|
/> |
||||||
|
); |
||||||
|
}; |
||||||
|
|
||||||
|
const EditMuteTimingPage = () => ( |
||||||
|
<AlertmanagerPageWrapper |
||||||
|
navId="am-routes" |
||||||
|
pageNav={{ |
||||||
|
id: 'alert-policy-edit', |
||||||
|
text: 'Edit mute timing', |
||||||
|
}} |
||||||
|
accessType="notification" |
||||||
|
> |
||||||
|
<EditTimingRoute /> |
||||||
|
</AlertmanagerPageWrapper> |
||||||
|
); |
||||||
|
|
||||||
|
export default withErrorBoundary(EditMuteTimingPage, { style: 'page' }); |
@ -0,0 +1,20 @@ |
|||||||
|
import { withErrorBoundary } from '@grafana/ui'; |
||||||
|
|
||||||
|
import { AlertmanagerPageWrapper } from '../AlertingPageWrapper'; |
||||||
|
|
||||||
|
import MuteTimingForm from './MuteTimingForm'; |
||||||
|
|
||||||
|
const NewMuteTimingPage = () => ( |
||||||
|
<AlertmanagerPageWrapper |
||||||
|
navId="am-routes" |
||||||
|
pageNav={{ |
||||||
|
id: 'alert-policy-new', |
||||||
|
text: 'Add mute timing', |
||||||
|
}} |
||||||
|
accessType="notification" |
||||||
|
> |
||||||
|
<MuteTimingForm /> |
||||||
|
</AlertmanagerPageWrapper> |
||||||
|
); |
||||||
|
|
||||||
|
export default withErrorBoundary(NewMuteTimingPage, { style: 'page' }); |
Loading…
Reference in new issue