Ir para o conteúdo principal

Introdução

Introdução

Esta feature foi desenvolvida para adicionarfornecer um sistema de ordenação flexível e reutilizável aospara os módulos do painel.
ElaO permiteobjetivo tantoé simplificar a implementação de ordenações, padronizando a forma como os registros são organizados e garantindo consistência entre diferentes módulos, sem a necessidade de reescrever a lógica de movimentação ou atualização de posições.

O sistema suporta ordenaçordenções simples, entreque envolvem apenas registros do mesmo módulo, quantopermitindo que o usuário reorganize os itens de forma direta e intuitiva.
Além disso, ele também é capaz de lidar com ordenaçõescenários complexasmais complexos, envolvendo relações entre diferentesmúltiplos níveis oude modelos.

relacionamento

entre modelos diferentes. Por exemplo, em um módulo que gerencia seções e produtos, é possível ordenar os produtos dentro de uma seção específica (seção → produto),. ondeNesse caso, o sistema primeiro filtraaplica filtros para selecionar apenas os registros pelado nível superior (a seção selecionadao) e, em seguida, aplicarealiza a ordenação nosdos produtos.
Tambémregistros do nível inferior (os produtos).

Outro ponto importante é o suporte paraa ordenação recursiva dentro da própria model,model, permitindoútil em casos onde um registro pode ter outro registro do mesmo tipo como “pai”. Esse recurso permite criar estruturas hierárquicas complexas, como categorias e subcategorias, menus com itens filhos ou qualquer outro cenáriosrio em que umaa modelordenação possuiprecise umpercorrer relacionamentomúltiplos comníveis elada mesma (comotabela, um item pai e seus filhos), resultando emgerando uma estrutura de ordenação potencialmente infinita.

Com

Configuraçãoessa noabordagem, controller

qualquer

Paramódulo habilitardo painel pode adotar o sistema de ordenação emde umforma módulo, é necessário implementar no controller uma função pública chamada orderConfig()
Essa função é responsável por retornar duas arrays principais que controlam todo o comportamento da ordenação: $generalConfigrápida e $configLevels.

confiável,

$generalConfig

A array $generalConfig contém configurações gerais da ordenação.
Atualmente, possui apenas uma propriedade possível:

$generalConfig = ['selfGroupedRecords' => false];
PropriedadeTipoDescrição
 selfGroupedRecordsboolDefine se a ordenação será recursiva dentro do mesmo módulo (por exemplo, quando um registro pode ter outro como “pai”).

$configLevels

A array $configLevels é onde é definidaaproveitando toda a lógica de ordenação.
Cadabackend iteme dentrofrontend dela representapronta, umgarantindo nívelconsistência, performance e facilidade de ordenaçmanutenção — ou seja:o.

  • Se for uma ordenação simples (sem níveis adicionais ou recursivos), haverá apenas um nível.

  • Se for uma ordenação hierárquica (por exemplo, seção → produto), haverá um nível para cada relação.

💡 Observações:

  • ordem dos itens na array define a hierarquia dos níveis.
    O primeiro item representa o primeiro nível da ordenação, o segundo item o segundo nível, e assim por diante.
  • A chave de cada nível deve ser um identificador em camelCase, de preferência o nome do módulo.

Cada nível da configuração deve conter as seguintes propriedades:

 $configLevels = [

            'levelOne' => [
                'label' => 'Nivel 1',
                'model' => SubmodulesTest::class,
                'sortable' => true,
                'labelBtnNextLevel' => 'Ordernar itens do nível 1',
                'breadcrumbColumnName' => 'name',
                'order' => ['column' => 'order', 'type' => 'ASC'],
                'AdditionalQuery' => function ($q) { $q->where('id', 1); },
                'columnsToList' => [
                    [
                        'name' => 'active',
                        'label' => 'Status'
                    ],
                    [
                        'name' => 'id',
                        'label' => '#'
                    ],
                    [
                        'name' => 'name',
                        'label' => 'Título'
                    ],
                ],
            ],
            'levelTwo' => [
                'label' => 'Nivel 2',
                'model' => NivelDoi::class,
                'sortable' => true,
                'order' => ['column' => 'order', 'type' => 'ASC'],
                'breadcrumbColumnName' => 'name',
                'columnsToList' => [
                    [
                        'name' => 'active',
                        'label' => 'Status'
                    ],
                    [
                        'name' => 'id',
                        'label' => '#'
                    ],
                    [
                        'name' => 'name',
                        'label' => 'Título'
                    ],
                ],
            ],
            // Adicione mais níveis aqui, se necessário
        ];
PropriedadeTipoDescrição
labelstringNome descritivo do nível.
modelModelInstância da model correspondente ao nível.
sortableboolDefine se o nível atual pode ser ordenado (true / false).
labelBtnNextLevel

string

(opcional)

Texto exibido no botão que permite avançar para o próximo nível.
breadcrumbColumnNamestringColuna usada para exibir o nome no breadcrumb.
orderarrayDefine a ordenação padrão da listagem (['column' => 'id', 'type' => 'asc']).
columnToListarrayDefine as colunas exibidas na listagem de ordenação. Cada item deve conter name (coluna no banco) e label (rótulo exibido no frontend).
additionalQuery

closure

(opcional)

Permite aplicar filtros adicionais na query de listagem.
public function orderConfig()
    {
        $generalConfig = ['selfGroupedRecords' => false];

        $configLevels = [

            'author' => [
                'label' => 'Autores',
                'model' => Author::class,
                'sortable' => true,
                'order' => ['column' => 'order', 'type' => 'ASC'],
                'breadcrumbColumnName' => 'title',
                'columnsToList' => [
                    [
                        'name' => 'active',
                        'label' => 'Status'
                    ],
                    [
                        'name' => 'id',
                        'label' => '#'
                    ],
                    [
                        'name' => 'name',
                        'label' => 'Título'
                    ],
                ],
            ],
            // Adicione mais níveis aqui, se necessário
        ];

        return ['generalConfig' => $generalConfig, 'configLevels' => $configLevels];
    }