From a63233b0783604351a86658a236c4d3b55cf1b8b Mon Sep 17 00:00:00 2001 From: wadii Date: Mon, 29 Jun 2026 17:19:22 +0200 Subject: [PATCH] fix: remove v0.1 experiment flag toggle from create feature modal --- .../components/feature-summary/FeatureRow.tsx | 54 +++------- .../modals/create-feature/index.tsx | 3 - .../create-feature/tabs/CreateFeatureTab.tsx | 102 +----------------- .../pages/features/FeaturesPage.tsx | 10 +- 4 files changed, 19 insertions(+), 150 deletions(-) diff --git a/frontend/web/components/feature-summary/FeatureRow.tsx b/frontend/web/components/feature-summary/FeatureRow.tsx index 37f7c094313c..91b8cf657d0f 100644 --- a/frontend/web/components/feature-summary/FeatureRow.tsx +++ b/frontend/web/components/feature-summary/FeatureRow.tsx @@ -2,7 +2,6 @@ import React, { FC, useCallback, useEffect, useMemo } from 'react' import ConfirmToggleFeature from 'components/modals/ConfirmToggleFeature' import ConfirmRemoveFeature from 'components/modals/ConfirmRemoveFeature' import CreateFlagModal from 'components/modals/create-feature' -import CreateExperimentModal from 'components/modals/create-experiment' import ProjectStore from 'common/stores/project-store' import Constants from 'common/constants' import { useProtectedTags } from 'common/utils/useProtectedTags' @@ -57,7 +56,6 @@ interface FeatureRowProps { releasePipelines?: ReleasePipeline[] onCloseEditModal?: () => void isCompact?: boolean - experimentMode?: boolean } const width = [220, 50, 55, 70, 450] @@ -69,7 +67,6 @@ const FeatureRow: FC = (props) => { disableControls, environmentFlags, environmentId, - experimentMode = false, fadeEnabled, fadeValue, hideAudit = false, @@ -114,9 +111,9 @@ const FeatureRow: FC = (props) => { const { feature } = Utils.fromParam() const { id } = projectFlag - const isModalOpen = - !!document?.getElementsByClassName('create-feature-modal')?.length || - !!document?.getElementsByClassName('create-experiment-modal')?.length + const isModalOpen = !!document?.getElementsByClassName( + 'create-feature-modal', + )?.length if (`${id}` === feature && !isModalOpen) { editFeature() } @@ -202,35 +199,18 @@ const FeatureRow: FC = (props) => { search: `?feature=${projectFlag.id}&tab=${tabValue}`, }) - const ModalComponent = experimentMode - ? CreateExperimentModal - : CreateFlagModal - const modalCssClass = experimentMode - ? 'side-modal create-feature-modal create-experiment-modal' - : 'side-modal create-feature-modal' - - const modalProps = experimentMode - ? { - environmentFlag, - environmentId, - history, - noPermissions: !permission, - projectFlag, - projectId, - tab, - } - : { - environmentFlag, - environmentId, - hasUnhealthyEvents: - isFeatureHealthEnabled && !!featureUnhealthyEvents?.length, - hideTagsByType: ['UNHEALTHY'], - history, - noPermissions: !permission, - projectFlag, - projectId, - tab, - } + const modalProps = { + environmentFlag, + environmentId, + hasUnhealthyEvents: + isFeatureHealthEnabled && !!featureUnhealthyEvents?.length, + hideTagsByType: ['UNHEALTHY'], + history, + noPermissions: !permission, + projectFlag, + projectId, + tab, + } const ownerChips = enforceFeatureOwners ? [ @@ -273,8 +253,8 @@ const FeatureRow: FC = (props) => { )} , - , - modalCssClass, + , + 'side-modal create-feature-modal', () => { if (onCloseEditModal) { return onCloseEditModal() diff --git a/frontend/web/components/modals/create-feature/index.tsx b/frontend/web/components/modals/create-feature/index.tsx index 787186cd90ef..d5346bd15c17 100644 --- a/frontend/web/components/modals/create-feature/index.tsx +++ b/frontend/web/components/modals/create-feature/index.tsx @@ -65,7 +65,6 @@ type CreateFeatureModalProps = { noPermissions?: boolean disableCreate?: boolean highlightSegmentId?: number - defaultExperiment?: boolean history?: History multivariate_options?: MultivariateFeatureStateValue[] } & Partial @@ -95,7 +94,6 @@ const mergeEnvironmentWeights = (options: any[], variations: any[]): any[] => const CreateFeatureModal: FC = (props) => { const { changeRequest: existingChangeRequest, - defaultExperiment, disableCreate, environmentId, environmentVariations, @@ -862,7 +860,6 @@ const CreateFeatureModal: FC = (props) => { featureState={props.environmentFlag || environmentFlag} projectFlag={projectFlag} identity={identity} - defaultExperiment={defaultExperiment} overrideFeatureState={ props.identityFlag ? environmentFlag : null } diff --git a/frontend/web/components/modals/create-feature/tabs/CreateFeatureTab.tsx b/frontend/web/components/modals/create-feature/tabs/CreateFeatureTab.tsx index 0361a7e89805..45daf16afede 100644 --- a/frontend/web/components/modals/create-feature/tabs/CreateFeatureTab.tsx +++ b/frontend/web/components/modals/create-feature/tabs/CreateFeatureTab.tsx @@ -1,4 +1,4 @@ -import React, { FC, useCallback, useEffect, useState } from 'react' +import React, { FC } from 'react' import { FeatureState, ProjectFlag } from 'common/types/responses' import FeatureValueTab from './FeatureValueTab' import FeatureSettingsTab from './FeatureSettingsTab' @@ -6,12 +6,8 @@ import ErrorMessage from 'components/ErrorMessage' import WarningMessage from 'components/WarningMessage' import { useHasPermission } from 'common/providers/Permission' import { ProjectPermission } from 'common/types/permissions.types' -import Switch from 'components/Switch' -import Tooltip from 'components/Tooltip' -import Icon from 'components/icons/Icon' import InfoMessage from 'components/InfoMessage' import { useGetProjectQuery } from 'common/services/useProject' -import { useCreateTagMutation, useGetTagsQuery } from 'common/services/useTag' type CreateFeatureTabProps = { projectId: number @@ -20,7 +16,6 @@ type CreateFeatureTabProps = { overrideFeatureState?: FeatureState projectFlag: ProjectFlag | null identity?: string - defaultExperiment?: boolean ownerIds?: number[] groupOwnerIds?: number[] onOwnerIdsChange?: (ids: number[]) => void @@ -34,7 +29,6 @@ type CreateFeatureTabProps = { } const CreateFeatureTab: FC = ({ - defaultExperiment, error, featureError, featureState, @@ -69,76 +63,6 @@ const CreateFeatureTab: FC = ({ const noPermissions = !createFeature && !projectAdmin - const showExperimentToggle = - Utils.getFlagsmithHasFeature('experimental_flags') && !identity - - const { data: tags } = useGetTagsQuery( - { projectId }, - { skip: !showExperimentToggle }, - ) - const [createTag] = useCreateTagMutation() - - const [isExperimentFlag, setIsExperimentFlag] = useState(!!defaultExperiment) - - const hasVariants = (projectFlag?.multivariate_options?.length ?? 0) > 0 - - // Auto-untoggle if all variants are removed - useEffect(() => { - if (!hasVariants && isExperimentFlag) { - setIsExperimentFlag(false) - if (projectFlag && tags) { - const experimentTag = tags.find( - (t) => t.label.toLowerCase() === 'experiment', - ) - if (experimentTag) { - onProjectFlagChange({ - ...projectFlag, - tags: projectFlag.tags.filter((id) => id !== experimentTag.id), - }) - } - } - } - }, [hasVariants]) // eslint-disable-line react-hooks/exhaustive-deps - - const handleExperimentToggle = useCallback( - async (checked: boolean) => { - if (!projectFlag || !tags) return - - setIsExperimentFlag(checked) - - let experimentTag = tags.find( - (t) => t.label.toLowerCase() === 'experiment', - ) - - if (checked) { - if (!experimentTag) { - experimentTag = await createTag({ - projectId, - tag: { - color: '#6A52CF', - description: 'Experiment flag', - label: 'experiment', - }, - }).unwrap() - } - if (experimentTag && !projectFlag.tags.includes(experimentTag.id)) { - onProjectFlagChange({ - ...projectFlag, - tags: [...projectFlag.tags, experimentTag.id], - }) - } - } else { - if (experimentTag) { - onProjectFlagChange({ - ...projectFlag, - tags: projectFlag.tags.filter((id) => id !== experimentTag?.id), - }) - } - } - }, - [projectFlag, tags, createTag, projectId, onProjectFlagChange], - ) - return ( <> @@ -163,30 +87,6 @@ const CreateFeatureTab: FC = ({ onProjectFlagChange={onProjectFlagChange} onRemoveMultivariateOption={onRemoveMultivariateOption} /> - {showExperimentToggle && ( - - - -
- Experiment flag -
- - - } - > - {!hasVariants - ? 'Add at least one variant to start an experiment' - : 'Tag this feature as an experiment'} -
-
- )} = ({ - defaultExperiment, - forcedTagIds, - pageTitle, -}) => { +const FeaturesPage: FC = ({ forcedTagIds, pageTitle }) => { const history = useHistory() const routeContext = useRouteContext() const projectId = routeContext.projectId! @@ -207,7 +202,6 @@ const FeaturesPage: FC = ({ environmentId={environmentId} history={history} projectId={projectId} - defaultExperiment={defaultExperiment} />, 'side-modal create-feature-modal', ) @@ -287,7 +281,6 @@ const FeaturesPage: FC = ({ removeFlag={removeFlag} projectFlag={projectFlag} isCompact={isCompact} - experimentMode={defaultExperiment} /> )} @@ -300,7 +293,6 @@ const FeaturesPage: FC = ({ toggleFlag, removeFlag, isCompact, - defaultExperiment, ], )