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