1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-18 01:18:23 +02:00

Revert "fix: laggy switch" (#3815)

Reverts Unleash/unleash#3814 forcing merge to fix issue in demo instance: https://github.com/Unleash/unleash/pull/3815#issuecomment-1554712970
This commit is contained in:
Gastón Fournier 2023-05-19 16:55:14 +02:00 committed by GitHub
parent 0c538f070a
commit 6e847d0015
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,4 +1,4 @@
import { useCallback, useState, VFC } from 'react'; import { useState, VFC } from 'react';
import { Box, styled } from '@mui/material'; import { Box, styled } from '@mui/material';
import PermissionSwitch from 'component/common/PermissionSwitch/PermissionSwitch'; import PermissionSwitch from 'component/common/PermissionSwitch/PermissionSwitch';
import { UPDATE_FEATURE_ENVIRONMENT } from 'component/providers/AccessProvider/permissions'; import { UPDATE_FEATURE_ENVIRONMENT } from 'component/providers/AccessProvider/permissions';
@ -68,45 +68,37 @@ export const FeatureToggleSwitch: VFC<IFeatureToggleSwitchProps> = ({
onToggle(projectId, feature.name, environmentName, !isChecked); onToggle(projectId, feature.name, environmentName, !isChecked);
}; };
const handleToggleEnvironmentOn = useCallback( const handleToggleEnvironmentOn = async (
async (shouldActivateDisabled = false) => { shouldActivateDisabled = false
try { ) => {
setIsChecked(!isChecked); try {
await toggleFeatureEnvironmentOn( setIsChecked(!isChecked);
projectId, await toggleFeatureEnvironmentOn(
feature.name, projectId,
environmentName, feature.name,
shouldActivateDisabled environmentName,
); shouldActivateDisabled
setToastData({ );
type: 'success', setToastData({
title: `Available in ${environmentName}`, type: 'success',
text: `${feature.name} is now available in ${environmentName} based on its defined strategies.`, title: `Available in ${environmentName}`,
}); text: `${feature.name} is now available in ${environmentName} based on its defined strategies.`,
callback(); });
} catch (error: unknown) { callback();
if ( } catch (error: unknown) {
error instanceof Error && if (
error.message === ENVIRONMENT_STRATEGY_ERROR error instanceof Error &&
) { error.message === ENVIRONMENT_STRATEGY_ERROR
showInfoBox && showInfoBox(); ) {
} else { showInfoBox && showInfoBox();
setToastApiError(formatUnknownError(error)); } else {
} setToastApiError(formatUnknownError(error));
rollbackIsChecked();
} }
}, rollbackIsChecked();
[ }
rollbackIsChecked, };
setToastApiError,
showInfoBox,
setToastData,
toggleFeatureEnvironmentOn,
setIsChecked,
]
);
const handleToggleEnvironmentOff = useCallback(async () => { const handleToggleEnvironmentOff = async () => {
try { try {
setIsChecked(!isChecked); setIsChecked(!isChecked);
await toggleFeatureEnvironmentOff( await toggleFeatureEnvironmentOff(
@ -124,15 +116,54 @@ export const FeatureToggleSwitch: VFC<IFeatureToggleSwitchProps> = ({
setToastApiError(formatUnknownError(error)); setToastApiError(formatUnknownError(error));
rollbackIsChecked(); rollbackIsChecked();
} }
}, [ };
toggleFeatureEnvironmentOff,
setToastData,
setToastApiError,
rollbackIsChecked,
setIsChecked,
]);
const featureHasOnlyDisabledStrategies = useCallback(() => { const onClick = async (e: React.MouseEvent) => {
if (isChangeRequestConfigured(environmentName)) {
e.preventDefault();
if (featureHasOnlyDisabledStrategies()) {
setShowEnabledDialog(true);
} else {
onChangeRequestToggle(
feature.name,
environmentName,
!value,
false
);
}
return;
}
if (value) {
await handleToggleEnvironmentOff();
return;
}
if (featureHasOnlyDisabledStrategies()) {
setShowEnabledDialog(true);
} else {
await handleToggleEnvironmentOn();
}
};
const onActivateStrategies = async () => {
if (isChangeRequestConfigured(environmentName)) {
onChangeRequestToggle(feature.name, environmentName, !value, true);
} else {
await handleToggleEnvironmentOn(true);
}
setShowEnabledDialog(false);
};
const onAddDefaultStrategy = async () => {
if (isChangeRequestConfigured(environmentName)) {
onChangeRequestToggle(feature.name, environmentName, !value, false);
} else {
await handleToggleEnvironmentOn();
}
setShowEnabledDialog(false);
};
const featureHasOnlyDisabledStrategies = () => {
const featureEnvironment = feature?.environments?.find( const featureEnvironment = feature?.environments?.find(
env => env.name === environmentName env => env.name === environmentName
); );
@ -141,69 +172,7 @@ export const FeatureToggleSwitch: VFC<IFeatureToggleSwitchProps> = ({
featureEnvironment?.strategies?.length > 0 && featureEnvironment?.strategies?.length > 0 &&
featureEnvironment?.strategies?.every(strategy => strategy.disabled) featureEnvironment?.strategies?.every(strategy => strategy.disabled)
); );
}, [environmentName]); };
const onClick = useCallback(
async (e: React.MouseEvent) => {
if (isChangeRequestConfigured(environmentName)) {
e.preventDefault();
if (featureHasOnlyDisabledStrategies()) {
setShowEnabledDialog(true);
} else {
onChangeRequestToggle(
feature.name,
environmentName,
!value,
false
);
}
return;
}
if (value) {
await handleToggleEnvironmentOff();
return;
}
if (featureHasOnlyDisabledStrategies()) {
setShowEnabledDialog(true);
} else {
await handleToggleEnvironmentOn();
}
},
[
isChangeRequestConfigured,
onChangeRequestToggle,
handleToggleEnvironmentOff,
setShowEnabledDialog,
]
);
const onActivateStrategies = useCallback(async () => {
if (isChangeRequestConfigured(environmentName)) {
onChangeRequestToggle(feature.name, environmentName, !value, true);
} else {
await handleToggleEnvironmentOn(true);
}
setShowEnabledDialog(false);
}, [
handleToggleEnvironmentOn,
setShowEnabledDialog,
isChangeRequestConfigured,
onChangeRequestToggle,
]);
const onAddDefaultStrategy = useCallback(async () => {
if (isChangeRequestConfigured(environmentName)) {
onChangeRequestToggle(feature.name, environmentName, !value, false);
} else {
await handleToggleEnvironmentOn();
}
setShowEnabledDialog(false);
}, [
isChangeRequestConfigured,
onChangeRequestToggle,
handleToggleEnvironmentOn,
]);
const key = `${feature.name}-${environmentName}`; const key = `${feature.name}-${environmentName}`;
@ -219,7 +188,7 @@ export const FeatureToggleSwitch: VFC<IFeatureToggleSwitchProps> = ({
? `Disable feature in ${environmentName}` ? `Disable feature in ${environmentName}`
: `Enable feature in ${environmentName}` : `Enable feature in ${environmentName}`
} }
checked={isChecked} checked={value}
environmentId={environmentName} environmentId={environmentName}
projectId={projectId} projectId={projectId}
permission={UPDATE_FEATURE_ENVIRONMENT} permission={UPDATE_FEATURE_ENVIRONMENT}