voyager-admin/voyager

View on GitHub
resources/assets/components/Formfields/Slider/Builder.vue

Summary

Maintainability
Test Coverage
<template>
    <div v-if="action == 'view-options'">
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::generic.min') }}</label>
            <input type="number" class="input w-full" v-model.number="options.min">
        </div>
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::generic.max') }}</label>
            <input type="number" class="input w-full" v-model.number="options.max">
        </div>
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::generic.step') }}</label>
            <input type="number" class="input w-full" v-model.number="options.step">
        </div>
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::formfields.slider.range') }}</label>
            <input type="checkbox" class="input w-full" v-model="options.range">
        </div>
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::formfields.slider.distance') }}</label>
            <input type="number" class="input w-full" v-model.number="options.distance" :disabled="!options.range">
        </div>
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::formfields.slider.show_inputs') }}</label>
            <input type="checkbox" class="input w-full" v-model="options.inputs">
        </div>
        <div class="input-group mt-2">
            <label class="label">{{ __('voyager::generic.color') }}</label>
            <ColorPicker v-model="options.color"></ColorPicker>
        </div>
    </div>
    <div v-else-if="action == 'view'">
        <Slider
            class="my-2"
            :inputs="options.inputs"
            :range="options.range"
            :min="options.min"
            :max="options.max"
            :step="options.step"
            :distance="options.distance"
            :color="options.color"
            v-model:lower="lowerModel"
            v-model:upper="upperModel"
        />
    </div>
</template>

<script>
import formfieldBuilder from '@mixins/formfield-builder';

export default {
    mixins: [formfieldBuilder],
    computed: {
        defaultListOptions() {
            return {};
        },
        defaultViewOptions() {
            return {
                min: 1,
                max: 100,
                step: 1,
                range: true,
                distance: 0,
                inputs: true,
                color: 'accent',
            };
        },
    },
    data() {
        return {
            lowerModel: this.options.min,
            upperModel: this.options.max,
        };
    },
    mounted() {
        this.$watch(() => this.options.min, (min) => {
            this.lowerModel = min;
        });
        this.$watch(() => this.options.max, (max) => {
            this.upperModel = max;
        });
    }
}
</script>