<template>
    <div class="relative mt-1" :classes="classes">
        <label :for="name" class="pb-1">{{ label }}</label>
        <input :id="name" :type="type" :placeholder="placeholder" v-model="value" @input="updateField()" :class="errorClassObject()">
        <p class="text-alert m-0" v-text="errorMessage()">Error Here</p>
    </div>
</template>

<script>

    export default {
        name: "InputField",
        props: {
            name: {
                type: String,
                required: true
            },
            type: {
                type: String,
                default: 'text'
            },
            label:  String,
            placeholder: String,
            required: {
                type: Boolean,
                default: false
            },
            errors: Object,
            data: String,
            classes: String,
        },
        data: function () {
            return {
                value: ''
            }
        },
        computed: {
            hasError: function () {
                return this.required && this.errors && this.errors[this.name] && this.errors[this.name].length > 0
            }
        },
        methods: {
            updateField: function () {
                this.clearErrors(this.name);
                this.$emit('update:field', this.value)
            },
            errorMessage: function () {
                if (this.hasError) {
                    return this.errors[this.name][0]
                }
            },
            clearErrors: function () {
                if (this.hasError) {
                    this.errors[this.name] = null
                }
            },
            errorClassObject: function () {
                return {
                    'error-field': this.hasError
                }
            }
        },
        watch: {
            data: function (val) {
                this.value = val
            }
        }
    }
</script>
