From b16a070193978296be52957cb326c61d6238b670 Mon Sep 17 00:00:00 2001 From: Justin Ho Date: Wed, 17 Jun 2020 21:19:09 +0700 Subject: [PATCH 1/6] Add Vuex state to integration form Add state for override and overrideAvailable to disable all form fields --- .../javascripts/integrations/edit/index.js | 2 ++ .../integrations/edit/store/actions.js | 6 ++++++ .../integrations/edit/store/getters.js | 2 ++ .../integrations/edit/store/index.js | 17 +++++++++++++++++ .../integrations/edit/store/mutation_types.js | 2 ++ .../integrations/edit/store/mutations.js | 11 +++++++++++ .../integrations/edit/store/state.js | 4 ++++ 7 files changed, 44 insertions(+) create mode 100644 app/assets/javascripts/integrations/edit/store/actions.js create mode 100644 app/assets/javascripts/integrations/edit/store/getters.js create mode 100644 app/assets/javascripts/integrations/edit/store/index.js create mode 100644 app/assets/javascripts/integrations/edit/store/mutation_types.js create mode 100644 app/assets/javascripts/integrations/edit/store/mutations.js create mode 100644 app/assets/javascripts/integrations/edit/store/state.js diff --git a/app/assets/javascripts/integrations/edit/index.js b/app/assets/javascripts/integrations/edit/index.js index d35f11e43b3965..eda0efb558751a 100644 --- a/app/assets/javascripts/integrations/edit/index.js +++ b/app/assets/javascripts/integrations/edit/index.js @@ -1,4 +1,5 @@ import Vue from 'vue'; +import { createStore } from './store'; import { parseBoolean } from '~/lib/utils/common_utils'; import IntegrationForm from './components/integration_form.vue'; @@ -37,6 +38,7 @@ export default el => { return new Vue({ el, + store: createStore(), render(createElement) { return createElement(IntegrationForm, { props: { diff --git a/app/assets/javascripts/integrations/edit/store/actions.js b/app/assets/javascripts/integrations/edit/store/actions.js new file mode 100644 index 00000000000000..0ba69515e0ece9 --- /dev/null +++ b/app/assets/javascripts/integrations/edit/store/actions.js @@ -0,0 +1,6 @@ +import * as types from './mutation_types'; + +export const setOverride = ({ commit }, override) => commit(types.SET_OVERRIDE, override); + +export const setOverrideAvailable = ({ commit }, overrideAvailable) => + commit(types.SET_OVERRIDE_AVAILABLE, overrideAvailable); diff --git a/app/assets/javascripts/integrations/edit/store/getters.js b/app/assets/javascripts/integrations/edit/store/getters.js new file mode 100644 index 00000000000000..072d219e52813d --- /dev/null +++ b/app/assets/javascripts/integrations/edit/store/getters.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line import/prefer-default-export +export const disableForm = state => state.overrideAvailable && !state.override; diff --git a/app/assets/javascripts/integrations/edit/store/index.js b/app/assets/javascripts/integrations/edit/store/index.js new file mode 100644 index 00000000000000..b570f2495f6099 --- /dev/null +++ b/app/assets/javascripts/integrations/edit/store/index.js @@ -0,0 +1,17 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import * as actions from './actions'; +import * as getters from './getters'; +import mutations from './mutations'; +import state from './state'; + +Vue.use(Vuex); + +export const createStore = () => + new Vuex.Store({ + actions, + getters, + mutations, + state, + }); +export default createStore(); diff --git a/app/assets/javascripts/integrations/edit/store/mutation_types.js b/app/assets/javascripts/integrations/edit/store/mutation_types.js new file mode 100644 index 00000000000000..bb880a394893de --- /dev/null +++ b/app/assets/javascripts/integrations/edit/store/mutation_types.js @@ -0,0 +1,2 @@ +export const SET_OVERRIDE = 'SET_OVERRIDE'; +export const SET_OVERRIDE_AVAILABLE = 'SET_OVERRIDE_AVAILABLE'; diff --git a/app/assets/javascripts/integrations/edit/store/mutations.js b/app/assets/javascripts/integrations/edit/store/mutations.js new file mode 100644 index 00000000000000..fa71c60d37ef11 --- /dev/null +++ b/app/assets/javascripts/integrations/edit/store/mutations.js @@ -0,0 +1,11 @@ +import * as types from './mutation_types'; + +export default { + [types.SET_OVERRIDE](state, override) { + state.override = override; + }, + + [types.SET_OVERRIDE_AVAILABLE](state, overrideAvailable) { + state.overrideAvailable = overrideAvailable; + }, +}; diff --git a/app/assets/javascripts/integrations/edit/store/state.js b/app/assets/javascripts/integrations/edit/store/state.js new file mode 100644 index 00000000000000..0c92cd9f4498af --- /dev/null +++ b/app/assets/javascripts/integrations/edit/store/state.js @@ -0,0 +1,4 @@ +export default () => ({ + override: false, + overrideAvailable: true, // TODO: Should default to false and be passed from the backend +}); -- GitLab From 28d65da6f2698621f6a138ad773700c4340cafaa Mon Sep 17 00:00:00 2001 From: Justin Ho Date: Wed, 17 Jun 2020 21:21:07 +0700 Subject: [PATCH 2/6] Add OverrideDropdown to toggle state --- .../edit/components/integration_form.vue | 6 ++ .../edit/components/override_dropdown.vue | 56 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 app/assets/javascripts/integrations/edit/components/override_dropdown.vue diff --git a/app/assets/javascripts/integrations/edit/components/integration_form.vue b/app/assets/javascripts/integrations/edit/components/integration_form.vue index 12e2ce88b3cef0..88aedc421749e9 100644 --- a/app/assets/javascripts/integrations/edit/components/integration_form.vue +++ b/app/assets/javascripts/integrations/edit/components/integration_form.vue @@ -1,5 +1,8 @@ + + -- GitLab From a33369530ab2b6d488fb433a988219faadba7303 Mon Sep 17 00:00:00 2001 From: Justin Ho Date: Wed, 17 Jun 2020 21:24:18 +0700 Subject: [PATCH 3/6] Disable form fields when not overriding Apply to all form components --- .../edit/components/active_toggle.vue | 5 +++++ .../edit/components/dynamic_field.vue | 3 +++ .../edit/components/jira_trigger_fields.vue | 21 ++++++++++++++++--- .../edit/components/trigger_fields.vue | 9 +++++++- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/integrations/edit/components/active_toggle.vue b/app/assets/javascripts/integrations/edit/components/active_toggle.vue index dc89e139320917..ffb5f7cf2e7516 100644 --- a/app/assets/javascripts/integrations/edit/components/active_toggle.vue +++ b/app/assets/javascripts/integrations/edit/components/active_toggle.vue @@ -1,4 +1,5 @@ diff --git a/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue b/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue index 71ce9fe104ada5..5444cd5a7121bd 100644 --- a/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue +++ b/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue @@ -89,8 +89,8 @@ export default { }}