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