Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/jira_connect/index.js')
-rw-r--r--app/assets/javascripts/jira_connect/index.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/app/assets/javascripts/jira_connect/index.js b/app/assets/javascripts/jira_connect/index.js
index 37f00d56a05..e7aa4c437bb 100644
--- a/app/assets/javascripts/jira_connect/index.js
+++ b/app/assets/javascripts/jira_connect/index.js
@@ -1,11 +1,85 @@
import Vue from 'vue';
+import $ from 'jquery';
import App from './components/app.vue';
+const store = {
+ state: {
+ error: '',
+ },
+ setErrorMessage(errorMessage) {
+ this.state.error = errorMessage;
+ },
+};
+
+/**
+ * Initialize necessary form handlers for the Jira Connect app
+ */
+const initJiraFormHandlers = () => {
+ const reqComplete = () => {
+ AP.navigator.reload();
+ };
+
+ const reqFailed = (res, fallbackErrorMessage) => {
+ const { responseJSON: { error = fallbackErrorMessage } = {} } = res || {};
+
+ store.setErrorMessage(error);
+ // eslint-disable-next-line no-alert
+ alert(error);
+ };
+
+ AP.getLocation(location => {
+ $('.js-jira-connect-sign-in').each(function updateSignInLink() {
+ const updatedLink = `${$(this).attr('href')}?return_to=${location}`;
+ $(this).attr('href', updatedLink);
+ });
+ });
+
+ $('#add-subscription-form').on('submit', function onAddSubscriptionForm(e) {
+ const actionUrl = $(this).attr('action');
+ e.preventDefault();
+
+ AP.context.getToken(token => {
+ // eslint-disable-next-line no-jquery/no-ajax
+ $.post(actionUrl, {
+ jwt: token,
+ namespace_path: $('#namespace-input').val(),
+ format: 'json',
+ })
+ .done(reqComplete)
+ .fail(err => reqFailed(err, 'Failed to add namespace. Please try again.'));
+ });
+ });
+
+ $('.remove-subscription').on('click', function onRemoveSubscriptionClick(e) {
+ const href = $(this).attr('href');
+ e.preventDefault();
+
+ AP.context.getToken(token => {
+ // eslint-disable-next-line no-jquery/no-ajax
+ $.ajax({
+ url: href,
+ method: 'DELETE',
+ data: {
+ jwt: token,
+ format: 'json',
+ },
+ })
+ .done(reqComplete)
+ .fail(err => reqFailed(err, 'Failed to remove namespace. Please try again.'));
+ });
+ });
+};
+
function initJiraConnect() {
const el = document.querySelector('.js-jira-connect-app');
+ initJiraFormHandlers();
+
return new Vue({
el,
+ data: {
+ state: store.state,
+ },
render(createElement) {
return createElement(App, {});
},