diff --git a/pinry-spa/src/components/BoardEdit.vue b/pinry-spa/src/components/BoardEdit.vue index 1ac9eba..20ba119 100644 --- a/pinry-spa/src/components/BoardEdit.vue +++ b/pinry-spa/src/components/BoardEdit.vue @@ -3,27 +3,48 @@
@@ -39,23 +60,61 @@ const fields = ['name']; export default { name: 'BoardEditModal', data() { - const model = ModelForm.fromFields(fields); + const createModel = ModelForm.fromFields(fields); + const editModel = ModelForm.fromFields(fields); return { - form: model.form, - helper: model, + UIMeta: { + title: 'Board Create', + }, + createModel, + editModel, }; }, + props: { + isEdit: { + type: Boolean, + default: false, + }, + board: { + type: Object, + default() { + return {}; + }, + }, + }, + created() { + if (this.isEdit) { + this.UIMeta.title = 'Board Edit'; + this.editModel.assignToForm(this.board); + } + }, methods: { + saveBoardChanges() { + const self = this; + const promise = API.Board.saveChanges( + this.board.id, + this.editModel.asData(), + ); + promise.then( + (resp) => { + self.$emit('boardSaved', resp); + self.$parent.close(); + }, + (resp) => { + self.editModel.markFieldsAsDanger(resp.data); + }, + ); + }, createBoard() { const self = this; - const promise = API.Board.create(this.form.name.value); + const promise = API.Board.create(this.createModel.form.name.value); promise.then( (resp) => { self.$emit('boardCreated', resp); self.$parent.close(); }, (resp) => { - self.helper.markFieldsAsDanger(resp.data); + self.createModel.markFieldsAsDanger(resp.data); }, ); }, diff --git a/pinry-spa/src/components/Boards.vue b/pinry-spa/src/components/Boards.vue index a2dab1b..a309e70 100644 --- a/pinry-spa/src/components/Boards.vue +++ b/pinry-spa/src/components/Boards.vue @@ -24,6 +24,7 @@ v-show="shouldShowEdit(item.id)" :board="item" v-on:board-delete-succeed="reset" + v-on:board-save-succeed="reset" > - + import API from '../api'; +import modals from '../modals'; + export default { name: 'BoardEditor', @@ -33,6 +35,16 @@ export default { }, }, methods: { + onBoardSaved() { + this.$emit('board-save-succeed'); + }, + editBoard() { + modals.openBoardEdit( + this, + this.board, + this.onBoardSaved, + ); + }, deleteBoard() { this.$buefy.dialog.confirm({ message: 'Delete this Board?', diff --git a/pinry-spa/src/components/modals.js b/pinry-spa/src/components/modals.js index 3e8c7e2..36d2898 100644 --- a/pinry-spa/src/components/modals.js +++ b/pinry-spa/src/components/modals.js @@ -28,6 +28,23 @@ function openBoardCreate(vm) { ); } +function openBoardEdit(vm, board, onSaved) { + vm.$buefy.modal.open( + { + parent: vm, + component: BoardEdit, + props: { + board, + isEdit: true, + }, + events: { + boardSaved: onSaved, + }, + hasModalCard: true, + }, + ); +} + function openLogin(vm, onSucceed) { vm.$buefy.modal.open({ parent: vm, @@ -52,6 +69,7 @@ function openSignUp(vm, onSignUpSucceed) { export default { openBoardCreate, + openBoardEdit, openPinCreate, openLogin, openSignUp, diff --git a/pinry-spa/src/components/utils/ModelForm.js b/pinry-spa/src/components/utils/ModelForm.js index 38e3b19..43da7ed 100644 --- a/pinry-spa/src/components/utils/ModelForm.js +++ b/pinry-spa/src/components/utils/ModelForm.js @@ -24,8 +24,8 @@ function FormHelper(form, fields = []) { self[fieldName].error = errorMsg; self[fieldName].type = 'is-danger'; } - function markFieldsAsDanger(errorRespObjecct) { - Object.entries(errorRespObjecct).forEach( + function markFieldsAsDanger(errorRespObject) { + Object.entries(errorRespObject).forEach( (errorTuple) => { const [key, error] = errorTuple; let msg; @@ -38,6 +38,26 @@ function FormHelper(form, fields = []) { }, ); } + function asData() { + const data = {}; + Object.entries(form).forEach( + (formField) => { + const [name, value] = formField; + data[name] = value.value; + }, + ); + return data; + } + function assignToForm(data) { + Object.entries(data).forEach( + (dataField) => { + const [key, value] = dataField; + if (key in self) { + self[key].value = value; + } + }, + ); + } function resetAllFields() { fields.forEach( (fieldName) => { @@ -46,11 +66,13 @@ function FormHelper(form, fields = []) { ); } return { - form, + form: self, fields, markFieldsAsDanger, markFieldAsDanger, resetField, + asData, + assignToForm, resetAllFields, }; }