Sistema_Gestion_Transporte/src/pages/rutas/TableRutas.svelte

102 lines
3.3 KiB
Svelte

<script>
import Paginate from "../../components/Paginate.svelte";
import TableResponsive from "../../components/TableResponsive.svelte";
import { getLineas } from "../../services/lineas";
import { getOperador, getOperadores } from "../../services/operadores";
import { createEventDispatcher } from "svelte";
const dispatch = createEventDispatcher()
let loading = false;
let offset = 0;
const limit = 10;
let lineas = { results: [], count: 0 };
let operadores = [];
let filtro = {}
async function fetchOperadores() {
try {
operadores = await getOperadores({ ordering: 'nombre_operador' })
} catch (error) {
alert(error)
}
}
async function fetchData(offset, { id_operador = null }) {
try {
loading = true;
const conditions = { offset, limit, ordering: 'route_short_name' };
if (id_operador) conditions.id_operador = id_operador;
lineas = await getLineas(conditions)
} catch (error) {
alert(error)
} finally {
loading = false
}
}
function getNombreOperador(id) {
const operador = operadores.find(el => el.id_operador === id) || {}
return operador.nombre_operador || ''
}
function onSelect(linea) {
const operador = operadores.find(el => el.id_operador === linea.id_operador) || {}
const data = { linea, operador }
dispatch('select', data)
}
fetchOperadores()
$: fetchData(offset, filtro)
$: dispatch('loading',loading)
</script>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<slot name="buttons" />
</div>
<div class="col-auto">
<div class="input-group">
<div class="input-group-text">Operador</div>
<select class="form-select" bind:value={filtro.id_operador}>
<option value=""></option>
{#each operadores as operador}
<option value={operador.id_operador}>{operador.nombre_operador}</option>
{/each}
</select>
</div>
</div>
</div>
</div>
<div class="card-body">
<TableResponsive>
<thead>
<tr>
<th>ID</th>
<th>Operador</th>
<th>LUR</th>
<th>Dirección</th>
</tr>
</thead>
<tbody>
{#each lineas.results as linea}
<tr>
<td><a href={"#"} on:click|preventDefault={() => onSelect(linea)}>{linea.id_linea}</a></td>
<td>{getNombreOperador(linea.id_operador)}</td>
<td>{linea.route_short_name}</td>
<td>{linea.route_long_name}</td>
</tr>
{/each}
</tbody>
</TableResponsive>
</div>
<div class="card-footer">
<Paginate
forcePage={offset / limit}
count={lineas.count}
{limit}
on:page={ev => offset = (ev.detail - 1) * limit}
/>
</div>
</div>