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,
};
}