# Rotas e View

Para que o sistema de ordenação funcione corretamente em um módulo, é necessário definir duas **rotas principais** responsáveis por exibir e processar a ordenação.  
Essas rotas devem ser criadas dentro do **grupo de rotas do módulo** e vinculadas ao seu respectivo **controller**.

---

### **Rotas**

Os módulos que implementarem a ordenação precisam conter as seguintes rotas:

#### Descrição das rotas:

<div class="_tableContainer_1rjym_1" id="bkmrk-m%C3%A9todo-caminho-contr"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1395" data-start="964" style="width: 100%;"><thead data-end="1018" data-start="964"><tr data-end="1018" data-start="964"><th data-col-size="sm" data-end="973" data-start="964" style="width: 8.22223%;">Método</th><th data-col-size="sm" data-end="983" data-start="973" style="width: 10.133%;">Caminho</th><th data-col-size="sm" data-end="1005" data-start="983" style="width: 18.3552%;">Controller / Método</th><th data-col-size="lg" data-end="1018" data-start="1005" style="width: 63.2896%;">Descrição</th></tr></thead><tbody data-end="1395" data-start="1076"><tr data-end="1248" data-start="1076"><td data-col-size="sm" data-end="1086" data-start="1076" style="width: 8.22223%;">**GET**</td><td data-col-size="sm" data-end="1099" data-start="1086" style="width: 10.133%;">**/ordenar**</td><td data-col-size="sm" data-end="1111" data-start="1099" style="width: 18.3552%;">**order()**</td><td data-col-size="lg" data-end="1248" data-start="1111" style="width: 63.2896%;">Responsável por carregar a view principal da ordenação e inicializar o componente com base nas configurações definidas no controller.</td></tr><tr data-end="1395" data-start="1249"><td data-col-size="sm" data-end="1260" data-start="1249" style="width: 8.22223%;">**POST**</td><td data-col-size="sm" data-end="1273" data-start="1260" style="width: 10.133%;">**/ordenar**</td><td data-col-size="sm" data-end="1292" data-start="1273" style="width: 18.3552%;">**processOrder()**</td><td data-col-size="lg" data-end="1395" data-start="1292" style="width: 63.2896%;">Recebe a nova ordem enviada pelo frontend e processa a atualização dos registros no banco de dados.</td></tr></tbody></table>

</div></div>Ambas as rotas utilizam o middleware "*panel.check.module.permission:update*", garantindo que apenas usuários com permissão de **edição** possam acessar e modificar a ordem dos registros.

##### **Exemplo:**

```php
Route::get('/ordernar', [AuthorController::class, 'order'])
->name('order')->middleware('panel.check.module.permission:update');

Route::post('/ordernar', [AuthorController::class, 'processOrder'])
->name('processOrder')->middleware('panel.check.module.permission:update');
```

---

### **View**

Por padrão, o sistema de ordenação utiliza uma **view global** compartilhada entre todos os módulos, localizada em:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%22panel.layouts.modul"><div class="overflow-y-auto p-4" dir="ltr">**"panel.layouts.modules.order"**</div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>Essa view é responsável por renderizar a interface do sistema de ordenação, exibindo os registros conforme as configurações definidas no método **orderConfig()** do controller.  
Ela já contém toda a estrutura necessária para:

- Exibir os níveis de ordenação e breadcrumbs;
- Listar os registros conforme o nível atual;
- Enviar a nova ordem para o backend através da rota **processOrder**;
- Atualizar dinamicamente a interface conforme o usuário interage com os níveis.

---

#### **Personalização da View**

Embora exista uma view global, o sistema permite **substituí-la por uma view personalizada**, caso o módulo necessite de um layout ou comportamento específico.  
Para isso, basta informar o **caminho da nova view** dentro da configuração **$generalConfig** do método **orderConfig()**.

**Exemplo**:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk--3"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2">  
</div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>```php
$generalConfig = [ 'selfGroupedRecords' => false, 'view' => 'panel.modules.produtos.orderCustom', ];
```

Nesse caso, o sistema utilizará a view "*panel.modules.produtos.orderCustom*" em vez da padrão "*panel.layouts.modules.order*".

> **Observação:**  
> A view personalizada deve seguir a mesma estrutura básica da view padrão — ou seja, deve conter o componente responsável por interagir com o sistema de ordenação e enviar as alterações para o backend.  
> Dessa forma, mantém-se a compatibilidade com a lógica existente, mesmo quando o layout é adaptado.