grafana/public/app/plugins/datasource/influxdb/components/useShadowedState.ts
Zoltán Bedi 8232b6ebbc
Chore: eslint react hook fix for public folder (#31174)
* Fixes under public/app/plugins

* Fixes under public/app/plugins/datasource

* Fixes under public/app/features

* Fixes under public/app/features

* Fixes under public/app/features

* Fixes under public/app/components

* Fix PanelNotSupported test

* Fix one more warning

* Fix warning in usePanelSave

* Fix traceview empty response

* Azure monitor fixes

* More fixes

* Fix tests for azure monitor

* Fixes after merging master

* Add comment for disabled rules

* Fixes after merging master

* Fixes after merging master

* Adress review comments

* Fix azure tests

* Address review feedbacks
2021-03-25 12:42:14 +01:00

19 lines
688 B
TypeScript

import { useState, useEffect } from 'react';
import { usePrevious } from 'react-use';
export function useShadowedState<T>(outsideVal: T): [T, (newVal: T) => void] {
const [currentVal, setCurrentVal] = useState(outsideVal);
const prevOutsideVal = usePrevious(outsideVal);
useEffect(() => {
const isOutsideValChanged = prevOutsideVal !== outsideVal;
// if the value changes from the outside, we accept it into the state
// (we only set it if it is different from the current value)
if (isOutsideValChanged && currentVal !== outsideVal) {
setCurrentVal(outsideVal);
}
}, [outsideVal, currentVal, prevOutsideVal]);
return [currentVal, setCurrentVal];
}