1import { useMemo } from 'react';
2import { useQuery } from '../components/QueryEditor/ElasticsearchQueryContext';
3import { BucketAggregation } from '../components/QueryEditor/BucketAggregationsEditor/aggregations';
4import { MetricAggregation } from '../components/QueryEditor/MetricAggregationsEditor/aggregations';
5
6const toId = <T extends { id: unknown }>(e: T): T['id'] => e.id;
7
8const toInt = (idString: string) => parseInt(idString, 10);
9
10export const useNextId = (): MetricAggregation['id'] | BucketAggregation['id'] => {
11  const { metrics, bucketAggs } = useQuery();
12
13  return useMemo(
14    () =>
15      (Math.max(...[...(metrics?.map(toId) || ['0']), ...(bucketAggs?.map(toId) || ['0'])].map(toInt)) + 1).toString(),
16    [metrics, bucketAggs]
17  );
18};
19