diff options
Diffstat (limited to 'server/sonar-web/src/main/js/components/common')
4 files changed, 45 insertions, 40 deletions
diff --git a/server/sonar-web/src/main/js/components/common/PrivacyBadgeContainer.tsx b/server/sonar-web/src/main/js/components/common/PrivacyBadgeContainer.tsx index 658b98196e4..86a203671ae 100644 --- a/server/sonar-web/src/main/js/components/common/PrivacyBadgeContainer.tsx +++ b/server/sonar-web/src/main/js/components/common/PrivacyBadgeContainer.tsx @@ -21,7 +21,7 @@ import classNames from 'classnames'; import * as React from 'react'; import Tooltip from '../../components/controls/Tooltip'; import { translate } from '../../helpers/l10n'; -import { Visibility } from '../../types/types'; +import { Visibility } from '../../types/component'; interface PrivacyBadgeContainerProps { className?: string; @@ -34,7 +34,7 @@ export default function PrivacyBadgeContainer({ qualifier, visibility, }: PrivacyBadgeContainerProps) { - if (visibility !== 'private') { + if (visibility !== Visibility.Private) { return null; } diff --git a/server/sonar-web/src/main/js/components/common/VisibilitySelector.tsx b/server/sonar-web/src/main/js/components/common/VisibilitySelector.tsx index dccc7fad07c..1cf6318108d 100644 --- a/server/sonar-web/src/main/js/components/common/VisibilitySelector.tsx +++ b/server/sonar-web/src/main/js/components/common/VisibilitySelector.tsx @@ -21,38 +21,38 @@ import classNames from 'classnames'; import * as React from 'react'; import Radio from '../../components/controls/Radio'; import { translate } from '../../helpers/l10n'; -import { Visibility } from '../../types/types'; +import { Visibility } from '../../types/component'; -interface Props { +export interface VisibilitySelectorProps { canTurnToPrivate?: boolean; className?: string; onChange: (visibility: Visibility) => void; showDetails?: boolean; visibility?: Visibility; + loading?: boolean; } -export default class VisibilitySelector extends React.PureComponent<Props> { - render() { - return ( - <div className={classNames(this.props.className)}> - {['public', 'private'].map((visibility) => ( - <Radio - className={`huge-spacer-right visibility-${visibility}`} - key={visibility} - value={visibility} - checked={this.props.visibility === visibility} - onCheck={this.props.onChange} - disabled={visibility === 'private' && !this.props.canTurnToPrivate} - > - <div> - {translate('visibility', visibility)} - {this.props.showDetails && ( - <p className="note">{translate('visibility', visibility, 'description.long')}</p> - )} - </div> - </Radio> - ))} - </div> - ); - } +export default function VisibilitySelector(props: VisibilitySelectorProps) { + const { className, canTurnToPrivate, visibility, showDetails, loading = false } = props; + return ( + <div className={classNames(className)}> + {Object.values(Visibility).map((v) => ( + <Radio + className={`huge-spacer-right visibility-${v}`} + key={v} + value={v} + checked={v === visibility} + onCheck={props.onChange} + disabled={(v === Visibility.Private && !canTurnToPrivate) || loading} + > + <div> + {translate('visibility', v)} + {showDetails && ( + <p className="note">{translate('visibility', v, 'description.long')}</p> + )} + </div> + </Radio> + ))} + </div> + ); } diff --git a/server/sonar-web/src/main/js/components/common/__tests__/PrivacyBadgeContainer-test.tsx b/server/sonar-web/src/main/js/components/common/__tests__/PrivacyBadgeContainer-test.tsx index fb4cdf90552..12e905a51ab 100644 --- a/server/sonar-web/src/main/js/components/common/__tests__/PrivacyBadgeContainer-test.tsx +++ b/server/sonar-web/src/main/js/components/common/__tests__/PrivacyBadgeContainer-test.tsx @@ -19,7 +19,7 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; -import { ComponentQualifier } from '../../../types/component'; +import { ComponentQualifier, Visibility } from '../../../types/component'; import PrivacyBadge from '../PrivacyBadgeContainer'; it('renders', () => { @@ -27,11 +27,15 @@ it('renders', () => { }); it('do not render', () => { - expect(getWrapper({ visibility: 'public' })).toMatchSnapshot(); + expect(getWrapper({ visibility: Visibility.Public })).toMatchSnapshot(); }); function getWrapper(props = {}) { return shallow( - <PrivacyBadge qualifier={ComponentQualifier.Project} visibility="private" {...props} /> + <PrivacyBadge + qualifier={ComponentQualifier.Project} + visibility={Visibility.Private} + {...props} + /> ); } diff --git a/server/sonar-web/src/main/js/components/common/__tests__/VisibilitySelector-test.tsx b/server/sonar-web/src/main/js/components/common/__tests__/VisibilitySelector-test.tsx index 4330257f9cf..babc21706da 100644 --- a/server/sonar-web/src/main/js/components/common/__tests__/VisibilitySelector-test.tsx +++ b/server/sonar-web/src/main/js/components/common/__tests__/VisibilitySelector-test.tsx @@ -20,34 +20,35 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import Radio from '../../../components/controls/Radio'; -import VisibilitySelector from '../VisibilitySelector'; +import { Visibility } from '../../../types/component'; +import VisibilitySelector, { VisibilitySelectorProps } from '../VisibilitySelector'; it('changes visibility', () => { const onChange = jest.fn(); const wrapper = shallowRender({ onChange }); expect(wrapper).toMatchSnapshot(); - wrapper.find(Radio).first().props().onCheck('private'); - expect(onChange).toHaveBeenCalledWith('private'); + wrapper.find(Radio).first().props().onCheck(Visibility.Private); + expect(onChange).toHaveBeenCalledWith(Visibility.Private); - wrapper.setProps({ visibility: 'private' }); + wrapper.setProps({ visibility: Visibility.Private }); expect(wrapper).toMatchSnapshot(); - wrapper.find(Radio).first().props().onCheck('public'); - expect(onChange).toHaveBeenCalledWith('public'); + wrapper.find(Radio).first().props().onCheck(Visibility.Public); + expect(onChange).toHaveBeenCalledWith(Visibility.Public); }); it('renders disabled', () => { expect(shallowRender({ canTurnToPrivate: false })).toMatchSnapshot(); }); -function shallowRender(props?: Partial<VisibilitySelector['props']>) { - return shallow<VisibilitySelector>( +function shallowRender(props?: Partial<VisibilitySelectorProps>) { + return shallow<VisibilitySelectorProps>( <VisibilitySelector className="test-classname" canTurnToPrivate={true} onChange={jest.fn()} - visibility="public" + visibility={Visibility.Public} {...props} /> ); |