Commit 8626255a authored by Dennis Tang's avatar Dennis Tang

move errors next to input fields

parent e144946e
...@@ -34,6 +34,7 @@ export default { ...@@ -34,6 +34,7 @@ export default {
isLoading: false, isLoading: false,
hasErrors: false, hasErrors: false,
searchQuery: '', searchQuery: '',
gapiError: '',
}; };
}, },
computed: { computed: {
...@@ -58,9 +59,13 @@ export default { ...@@ -58,9 +59,13 @@ export default {
this.isLoading = false; this.isLoading = false;
this.hasErrors = false; this.hasErrors = false;
}, },
fetchFailureHandler() { fetchFailureHandler(resp) {
this.isLoading = false; this.isLoading = false;
this.hasErrors = true; this.hasErrors = true;
if (resp.result && resp.result.error) {
this.gapiError = resp.result.error.message;
}
}, },
}, },
}; };
<script> <script>
import { s__ } from '~/locale'; import { sprintf, s__ } from '~/locale';
import { mapState, mapGetters, mapActions } from 'vuex'; import { mapState, mapGetters, mapActions } from 'vuex';
import gkeDropdownMixin from './gke_dropdown_mixin'; import gkeDropdownMixin from './gke_dropdown_mixin';
...@@ -34,6 +34,14 @@ export default { ...@@ -34,6 +34,14 @@ export default {
? s__('ClusterIntegration|Select zone to choose machine type') ? s__('ClusterIntegration|Select zone to choose machine type')
: s__('ClusterIntegration|Select machine type'); : s__('ClusterIntegration|Select machine type');
}, },
errorMessage() {
return sprintf(
s__(
'ClusterIntegration|An error occured while trying to fetch zone machine types: %{error}',
),
{ error: this.gapiError },
);
},
}, },
watch: { watch: {
selectedZone() { selectedZone() {
...@@ -64,6 +72,7 @@ export default { ...@@ -64,6 +72,7 @@ export default {
</script> </script>
<template> <template>
<div>
<div <div
class="js-gcp-machine-type-dropdown dropdown" class="js-gcp-machine-type-dropdown dropdown"
:class="{ 'gl-show-field-errors': hasErrors }" :class="{ 'gl-show-field-errors': hasErrors }"
...@@ -108,4 +117,12 @@ export default { ...@@ -108,4 +117,12 @@ export default {
</div> </div>
</div> </div>
</div> </div>
<span
class="help-block"
:class="{ 'gl-field-error': hasErrors }"
v-if="hasErrors"
>
{{ errorMessage }}
</span>
</div>
</template> </template>
...@@ -66,6 +66,12 @@ export default { ...@@ -66,6 +66,12 @@ export default {
false, false,
); );
}, },
errorMessage() {
return sprintf(
s__('ClusterIntegration|An error occured while trying to fetch your projects: %{error}'),
{ error: this.gapiError },
);
},
}, },
created() { created() {
this.isLoading = true; this.isLoading = true;
...@@ -146,7 +152,7 @@ export default { ...@@ -146,7 +152,7 @@ export default {
</div> </div>
<span <span
class="help-block" class="help-block"
:class="{ 'gl-field-error-message': hasErrors }" :class="{ 'gl-field-error': hasErrors }"
v-html="helpText" v-html="helpText"
></span> ></span>
</div> </div>
......
<script> <script>
import { s__ } from '~/locale'; import { sprintf, s__ } from '~/locale';
import { mapState, mapGetters, mapActions } from 'vuex'; import { mapState, mapGetters, mapActions } from 'vuex';
import gkeDropdownMixin from './gke_dropdown_mixin'; import gkeDropdownMixin from './gke_dropdown_mixin';
...@@ -8,7 +8,7 @@ export default { ...@@ -8,7 +8,7 @@ export default {
name: 'GkeZoneDropdown', name: 'GkeZoneDropdown',
mixins: [gkeDropdownMixin], mixins: [gkeDropdownMixin],
computed: { computed: {
...mapState(['selectedProject', 'selectedZone']), ...mapState(['selectedProject', 'selectedZone', 'projects']),
...mapState({ items: 'zones' }), ...mapState({ items: 'zones' }),
...mapGetters(['hasProject']), ...mapGetters(['hasProject']),
isDisabled() { isDisabled() {
...@@ -27,6 +27,12 @@ export default { ...@@ -27,6 +27,12 @@ export default {
? s__('ClusterIntegration|Select project to choose zone') ? s__('ClusterIntegration|Select project to choose zone')
: s__('ClusterIntegration|Select zone'); : s__('ClusterIntegration|Select zone');
}, },
errorMessage() {
return sprintf(
s__('ClusterIntegration|An error occured while trying to fetch project zones: %{error}'),
{ error: this.gapiError },
);
},
}, },
watch: { watch: {
selectedProject() { selectedProject() {
...@@ -45,6 +51,7 @@ export default { ...@@ -45,6 +51,7 @@ export default {
</script> </script>
<template> <template>
<div>
<div <div
class="js-gcp-zone-dropdown dropdown" class="js-gcp-zone-dropdown dropdown"
:class="{ 'gl-show-field-errors': hasErrors }" :class="{ 'gl-show-field-errors': hasErrors }"
...@@ -89,4 +96,12 @@ export default { ...@@ -89,4 +96,12 @@ export default {
</div> </div>
</div> </div>
</div> </div>
<span
class="help-block"
:class="{ 'gl-field-error': hasErrors }"
v-if="hasErrors"
>
{{ errorMessage }}
</span>
</div>
</template> </template>
/* global gapi */ /* global gapi */
import createFlash, { hideFlash } from '~/flash';
import { s__, sprintf } from '~/locale'; import { s__, sprintf } from '~/locale';
import * as types from './mutation_types'; import * as types from './mutation_types';
...@@ -16,21 +15,7 @@ export const setMachineType = ({ commit }, selectedMachineType) => { ...@@ -16,21 +15,7 @@ export const setMachineType = ({ commit }, selectedMachineType) => {
commit(types.SET_MACHINE_TYPE, selectedMachineType); commit(types.SET_MACHINE_TYPE, selectedMachineType);
}; };
const displayError = (resp, errorMessage) => { const gapiRequest = ({ service, params, commit, mutation, payloadKey }) =>
if (resp.result && resp.result.error) {
createFlash(sprintf(errorMessage, { error: resp.result.error.message }));
}
};
const hideError = () => {
const flashEl = document.querySelector('.flash-alert');
if (flashEl) {
hideFlash(flashEl);
}
};
const gapiRequest = ({ service, params, commit, mutation, payloadKey, errorMessage }) =>
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
const request = service.list(params); const request = service.list(params);
...@@ -38,15 +23,12 @@ const gapiRequest = ({ service, params, commit, mutation, payloadKey, errorMessa ...@@ -38,15 +23,12 @@ const gapiRequest = ({ service, params, commit, mutation, payloadKey, errorMessa
resp => { resp => {
const { result } = resp; const { result } = resp;
hideError();
commit(mutation, result[payloadKey]); commit(mutation, result[payloadKey]);
resolve(); resolve();
}, },
resp => { resp => {
displayError(resp, errorMessage); reject(resp);
reject();
}, },
); );
}); });
...@@ -58,9 +40,6 @@ export const getProjects = ({ commit }) => ...@@ -58,9 +40,6 @@ export const getProjects = ({ commit }) =>
commit, commit,
mutation: types.SET_PROJECTS, mutation: types.SET_PROJECTS,
payloadKey: 'projects', payloadKey: 'projects',
errorMessage: s__(
'ClusterIntegration|An error occured while trying to fetch your projects: %{error}',
),
}); });
export const getZones = ({ commit, state }) => export const getZones = ({ commit, state }) =>
...@@ -72,9 +51,6 @@ export const getZones = ({ commit, state }) => ...@@ -72,9 +51,6 @@ export const getZones = ({ commit, state }) =>
commit, commit,
mutation: types.SET_ZONES, mutation: types.SET_ZONES,
payloadKey: 'items', payloadKey: 'items',
errorMessage: s__(
'ClusterIntegration|An error occured while trying to fetch project zones: %{error}',
),
}); });
export const getMachineTypes = ({ commit, state }) => export const getMachineTypes = ({ commit, state }) =>
...@@ -87,9 +63,6 @@ export const getMachineTypes = ({ commit, state }) => ...@@ -87,9 +63,6 @@ export const getMachineTypes = ({ commit, state }) =>
commit, commit,
mutation: types.SET_MACHINE_TYPES, mutation: types.SET_MACHINE_TYPES,
payloadKey: 'items', payloadKey: 'items',
errorMessage: s__(
'ClusterIntegration|An error occured while trying to fetch zone machine types: %{error}',
),
}); });
// prevent babel-plugin-rewire from generating an invalid default during karma tests // prevent babel-plugin-rewire from generating an invalid default during karma tests
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment