diff options
Diffstat (limited to 'app/assets/javascripts/integrations/edit/index.js')
-rw-r--r-- | app/assets/javascripts/integrations/edit/index.js | 97 |
1 files changed, 67 insertions, 30 deletions
diff --git a/app/assets/javascripts/integrations/edit/index.js b/app/assets/javascripts/integrations/edit/index.js index 21b5ca17951..ea5463832ce 100644 --- a/app/assets/javascripts/integrations/edit/index.js +++ b/app/assets/javascripts/integrations/edit/index.js @@ -1,49 +1,86 @@ import Vue from 'vue'; +import { createStore } from './store'; import { parseBoolean } from '~/lib/utils/common_utils'; import IntegrationForm from './components/integration_form.vue'; -export default el => { - if (!el) { - return null; - } - - function parseBooleanInData(data) { - const result = {}; - Object.entries(data).forEach(([key, value]) => { - result[key] = parseBoolean(value); - }); - return result; - } +function parseBooleanInData(data) { + const result = {}; + Object.entries(data).forEach(([key, value]) => { + result[key] = parseBoolean(value); + }); + return result; +} - const { type, commentDetail, triggerEvents, fields, ...booleanAttributes } = el.dataset; +function parseDatasetToProps(data) { + const { + id, + type, + commentDetail, + projectKey, + upgradePlanPath, + editProjectPath, + triggerEvents, + fields, + inheritFromId, + ...booleanAttributes + } = data; const { showActive, activated, commitEvents, mergeRequestEvents, enableComments, + showJiraIssuesIntegration, + enableJiraIssues, } = parseBooleanInData(booleanAttributes); + return { + activeToggleProps: { + initialActivated: activated, + }, + showActive, + type, + triggerFieldsProps: { + initialTriggerCommit: commitEvents, + initialTriggerMergeRequest: mergeRequestEvents, + initialEnableComments: enableComments, + initialCommentDetail: commentDetail, + }, + jiraIssuesProps: { + showJiraIssuesIntegration, + initialEnableJiraIssues: enableJiraIssues, + initialProjectKey: projectKey, + upgradePlanPath, + editProjectPath, + }, + triggerEvents: JSON.parse(triggerEvents), + fields: JSON.parse(fields), + inheritFromId: parseInt(inheritFromId, 10), + id: parseInt(id, 10), + }; +} + +export default (el, adminEl) => { + if (!el) { + return null; + } + + const props = parseDatasetToProps(el.dataset); + + const initialState = { + adminState: null, + customState: props, + }; + + if (adminEl) { + initialState.adminState = Object.freeze(parseDatasetToProps(adminEl.dataset)); + } + return new Vue({ el, + store: createStore(initialState), render(createElement) { - return createElement(IntegrationForm, { - props: { - activeToggleProps: { - initialActivated: activated, - }, - showActive, - type, - triggerFieldsProps: { - initialTriggerCommit: commitEvents, - initialTriggerMergeRequest: mergeRequestEvents, - initialEnableComments: enableComments, - initialCommentDetail: commentDetail, - }, - triggerEvents: JSON.parse(triggerEvents), - fields: JSON.parse(fields), - }, - }); + return createElement(IntegrationForm); }, }); }; |