GrafiteInc/Scaffold

View on GitHub
app/View/Forms/RoleForm.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\View\Forms;

use App\Models\Role;
use Grafite\Forms\Fields\Checkbox;
use Grafite\Forms\Fields\Text;
use Grafite\Forms\Forms\ModelForm;
use Illuminate\Support\Str;

class RoleForm extends ModelForm
{
    public $model = Role::class;

    public $routePrefix = 'admin.roles';

    public $buttons = [
        'submit' => 'Save',
        'edit' => '<span class="fas fa-fw fa-pencil-alt"></span> Edit',
        'delete' => '<span class="fas fa-fw fa-trash"></span> Delete',
    ];

    public $columns = 'sections';

    public $maxColumns = 2;

    public $buttonClasses = [
        'submit' => 'btn btn-primary',
        'cancel' => 'btn btn-secondary',
        'edit' => 'btn btn-outline-primary btn-sm mr-2',
        'delete' => 'btn btn-outline-danger btn-sm ms-2',
    ];

    public $disableOnSubmit = true;

    public function setSections($fields)
    {
        return array_merge(
            [[
                'label',
            ]],
            $this->permissionOptionKeys()
        );
    }

    public function fields()
    {
        return array_merge([
            Text::make('label', [
                'required' => true,
            ]),
        ], $this->permissionOptions());
    }

    public function permissionOptionKeys()
    {
        $options = [];
        $permissions = config('permissions');

        foreach ($permissions as $model => $action) {
            foreach ($action as $name => $label) {
                $key = Str::ucfirst(Str::singular($model)).' Permissions';
                $options[$key][] = "permissions[{$model}.{$name}]";
            }
        }

        return $options;

        return collect($options)->chunk(2)->toArray();
    }

    public function permissionOptions()
    {
        $options = [];
        $permissions = config('permissions');

        foreach ($permissions as $model => $action) {
            foreach ($action as $name => $label) {
                $options[] = Checkbox::make("permissions[{$model}.{$name}]", [
                    'label' => $label,
                ]);
            }
        }

        return $options;
    }
}