Skip to content

Commit 783be6d

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat/add-jest-unit-tests
2 parents 66752a0 + 7e2d9fb commit 783be6d

48 files changed

Lines changed: 2107 additions & 1474 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "2.209.1"
2+
".": "2.210.0"
33
}

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,30 @@
11
# Changelog
22

3+
## [2.210.0](https://github.com/Flagsmith/flagsmith/compare/v2.209.1...v2.210.0) (2026-01-19)
4+
5+
6+
### Features
7+
8+
* Retire split-testing ([#6542](https://github.com/Flagsmith/flagsmith/issues/6542)) ([4ce72ad](https://github.com/Flagsmith/flagsmith/commit/4ce72adc0aa0667ad3a1b989eea35c3e9398ae86))
9+
10+
11+
### Bug Fixes
12+
13+
* **CI:** Run tests with private modules ([#6540](https://github.com/Flagsmith/flagsmith/issues/6540)) ([c1ffe45](https://github.com/Flagsmith/flagsmith/commit/c1ffe459790d5be90934fe1d8b0891366bab274a))
14+
* create change request with mv in v2 ([#6515](https://github.com/Flagsmith/flagsmith/issues/6515)) ([f3bd96c](https://github.com/Flagsmith/flagsmith/commit/f3bd96cbfbbc3c39c49f4809430867c05d58bd1c))
15+
* improve _is_user_object_admin query performance ([#6537](https://github.com/Flagsmith/flagsmith/issues/6537)) ([04df8d5](https://github.com/Flagsmith/flagsmith/commit/04df8d5294b74124ee917c694c639d5a86e460fd))
16+
* remove Azure Application Insights integration ([#6530](https://github.com/Flagsmith/flagsmith/issues/6530)) ([e6174c6](https://github.com/Flagsmith/flagsmith/commit/e6174c6e8ca510b7819d179a32f31921e7b27204))
17+
* removed-hover-class-on-color ([#6531](https://github.com/Flagsmith/flagsmith/issues/6531)) ([670b241](https://github.com/Flagsmith/flagsmith/commit/670b241f0283a5bd0f13f55a501d121bdc18ebbe))
18+
* update permission test query counts for RBAC ([#6547](https://github.com/Flagsmith/flagsmith/issues/6547)) ([e2e77b0](https://github.com/Flagsmith/flagsmith/commit/e2e77b0a5d2c293dfacadff0b754d5fc6522930e))
19+
20+
21+
### Dependency Updates
22+
23+
* bump filelock from 3.20.1 to 3.20.3 in /api ([#6527](https://github.com/Flagsmith/flagsmith/issues/6527)) ([0fd330a](https://github.com/Flagsmith/flagsmith/commit/0fd330a70be66a1deeccd5ba98c5674d476fb4f1))
24+
* bump urllib3 from 2.6.2 to 2.6.3 in /api ([#6494](https://github.com/Flagsmith/flagsmith/issues/6494)) ([c2e18bc](https://github.com/Flagsmith/flagsmith/commit/c2e18bc33608b062d5215e3b9b832ed86782b499))
25+
* bump virtualenv from 20.28.0 to 20.36.1 in /api ([#6526](https://github.com/Flagsmith/flagsmith/issues/6526)) ([40a70b9](https://github.com/Flagsmith/flagsmith/commit/40a70b99e1f5595fbfd5ad1fa3b43cb917d7d484))
26+
* upgrade-flagsmith-to-latest-version ([#6405](https://github.com/Flagsmith/flagsmith/issues/6405)) ([bcb557b](https://github.com/Flagsmith/flagsmith/commit/bcb557b7fff4b5929a1389341d60f58556151721))
27+
328
## [2.209.1](https://github.com/Flagsmith/flagsmith/compare/v2.209.0...v2.209.1) (2026-01-13)
429

530

api/poetry.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/common/providers/withSegmentOverrides.js

Lines changed: 113 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import data from 'common/data/base/_data'
22
import ProjectStore from 'common/stores/project-store'
33
import FeatureListStore from 'common/stores/feature-list-store'
4+
import { mergeChangeSets } from 'common/services/useChangeRequest'
45

56
export default (WrappedComponent) => {
67
class HOC extends React.Component {
@@ -28,6 +29,7 @@ export default (WrappedComponent) => {
2829
getOverrides = () => {
2930
if (this.props.projectFlag) {
3031
//todo: migrate to useSegmentFeatureState
32+
const projectId = this.props.projectFlag.project
3133
Promise.all([
3234
data.get(
3335
`${
@@ -43,7 +45,12 @@ export default (WrappedComponent) => {
4345
this.props.environmentId,
4446
)}&feature=${this.props.projectFlag.id}`,
4547
),
46-
]).then(([res, res2]) => {
48+
this.props.changeRequest?.change_sets
49+
? data.get(
50+
`${Project.api}projects/${projectId}/segments/?page_size=1000`,
51+
)
52+
: Promise.resolve({ results: [] }),
53+
]).then(([res, res2, segmentsRes]) => {
4754
const results = res.results
4855
const featureStates = res2.results
4956
const environmentOverride = res2.results.find(
@@ -72,18 +79,115 @@ export default (WrappedComponent) => {
7279
}
7380
}
7481
})
75-
const resResults = res.results || []
76-
const segmentOverrides = results
77-
.concat(
82+
83+
let segmentOverrides
84+
if (this.props.changeRequest?.change_sets) {
85+
// Add changesets to existing segment overrides
86+
const mergedFeatureStates = mergeChangeSets(
87+
this.props.changeRequest.change_sets,
88+
featureStates,
89+
this.props.changeRequest.conflicts,
90+
)
91+
92+
// Get segment IDs marked for deletion
93+
const segmentIdsToDelete =
94+
this.props.changeRequest.change_sets?.flatMap(
95+
(changeSet) => changeSet.segment_ids_to_delete_overrides || [],
96+
) || []
97+
98+
segmentOverrides = results.map((currentSegmentOverride) => {
99+
const changedFeatureState = mergedFeatureStates.find(
100+
(featureState) =>
101+
featureState.feature_segment?.segment ===
102+
currentSegmentOverride.segment,
103+
)
104+
105+
// Any segment_ids_to_delete_overrides should be marked as toRemove
106+
const toRemove = segmentIdsToDelete.includes(
107+
currentSegmentOverride.segment,
108+
)
109+
110+
if (changedFeatureState) {
111+
return {
112+
...currentSegmentOverride,
113+
...changedFeatureState,
114+
id: changedFeatureState.id || currentSegmentOverride.id,
115+
is_feature_specific:
116+
changedFeatureState.feature_segment?.is_feature_specific,
117+
multivariate_options:
118+
changedFeatureState.multivariate_feature_state_values || [],
119+
priority: changedFeatureState.feature_segment?.priority || 0,
120+
segment: changedFeatureState.feature_segment?.segment,
121+
segment_name:
122+
changedFeatureState.feature_segment?.segment_name ||
123+
currentSegmentOverride.segment_name,
124+
toRemove,
125+
uuid:
126+
changedFeatureState.feature_segment?.uuid ||
127+
currentSegmentOverride.uuid,
128+
value: Utils.featureStateToValue(
129+
changedFeatureState.feature_state_value,
130+
),
131+
}
132+
}
133+
134+
return toRemove
135+
? { ...currentSegmentOverride, toRemove }
136+
: currentSegmentOverride
137+
})
138+
139+
// Add any new segment overrides from the changesets
140+
mergedFeatureStates
141+
.filter(
142+
(featureState) =>
143+
!!featureState.feature_segment?.segment &&
144+
!results.find(
145+
(currentOverride) =>
146+
currentOverride.segment ===
147+
featureState.feature_segment.segment,
148+
),
149+
)
150+
.forEach((newFeatureState) => {
151+
// Look up segment metadata from segments API to get segment name
152+
const segmentMetadata = segmentsRes.results?.find(
153+
(segment) =>
154+
segment.id === newFeatureState.feature_segment?.segment,
155+
)
156+
157+
segmentOverrides.push({
158+
enabled: newFeatureState.enabled,
159+
environment: newFeatureState.environment,
160+
feature: newFeatureState.feature,
161+
id: newFeatureState.id,
162+
is_feature_specific:
163+
newFeatureState.feature_segment?.is_feature_specific,
164+
multivariate_options:
165+
newFeatureState.multivariate_feature_state_values || [],
166+
priority: newFeatureState.feature_segment?.priority || 0,
167+
segment: newFeatureState.feature_segment?.segment,
168+
segment_name:
169+
newFeatureState.feature_segment?.segment_name ||
170+
segmentMetadata?.name ||
171+
'Unknown Segment',
172+
uuid: newFeatureState.feature_segment?.uuid,
173+
value: Utils.featureStateToValue(
174+
newFeatureState.feature_state_value,
175+
),
176+
})
177+
})
178+
} else {
179+
segmentOverrides = results.concat(
78180
(this.props.newSegmentOverrides || []).map((v, i) => ({
79181
...v,
80182
})),
81183
)
82-
.map((v, i) => ({
83-
...v,
84-
originalPriority: i,
85-
priority: i,
86-
}))
184+
}
185+
segmentOverrides = segmentOverrides.map((v, i) => ({
186+
...v,
187+
originalPriority: i,
188+
priority: i,
189+
}))
190+
87191
const originalSegmentOverrides = _.cloneDeep(segmentOverrides)
88192
this.setState({
89193
environmentVariations:

0 commit comments

Comments
 (0)