mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import {browserHistory} from 'react-router';
|
|
|
|
import {decodeScalar} from 'sentry/utils/queryString';
|
|
import {useLocalStorageState} from 'sentry/utils/useLocalStorageState';
|
|
import {useLocation} from 'sentry/utils/useLocation';
|
|
import {DEFAULT_DURATION_AGGREGATE} from 'sentry/views/performance/database/settings';
|
|
import {useAvailableDurationAggregates} from 'sentry/views/performance/database/useAvailableDurationAggregates';
|
|
import type {Aggregate} from 'sentry/views/starfish/types';
|
|
|
|
type Query = {
|
|
aggregate: string;
|
|
};
|
|
|
|
type Result = [Aggregate, (string) => void];
|
|
|
|
export function useSelectedDurationAggregate(): Result {
|
|
const [previouslySelectedAggregate, setPreviouslySelectedAggregate] =
|
|
useLocalStorageState(KEY, DEFAULT_DURATION_AGGREGATE);
|
|
|
|
const setSelectedAggregate = aggregate => {
|
|
setPreviouslySelectedAggregate(aggregate);
|
|
|
|
browserHistory.push({
|
|
...location,
|
|
query: {
|
|
...location.query,
|
|
aggregate,
|
|
},
|
|
});
|
|
};
|
|
|
|
const availableAggregates = useAvailableDurationAggregates();
|
|
|
|
const location = useLocation<Query>();
|
|
|
|
const aggregateFromURL = decodeScalar(
|
|
location.query.aggregate,
|
|
previouslySelectedAggregate
|
|
);
|
|
|
|
const selectedAggregate = isAnAvailableAggregate(aggregateFromURL, availableAggregates)
|
|
? aggregateFromURL
|
|
: DEFAULT_DURATION_AGGREGATE;
|
|
|
|
return [selectedAggregate, setSelectedAggregate];
|
|
}
|
|
|
|
function isAnAvailableAggregate(
|
|
maybeAggregate: string,
|
|
availableAggregates: Aggregate[]
|
|
): maybeAggregate is Aggregate {
|
|
// Manually widen `availableAggregates` to allow the comparison to string
|
|
return (availableAggregates as unknown as string[]).includes(
|
|
maybeAggregate as Aggregate
|
|
);
|
|
}
|
|
|
|
const KEY = 'performance-database-default-aggregation-function';
|