# Dashboard widget usage

After generating a widget using the artisan command, you can edit its files. By following the generation example, we obtain the following class:


# Widget class

<?php

namespace App\Dashboard;

use Illuminate\Http\Request;
use Sebastienheyd\Boilerplate\Dashboard\Widget;

class MyAwesomeWidget extends Widget
{
    protected $slug = 'my-awesome-widget';
    protected $label = "my-awesome-widget label";
    protected $description = "my-awesome-widget description";
    protected $view = 'dashboard.widgets.my-awesome-widget';
    protected $editView = 'dashboard.widgets.my-awesome-widgetEdit';
    protected $size = 'sm';
    protected $permission = null;

    protected $parameters = [
        'color'    => 'primary',
    ];

    public function make()
    {
        // $this->assign('myVar', 'myValue');
    }

    public function validator(Request $request)
    {
        return validator()->make($request->post(), [
            'color' => 'required'
        ]);
    }
}

# Properties

property type description
slug string String used to identify the widget.
label string Widget label, used to identify the widget in the selection modal.
description string Widget description, used to identify the widget in the selection modal.
view string View that will be used to render the widget.
viewEdit string View that will be used to edit the widget parameters.
size string Size of the widget.
permission string Permission to check to show the widget.
parameters array Array of widget parameters and default values.
width array Array of sizes to use.

# slug

The slug will serve to identify the widget. For example, we can use it to call the widget in the configuration file and thus build the default dashboard.

The slug is also used to save the widget's settings for the current user.

# label

The widget label, used only in the modal window for selecting dashboard widgets.

It can be a localization string.

# description

Similar to the label, the description is used only in the modal window for selecting dashboard widgets.

It can be a localization string.

# view

Blade view used to render the widget.

# viewEdit

Blade view used to render the form for editing widget settings. The posted parameters will be automatically captured and assigned to the widget.

It is recommended to use string-type parameters only.

# size

Widget dimension, can be xxs, xs, sm, md, xl, xxl.

The corresponding table used is the one defined by the width property.

Default value is md

# permission

Permission to be used to verify that the current user is authorized to use the widget.

Default value is null.

# parameters

Array of editable widget parameters. Used to define default values.

Default value is an empty array.

# width

Array of dimensions that the widget can use. This involves assigning Bootstrap column dimensions to use for each breakpoint. Default:

[
    'xxs' => ['sm' => 4, 'md' => 4, 'xl' => 2, 'xxl' => 2],
    'xs'  => ['sm' => 6, 'md' => 6, 'xl' => 4, 'xxl' => 3],
    'sm'  => ['sm' => 12, 'md' => 6, 'xl' => 6, 'xxl' => 4],
    'md'  => ['sm' => 12, 'md' => 6, 'xl' => 6, 'xxl' => 6],
    'xl'  => ['sm' => 12, 'md' => 12, 'xl' => 8, 'xxl' => 8],
    'xxl' => ['sm' => 12, 'md' => 12, 'xl' => 12, 'xxl' => 12],
]

You can define specific dimensions and call them like this:

protected $width = ['md' => ['sm' => 6, 'md' => 6, 'xl' => 4]];
protected $size = 'md';

# Assign values to the view

By default, all values from the parameters array are assigned to the view. If user settings exist, they will override the default parameters.

Before rendering the widget view, we will call the make() method in the widget class.

In this method, by using the method assign() it is possible to assign values to the view from various sources such as the database.

But it is also possible to override the default parameters and user parameters by using the set() method.

public function make()
{
    $count = User::count();

    // Assign number of users to the view.
    $this->assign('count', $count);
    
    // Change color (will override the default parameters and the user settings)
    $this->set('color', $count === 0 ? 'danger' : 'primary');
}

# User settings

The current user can define settings for each widget.

To do this, it is sufficient to first declare the default parameters in the widget's class (see above).

Once the parameters array is defined, you can create or edit the view for editing these settings.

In the view, the necessary input fields will be added for editing the widget's settings.

User settings are stored in the users table in the settings field.

Example:

    protected $editView = 'dashboard.widgets.my-awesome-widgetEdit';

    protected $parameters = [
        'color'    => 'primary',
    ];

And the content of the view:

<x-boilerplate::input type="select" name="color" label="Color" :value="$color ?? 'primary'" :options="['primary', 'danger', 'secondary']" />