mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-10-14 12:01:27 +08:00

* feat: setup the app context to fetch users,licenses and feature flags * feat: added global event listeners for after_login event * feat: remove redux from app state and private route * feat: syncronize the approutes file * feat: cleanup the private routes * feat: handle login and logout * feat: cleanup the app layout file * feat: cleanup and syncronize side nav item * fix: minor small re-render issue * feat: parallel processing for sync calls for faster bootup of application * feat: some refactoring for private routes * fix: entire application too much re-rendering * fix: remove redux * feat: some more corrections * feat: fix all the files except signup * feat: add app provider to the test-utils * feat: should fix a lot of tests * chore: fix more tests * chore: fix more tests * feat: fix some tests and corrected the redux mock * feat: delete snapshot * fix: test cases * fix: pipeline actions test cases * fix: billing test cases * feat: update the signup API to accept isAnonymous and hasOptedUpdates * chore: cleanup the console logs * fix: indefinite loading on manage licenses screen * fix: better handling and route to something_went_wrong in case of qs down * fix: signup for subsequent users * chore: update test-utils * fix: jerky behaviour on entering the home page * feat: handle the retention for login context flow * fix: do not let users workaround workspace blocked screen
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
import getTriggeredApi from 'api/alerts/getTriggered';
|
|
import logEvent from 'api/common/logEvent';
|
|
import Spinner from 'components/Spinner';
|
|
import { REACT_QUERY_KEY } from 'constants/reactQueryKeys';
|
|
import useAxiosError from 'hooks/useAxiosError';
|
|
import { isUndefined } from 'lodash-es';
|
|
import { useAppContext } from 'providers/App/App';
|
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
import { useQuery } from 'react-query';
|
|
|
|
import { Value } from './Filter';
|
|
import TriggerComponent from './TriggeredAlert';
|
|
|
|
function TriggeredAlerts(): JSX.Element {
|
|
const [selectedGroup, setSelectedGroup] = useState<Value[]>([]);
|
|
const [selectedFilter, setSelectedFilter] = useState<Value[]>([]);
|
|
|
|
const { user } = useAppContext();
|
|
|
|
const hasLoggedEvent = useRef(false); // Track if logEvent has been called
|
|
|
|
const handleError = useAxiosError();
|
|
|
|
const alertsResponse = useQuery(
|
|
[REACT_QUERY_KEY.GET_TRIGGERED_ALERTS, user.id],
|
|
{
|
|
queryFn: () =>
|
|
getTriggeredApi({
|
|
active: true,
|
|
inhibited: true,
|
|
silenced: false,
|
|
}),
|
|
refetchInterval: 30000,
|
|
onError: handleError,
|
|
},
|
|
);
|
|
|
|
const handleSelectedFilterChange = useCallback((newFilter: Value[]) => {
|
|
setSelectedFilter(newFilter);
|
|
}, []);
|
|
|
|
const handleSelectedGroupChange = useCallback((newGroup: Value[]) => {
|
|
setSelectedGroup(newGroup);
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (!hasLoggedEvent.current && !isUndefined(alertsResponse.data?.payload)) {
|
|
logEvent('Alert: Triggered alert list page visited', {
|
|
number: alertsResponse.data?.payload?.length,
|
|
});
|
|
hasLoggedEvent.current = true;
|
|
}
|
|
}, [alertsResponse.data?.payload]);
|
|
|
|
if (alertsResponse.error) {
|
|
return (
|
|
<TriggerComponent
|
|
allAlerts={[]}
|
|
selectedFilter={selectedFilter}
|
|
selectedGroup={selectedGroup}
|
|
onSelectedFilterChange={handleSelectedFilterChange}
|
|
onSelectedGroupChange={handleSelectedGroupChange}
|
|
/>
|
|
);
|
|
}
|
|
|
|
if (alertsResponse.isFetching || alertsResponse?.data?.payload === undefined) {
|
|
return <Spinner height="75vh" tip="Loading Alerts..." />;
|
|
}
|
|
|
|
return (
|
|
<TriggerComponent
|
|
allAlerts={alertsResponse?.data?.payload || []}
|
|
selectedFilter={selectedFilter}
|
|
selectedGroup={selectedGroup}
|
|
onSelectedFilterChange={handleSelectedFilterChange}
|
|
onSelectedGroupChange={handleSelectedGroupChange}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export default TriggeredAlerts;
|