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.
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 há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.
$generalConfig
A array $generalConfig contém configurações gerais da ordenação.Atualmente, possui apenas uma propriedade possível:
$generalConfig = ['selfGroupedRecords' => false];$configLevels
A array $configLevels é onde é definidaaproveitando toda a lógica de ordenação.Cadabackend iteme dentrofrontend delajá representapronta, umgarantindo nívelconsistência, performance e facilidade de ordenaçmanutenção — ou seja:o.
Se for uma ordenaçãosimples(sem níveis adicionais ou recursivos), haveráapenas um nível.Se for uma ordenaçãohierárquica(por exemplo,seção → produto), haveráum nível para cada relação.
💡 Observações:
Aordem dos itens na arraydefine a hierarquia dos níveis.Oprimeiro itemrepresenta oprimeiro nívelda ordenação, osegundo itemosegundo nível, e assim por diante.A chave de cada nível deve ser umidentificador 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
];
| ||
|
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];
}