* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace App\Form\Type; use App\Utils\MomentFormatConverter; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\DateTimeType; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; use function Symfony\Component\String\u; /** * Defines the custom form field type used to manipulate datetime values across * Bootstrap Date\Time Picker javascript plugin. * * See https://symfony.com/doc/current/form/create_custom_field_type.html * * @author Yonel Ceruto */ class DateTimePickerType extends AbstractType { private $formatConverter; public function __construct(MomentFormatConverter $converter) { $this->formatConverter = $converter; } /** * {@inheritdoc} */ public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars['attr']['data-date-format'] = $this->formatConverter->convert($options['format']); $view->vars['attr']['data-date-locale'] = u(\Locale::getDefault())->replace('_', '-')->lower(); } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'widget' => 'single_text', // if true, the browser will display the native date picker widget // however, this app uses a custom JavaScript widget, so it must be set to false 'html5' => false, ]); } /** * {@inheritdoc} */ public function getParent(): ?string { return DateTimeType::class; } }