mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-20 08:22:17 +00:00
Remove textarea+ & Form.send()
Add $clearValidationForName()
This commit is contained in:
@@ -9,7 +9,8 @@ export default {
|
||||
$registerToForm: component => {
|
||||
if (this.inputs.indexOf(component) < 0)
|
||||
this.inputs.push(component);
|
||||
}
|
||||
},
|
||||
$clearValidationForName: this.clearValidationForName
|
||||
};
|
||||
},
|
||||
props: {
|
||||
@@ -110,48 +111,9 @@ export default {
|
||||
clearValidation() {
|
||||
this.inputs.forEach(input => input.clearValidation());
|
||||
},
|
||||
send(promise) {
|
||||
return new Promise((resolve, reject) => {
|
||||
promise.then(result => {
|
||||
if (result?.status == 200 && result.data) {
|
||||
if (typeof result.data !== 'object' || !result.data.hasOwnProperty('retval'))
|
||||
// TODO(chris): IMPLEMENT! Error in API
|
||||
return reject(result);
|
||||
if (result.data.error)
|
||||
// TODO(chris): IMPLEMENT! Error in API
|
||||
return reject(result);
|
||||
const data = result.data.retval;
|
||||
// TODO(chris): check for something better/add new standardized return value
|
||||
if (result.data.code == 1)
|
||||
this.setFeedback(true, data);
|
||||
return resolve(data);
|
||||
}
|
||||
// TODO(chris): IMPLEMENT! Wrong result object
|
||||
reject(result);
|
||||
}).catch(result => {
|
||||
if (result?.response?.status == 400 && result.response.data) {
|
||||
if (typeof result.response.data !== 'object' || !result.response.data.hasOwnProperty('retval'))
|
||||
// TODO(chris): IMPLEMENT! Error in API
|
||||
return reject(result);
|
||||
this.clearValidation();
|
||||
const remaining = this.setFeedback(
|
||||
false,
|
||||
result.response.data.retval
|
||||
);
|
||||
if (remaining) {
|
||||
result.response.data.retval = remaining;
|
||||
return reject(result);
|
||||
}
|
||||
} else if (result?.response?.status == 500) {
|
||||
if (this.$fhcAlert)
|
||||
this.$fhcAlert.handleSystemError(result);
|
||||
else
|
||||
return reject(result);
|
||||
} else {
|
||||
return reject(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
clearValidationForName(name) {
|
||||
(this.sortedInputs[name.split('.')[0] + name.split('.').slice(1).map(p => `[${p}]`).join("")] || this.sortedInputs['_default'] || [])
|
||||
.forEach(input => input.clearValidation());
|
||||
}
|
||||
},
|
||||
template: `
|
||||
|
||||
@@ -8,7 +8,8 @@ export default {
|
||||
FhcFragment
|
||||
},
|
||||
inject: [
|
||||
'$registerToForm'
|
||||
'$registerToForm',
|
||||
'$clearValidationForName'
|
||||
],
|
||||
props: {
|
||||
bsFeedback: Boolean,
|
||||
@@ -126,7 +127,6 @@ export default {
|
||||
case 'number':
|
||||
case 'password':
|
||||
case 'textarea':
|
||||
case 'textarea+':
|
||||
if (!c.includes('form-control'))
|
||||
classes.push('form-control');
|
||||
break;
|
||||
@@ -180,6 +180,9 @@ export default {
|
||||
this.valid = undefined;
|
||||
this.feedback = [];
|
||||
},
|
||||
clearValidationForThisName() {
|
||||
this.$clearValidationForName(this.name);
|
||||
},
|
||||
setFeedback(valid, feedback) {
|
||||
if (!feedback)
|
||||
feedback = [];
|
||||
@@ -213,9 +216,9 @@ export default {
|
||||
template: `
|
||||
<component :is="!hasContainer ? 'FhcFragment' : 'div'" class="position-relative" :class="autoContainerClass">
|
||||
<label v-if="$attrs.label && lcType != 'radio' && lcType != 'checkbox'" :for="idCmp">{{$attrs.label}}</label>
|
||||
<input v-if="tag == 'input'" :type="lcType" ref="input" v-model="modelValueCmp" v-bind="$attrs" :id="idCmp" :name="name" :class="validationClass" :modelValue="undefined" @input="clearValidation(); $emit('input', $event)">
|
||||
<textarea v-else-if="tag == 'textarea'" ref="input" v-model="modelValueCmp" v-bind="$attrs" :id="idCmp" :name="name" :class="validationClass" :modelValue="undefined" @input="clearValidation(); $emit('input', $event)"></textarea>
|
||||
<select v-else-if="tag == 'select'" ref="input" v-model="modelValueCmp" v-bind="$attrs" :id="idCmp" :name="name" :class="validationClass" :modelValue="undefined" @input="clearValidation(); $emit('input', $event)">
|
||||
<input v-if="tag == 'input'" :type="lcType" ref="input" v-model="modelValueCmp" v-bind="$attrs" :id="idCmp" :name="name" :class="validationClass" :modelValue="undefined" @input="clearValidationForThisName(); $emit('input', $event)">
|
||||
<textarea v-else-if="tag == 'textarea'" ref="input" v-model="modelValueCmp" v-bind="$attrs" :id="idCmp" :name="name" :class="validationClass" :modelValue="undefined" @input="clearValidationForThisName(); $emit('input', $event)"></textarea>
|
||||
<select v-else-if="tag == 'select'" ref="input" v-model="modelValueCmp" v-bind="$attrs" :id="idCmp" :name="name" :class="validationClass" :modelValue="undefined" @input="clearValidationForThisName(); $emit('input', $event)">
|
||||
<slot></slot>
|
||||
</select>
|
||||
<component
|
||||
@@ -230,7 +233,7 @@ export default {
|
||||
:class="validationClass"
|
||||
:input-class-name=
|
||||
"[...Object.entries({'form-control': !noAutoClass, 'is-valid': valid === true, 'is-invalid': valid === false}).reduce((a,[k,v]) => {if(v) a.push(k);return a}, []), ...($attrs['input-class-name'] ? $attrs['input-class-name'].split(' ') : [])].join(' ')"
|
||||
@update:model-value="clearValidation"
|
||||
@update:model-value="clearValidationForThisName"
|
||||
>
|
||||
<slot></slot>
|
||||
</component>
|
||||
@@ -245,7 +248,7 @@ export default {
|
||||
:input-props="{name}"
|
||||
:class="validationClass"
|
||||
:input-class="[...Object.entries({'form-control': !noAutoClass, 'is-valid': valid === true, 'is-invalid': valid === false}).reduce((a,[k,v]) => {if(v) a.push(k);return a}, []), ...($attrs['input-class'] ? $attrs['input-class'].split(' ') : [])].join(' ')"
|
||||
@update:model-value="clearValidation"
|
||||
@update:model-value="clearValidationForThisName"
|
||||
>
|
||||
<slot></slot>
|
||||
</component>
|
||||
@@ -261,7 +264,7 @@ export default {
|
||||
:class="validationClass"
|
||||
:input-class="validationClass"
|
||||
:no-list="inputGroup"
|
||||
@update:model-value="clearValidation"
|
||||
@update:model-value="clearValidationForThisName"
|
||||
>
|
||||
<slot></slot>
|
||||
</component>
|
||||
@@ -275,12 +278,11 @@ export default {
|
||||
:id="idCmp"
|
||||
:name="name"
|
||||
:class="validationClass"
|
||||
@update:model-value="clearValidation"
|
||||
@update:model-value="clearValidationForThisName"
|
||||
>
|
||||
<slot></slot>
|
||||
</component>
|
||||
<label v-if="$attrs.label && (lcType == 'radio' || lcType == 'checkbox')" :for="idCmp" :class="!noAutoClass && 'form-check-label'">{{$attrs.label}}</label>
|
||||
<div v-if="lcType == 'textarea' && $attrs.maxlength" class="form-text text-end">{{ modelValueCmp?.length || 0 }} / {{ $attrs.maxlength }}</div>
|
||||
<div v-if="valid !== undefined && feedback.length && !noFeedback" :class="feedbackClass">
|
||||
<template v-for="(msg, i) in feedback" :key="i">
|
||||
<hr v-if="i" class="m-0">
|
||||
|
||||
Reference in New Issue
Block a user