Inicio
NexoPOS

Agregar botones de encabezado

En cada instancia de tabla CRUD, puedes insertar botones de encabezado. Esos botones de encabezado son componentes de Vue 3 que proporcionan funciones personalizadas para la tabla CRUD actual. Los usarás para realizar solicitudes asíncronas sobre las entradas seleccionadas o más.

screenshot-nimbuswebme-20231122-01-48-20

Así es como definirás tus botones.

<?php
namespace Modules\YourModule\Crud\YourCrud;

use App\Services\CrudService;

class YourCrud extends CrudService
{
    // ...
    
    public function getHeaderButtons(): array
    {
        return [ 'CustomHeaderButtonComponent' ];
    }
    
    // ...
}

Necesitas definir un método “getHeaderButtons” en tu componente CRUD que devuelva un array de strings. Esas cadenas están destinadas a ser propiedades definidas en nsExtraComponents, una variable global que contiene todos los componentes Vue personalizados definidos y proporcionados por NexoPOS o por módulos personalizados.

Una vez inyectados, los componentes se encargarán de renderizar el botón en sí y toda la lógica que hay detrás. Asumiendo lo que se define antes, así es como crearemos nuestro componente de botón:


@verbatim
<script type="text/javascript">
    document.addEventListener( 'DOMContentLoaded', () => {
        nsExtraComponents.CustomHeaderButtonComponent   =   defineComponent({
            template  : `<ns-button @click="increment">Custom Button {{ count }}</ns-button>`,
            data() {
            return {
                count: 0
            }
            },
            mounted() {
            console.log( 'the component is mounted' )
            },
            methods: {
                increment(){
                    this.count++;
                }
            }
        });
    });
</script>
@endverbatim

Esto producirá la siguiente salida.

screenshot-nimbuswebme-20231122-01-47-44

Extiende los botones de encabezado de otras operaciones CRUD

También puedes insertar un botón de encabezado personalizado en otras tablas CRUD. Puede ser un CRUD definido por NexoPOS o por otro módulo. En tu ServiceProvider de módulo, primero insertarás el botón de tu módulo.

<?php
namespace Modules\YourModule\Providers;

use App\Hook\Service;
use App\Providers\ServiceProvider as CoreServiceProvider;
use App\Crud\ProductCrud;

class ServiceProvider extends CoreServiceProvider
{
    public function register()
    {
        Hook::addFilter( ProductCrud::method( 'getHeaderButtons' ), function( $buttons ) {
            $buttons[]  = 'YourCustomComponentVariableName';
            return $buttons;
        });
    }
}

Luego, insertarás una vista en el pie de la tabla CRUD, así:

<?php
namespace Modules\YourModule\Providers;

use App\Hook\Service;
use App\Providers\ServiceProvider as CoreServiceProvider;
use App\Crud\ProductCrud;
use App\Classes\Output;

class ServiceProvider extends CoreServiceProvider
{
    public function register()
    {
        Hook::addAction( ProductCrud::method( 'getHeaderButtons' ), function( $buttons ) {
            $buttons[]  = 'YourCustomComponentVariableName';
            return $buttons;
        });
        
        Hook::addAction( ProductCrud::method( 'getTableFooter' ), fn( Output $output ) => $output->addView( 'YourModule::footer' ) );
    }
}

La función en línea utilizada como devolución de llamada para la acción «ProductCrud::method( 'getTableFooter' )», cargará una vista «footer.blade.php» definida en el directorio «Resources» dentro del módulo «YourModule».