نوع إدخال متعدد

عينة توضح كيفية دمج حقل إدخال أساسي يمكن لمدير الاستبيان اختيار نوعه ورسالة خطأ من خصائص الإجابة.

class MultiTypeInputSampleWidget extends NGSWidget {
    /* قالب HTML سيتم إنشاؤه قبل إنشاء الكلاس
        سيتم إضافة لاحقة uniqueId إلى جميع المعرفات وأسماء فئات CSS
        المقدمة أثناء إنشاء الودجت */
    static get template() {
        return `<input class="ngs-question__answer-field" type="{{type}}" required id="myField">
      `;
    }

    /* هل يدعم هذا الودجت تسمية، التسمية هي النص الذي يمكن
     لمسؤول النموذج إدخاله باستخدام مصمم النموذج ويمكن حقنه في
     القالب باستخدام الوسم <ngs-label></ngs-label>
     */
    static get hasLabel() {
        return true;
    }

    /* الخصائص التي يمكن ضبطها بواسطة مصمم النموذج لكل
     إجابة تستخدم هذا الودجت كنوع إجابة في خصائص الإجابة */
    static get propertiesDef() {
        return [{
            id: 'required',
            label: 'Required',
            defaultValue: false,
            type: 'boolean'
        }, {
            id: 'type',
            label: 'type',
            defaultValue: 'text',
            type: 'list',
            list: [{
                    name: 'text',
                    value: 'text'
                },
                {
                    name: 'color',
                    value: 'color'
                },
                {
                    name: 'date',
                    value: 'date'
                },
                {
                    name: 'datetime-local',
                    value: 'datetime-local'
                },
                {
                    name: 'email',
                    value: 'email'
                },
                {
                    name: 'month',
                    value: 'month'
                },
                {
                    name: 'number',
                    value: 'number'
                },
                {
                    name: 'range',
                    value: 'range'
                },
                {
                    name: 'search',
                    value: 'search'
                },
                {
                    name: 'tel',
                    value: 'tel'
                },
                {
                    name: 'time',
                    value: 'time'
                },
                {
                    name: 'url',
                    value: 'url'
                },
                {
                    name: 'week',
                    value: 'week'
                },
            ]
        }, {
            id: 'invalidmessage',
            label: 'Invalid message',
            defaultValue: 'Invalid value',
            type: 'text'
        }];
    }

    init() {
        // الحصول على عنصر الإدخال من القالب
        this.inputField = this.widgetQuerySelector('.ngs-question__answer-field');

        // الحصول على وضع العرض الحالي لمعرفة كيف يجب علينا
        // ضبط الحالة هنا وجعلها معطلة إذا كان 
        // الودجت في وضع للقراءة فقط 
        this.isDisabled$(disabled => {
            this.inputField.disabled = disabled;
        });

        // الحصول على القيمة الحالية للودجت
        this.getValue$(value => {
            this.inputField.value = value;
        });

        // ضبط القيمة الابتدائية عند إنشاء الودجت
        if (this.initialValue) {
            this.inputField.value = this.initialValue;
        }

        // إذا قام المستخدم بتغيير النص تأكد من حفظ القيمة
        // في النموذج   
        this.inputField.addEventListener('input', (event) => {
            this.textChanged(this.inputField.value, this);
        });
    }

    // إرسال القيمة إلى النموذج
    textChanged(value, widget) {
        widget.setAnswer(this.inputField.value);
    }

    // سيتم استدعاؤها بواسطة النموذج
    // لمعرفة ما إذا كانت القيمة صالحة
    // إذا لم تكن صالحة يجب إرجاع '' (لا تظهر رسالة خطأ) أو رسالة الخطأ المراد إظهارها
    // إذا كانت صالحة أرجع null 
    isValid() {
        if (!this.inputField.validity.valid) {
            return this.properties.invalidmessage;
        } else if (this.properties.required && !this.inputField.value) {
            return 'please enter a value';
        } else {
            return null;
        }
    }
}

Last updated

Was this helpful?