se agrega create y delete dispositivo de paradero

develop/frontend
Francisco Sandoval 2023-11-25 20:08:18 -03:00
parent a4b53f5a6d
commit f38fe5d0cd
2 changed files with 89 additions and 21 deletions

View File

@ -1,14 +1,17 @@
<script> <script>
import QrCode from 'svelte-qrcode' import QrCode from 'svelte-qrcode'
import IconLoading from "../../components/IconLoading.svelte"; import IconLoading from "../../components/IconLoading.svelte";
import { getDispositivos } from "../../services/dispositivos"; import { createDispositivo, deleteDispositivo, getDispositivos } from "../../services/dispositivos";
import { getTiposDispositivo } from "../../services/tipos_dispositivo";
import { url_base } from "../../services/_config"; import { url_base } from "../../services/_config";
import { getInfoPublic } from '../../services/paraderos'; import { getInfoPublic } from '../../services/paraderos';
export let parada = null export let parada = null;
let loading = false; let loading = false;
let dispositivos = [] let tipos_dispositivos = [];
let dispositivos = [];
let url_qrcode = null; let url_qrcode = null;
let nuevoDispositivo = null;
async function fetchDispositivos({ id_paradero = null }) { async function fetchDispositivos({ id_paradero = null }) {
try { try {
@ -33,28 +36,91 @@
} }
} }
$: Promise.all([fetchDispositivos(parada), fetchInfoPublico(parada)]) async function fetchTiposDispositivos() {
try {
tipos_dispositivos = await getTiposDispositivo()
} catch (error) {
console.log({ error })
}
}
$: Promise.all([fetchDispositivos(parada), fetchInfoPublico(parada), fetchTiposDispositivos()])
async function onSave() {
try {
loading = true
await createDispositivo(nuevoDispositivo)
const tipo_dispositivo = tipos_dispositivos.find(el => el.id_tipo_dispositivo === nuevoDispositivo.id_tipo_dispositivo) || {}
dispositivos = [ ...dispositivos, { ...nuevoDispositivo, tipo_dispositivo }]
nuevoDispositivo = null
} catch (error) {
alert(error)
} finally {
loading = false
}
}
async function onDelete({ id_dispositivo }) {
try {
if (!confirm(`Desea eliminar el dispositivo ${id_dispositivo} ?`)) return;
loading = true
await deleteDispositivo(id_dispositivo)
dispositivos = dispositivos.filter(el => el.id_dispositivo !== id_dispositivo)
} catch (error) {
alert(error)
} finally {
loading = false
}
}
</script> </script>
<div> <div>
<h4 class="mb-3">Dispositivos</h4> <h4 class="mb-3">Dispositivos</h4>
<table class="table table-bordered"> {#if !nuevoDispositivo}
<thead> <table class="table table-bordered">
<tr> <thead>
<th>ID Dipositivo</th> <tr>
<th>Tipo</th> <th>ID Dipositivo</th>
</tr> <th>Tipo</th>
</thead> <th>&nbsp;</th>
<tbody> </tr>
{#each dispositivos as disp} </thead>
<tr> <tbody>
<td>{disp.id_dispositivo}</td> {#each dispositivos as disp}
<td>{disp.tipo_dispositivo?.descripcion || '--'}</td> <tr>
</tr> <td>{disp.id_dispositivo}</td>
{/each} <td>{disp.tipo_dispositivo?.descripcion || '--'}</td>
</tbody> <td><a href={"#"} on:click|preventDefault={() => onDelete(disp)}><i class="bi bi-trash text-danger"></i></a></td>
</table> </tr>
{/each}
</tbody>
</table>
<div class="my-3 text-center">
<button class="btn btn-outline-primary" on:click|preventDefault={() => nuevoDispositivo = {}}>Nuevo Dispositivo</button>
</div>
{:else}
<form action="" on:submit|preventDefault={onSave}>
<div class="input-group">
<div class="input-group-text">ID Dispositivo</div>
<input type="text" class="form-control" bind:value={nuevoDispositivo.id_dispositivo}>
</div>
<div class="input-group">
<div class="input-group-text">Tipo Dispositivo</div>
<select class="form-select" bind:value={nuevoDispositivo.id_tipo_dispositivo}>
{#each tipos_dispositivos as tipo}
<option value={tipo.id_tipo_dispositivo}>{ tipo.descripcion }</option>
{/each}
</select>
</div>
<div class="d-flex justify-content-between my-3">
<button type="submit" class="btn btn-primary">Guardar</button>
<button class="btn btn-outline-secondary" on:click|preventDefault={() => nuevoDispositivo = null}>Cancelar</button>
</div>
</form>
{/if}
{#if loading} {#if loading}
<div> <div>
@ -63,6 +129,8 @@
</div> </div>
{/if} {/if}
<div class="m-6"></div>
<div class="text-center mb-3"> <div class="text-center mb-3">
{#if url_qrcode} {#if url_qrcode}
<QrCode value={url_qrcode} /> <QrCode value={url_qrcode} />

View File

@ -21,7 +21,7 @@ export async function createDispositivo(data) {
return res.json() return res.json()
} }
export async function updateDispositivo({ id_comuna: id, ...data }) { export async function updateDispositivo({ id_dispositivo: id, ...data }) {
const res = await fetch(`${base}/dispositivos/${id}/`, { const res = await fetch(`${base}/dispositivos/${id}/`, {
method: 'PATCH', method: 'PATCH',
body: JSON.stringify(data), body: JSON.stringify(data),