Disable inline submit button when title is blank

[ci skip]
This commit is contained in:
Phil Hughes 2017-05-16 13:07:38 +01:00
parent 5f2b142b66
commit e713c68aa7
3 changed files with 32 additions and 2 deletions

View file

@ -7,6 +7,10 @@
type: Boolean, type: Boolean,
required: true, required: true,
}, },
formState: {
type: Object,
required: true,
},
}, },
data() { data() {
return { return {
@ -14,6 +18,11 @@
updateLoading: false, updateLoading: false,
}; };
}, },
computed: {
isSubmitEnabled() {
return this.formState.title.trim() !== '';
},
},
methods: { methods: {
updateIssuable() { updateIssuable() {
this.updateLoading = true; this.updateLoading = true;
@ -38,9 +47,9 @@
<div class="prepend-top-default append-bottom-default clearfix"> <div class="prepend-top-default append-bottom-default clearfix">
<button <button
class="btn btn-save pull-left" class="btn btn-save pull-left"
:class="{ disabled: updateLoading }" :class="{ disabled: updateLoading || !isSubmitEnabled }"
type="submit" type="submit"
:disabled="updateLoading" :disabled="updateLoading || !isSubmitEnabled"
@click="updateIssuable"> @click="updateIssuable">
Save changes Save changes
<i <i

View file

@ -25,6 +25,7 @@
<title-field <title-field
:form-state="formState" /> :form-state="formState" />
<edit-actions <edit-actions
:form-state="formState"
:can-destroy="canDestroy" /> :can-destroy="canDestroy" />
</form> </form>
</template> </template>

View file

@ -1,18 +1,26 @@
import Vue from 'vue'; import Vue from 'vue';
import editActions from '~/issue_show/components/edit_actions.vue'; import editActions from '~/issue_show/components/edit_actions.vue';
import eventHub from '~/issue_show/event_hub'; import eventHub from '~/issue_show/event_hub';
import Store from '~/issue_show/stores';
describe('Edit Actions components', () => { describe('Edit Actions components', () => {
let vm; let vm;
beforeEach((done) => { beforeEach((done) => {
const Component = Vue.extend(editActions); const Component = Vue.extend(editActions);
const store = new Store({
titleHtml: '',
descriptionHtml: '',
issuableRef: '',
});
store.formState.title = 'test';
spyOn(eventHub, '$emit'); spyOn(eventHub, '$emit');
vm = new Component({ vm = new Component({
propsData: { propsData: {
canDestroy: true, canDestroy: true,
formState: store.formState,
}, },
}).$mount(); }).$mount();
@ -41,6 +49,18 @@ describe('Edit Actions components', () => {
}); });
}); });
it('disables submit button when title is blank', (done) => {
vm.formState.title = '';
Vue.nextTick(() => {
expect(
vm.$el.querySelector('.btn-save').getAttribute('disabled'),
).toBe('disabled');
done();
});
});
describe('updateIssuable', () => { describe('updateIssuable', () => {
it('sends update.issauble event when clicking save button', () => { it('sends update.issauble event when clicking save button', () => {
vm.$el.querySelector('.btn-save').click(); vm.$el.querySelector('.btn-save').click();