Home
NexoPOS

Azione personalizzata

Un’azione aiuta a eseguire una richiesta su una voce CRUD. Per impostazione predefinita, NexoPOS include le azioni “modifica” ed “elimina”, che operano direttamente sulla riga selezionata. Questo ti mostrerà come creare un’azione personalizzata su una voce CRUD.

Registrati filtro personalizzato

<?php
namespace Modules\YourModule\Providers;

use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;

class ServiceProvider 
{
    public function register()
    {
        Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
    }
}

Spieghiamo cosa sta succedendo sopra. Prima di tutto, registreremo il nostro filtro con il service provider del nostro modulo. Abbiamo importato 3 classi (Hook, CrudEntry e OrderCrud).

In questo esempio, stiamo cercando di aggiungere una nuova azione a una voce CRUD nella tabella degli ordini. Quindi aggiungiamo un filtro utilizzando il metodo "addFilter", che inserirà la callback nel metodo "setActions" della classe OrderCrud.

Quindi, ogni volta che viene chiamato il metodo "setActions", la callback "customAction" viene attivata con come parametro univoco un’istanza di "CrudEntry".

Aggiungi un’azione all’istanza di CrudEntry

Ora, ci concentreremo sul metodo di callback, poiché è lì che inseriremo la nostra azione. Nota che possiamo inserire più di un’azione alla volta. Ecco come definiremo un’azione:

<?php
namespace Modules\YourModule\Providers;

use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;

class ServiceProvider 
{
    public function regiser()
    {
        Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
    }
    
    public function customAction( CrudEntry $crudEntry )
    {
        $crudEntry->action( 
            label: 'Email to Customer',
            identifier: 'email',
            type: 'GET',
            url: url( '/api/your/slug/' . $crudEntry->id )
        );
        
        return $entry;
    }
}

Nota che qui, la nostra azione avrà come identificatore “email” e come etichetta “Email al cliente” (visibile dall’utente). Quando viene cliccata, verrà eseguita una richiesta GET (asincrona) all’URL fornito nel parametro “url”.

Se vuoi chiedere all’utente di confermare la propria azione, puoi aggiungere una nuova voce a quell’array chiamata "confirm" in questo modo:

<?php
namespace Modules\YourModule\Providers;

use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;

class ServiceProvider 
{
    public function regiser()
    {
        Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
    }
    
    public function customAction( CrudEntry $crudEntry )
    {
        $crudEntry->action(
            label: 'Email to Customer',
            type: 'GET',
            url: url( '/api/your/slug/' . $crudEntry->id ),
            confirm: [
                'message'   =>  'Would you like to send this as an email?'
            ]
        );
        
        return $entry;
    }
}

Per le richieste asincrone sono supportati solo “GET” e “DELETE”. Se desideri che l’utente atterri su una pagina diversa dopo aver fatto clic sull’azione, utilizza il tipo “GOTO” invece di “GET”, come in questo esempio:

<?php
namespace Modules\YourModule\Providers;

use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;

class ServiceProvider 
{
    public function regiser()
    {
        Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
    }
    
    public function customAction( CrudEntry $crudEntry )
    {
        $crudEntry->action(
            lable: 'Email to customer',
            type: 'GOTO',
            url: url( '/api/your/slug/' . $crudEntry->id ),
            confirm: [
                'message'   =>  'Would you like to send this as an email?'
            ]
        );
        
        return $entry;
    }
}

Facendo clic su un’azione, l’utente verrà reindirizzato alla pagina indicata nella chiave "url".

Esecuzione di richieste asincrone

Per impostazione predefinita, le richieste GET ed DELETE eseguiranno una richiesta asincrona. Tuttavia, uno dei requisiti è aggiungere un messaggio di conferma. Questo dovrebbe impedire all’utente finale di attivare un’azione per errore.

<?php
namespace Modules\YourModule\Providers;

use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;

class ServiceProvider 
{
    public function regiser()
    {
        Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
    }
    
    public function customAction( CrudEntry $crudEntry )
    {
        $crudEntry->action(
            label: 'Refresh Product',
            type: 'GET',
            url: url( '/api/your/slug/' . $crudEntry->id ),
            confirm: [
                'message'   =>  'Would you like to refresh the products ?'
            ]
        );
        
        return $entry;
    }
}