]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-19986 Block tag editing while re-indexing
authorDavid Cho-Lerat <david.cho-lerat@sonarsource.com>
Thu, 20 Jul 2023 14:23:33 +0000 (16:23 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 21 Jul 2023 20:03:16 +0000 (20:03 +0000)
server/sonar-web/src/main/js/components/issue/components/IssueTags.tsx

index 7ba43208c0fd793db83ccf4028bff9f12d7adc0a..88d7f6fbb1137d5153473b2d562c39bd96a66c38 100644 (file)
  * along with this program; if not, write to the Free Software Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
+
 import { PopupPlacement, Tags } from 'design-system';
 import * as React from 'react';
 import { setIssueTags } from '../../../api/issues';
+import withComponentContext from '../../../app/components/componentContext/withComponentContext';
 import { translate } from '../../../helpers/l10n';
+import { ComponentContextShape } from '../../../types/component';
 import { Issue } from '../../../types/types';
 import Tooltip from '../../controls/Tooltip';
 import { updateIssue } from '../actions';
 import IssueTagsPopup from '../popups/IssueTagsPopup';
 
-interface Props {
+interface Props extends ComponentContextShape {
   canSetTags: boolean;
   issue: Pick<Issue, 'key' | 'tags'>;
   onChange: (issue: Issue) => void;
-  togglePopup: (popup: string, show?: boolean) => void;
   open?: boolean;
+  togglePopup: (popup: string, show?: boolean) => void;
 }
 
-export default class IssueTags extends React.PureComponent<Props> {
-  toggleSetTags = (open?: boolean) => {
+export class IssueTags extends React.PureComponent<Props> {
+  toggleSetTags = (open = false) => {
     this.props.togglePopup('edit-tags', open);
   };
 
   setTags = (tags: string[]) => {
     const { issue } = this.props;
     const newIssue = { ...issue, tags };
+
     updateIssue(
       this.props.onChange,
       setIssueTags({ issue: issue.key, tags: tags.join(',') }),
@@ -55,24 +59,26 @@ export default class IssueTags extends React.PureComponent<Props> {
   };
 
   render() {
-    const { issue, open } = this.props;
+    const { component, issue, open } = this.props;
     const { tags = [] } = issue;
 
     return (
       <Tags
-        allowUpdate={this.props.canSetTags}
+        allowUpdate={this.props.canSetTags && !component?.needIssueSync}
         ariaTagsListLabel={translate('issue.tags')}
         className="js-issue-edit-tags"
         emptyText={translate('issue.no_tag')}
         menuId="issue-tags-menu"
+        onClose={this.handleClose}
+        open={open}
         overlay={<IssueTagsPopup selectedTags={tags} setTags={this.setTags} />}
         popupPlacement={PopupPlacement.Bottom}
         tags={tags}
         tagsToDisplay={2}
         tooltip={Tooltip}
-        open={open}
-        onClose={this.handleClose}
       />
     );
   }
 }
+
+export default withComponentContext(IssueTags);