<?php namespace Dcat\Admin\Form; use Dcat\Admin\Widgets\Checkbox; use Illuminate\Contracts\Support\Renderable; class Footer implements Renderable { /** * Footer view. * * @var string */ protected $view = 'admin::form.footer'; /** * Footer view data. * * @var array */ protected $data = []; /** * Form builder instance. * * @var Builder */ protected $builder; /** * Available buttons. * * @var array */ protected $buttons = ['reset' => true, 'submit' => true]; /** * Available checkboxes. * * @var array */ protected $checkboxes = ['view' => true, 'continue_editing' => true, 'continue_creating' => true]; /** * Default checked. * * @var arrays */ protected $defaultcheckeds = ['view' => false, 'continue_editing' => false, 'continue_creating' => false]; /** * Footer constructor. * * @param Builder $builder */ public function __construct(Builder $builder) { $this->builder = $builder; } /** * Disable reset button. * * @param bool $disable * @return $this */ public function disableReset(bool $disable = true) { $this->buttons['reset'] = ! $disable; return $this; } /** * Disable submit button. * * @param bool $disable * @return $this */ public function disableSubmit(bool $disable = true) { $this->buttons['submit'] = ! $disable; return $this; } /** * Disable View Checkbox. * * @param bool $disable * @return $this */ public function disableViewCheck(bool $disable = true) { $this->checkboxes['view'] = ! $disable; return $this; } /** * Disable Editing Checkbox. * * @param bool $disable * @return $this */ public function disableEditingCheck(bool $disable = true) { $this->checkboxes['continue_editing'] = ! $disable; return $this; } /** * Disable Creating Checkbox. * * @param bool $disable * @return $this */ public function disableCreatingCheck(bool $disable = true) { $this->checkboxes['continue_creating'] = ! $disable; return $this; } /** * default View Checked. * * @param bool $checked * @return $this */ public function defaultViewChecked(bool $checked = true) { $this->defaultcheckeds['view'] = $checked; return $this; } /** * default Editing Checked. * * @param bool $checked * @return $this */ public function defaultEditingChecked(bool $checked = true) { $this->defaultcheckeds['continue_editing'] = $checked; return $this; } /** * default Creating Checked. * * @param bool $checked * @return $this */ public function defaultCreatingChecked(bool $checked = true) { $this->defaultcheckeds['continue_creating'] = $checked; return $this; } /** * Build checkboxes. * * @return Checkbox|null */ protected function buildCheckboxes() { if ($this->builder->isEditing()) { $this->disableCreatingCheck(); } $options = []; $checked = []; if ($this->checkboxes['continue_editing']) { $options[1] = sprintf('<span class="text-80 text-bold">%s</span>', trans('admin.continue_editing')); } if ($this->checkboxes['continue_creating']) { $options[2] = sprintf('<span class="text-80 text-bold">%s</span>', trans('admin.continue_creating')); } if ($this->checkboxes['view']) { $options[3] = sprintf('<span class="text-80 text-bold">%s</span>', trans('admin.view')); } if ($this->defaultcheckeds['continue_editing']) { $checked[] = 1; } if ($this->defaultcheckeds['continue_creating']) { $checked[] = 2; } if ($this->defaultcheckeds['view']) { $checked[] = 3; } if (! $options) { return; } return (new Checkbox('after-save', $options))->check($checked)->inline()->circle(true); } /** * Use custom view. * * @param string $view * @param array $data */ public function view(string $view, array $data = []) { $this->view = $view; $this->data = $data; } /** * Render footer. * * @return string */ public function render() { $data = [ 'buttons' => $this->buttons, 'checkboxes' => $this->buildCheckboxes(), 'width' => $this->builder->getWidth(), ]; $data = array_merge($data, $this->data); return view($this->view, $data)->render(); } }