mirror of
https://github.com/grafana/grafana.git
synced 2025-09-23 00:03:36 +08:00

* Set error message for certain template variable combinations - Make use of setError method from query editor - Update Azure Monitor error type - Add test for case 2 from https://github.com/grafana/grafana/pull/51331 * Update template variable docs * Fix lint issues * Update docs/sources/datasources/azuremonitor/template-variables.md Co-authored-by: Garrett Guillotte <100453168+gguillotte-grafana@users.noreply.github.com> * PR comment updates Co-authored-by: Garrett Guillotte <100453168+gguillotte-grafana@users.noreply.github.com>
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { useState, useCallback, useMemo } from 'react';
|
|
|
|
import { AzureMonitorErrorish } from '../types';
|
|
|
|
import { messageFromElement } from './messageFromError';
|
|
|
|
type SourcedError = [string, AzureMonitorErrorish];
|
|
|
|
export default function useLastError() {
|
|
const [errors, setErrors] = useState<SourcedError[]>([]);
|
|
|
|
// Handles errors from any child components that request data to display their options
|
|
const addError = useCallback((errorSource: string, error: AzureMonitorErrorish | undefined) => {
|
|
setErrors((errors) => {
|
|
const errorsCopy = [...errors];
|
|
const index = errors.findIndex(([vSource]) => vSource === errorSource);
|
|
|
|
// If there's already an error, remove it. If we're setting a new error
|
|
// below, we'll move it to the front
|
|
if (index > -1) {
|
|
errorsCopy.splice(index, 1);
|
|
}
|
|
|
|
// And then add the new error to the top of the array. If error is defined, it was already
|
|
// removed above.
|
|
if (error) {
|
|
errorsCopy.unshift([errorSource, error]);
|
|
}
|
|
|
|
return errorsCopy;
|
|
});
|
|
}, []);
|
|
|
|
const errorMessage = useMemo(() => {
|
|
const recentError = errors[0];
|
|
return recentError && messageFromElement(recentError[1]);
|
|
}, [errors]);
|
|
|
|
return [errorMessage, addError] as const;
|
|
}
|