mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:02:14 +01:00 
			
		
		
		
	Remove duplicate logic in initListSubmits (#12660)
* Remove duplicate logic in initListSubmits Using the same logic to handle Choosing reviewers and assignees as choosing label. It's the first step of #10926. Signed-off-by: a1012112796 <1012112796@qq.com> * fix choose block * fix nit * try fix bug * simple code Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		
							parent
							
								
									ea775e67fb
								
							
						
					
					
						commit
						3981f1b127
					
				| @ -1516,10 +1516,11 @@ func updatePullReviewRequest(ctx *context.Context) { | ||||
| 	} | ||||
| 
 | ||||
| 	reviewID := ctx.QueryInt64("id") | ||||
| 	event := ctx.Query("is_add") | ||||
| 	action := ctx.Query("action") | ||||
| 
 | ||||
| 	if event != "add" && event != "remove" { | ||||
| 		ctx.ServerError("updatePullReviewRequest", fmt.Errorf("is_add should not be \"%s\"", event)) | ||||
| 	// TODO: Not support 'clear' now | ||||
| 	if action != "attach" && action != "detach" { | ||||
| 		ctx.Status(403) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| @ -1532,19 +1533,20 @@ func updatePullReviewRequest(ctx *context.Context) { | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			err = isLegalReviewRequest(reviewer, ctx.User, event == "add", issue) | ||||
| 			err = isLegalReviewRequest(reviewer, ctx.User, action == "attach", issue) | ||||
| 			if err != nil { | ||||
| 				ctx.ServerError("isLegalRequestReview", err) | ||||
| 				return | ||||
| 			} | ||||
| 
 | ||||
| 			err = issue_service.ReviewRequest(issue, ctx.User, reviewer, event == "add") | ||||
| 			err = issue_service.ReviewRequest(issue, ctx.User, reviewer, action == "attach") | ||||
| 			if err != nil { | ||||
| 				ctx.ServerError("ReviewRequest", err) | ||||
| 				return | ||||
| 			} | ||||
| 		} else { | ||||
| 			ctx.ServerError("updatePullReviewRequest", fmt.Errorf("%d in %d is not Pull Request", issue.ID, issue.Repo.ID)) | ||||
| 			ctx.Status(403) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -49,7 +49,7 @@ | ||||
| 								{{end}} | ||||
| 
 | ||||
| 								{{if $canChoose }} | ||||
| 									<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}remove{{else}}add{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||
| 									<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}true{{else}}false{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||
| 										{{svg "octicon-sync" 16}} | ||||
| 									</a> | ||||
| 								{{end}} | ||||
|  | ||||
| @ -12,7 +12,7 @@ | ||||
| 					{{svg "octicon-gear" 16}} | ||||
| 				{{end}} | ||||
| 			</span> | ||||
| 			<div class="filter menu" data-action="" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||
| 			<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||
| 				<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_reviewer_title"}}</div> | ||||
| 				{{if .Reviewers}} | ||||
| 					<div class="ui icon search input"> | ||||
| @ -44,7 +44,7 @@ | ||||
| 						{{$canChoose = true}} | ||||
| 					{{end}} | ||||
| 
 | ||||
| 					<a class="{{if not $canChoose}}ui poping up{{end}} item {{if $checked}} checked {{end}}" href="#" data-id="{{.ID}}" data-id-selector="#review_request_{{.ID}}" data-can-change="{{if not $canChoose}}block{{end}}" {{if not $canChoose}} data-content="{{$.i18n.Tr "repo.issues.remove_request_review_block"}}"{{end}} data-is-checked="{{if $checked}}add{{else}}remove{{end}}"> | ||||
| 					<a class="{{if not $canChoose}}ui poping up{{end}} item {{if $checked}} checked {{end}} {{if not $canChoose}}ban-change{{end}}" href="#" data-id="{{.ID}}" data-id-selector="#review_request_{{.ID}}" {{if not $canChoose}} data-content="{{$.i18n.Tr "repo.issues.remove_request_review_block"}}"{{end}}> | ||||
| 						<span class="octicon-check {{if not $checked}}invisible{{end}}">{{svg "octicon-check" 16}}</span> | ||||
| 						<span class="text"> | ||||
| 							<img class="ui avatar image" src="{{.RelAvatarLink}}"> {{.GetDisplayName}} | ||||
| @ -78,7 +78,7 @@ | ||||
| 							{{end}} | ||||
| 
 | ||||
| 							{{if $canChoose}} | ||||
| 								<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}remove{{else}}add{{end}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||
| 								<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if  eq .Type 4}}true{{else}}false{{end}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}"  data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review"> | ||||
| 									{{svg "octicon-sync" 16}} | ||||
| 								</a> | ||||
| 							{{end}} | ||||
| @ -244,7 +244,7 @@ | ||||
| 					{{svg "octicon-gear" 16}} | ||||
| 				{{end}} | ||||
| 			</span> | ||||
| 			<div class="filter menu" data-action="" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee"> | ||||
| 			<div class="filter menu" data-action="update" data-issue-id="{{$.Issue.ID}}" data-update-url="{{$.RepoLink}}/issues/assignee"> | ||||
| 				<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_assignees_title"}}</div> | ||||
| 				<div class="ui icon search input"> | ||||
| 					<i class="search icon"></i> | ||||
|  | ||||
| @ -157,7 +157,7 @@ function initLabelEdit() { | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| function updateIssuesMeta(url, action, issueIds, elementId, isAdd) { | ||||
| function updateIssuesMeta(url, action, issueIds, elementId) { | ||||
|   return new Promise(((resolve) => { | ||||
|     $.ajax({ | ||||
|       type: 'POST', | ||||
| @ -167,7 +167,6 @@ function updateIssuesMeta(url, action, issueIds, elementId, isAdd) { | ||||
|         action, | ||||
|         issue_ids: issueIds, | ||||
|         id: elementId, | ||||
|         is_add: isAdd | ||||
|       }, | ||||
|       success: resolve | ||||
|     }); | ||||
| @ -373,21 +372,20 @@ function initCommentForm() { | ||||
|     const $list = $(`.ui.${outerSelector}.list`); | ||||
|     const $noSelect = $list.find('.no-select'); | ||||
|     const $listMenu = $(`.${selector} .menu`); | ||||
|     let hasLabelUpdateAction = $listMenu.data('action') === 'update'; | ||||
|     const labels = {}; | ||||
|     let hasUpdateAction = $listMenu.data('action') === 'update'; | ||||
|     const items = {}; | ||||
| 
 | ||||
|     $(`.${selector}`).dropdown('setting', 'onHide', () => { | ||||
|       hasLabelUpdateAction = $listMenu.data('action') === 'update'; // Update the var
 | ||||
|       if (hasLabelUpdateAction) { | ||||
|       hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
 | ||||
|       if (hasUpdateAction) { | ||||
|         const promises = []; | ||||
|         Object.keys(labels).forEach((elementId) => { | ||||
|           const label = labels[elementId]; | ||||
|         Object.keys(items).forEach((elementId) => { | ||||
|           const item = items[elementId]; | ||||
|           const promise = updateIssuesMeta( | ||||
|             label['update-url'], | ||||
|             label.action, | ||||
|             label['issue-id'], | ||||
|             item['update-url'], | ||||
|             item.action, | ||||
|             item['issue-id'], | ||||
|             elementId, | ||||
|             label['is-checked'] | ||||
|           ); | ||||
|           promises.push(promise); | ||||
|         }); | ||||
| @ -395,67 +393,49 @@ function initCommentForm() { | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     $listMenu.find('.item:not(.no-select)').on('click', function () { | ||||
|       // we don't need the action attribute when updating assignees
 | ||||
|       if (selector === 'select-assignees-modify' || selector === 'select-reviewers-modify') { | ||||
|         // UI magic. We need to do this here, otherwise it would destroy the functionality of
 | ||||
|         // adding/removing labels
 | ||||
| 
 | ||||
|         if ($(this).data('can-change') === 'block') { | ||||
|           return false; | ||||
|         } | ||||
| 
 | ||||
|         if ($(this).hasClass('checked')) { | ||||
|           $(this).removeClass('checked'); | ||||
|           $(this).find('.octicon-check').addClass('invisible'); | ||||
|           $(this).data('is-checked', 'remove'); | ||||
|         } else { | ||||
|           $(this).addClass('checked'); | ||||
|           $(this).find('.octicon-check').removeClass('invisible'); | ||||
|           $(this).data('is-checked', 'add'); | ||||
|         } | ||||
| 
 | ||||
|         updateIssuesMeta( | ||||
|           $listMenu.data('update-url'), | ||||
|           '', | ||||
|           $listMenu.data('issue-id'), | ||||
|           $(this).data('id'), | ||||
|           $(this).data('is-checked') | ||||
|         ); | ||||
|         $listMenu.data('action', 'update'); // Update to reload the page when we updated items
 | ||||
|     $listMenu.find('.item:not(.no-select)').on('click', function (e) { | ||||
|       e.preventDefault(); | ||||
|       if ($(this).hasClass('ban-change')) { | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
 | ||||
|       if ($(this).hasClass('checked')) { | ||||
|         $(this).removeClass('checked'); | ||||
|         $(this).find('.octicon-check').addClass('invisible'); | ||||
|         if (hasLabelUpdateAction) { | ||||
|           if (!($(this).data('id') in labels)) { | ||||
|             labels[$(this).data('id')] = { | ||||
|         if (hasUpdateAction) { | ||||
|           if (!($(this).data('id') in items)) { | ||||
|             items[$(this).data('id')] = { | ||||
|               'update-url': $listMenu.data('update-url'), | ||||
|               action: 'detach', | ||||
|               'issue-id': $listMenu.data('issue-id'), | ||||
|             }; | ||||
|           } else { | ||||
|             delete labels[$(this).data('id')]; | ||||
|             delete items[$(this).data('id')]; | ||||
|           } | ||||
|         } | ||||
|       } else { | ||||
|         $(this).addClass('checked'); | ||||
|         $(this).find('.octicon-check').removeClass('invisible'); | ||||
|         if (hasLabelUpdateAction) { | ||||
|           if (!($(this).data('id') in labels)) { | ||||
|             labels[$(this).data('id')] = { | ||||
|         if (hasUpdateAction) { | ||||
|           if (!($(this).data('id') in items)) { | ||||
|             items[$(this).data('id')] = { | ||||
|               'update-url': $listMenu.data('update-url'), | ||||
|               action: 'attach', | ||||
|               'issue-id': $listMenu.data('issue-id'), | ||||
|             }; | ||||
|           } else { | ||||
|             delete labels[$(this).data('id')]; | ||||
|             delete items[$(this).data('id')]; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       // TODO: Which thing should be done for choosing review requests
 | ||||
|       // to make choosed items be shown on time here?
 | ||||
|       if (selector === 'select-reviewers-modify' || selector === 'select-assignees-modify') { | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       const listIds = []; | ||||
|       $(this).parent().find('.item').each(function () { | ||||
|         if ($(this).hasClass('checked')) { | ||||
| @ -473,23 +453,26 @@ function initCommentForm() { | ||||
|       $($(this).parent().data('id')).val(listIds.join(',')); | ||||
|       return false; | ||||
|     }); | ||||
|     $listMenu.find('.no-select.item').on('click', function () { | ||||
|       if (hasLabelUpdateAction || selector === 'select-assignees-modify') { | ||||
|     $listMenu.find('.no-select.item').on('click', function (e) { | ||||
|       e.preventDefault(); | ||||
|       if (hasUpdateAction) { | ||||
|         updateIssuesMeta( | ||||
|           $listMenu.data('update-url'), | ||||
|           'clear', | ||||
|           $listMenu.data('issue-id'), | ||||
|           '', | ||||
|           '' | ||||
|         ).then(reload); | ||||
|       } | ||||
| 
 | ||||
|       $(this).parent().find('.item').each(function () { | ||||
|         $(this).removeClass('checked'); | ||||
|         $(this).find('.octicon').addClass('invisible'); | ||||
|         $(this).data('is-checked', 'remove'); | ||||
|       }); | ||||
| 
 | ||||
|       if (selector === 'select-reviewers-modify' || selector === 'select-assignees-modify') { | ||||
|         return false; | ||||
|       } | ||||
| 
 | ||||
|       $list.find('.item').each(function () { | ||||
|         $(this).addClass('hide'); | ||||
|       }); | ||||
| @ -521,7 +504,6 @@ function initCommentForm() { | ||||
|           '', | ||||
|           $menu.data('issue-id'), | ||||
|           $(this).data('id'), | ||||
|           $(this).data('is-checked') | ||||
|         ).then(reload); | ||||
|       } | ||||
|       switch (input_id) { | ||||
| @ -552,7 +534,6 @@ function initCommentForm() { | ||||
|           '', | ||||
|           $menu.data('issue-id'), | ||||
|           $(this).data('id'), | ||||
|           $(this).data('is-checked') | ||||
|         ).then(reload); | ||||
|       } | ||||
| 
 | ||||
| @ -672,10 +653,9 @@ function initIssueComments() { | ||||
|     event.preventDefault(); | ||||
|     updateIssuesMeta( | ||||
|       url, | ||||
|       '', | ||||
|       isChecked === 'true' ? 'attach' : 'detach', | ||||
|       issueId, | ||||
|       id, | ||||
|       isChecked | ||||
|     ).then(reload); | ||||
|   }); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user