mirror of
https://github.com/pinry/pinry.git
synced 2025-11-18 02:40:40 +01:00
Refactor: Use ModelForm instead of copy-and-paste
This commit is contained in:
committed by
Isaac Bythewood
parent
c1cff2ecb6
commit
bd6960fcf1
@@ -32,14 +32,14 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import API from './api';
|
import API from './api';
|
||||||
import formUtils from './utils/form';
|
import ModelForm from './utils/ModelForm';
|
||||||
|
|
||||||
const fields = ['name'];
|
const fields = ['name'];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'BoardEditModal',
|
name: 'BoardEditModal',
|
||||||
data() {
|
data() {
|
||||||
const model = formUtils.fromFields(fields);
|
const model = ModelForm.fromFields(fields);
|
||||||
return {
|
return {
|
||||||
form: model.form,
|
form: model.form,
|
||||||
helper: model,
|
helper: model,
|
||||||
@@ -55,18 +55,7 @@ export default {
|
|||||||
self.$parent.close();
|
self.$parent.close();
|
||||||
},
|
},
|
||||||
(resp) => {
|
(resp) => {
|
||||||
Object.entries(resp.data).forEach(
|
self.helper.markFieldsAsDanger(resp.data);
|
||||||
(errorTuple) => {
|
|
||||||
const [key, error] = errorTuple;
|
|
||||||
let msg;
|
|
||||||
if (Array.isArray(error)) {
|
|
||||||
[msg] = error;
|
|
||||||
} else {
|
|
||||||
msg = error;
|
|
||||||
}
|
|
||||||
this.helper.markFieldAsDanger(key, msg);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
</header>
|
</header>
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
<b-field label="Username"
|
<b-field label="Username"
|
||||||
:type="username.type"
|
:type="form.username.type"
|
||||||
:message="username.error">
|
:message="form.username.error">
|
||||||
<b-input
|
<b-input
|
||||||
type="string"
|
type="string"
|
||||||
v-model="username.value"
|
v-model="form.username.value"
|
||||||
placeholder="Your Username"
|
placeholder="Your Username"
|
||||||
maxlength="30"
|
maxlength="30"
|
||||||
required>
|
required>
|
||||||
@@ -19,11 +19,11 @@
|
|||||||
</b-field>
|
</b-field>
|
||||||
|
|
||||||
<b-field label="Password"
|
<b-field label="Password"
|
||||||
:type="password.type"
|
:type="form.password.type"
|
||||||
:message="password.error">
|
:message="form.password.error">
|
||||||
<b-input
|
<b-input
|
||||||
type="password"
|
type="password"
|
||||||
v-model="password.value"
|
v-model="form.password.value"
|
||||||
password-reveal
|
password-reveal
|
||||||
placeholder="Your password"
|
placeholder="Your password"
|
||||||
required>
|
required>
|
||||||
@@ -43,36 +43,34 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import api from './api';
|
import api from './api';
|
||||||
import form from './utils/form';
|
import ModelForm from './utils/ModelForm';
|
||||||
|
|
||||||
const fields = ['username', 'password'];
|
const fields = ['username', 'password'];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'LoginForm',
|
name: 'LoginForm',
|
||||||
data() {
|
data() {
|
||||||
return form.createFormModel(fields);
|
const model = ModelForm.fromFields(fields);
|
||||||
|
return {
|
||||||
|
form: model.form,
|
||||||
|
helper: model,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
resetStatus() {
|
|
||||||
form.FormHelper(this, fields).resetAllFields();
|
|
||||||
},
|
|
||||||
doLogin() {
|
doLogin() {
|
||||||
this.resetStatus();
|
this.helper.resetAllFields();
|
||||||
const self = this;
|
const self = this;
|
||||||
const promise = api.User.logIn(self.username.value, self.password.value);
|
const promise = api.User.logIn(
|
||||||
const helper = form.FormHelper(self);
|
self.form.username.value,
|
||||||
|
self.form.password.value,
|
||||||
|
);
|
||||||
promise.then(
|
promise.then(
|
||||||
(user) => {
|
(user) => {
|
||||||
self.$emit('login.succeed', user);
|
self.$emit('login.succeed', user);
|
||||||
self.$parent.close();
|
self.$parent.close();
|
||||||
},
|
},
|
||||||
(resp) => {
|
(resp) => {
|
||||||
if (resp.data.username) {
|
self.helper.markFieldsAsDanger(resp.data);
|
||||||
helper.markFieldAsDanger('username', resp.data.username);
|
|
||||||
}
|
|
||||||
if (resp.data.password) {
|
|
||||||
helper.markFieldAsDanger('password', resp.data.password);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,11 +7,11 @@
|
|||||||
</header>
|
</header>
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
<b-field label="Username"
|
<b-field label="Username"
|
||||||
:type="username.type"
|
:type="form.username.type"
|
||||||
:message="username.error">
|
:message="form.username.error">
|
||||||
<b-input
|
<b-input
|
||||||
type="string"
|
type="string"
|
||||||
v-model="username.value"
|
v-model="form.username.value"
|
||||||
placeholder="Your Username"
|
placeholder="Your Username"
|
||||||
maxlength="30"
|
maxlength="30"
|
||||||
required>
|
required>
|
||||||
@@ -19,33 +19,33 @@
|
|||||||
</b-field>
|
</b-field>
|
||||||
|
|
||||||
<b-field label="Email"
|
<b-field label="Email"
|
||||||
:type="email.type"
|
:type="form.email.type"
|
||||||
:message="email.error">
|
:message="form.email.error">
|
||||||
<b-input
|
<b-input
|
||||||
type="email"
|
type="email"
|
||||||
v-model="email.value"
|
v-model="form.email.value"
|
||||||
password-reveal
|
password-reveal
|
||||||
placeholder="Your email"
|
placeholder="Your email"
|
||||||
required>
|
required>
|
||||||
</b-input>
|
</b-input>
|
||||||
</b-field>
|
</b-field>
|
||||||
<b-field label="Password"
|
<b-field label="Password"
|
||||||
:type="password.type"
|
:type="form.password.type"
|
||||||
:message="password.error">
|
:message="form.password.error">
|
||||||
<b-input
|
<b-input
|
||||||
type="password"
|
type="password"
|
||||||
v-model="password.value"
|
v-model="form.password.value"
|
||||||
password-reveal
|
password-reveal
|
||||||
placeholder="Your password"
|
placeholder="Your password"
|
||||||
required>
|
required>
|
||||||
</b-input>
|
</b-input>
|
||||||
</b-field>
|
</b-field>
|
||||||
<b-field label="Password repeat"
|
<b-field label="Password repeat"
|
||||||
:type="password_repeat.type"
|
:type="form.password_repeat.type"
|
||||||
:message="password_repeat.error">
|
:message="form.password_repeat.error">
|
||||||
<b-input
|
<b-input
|
||||||
type="password"
|
type="password"
|
||||||
v-model="password_repeat.value"
|
v-model="form.password_repeat.value"
|
||||||
password-reveal
|
password-reveal
|
||||||
placeholder="Your password again"
|
placeholder="Your password again"
|
||||||
required>
|
required>
|
||||||
@@ -65,56 +65,33 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import api from './api';
|
import api from './api';
|
||||||
|
import ModelForm from './utils/ModelForm';
|
||||||
|
|
||||||
|
const fields = [
|
||||||
|
'username',
|
||||||
|
'email',
|
||||||
|
'password',
|
||||||
|
'password_repeat',
|
||||||
|
];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SignUpForm',
|
name: 'SignUpForm',
|
||||||
data() {
|
data() {
|
||||||
|
const model = ModelForm.fromFields(fields);
|
||||||
return {
|
return {
|
||||||
username: {
|
form: model.form,
|
||||||
value: null,
|
helper: model,
|
||||||
error: null,
|
|
||||||
type: null,
|
|
||||||
},
|
|
||||||
email: {
|
|
||||||
value: null,
|
|
||||||
error: null,
|
|
||||||
type: null,
|
|
||||||
},
|
|
||||||
password: {
|
|
||||||
value: null,
|
|
||||||
error: null,
|
|
||||||
type: null,
|
|
||||||
},
|
|
||||||
password_repeat: {
|
|
||||||
value: null,
|
|
||||||
error: null,
|
|
||||||
type: null,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
resetStatus() {
|
|
||||||
this.resetField('username');
|
|
||||||
this.resetField('email');
|
|
||||||
this.resetField('password');
|
|
||||||
this.resetField('password_repeat');
|
|
||||||
},
|
|
||||||
resetField(fieldName) {
|
|
||||||
this[fieldName].type = 'is-info';
|
|
||||||
this[fieldName].error = null;
|
|
||||||
},
|
|
||||||
markFieldAsDanger(fieldName, errorMsg) {
|
|
||||||
this[fieldName].error = errorMsg;
|
|
||||||
this[fieldName].type = 'is-danger';
|
|
||||||
},
|
|
||||||
doRegister() {
|
doRegister() {
|
||||||
this.resetStatus();
|
this.helper.resetAllFields();
|
||||||
const self = this;
|
const self = this;
|
||||||
const promise = api.User.signUp(
|
const promise = api.User.signUp(
|
||||||
self.username.value,
|
self.form.username.value,
|
||||||
self.email.value,
|
self.form.email.value,
|
||||||
self.password.value,
|
self.form.password.value,
|
||||||
self.password_repeat.value,
|
self.form.password_repeat.value,
|
||||||
);
|
);
|
||||||
promise.then(
|
promise.then(
|
||||||
(user) => {
|
(user) => {
|
||||||
@@ -122,18 +99,7 @@ export default {
|
|||||||
self.$parent.close();
|
self.$parent.close();
|
||||||
},
|
},
|
||||||
(resp) => {
|
(resp) => {
|
||||||
Object.entries(resp.data).forEach(
|
self.helper.markFieldsAsDanger(resp.data);
|
||||||
(errorTuple) => {
|
|
||||||
const [key, error] = errorTuple;
|
|
||||||
let msg;
|
|
||||||
if (Array.isArray(error)) {
|
|
||||||
[msg] = error;
|
|
||||||
} else {
|
|
||||||
msg = error;
|
|
||||||
}
|
|
||||||
this.markFieldAsDanger(key, msg);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -76,25 +76,25 @@
|
|||||||
import API from '../api';
|
import API from '../api';
|
||||||
import FileUpload from './FileUpload.vue';
|
import FileUpload from './FileUpload.vue';
|
||||||
import bus from '../utils/bus';
|
import bus from '../utils/bus';
|
||||||
|
import ModelForm from '../utils/ModelForm';
|
||||||
|
|
||||||
function isURLBlank(url) {
|
function isURLBlank(url) {
|
||||||
return url !== null && url !== '';
|
return url !== null && url !== '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const fields = ['url', 'referer', 'description', 'tags'];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'PinCreateModal',
|
name: 'PinCreateModal',
|
||||||
components: {
|
components: {
|
||||||
FileUpload,
|
FileUpload,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
const form = ModelForm.createFormModel(fields);
|
||||||
|
form.tags.value = [];
|
||||||
return {
|
return {
|
||||||
disableUrlField: false,
|
disableUrlField: false,
|
||||||
form: {
|
form,
|
||||||
url: { value: null, error: null, type: null },
|
|
||||||
referer: { value: null, error: null, type: null },
|
|
||||||
description: { value: null, error: null, type: null },
|
|
||||||
tags: { value: [], error: null, type: null },
|
|
||||||
},
|
|
||||||
formUpload: {
|
formUpload: {
|
||||||
imageId: null,
|
imageId: null,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -24,6 +24,20 @@ function FormHelper(form, fields = []) {
|
|||||||
self[fieldName].error = errorMsg;
|
self[fieldName].error = errorMsg;
|
||||||
self[fieldName].type = 'is-danger';
|
self[fieldName].type = 'is-danger';
|
||||||
}
|
}
|
||||||
|
function markFieldsAsDanger(errorRespObjecct) {
|
||||||
|
Object.entries(errorRespObjecct).forEach(
|
||||||
|
(errorTuple) => {
|
||||||
|
const [key, error] = errorTuple;
|
||||||
|
let msg;
|
||||||
|
if (Array.isArray(error)) {
|
||||||
|
[msg] = error;
|
||||||
|
} else {
|
||||||
|
msg = error;
|
||||||
|
}
|
||||||
|
markFieldAsDanger(key, msg);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
function resetAllFields() {
|
function resetAllFields() {
|
||||||
fields.forEach(
|
fields.forEach(
|
||||||
(fieldName) => {
|
(fieldName) => {
|
||||||
@@ -34,6 +48,7 @@ function FormHelper(form, fields = []) {
|
|||||||
return {
|
return {
|
||||||
form,
|
form,
|
||||||
fields,
|
fields,
|
||||||
|
markFieldsAsDanger,
|
||||||
markFieldAsDanger,
|
markFieldAsDanger,
|
||||||
resetField,
|
resetField,
|
||||||
resetAllFields,
|
resetAllFields,
|
||||||
Reference in New Issue
Block a user