prop(array('type', 'name', 'items', 'value', 'required', 'multiple', 'placeholder', 'onChange', 'error')); if($type == 'picker') { if(is_array($items)) { if(is_string($value) && !isset($items[$value])) $value = null; if(is_array($value)) { foreach($value as $currentIndex => $currentValue) { if(!isset($items[$currentValue])) unset($value[$currentIndex]); } } } return picker ( setID("builderPicker_$name"), setClass('builder-picker', array('has-error' => $error)), set::name($name), set::items($items), set::placeholder($placeholder), set::disabled(empty($items)), set::required($required), set::multiple($multiple), on::change()->do($onChange), !empty($value) ? set::value($value) : null ); } if($type == 'input') return input ( setID("builderInput_$name"), setClass('builder-input', array('has-error' => $error)), set::name($name), set::placeholder($placeholder), on::change()->do($onChange), set::value($value) ); if($type == 'date') return datePicker ( setID("builderDate$name"), setClass('builder-date', array('has-error' => $error)), set::name($name), set::placeholder($placeholder), on::change()->do($onChange), set::value($value) ); if($type == 'datetime') return datetimePicker ( setID("builderDatetime$name"), setClass('builder-datetime', array('has-error' => $error)), set::name($name), set::placeholder($placeholder), on::change()->do($onChange), set::value($value) ); return null; } protected function build() { global $lang; list($class, $label, $labelWidth, $labelAlign, $width, $suffix, $error, $errorText) = $this->prop(array('class', 'label', 'labelWidth', 'labelAlign', 'width', 'suffix', 'error', 'errorText')); $padding = $labelAlign == 'center' ? 1 : 3; return formGroup ( setClass($class), set::label($label), set::labelWidth($labelWidth), set::labelClass('bg-gray-100 ring ring-border-strong', "justify-$labelAlign-important px-{$padding}-important" ), set::width($width), inputGroup ( setClass('flex col'), div ( setClass('flex row'), $this->buildControl(), !empty($suffix) ? label($suffix) : null ), span ( setClass('text-danger', array('hidden' => !$error)), empty($errorText) ? $lang->bi->emptyError : $errorText ) ) ); } }