summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/integrations/edit/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/integrations/edit/index.js')
-rw-r--r--app/assets/javascripts/integrations/edit/index.js97
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);
},
});
};