diff --git a/frontend/web/components/SegmentOverrides.js b/frontend/web/components/SegmentOverrides.js index 0bf48bad439a..4ec14620bd7e 100644 --- a/frontend/web/components/SegmentOverrides.js +++ b/frontend/web/components/SegmentOverrides.js @@ -559,159 +559,175 @@ class TheComponent extends Component { const isLimitReached = segmentOverrideLimitAlert.percentage && segmentOverrideLimitAlert.percentage >= 100 + const manageSegmentsEnabled = Utils.getFlagsmithHasFeature( + 'manage_segment_overrides_env_role', + ) return (
-
- {!this.props.id && - !this.props.disableCreate && - !this.props.showCreateSegment && - !this.props.readOnly && ( - - - this.setState({ selectedSegment }, this.addItem) - } - /> - - )} - {!this.props.showCreateSegment && - !this.props.readOnly && - !this.props.disableCreate && ( -
- -
- )} - {this.props.showCreateSegment && !this.state.segmentEditId && ( -
- { - if (this.state.selectedSegment) { - this.props.setShowCreateSegment(false) - } else { - this.props.setShowCreateSegment(false) - this.setState( - { - selectedSegment: { - label: segment.name, - value: segment.id, - }, - }, - this.addItem, - ) - } - }} - onCancel={() => { - this.props.setShowCreateSegment(false) - }} - condensed - feature={this.props.feature} - environmentId={this.props.environmentId} - projectId={this.props.projectId} - /> -
- )} - {this.props.showCreateSegment && this.state.segmentEditId && ( - { - this.setState({ - segmentEditId: undefined, - }) - this.props.setShowCreateSegment(false) - }} - onCancel={() => { - this.setState({ segmentEditId: undefined }) - this.props.setShowCreateSegment(false) - }} - environmentId={this.props.environmentId} - projectId={this.props.projectId} - /> - )} - {visibleValues && - !!visibleValues.length && - !this.props.showCreateSegment && ( -
- {!this.props.id && ( -
- - Prioritise a segment override by dragging it to the top of - the list. -
- Segment overrides will only apply when you identify via - the SDK.{' '} - + {({ permission: manageSegments }) => { + return ( +
+ {!this.props.id && + !this.props.disableCreate && + !this.props.showCreateSegment && + !this.props.readOnly && ( + + + this.setState({ selectedSegment }, this.addItem) + } + /> + + )} + {!this.props.showCreateSegment && + !this.props.readOnly && + !this.props.disableCreate && ( + + )} + {this.props.showCreateSegment && !this.state.segmentEditId && ( +
+ { + this.props.setShowCreateSegment(false) + if (!this.state.selectedSegment) { + this.setState( + { + selectedSegment: { + label: segment.name, + value: segment.id, + }, + }, + this.addItem, + ) + } + }} + onCancel={() => { + this.props.setShowCreateSegment(false) + }} + condensed + feature={this.props.feature} + environmentId={this.props.environmentId} + projectId={this.props.projectId} />
)} + {this.props.showCreateSegment && this.state.segmentEditId && ( + { + this.setState({ + segmentEditId: undefined, + }) + this.props.setShowCreateSegment(false) + }} + onCancel={() => { + this.setState({ segmentEditId: undefined }) + this.props.setShowCreateSegment(false) + }} + environmentId={this.props.environmentId} + projectId={this.props.projectId} + /> + )} + {visibleValues && + !!visibleValues.length && + !this.props.showCreateSegment && ( +
+ {!this.props.id && ( +
+ + Prioritise a segment override by dragging it to the + top of the list. +
+ Segment overrides will only apply when you identify + via the SDK.{' '} + + Check the Docs for more details + + . +
+ +
+ )} - {value && ( - <> - ({ - ...v, - }))} - setSegmentEditId={this.setSegmentEditId} - onSortEnd={this.onSortEnd} - projectFlag={this.props.projectFlag} - /> -
- + {value && ( + <> + ({ + ...v, + }))} + setSegmentEditId={this.setSegmentEditId} + onSortEnd={this.onSortEnd} + projectFlag={this.props.projectFlag} + /> +
+ +
+ + )}
- - )} + )}
- )} -
+ ) + }} +
) } diff --git a/frontend/web/components/modals/AssociatedSegmentOverrides.js b/frontend/web/components/modals/AssociatedSegmentOverrides.js index 297017bf271f..32bfb9fa8274 100644 --- a/frontend/web/components/modals/AssociatedSegmentOverrides.js +++ b/frontend/web/components/modals/AssociatedSegmentOverrides.js @@ -110,6 +110,7 @@ class TheComponent extends Component { id={this.props.id} projectId={this.props.projectId} environmentId={this.state.selectedEnv} + readOnly={this.props.readOnly} />
) @@ -196,6 +197,7 @@ class TheComponent extends Component { id={this.props.id} projectId={this.props.projectId} environmentId={v.env.api_key} + readOnly={this.props.readOnly} />
@@ -296,6 +298,7 @@ export default class SegmentOverridesInner extends Component { originalSegmentOverrides, projectFlag, projectId, + readOnly, segmentOverrides, updateSegments, } = this.props @@ -366,11 +369,14 @@ export default class SegmentOverridesInner extends Component { value={segmentOverride} controlValue={projectFlag.feature_state_value} onChange={updateSegments} + readOnly={readOnly} />
- + {!readOnly && ( + + )}
) @@ -411,7 +417,7 @@ class SegmentOverridesInnerAdd extends Component { } } render() { - const { environmentId, id, ignoreFlags, projectId } = this.props + const { environmentId, id, ignoreFlags, projectId, readOnly } = this.props const addValue = (featureId, feature) => { const env = ProjectStore.getEnvs().find((v) => v.name === environmentId) const item = { @@ -448,14 +454,16 @@ class SegmentOverridesInnerAdd extends Component { {() => { return (
- + {!readOnly && ( + + )}
) }} diff --git a/frontend/web/components/modals/CreateFlag.js b/frontend/web/components/modals/CreateFlag.js index aaecb9738383..47e021028dda 100644 --- a/frontend/web/components/modals/CreateFlag.js +++ b/frontend/web/components/modals/CreateFlag.js @@ -479,6 +479,9 @@ const CreateFlag = class extends Component { const existingChangeRequest = this.props.changeRequest const hideIdentityOverridesTab = Utils.getShouldHideIdentityOverridesTab() const noPermissions = this.props.noPermissions + const manageSegmentsEnabled = Utils.getFlagsmithHasFeature( + 'manage_segment_overrides_env_role', + ) let regexValid = true try { if (!isEdit && name && regex) { @@ -1126,38 +1129,63 @@ const CreateFlag = class extends Component { )} {this.props.segmentOverrides ? ( - - this.setState({ - showCreateSegment, - }) - } - feature={projectFlag.id} - projectId={this.props.projectId} - multivariateOptions={ - multivariate_options + { - this.setState({ - segmentsChanged: true, - }) - this.props.updateSegments(v) + id={this.props.environmentId} + > + {({ + permission: + manageSegmentOverrides, + }) => { + const isReadOnly = + manageSegmentsEnabled + ? manageSegmentOverrides + : noPermissions + return ( + + this.setState({ + showCreateSegment, + }) + } + feature={projectFlag.id} + projectId={ + this.props.projectId + } + multivariateOptions={ + multivariate_options + } + environmentId={ + this.props.environmentId + } + value={ + this.props + .segmentOverrides + } + controlValue={initial_value} + onChange={(v) => { + this.setState({ + segmentsChanged: true, + }) + this.props.updateSegments( + v, + ) + }} + /> + ) }} - /> + ) : (
@@ -1206,24 +1234,44 @@ const CreateFlag = class extends Component { ), ),
- + {({ + permission: + manageSegmentsOverrides, + }) => { + return ( + + ) + }} +
, ) } diff --git a/frontend/web/components/modals/CreateSegment.tsx b/frontend/web/components/modals/CreateSegment.tsx index 48e63b6a4b9f..66f8fb573407 100644 --- a/frontend/web/components/modals/CreateSegment.tsx +++ b/frontend/web/components/modals/CreateSegment.tsx @@ -37,6 +37,7 @@ import { cloneDeep } from 'lodash' import ErrorMessage from 'components/ErrorMessage' import ProjectStore from 'common/stores/project-store' import Icon from 'components/Icon' +import Permission from 'common/providers/Permission' type PageType = { number: number @@ -502,11 +503,26 @@ const CreateSegment: FC = ({
- + + {({ permission: manageSegmentOverrides }) => { + const manageSegmentsEnabled = Utils.getFlagsmithHasFeature( + 'manage_segment_overrides_env_role', + ) + const isReadOnly = !manageSegmentOverrides + return ( + + ) + }} +