aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/components/common
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/src/main/js/components/common')
-rw-r--r--server/sonar-web/src/main/js/components/common/PrivacyBadgeContainer.tsx4
-rw-r--r--server/sonar-web/src/main/js/components/common/VisibilitySelector.tsx52
-rw-r--r--server/sonar-web/src/main/js/components/common/__tests__/PrivacyBadgeContainer-test.tsx10
-rw-r--r--server/sonar-web/src/main/js/components/common/__tests__/VisibilitySelector-test.tsx19
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}
/>
);