diff options
author | Giteabot <teabot@gitea.io> | 2024-01-15 09:40:52 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-15 09:40:52 +0800 |
commit | fbf29f29b5225be8e5e682e45b6977e7dda9b318 (patch) | |
tree | 5de5ad91653a3d11032cdaee7d3e5459ba4fef30 /web_src | |
parent | 6e29242ebb22bfd775f408ca6b9c03f7572e6658 (diff) | |
download | gitea-fbf29f29b5225be8e5e682e45b6977e7dda9b318.tar.gz gitea-fbf29f29b5225be8e5e682e45b6977e7dda9b318.zip |
Modernize merge button (#28140) (#28786)
Backport #28140 by @earl-warren
- Make use of the `form-fetch-action` for the merge button, which will
automatically prevent the action from happening multiple times and show
a nice loading indicator as user feedback while the merge request is
being processed by the server.
- Adjust the merge PR code to JSON response as this is required for the
`form-fetch-action` functionality.
- Resolves https://codeberg.org/forgejo/forgejo/issues/774
- Likely resolves the cause of
https://codeberg.org/forgejo/forgejo/issues/1688#issuecomment-1313044
(cherry picked from commit 4ec64c19507caefff7ddaad722b1b5792b97cc5a)
Co-authored-by: Earl Warren <109468362+earl-warren@users.noreply.github.com>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Diffstat (limited to 'web_src')
-rw-r--r-- | web_src/js/components/PullRequestMergeForm.vue | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/web_src/js/components/PullRequestMergeForm.vue b/web_src/js/components/PullRequestMergeForm.vue index 03d1f99683..aef4c8b5ac 100644 --- a/web_src/js/components/PullRequestMergeForm.vue +++ b/web_src/js/components/PullRequestMergeForm.vue @@ -90,48 +90,46 @@ export default { <!-- eslint-disable-next-line vue/no-v-html --> <div v-if="mergeForm.hasPendingPullRequestMerge" v-html="mergeForm.hasPendingPullRequestMergeTip" class="ui info message"/> - <div class="ui form" v-if="showActionForm"> - <form :action="mergeForm.baseLink+'/merge'" method="post"> - <input type="hidden" name="_csrf" :value="csrfToken"> - <input type="hidden" name="head_commit_id" v-model="mergeForm.pullHeadCommitID"> - <input type="hidden" name="merge_when_checks_succeed" v-model="autoMergeWhenSucceed"> - <input type="hidden" name="force_merge" v-model="forceMerge"> - - <template v-if="!mergeStyleDetail.hideMergeMessageTexts"> - <div class="field"> - <input type="text" name="merge_title_field" v-model="mergeTitleFieldValue"> - </div> - <div class="field"> - <textarea name="merge_message_field" rows="5" :placeholder="mergeForm.mergeMessageFieldPlaceHolder" v-model="mergeMessageFieldValue"/> - <template v-if="mergeMessageFieldValue !== mergeForm.defaultMergeMessage"> - <button @click.prevent="clearMergeMessage" class="btn gt-mt-2 gt-p-2 interact-fg" :data-tooltip-content="mergeForm.textClearMergeMessageHint"> - {{ mergeForm.textClearMergeMessage }} - </button> - </template> - </div> - </template> - - <div class="field" v-if="mergeStyle === 'manually-merged'"> - <input type="text" name="merge_commit_id" :placeholder="mergeForm.textMergeCommitId"> + <form class="ui form form-fetch-action" v-if="showActionForm" :action="mergeForm.baseLink+'/merge'" method="post"> + <input type="hidden" name="_csrf" :value="csrfToken"> + <input type="hidden" name="head_commit_id" v-model="mergeForm.pullHeadCommitID"> + <input type="hidden" name="merge_when_checks_succeed" v-model="autoMergeWhenSucceed"> + <input type="hidden" name="force_merge" v-model="forceMerge"> + + <template v-if="!mergeStyleDetail.hideMergeMessageTexts"> + <div class="field"> + <input type="text" name="merge_title_field" v-model="mergeTitleFieldValue"> </div> - - <button class="ui button" :class="mergeButtonStyleClass" type="submit" name="do" :value="mergeStyle"> - {{ mergeStyleDetail.textDoMerge }} - <template v-if="autoMergeWhenSucceed"> - {{ mergeForm.textAutoMergeButtonWhenSucceed }} + <div class="field"> + <textarea name="merge_message_field" rows="5" :placeholder="mergeForm.mergeMessageFieldPlaceHolder" v-model="mergeMessageFieldValue"/> + <template v-if="mergeMessageFieldValue !== mergeForm.defaultMergeMessage"> + <button @click.prevent="clearMergeMessage" class="btn gt-mt-2 gt-p-2 interact-fg" :data-tooltip-content="mergeForm.textClearMergeMessageHint"> + {{ mergeForm.textClearMergeMessage }} + </button> </template> - </button> + </div> + </template> - <button class="ui button merge-cancel" @click="toggleActionForm(false)"> - {{ mergeForm.textCancel }} - </button> + <div class="field" v-if="mergeStyle === 'manually-merged'"> + <input type="text" name="merge_commit_id" :placeholder="mergeForm.textMergeCommitId"> + </div> - <div class="ui checkbox gt-ml-2" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed"> - <input name="delete_branch_after_merge" type="checkbox" v-model="deleteBranchAfterMerge" id="delete-branch-after-merge"> - <label for="delete-branch-after-merge">{{ mergeForm.textDeleteBranch }}</label> - </div> - </form> - </div> + <button class="ui button" :class="mergeButtonStyleClass" type="submit" name="do" :value="mergeStyle"> + {{ mergeStyleDetail.textDoMerge }} + <template v-if="autoMergeWhenSucceed"> + {{ mergeForm.textAutoMergeButtonWhenSucceed }} + </template> + </button> + + <button class="ui button merge-cancel" @click="toggleActionForm(false)"> + {{ mergeForm.textCancel }} + </button> + + <div class="ui checkbox gt-ml-2" v-if="mergeForm.isPullBranchDeletable && !autoMergeWhenSucceed"> + <input name="delete_branch_after_merge" type="checkbox" v-model="deleteBranchAfterMerge" id="delete-branch-after-merge"> + <label for="delete-branch-after-merge">{{ mergeForm.textDeleteBranch }}</label> + </div> + </form> <div v-if="!showActionForm" class="gt-df"> <!-- the merge button --> |