diff --git a/plugins/user-settings/src/components/FeatureFlagsList.tsx b/plugins/user-settings/src/components/FeatureFlagsList.tsx index 20c91f3e9a..ec4ad51457 100644 --- a/plugins/user-settings/src/components/FeatureFlagsList.tsx +++ b/plugins/user-settings/src/components/FeatureFlagsList.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React, { useState, useEffect } from 'react'; +import React, { useState, useCallback } from 'react'; import { List } from '@material-ui/core'; import { useApi, @@ -31,27 +31,32 @@ type Props = { export const FeatureFlagsList = ({ featureFlags }: Props) => { const featureFlagApi = useApi(featureFlagsApiRef); - const [state, setState] = useState>( - {}, + const initialFlagState = featureFlags.reduce( + (result, featureFlag: FeatureFlagsRegistryItem) => { + const state = featureFlagApi.getFlags().get(featureFlag.name); + + result[featureFlag.name] = state; + return result; + }, + {} as Record, ); - useEffect(() => { - featureFlags.map(featureFlag => { - setState({ - [featureFlag.name]: featureFlagApi.getFlags().get(featureFlag.name), - }); - }); - }, [featureFlagApi, featureFlags]); + const [state, setState] = useState>( + initialFlagState, + ); - const toggleFlag = (flagName: FeatureFlagName) => { - const newState = featureFlagApi.getFlags().toggle(flagName); + const toggleFlag = useCallback( + (flagName: FeatureFlagName) => { + const newState = featureFlagApi.getFlags().toggle(flagName); - setState(prevState => ({ - ...prevState, - [flagName]: newState, - })); - featureFlagApi.getFlags().save(); - }; + setState(prevState => ({ + ...prevState, + [flagName]: newState, + })); + featureFlagApi.getFlags().save(); + }, + [featureFlagApi], + ); return (