diff options
Diffstat (limited to 'app/assets/javascripts/jira_connect/index.js')
-rw-r--r-- | app/assets/javascripts/jira_connect/index.js | 74 |
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, {}); }, |