1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-08-09 13:47:13 +02:00

chore: Remove featureLinks feature flag

This commit is contained in:
Nuno Góis (aider) 2025-05-21 14:58:06 +01:00
parent e118321bfb
commit 16b22aa770
No known key found for this signature in database
GPG Key ID: 71ECC689F1091765
11 changed files with 11 additions and 43 deletions

View File

@ -27,7 +27,6 @@ import type {
IFeatureToggle, IFeatureToggle,
} from '../../../../../interfaces/featureToggle.ts'; } from '../../../../../interfaces/featureToggle.ts';
import AddIcon from '@mui/icons-material/Add'; import AddIcon from '@mui/icons-material/Add';
import { useUiFlag } from 'hooks/useUiFlag';
import { Badge } from 'component/common/Badge/Badge'; import { Badge } from 'component/common/Badge/Badge';
import LinkIcon from '@mui/icons-material/Link'; import LinkIcon from '@mui/icons-material/Link';
import { UPDATE_FEATURE } from '../../../../providers/AccessProvider/permissions.ts'; import { UPDATE_FEATURE } from '../../../../providers/AccessProvider/permissions.ts';
@ -246,17 +245,13 @@ const FeatureOverviewMetaData: FC<FeatureOverviewMetaDataProps> = ({
const showDependentFeatures = useShowDependentFeatures(project); const showDependentFeatures = useShowDependentFeatures(project);
const featureLinksEnabled = useUiFlag('featureLinks');
return ( return (
<> <>
{featureLinksEnabled ? ( <FeatureLinks
<FeatureLinks links={feature.links || []}
links={feature.links || []} project={feature.project}
project={feature.project} feature={feature.name}
feature={feature.name} />
/>
) : null}
<StyledMetaDataContainer> <StyledMetaDataContainer>
<div> <div>
<StyledTitle>Flag details</StyledTitle> <StyledTitle>Flag details</StyledTitle>

View File

@ -89,7 +89,6 @@ export type UiFlags = {
addEditStrategy?: boolean; addEditStrategy?: boolean;
cleanupReminder?: boolean; cleanupReminder?: boolean;
registerFrontendClient?: boolean; registerFrontendClient?: boolean;
featureLinks?: boolean;
projectLinkTemplates?: boolean; projectLinkTemplates?: boolean;
}; };

View File

@ -303,9 +303,7 @@ export default class ExportImportService
await this.importTagTypes(dto, auditUser); await this.importTagTypes(dto, auditUser);
await this.importTags(dto, auditUser); await this.importTags(dto, auditUser);
await this.importContextFields(dto, auditUser); await this.importContextFields(dto, auditUser);
if (this.flagResolver.isEnabled('featureLinks')) { await this.importLinks(dto, auditUser);
await this.importLinks(dto, auditUser);
}
} }
async import( async import(
@ -907,7 +905,6 @@ export default class ExportImportService
segments, segments,
tagTypes, tagTypes,
featureDependencies, featureDependencies,
featureLinks,
] = await Promise.all([ ] = await Promise.all([
this.toggleStore.getAllByNames(featureNames), this.toggleStore.getAllByNames(featureNames),
await this.featureEnvironmentStore.getAllByFeatures( await this.featureEnvironmentStore.getAllByFeatures(
@ -924,10 +921,10 @@ export default class ExportImportService
this.segmentReadModel.getAll(), this.segmentReadModel.getAll(),
this.tagTypeStore.getAll(), this.tagTypeStore.getAll(),
this.dependentFeaturesReadModel.getDependencies(featureNames), this.dependentFeaturesReadModel.getDependencies(featureNames),
this.flagResolver.isEnabled('featureLinks')
? this.featureLinksReadModel.getLinks(...featureNames)
: Promise.resolve([]),
]); ]);
const featureLinks = await this.featureLinksReadModel.getLinks(
...featureNames,
);
this.addSegmentsToStrategies(featureStrategies, strategySegments); this.addSegmentsToStrategies(featureStrategies, strategySegments);
const filteredContextFields = contextFields const filteredContextFields = contextFields
.filter( .filter(

View File

@ -171,7 +171,6 @@ beforeAll(async () => {
{ {
experimental: { experimental: {
flags: { flags: {
featureLinks: true,
}, },
}, },
}, },

View File

@ -108,9 +108,6 @@ export default class FeatureLinkController extends Controller {
>, >,
res: Response, res: Response,
): Promise<void> { ): Promise<void> {
if (!this.flagResolver.isEnabled('featureLinks')) {
res.status(404).end();
}
const { projectId, featureName } = req.params; const { projectId, featureName } = req.params;
await this.transactionalFeatureLinkService.transactional((service) => await this.transactionalFeatureLinkService.transactional((service) =>
@ -132,9 +129,6 @@ export default class FeatureLinkController extends Controller {
>, >,
res: Response, res: Response,
): Promise<void> { ): Promise<void> {
if (!this.flagResolver.isEnabled('featureLinks')) {
res.status(404).end();
}
const { projectId, linkId, featureName } = req.params; const { projectId, linkId, featureName } = req.params;
await this.transactionalFeatureLinkService.transactional((service) => await this.transactionalFeatureLinkService.transactional((service) =>
@ -156,9 +150,6 @@ export default class FeatureLinkController extends Controller {
>, >,
res: Response, res: Response,
): Promise<void> { ): Promise<void> {
if (!this.flagResolver.isEnabled('featureLinks')) {
res.status(404).end();
}
const { projectId, linkId } = req.params; const { projectId, linkId } = req.params;
await this.transactionalFeatureLinkService.transactional((service) => await this.transactionalFeatureLinkService.transactional((service) =>

View File

@ -26,7 +26,6 @@ beforeAll(async () => {
{ {
experimental: { experimental: {
flags: { flags: {
featureLinks: true,
}, },
}, },
}, },

View File

@ -1114,9 +1114,7 @@ export class FeatureToggleService {
this.featureCollaboratorsReadModel.getFeatureCollaborators( this.featureCollaboratorsReadModel.getFeatureCollaborators(
featureName, featureName,
), ),
this.flagResolver.isEnabled('featureLinks') this.featureLinksReadModel.getLinks(featureName),
? this.featureLinksReadModel.getLinks(featureName)
: Promise.resolve([]),
]); ]);
if (environmentVariants) { if (environmentVariants) {

View File

@ -60,7 +60,6 @@ const irrelevantDate = new Date();
beforeAll(async () => { beforeAll(async () => {
const flags = { const flags = {
featureLinks: true,
projectLinkTemplates: true, projectLinkTemplates: true,
}; };
const config = createTestConfig({ experimental: { flags } }); const config = createTestConfig({ experimental: { flags } });

View File

@ -661,10 +661,7 @@ export function registerPrometheusMetrics(
help: 'Count most popular domains used in feature links', help: 'Count most popular domains used in feature links',
labelNames: ['domain'], labelNames: ['domain'],
query: () => { query: () => {
if (flagResolver.isEnabled('featureLinks')) { return stores.featureLinkReadModel.getTopDomains();
return stores.featureLinkReadModel.getTopDomains();
}
return Promise.resolve([]);
}, },
map: (result) => map: (result) =>
result.map(({ domain, count }) => ({ result.map(({ domain, count }) => ({

View File

@ -60,7 +60,6 @@ export type IFlagKey =
| 'cleanupReminder' | 'cleanupReminder'
| 'removeInactiveApplications' | 'removeInactiveApplications'
| 'registerFrontendClient' | 'registerFrontendClient'
| 'featureLinks'
| 'projectLinkTemplates' | 'projectLinkTemplates'
| 'reportUnknownFlags' | 'reportUnknownFlags'
| 'lastSeenBulkQuery' | 'lastSeenBulkQuery'
@ -286,10 +285,6 @@ const flags: IFlags = {
process.env.UNLEASH_EXPERIMENTAL_REGISTER_FRONTEND_CLIENT, process.env.UNLEASH_EXPERIMENTAL_REGISTER_FRONTEND_CLIENT,
false, false,
), ),
featureLinks: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_FEATURE_LINKS,
false,
),
projectLinkTemplates: parseEnvVarBoolean( projectLinkTemplates: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_PROJECT_LINK_TEMPLATES, process.env.UNLEASH_EXPERIMENTAL_PROJECT_LINK_TEMPLATES,
false, false,

View File

@ -54,7 +54,6 @@ process.nextTick(async () => {
cleanupReminder: true, cleanupReminder: true,
strictSchemaValidation: true, strictSchemaValidation: true,
registerFrontendClient: true, registerFrontendClient: true,
featureLinks: true,
projectLinkTemplates: true, projectLinkTemplates: true,
reportUnknownFlags: true, reportUnknownFlags: true,
}, },