11import React , { FC , useState } from 'react'
22import moment from 'moment'
33import { Link } from 'react-router-dom'
4+ import Constants from 'common/constants'
5+ import { useHasPermission } from 'common/providers/Permission'
46import {
57 useCreateCohortSyncKeyMutation ,
68 useGetCohortSyncKeysQuery ,
79} from 'common/services/useCohort'
10+ import { EnvironmentPermission } from 'common/types/permissions.types'
811import { CohortSyncKey } from 'common/types/responses'
912import Button from 'components/base/forms/Button'
1013import InputGroup from 'components/base/forms/InputGroup'
1114import CopyField from 'components/CopyField'
1215import ErrorMessage from 'components/ErrorMessage'
13- import Loader from 'components/Loader '
16+ import Tooltip from 'components/Tooltip '
1417import WarningMessage from 'components/WarningMessage'
1518import ConnectCohortProviderStep from './ConnectCohortProviderStep'
1619
@@ -33,6 +36,13 @@ const CohortSyncKeyStep: FC<CohortSyncKeyStepProps> = ({
3336 const [ createdKey , setCreatedKey ] = useState < string | null > ( null )
3437 const [ isCreateFormOpen , setIsCreateFormOpen ] = useState ( false )
3538
39+ const { isLoading : isLoadingPermission , permission : canManage } =
40+ useHasPermission ( {
41+ id : environmentApiKey ,
42+ level : 'environment' ,
43+ permission : EnvironmentPermission . MANAGE_SEGMENT_OVERRIDES ,
44+ } )
45+
3646 const { data : syncKeys , isLoading } = useGetCohortSyncKeysQuery (
3747 { environmentApiKey } ,
3848 { skip : ! environmentApiKey } ,
@@ -56,11 +66,12 @@ const CohortSyncKeyStep: FC<CohortSyncKeyStepProps> = ({
5666 const getTitle = ( ) => {
5767 if ( createdKey ) return 'Synchronisation key'
5868 if ( hasKeys && ! isCreateFormOpen ) return 'Use your existing key'
69+ if ( ! canManage ) return 'Synchronisation key'
5970 return 'Create a synchronisation key'
6071 }
6172
6273 const renderBody = ( ) => {
63- if ( isLoading && ! syncKeys ) {
74+ if ( ( isLoading && ! syncKeys ) || isLoadingPermission ) {
6475 return < Loader />
6576 }
6677
@@ -80,6 +91,15 @@ const CohortSyncKeyStep: FC<CohortSyncKeyStepProps> = ({
8091 )
8192 }
8293
94+ if ( ! hasKeys && ! canManage ) {
95+ return (
96+ < div className = 'fs-small text-secondary' >
97+ You do not have permission to create synchronisation keys in this
98+ environment.
99+ </ div >
100+ )
101+ }
102+
83103 if ( ! hasKeys || isCreateFormOpen ) {
84104 return (
85105 < form onSubmit = { handleSubmit } >
@@ -127,7 +147,8 @@ const CohortSyncKeyStep: FC<CohortSyncKeyStepProps> = ({
127147 ) ) }
128148 </ div >
129149 < div className = 'fs-small text-secondary mt-2' >
130- Key values are shown only at creation. Lost it? Create a new key.
150+ Key values are shown only at creation.
151+ { canManage && ' Lost it? Create a new key.' }
131152 </ div >
132153 < div className = 'fs-small text-secondary' >
133154 You can revoke keys in{ ' ' }
@@ -139,14 +160,29 @@ const CohortSyncKeyStep: FC<CohortSyncKeyStepProps> = ({
139160 </ Link >
140161 .
141162 </ div >
142- < Button
143- theme = 'secondary'
144- className = 'mt-3'
145- onClick = { ( ) => setIsCreateFormOpen ( true ) }
146- data-test = 'connect-provider-new-key'
147- >
148- Create a new key
149- </ Button >
163+ { canManage ? (
164+ < Button
165+ theme = 'secondary'
166+ className = 'mt-3'
167+ onClick = { ( ) => setIsCreateFormOpen ( true ) }
168+ data-test = 'connect-provider-new-key'
169+ >
170+ Create a new key
171+ </ Button >
172+ ) : (
173+ < Tooltip
174+ title = {
175+ < Button theme = 'secondary' className = 'mt-3' disabled >
176+ Create a new key
177+ </ Button >
178+ }
179+ place = 'right'
180+ >
181+ { Constants . environmentPermissions (
182+ EnvironmentPermission . MANAGE_SEGMENT_OVERRIDES ,
183+ ) }
184+ </ Tooltip >
185+ ) }
150186 </ >
151187 )
152188 }
0 commit comments