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
4 changed files with 49 additions and 67 deletions
|
@ -1516,10 +1516,11 @@ func updatePullReviewRequest(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
reviewID := ctx.QueryInt64("id")
|
reviewID := ctx.QueryInt64("id")
|
||||||
event := ctx.Query("is_add")
|
action := ctx.Query("action")
|
||||||
|
|
||||||
if event != "add" && event != "remove" {
|
// TODO: Not support 'clear' now
|
||||||
ctx.ServerError("updatePullReviewRequest", fmt.Errorf("is_add should not be \"%s\"", event))
|
if action != "attach" && action != "detach" {
|
||||||
|
ctx.Status(403)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1532,19 +1533,20 @@ func updatePullReviewRequest(ctx *context.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = isLegalReviewRequest(reviewer, ctx.User, event == "add", issue)
|
err = isLegalReviewRequest(reviewer, ctx.User, action == "attach", issue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("isLegalRequestReview", err)
|
ctx.ServerError("isLegalRequestReview", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = issue_service.ReviewRequest(issue, ctx.User, reviewer, event == "add")
|
err = issue_service.ReviewRequest(issue, ctx.User, reviewer, action == "attach")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("ReviewRequest", err)
|
ctx.ServerError("ReviewRequest", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} 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}}
|
{{end}}
|
||||||
|
|
||||||
{{if $canChoose }}
|
{{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}}
|
{{svg "octicon-sync" 16}}
|
||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
{{svg "octicon-gear" 16}}
|
{{svg "octicon-gear" 16}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</span>
|
</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>
|
<div class="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_reviewer_title"}}</div>
|
||||||
{{if .Reviewers}}
|
{{if .Reviewers}}
|
||||||
<div class="ui icon search input">
|
<div class="ui icon search input">
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
{{$canChoose = true}}
|
{{$canChoose = true}}
|
||||||
{{end}}
|
{{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="octicon-check {{if not $checked}}invisible{{end}}">{{svg "octicon-check" 16}}</span>
|
||||||
<span class="text">
|
<span class="text">
|
||||||
<img class="ui avatar image" src="{{.RelAvatarLink}}"> {{.GetDisplayName}}
|
<img class="ui avatar image" src="{{.RelAvatarLink}}"> {{.GetDisplayName}}
|
||||||
|
@ -78,7 +78,7 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|
||||||
{{if $canChoose}}
|
{{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}}
|
{{svg "octicon-sync" 16}}
|
||||||
</a>
|
</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
@ -244,7 +244,7 @@
|
||||||
{{svg "octicon-gear" 16}}
|
{{svg "octicon-gear" 16}}
|
||||||
{{end}}
|
{{end}}
|
||||||
</span>
|
</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="header" style="text-transform: none;font-size:16px;">{{.i18n.Tr "repo.issues.new.add_assignees_title"}}</div>
|
||||||
<div class="ui icon search input">
|
<div class="ui icon search input">
|
||||||
<i class="search icon"></i>
|
<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) => {
|
return new Promise(((resolve) => {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
|
@ -167,7 +167,6 @@ function updateIssuesMeta(url, action, issueIds, elementId, isAdd) {
|
||||||
action,
|
action,
|
||||||
issue_ids: issueIds,
|
issue_ids: issueIds,
|
||||||
id: elementId,
|
id: elementId,
|
||||||
is_add: isAdd
|
|
||||||
},
|
},
|
||||||
success: resolve
|
success: resolve
|
||||||
});
|
});
|
||||||
|
@ -373,21 +372,20 @@ function initCommentForm() {
|
||||||
const $list = $(`.ui.${outerSelector}.list`);
|
const $list = $(`.ui.${outerSelector}.list`);
|
||||||
const $noSelect = $list.find('.no-select');
|
const $noSelect = $list.find('.no-select');
|
||||||
const $listMenu = $(`.${selector} .menu`);
|
const $listMenu = $(`.${selector} .menu`);
|
||||||
let hasLabelUpdateAction = $listMenu.data('action') === 'update';
|
let hasUpdateAction = $listMenu.data('action') === 'update';
|
||||||
const labels = {};
|
const items = {};
|
||||||
|
|
||||||
$(`.${selector}`).dropdown('setting', 'onHide', () => {
|
$(`.${selector}`).dropdown('setting', 'onHide', () => {
|
||||||
hasLabelUpdateAction = $listMenu.data('action') === 'update'; // Update the var
|
hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
|
||||||
if (hasLabelUpdateAction) {
|
if (hasUpdateAction) {
|
||||||
const promises = [];
|
const promises = [];
|
||||||
Object.keys(labels).forEach((elementId) => {
|
Object.keys(items).forEach((elementId) => {
|
||||||
const label = labels[elementId];
|
const item = items[elementId];
|
||||||
const promise = updateIssuesMeta(
|
const promise = updateIssuesMeta(
|
||||||
label['update-url'],
|
item['update-url'],
|
||||||
label.action,
|
item.action,
|
||||||
label['issue-id'],
|
item['issue-id'],
|
||||||
elementId,
|
elementId,
|
||||||
label['is-checked']
|
|
||||||
);
|
);
|
||||||
promises.push(promise);
|
promises.push(promise);
|
||||||
});
|
});
|
||||||
|
@ -395,67 +393,49 @@ function initCommentForm() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$listMenu.find('.item:not(.no-select)').on('click', function () {
|
$listMenu.find('.item:not(.no-select)').on('click', function (e) {
|
||||||
// we don't need the action attribute when updating assignees
|
e.preventDefault();
|
||||||
if (selector === 'select-assignees-modify' || selector === 'select-reviewers-modify') {
|
if ($(this).hasClass('ban-change')) {
|
||||||
// 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
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hasUpdateAction = $listMenu.data('action') === 'update'; // Update the var
|
||||||
if ($(this).hasClass('checked')) {
|
if ($(this).hasClass('checked')) {
|
||||||
$(this).removeClass('checked');
|
$(this).removeClass('checked');
|
||||||
$(this).find('.octicon-check').addClass('invisible');
|
$(this).find('.octicon-check').addClass('invisible');
|
||||||
if (hasLabelUpdateAction) {
|
if (hasUpdateAction) {
|
||||||
if (!($(this).data('id') in labels)) {
|
if (!($(this).data('id') in items)) {
|
||||||
labels[$(this).data('id')] = {
|
items[$(this).data('id')] = {
|
||||||
'update-url': $listMenu.data('update-url'),
|
'update-url': $listMenu.data('update-url'),
|
||||||
action: 'detach',
|
action: 'detach',
|
||||||
'issue-id': $listMenu.data('issue-id'),
|
'issue-id': $listMenu.data('issue-id'),
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
delete labels[$(this).data('id')];
|
delete items[$(this).data('id')];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$(this).addClass('checked');
|
$(this).addClass('checked');
|
||||||
$(this).find('.octicon-check').removeClass('invisible');
|
$(this).find('.octicon-check').removeClass('invisible');
|
||||||
if (hasLabelUpdateAction) {
|
if (hasUpdateAction) {
|
||||||
if (!($(this).data('id') in labels)) {
|
if (!($(this).data('id') in items)) {
|
||||||
labels[$(this).data('id')] = {
|
items[$(this).data('id')] = {
|
||||||
'update-url': $listMenu.data('update-url'),
|
'update-url': $listMenu.data('update-url'),
|
||||||
action: 'attach',
|
action: 'attach',
|
||||||
'issue-id': $listMenu.data('issue-id'),
|
'issue-id': $listMenu.data('issue-id'),
|
||||||
};
|
};
|
||||||
} else {
|
} 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 = [];
|
const listIds = [];
|
||||||
$(this).parent().find('.item').each(function () {
|
$(this).parent().find('.item').each(function () {
|
||||||
if ($(this).hasClass('checked')) {
|
if ($(this).hasClass('checked')) {
|
||||||
|
@ -473,23 +453,26 @@ function initCommentForm() {
|
||||||
$($(this).parent().data('id')).val(listIds.join(','));
|
$($(this).parent().data('id')).val(listIds.join(','));
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$listMenu.find('.no-select.item').on('click', function () {
|
$listMenu.find('.no-select.item').on('click', function (e) {
|
||||||
if (hasLabelUpdateAction || selector === 'select-assignees-modify') {
|
e.preventDefault();
|
||||||
|
if (hasUpdateAction) {
|
||||||
updateIssuesMeta(
|
updateIssuesMeta(
|
||||||
$listMenu.data('update-url'),
|
$listMenu.data('update-url'),
|
||||||
'clear',
|
'clear',
|
||||||
$listMenu.data('issue-id'),
|
$listMenu.data('issue-id'),
|
||||||
'',
|
'',
|
||||||
''
|
|
||||||
).then(reload);
|
).then(reload);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(this).parent().find('.item').each(function () {
|
$(this).parent().find('.item').each(function () {
|
||||||
$(this).removeClass('checked');
|
$(this).removeClass('checked');
|
||||||
$(this).find('.octicon').addClass('invisible');
|
$(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 () {
|
$list.find('.item').each(function () {
|
||||||
$(this).addClass('hide');
|
$(this).addClass('hide');
|
||||||
});
|
});
|
||||||
|
@ -521,7 +504,6 @@ function initCommentForm() {
|
||||||
'',
|
'',
|
||||||
$menu.data('issue-id'),
|
$menu.data('issue-id'),
|
||||||
$(this).data('id'),
|
$(this).data('id'),
|
||||||
$(this).data('is-checked')
|
|
||||||
).then(reload);
|
).then(reload);
|
||||||
}
|
}
|
||||||
switch (input_id) {
|
switch (input_id) {
|
||||||
|
@ -552,7 +534,6 @@ function initCommentForm() {
|
||||||
'',
|
'',
|
||||||
$menu.data('issue-id'),
|
$menu.data('issue-id'),
|
||||||
$(this).data('id'),
|
$(this).data('id'),
|
||||||
$(this).data('is-checked')
|
|
||||||
).then(reload);
|
).then(reload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,10 +653,9 @@ function initIssueComments() {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
updateIssuesMeta(
|
updateIssuesMeta(
|
||||||
url,
|
url,
|
||||||
'',
|
isChecked === 'true' ? 'attach' : 'detach',
|
||||||
issueId,
|
issueId,
|
||||||
id,
|
id,
|
||||||
isChecked
|
|
||||||
).then(reload);
|
).then(reload);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Reference in a new issue