Skip to content

Commit 86ce293

Browse files
committed
Add first validation fields
1 parent 8d14149 commit 86ce293

File tree

4 files changed

+45
-24
lines changed

4 files changed

+45
-24
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<script lang='ts'>
2+
import type { ValidationMessage } from '$lib/domain/tarea'
3+
4+
const errorsFrom = (errors: ValidationMessage[], field: string) => errors
5+
.filter((_) => _.field === field)
6+
.map((_) => _.message)
7+
.join('. ')
8+
9+
let { field, errors } = $props()
10+
11+
let errorMessage = $derived(errorsFrom(errors, field))
12+
</script>
13+
<style>
14+
.error {
15+
border: 1px solid darkred;
16+
background-color: rgb(236, 35, 35);
17+
color: white;
18+
margin: 0.25rem 0;
19+
padding: 0.5rem;
20+
}
21+
</style>
22+
{#if !!errorMessage}
23+
<div></div>
24+
<div class="error" data-testid={"error-field-" + field}>
25+
{errorMessage}
26+
</div>
27+
{/if}

src/lib/domain/tarea.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -125,17 +125,6 @@ export class Tarea {
125125
return this.errors.length > 0
126126
}
127127

128-
hasErrors(field: string): boolean {
129-
return this.errors.some((_) => _.field == field)
130-
}
131-
132-
errorsFrom(field: string) {
133-
return this.errors
134-
.filter((_) => _.field == field)
135-
.map((_) => _.message)
136-
.join('. ')
137-
}
138-
139128
addError(field: string, message: string) {
140129
this.errors.push(new ValidationMessage(field, message))
141130
}

src/routes/tarea/[tareaId]/+page.svelte

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,35 @@
22
import './edit.css'
33
import { goto } from '$app/navigation'
44
import { tareaService } from '$lib/services/tareaService'
5-
import { Tarea } from '$lib/domain/tarea'
5+
import { Tarea, ValidationMessage, type TareaJSON } from '$lib/domain/tarea'
66
import { DateTime } from 'luxon'
77
import { showError } from '$lib/domain/errorHandler'
8+
import ValidationField from '$lib/components/ValidationField.svelte'
9+
10+
const volver = () => {
11+
goto('/')
12+
}
13+
14+
let { data } = $props()
15+
const { tarea, asignatarios } = data
16+
if (!tarea) volver()
17+
18+
let errors: ValidationMessage[] = $state([])
819
920
const actualizar = async () => {
1021
try {
1122
const tareaActual: Tarea = Tarea.fromJson(tareaEdit)
1223
tareaActual.fecha = DateTime.fromFormat(fecha, 'yyyy-MM-dd').toJSDate()
13-
// TODO: generar un componente para mostrar los errores de una tarea
1424
tareaActual.validar()
15-
if (!tareaActual.invalid) {
25+
errors = tareaActual.errors
26+
if (!tareaActual.invalid()) {
1627
await tareaService.actualizarTarea(tareaActual)
1728
volver()
1829
}
1930
} catch (error) {
2031
showError('Error al actualizar la tarea', error)
2132
}
2233
}
23-
24-
const volver = () => {
25-
goto('/')
26-
}
27-
28-
let { data } = $props()
29-
const { tarea, asignatarios } = data
30-
if (!tarea) volver()
3134
3235
let tareaEdit = $state(tarea!.toJSON())
3336
let fecha = $state(DateTime.fromJSDate(tarea!.fecha!).toUTC().toFormat('yyyy-MM-dd'))
@@ -39,6 +42,7 @@
3942
<div class="row-edit">
4043
<label for="descripcion">Descripción:</label>
4144
<input type="text" name="descripcion" bind:value={tareaEdit.descripcion} />
45+
<ValidationField errors={errors} field="descripcion"/>
4246
</div>
4347
<div class="row-edit">
4448
<label for="iteracion">Iteración:</label>
@@ -60,6 +64,7 @@
6064
<div class="row-edit">
6165
<label for="porcentaje">% cumplimiento:</label>
6266
<input type="number" name="porcentaje" bind:value={tareaEdit.porcentajeCumplimiento} />
67+
<ValidationField errors={errors} field="porcentajeCumplimiento"/>
6368
</div>
6469
<div class="button-group-edit">
6570
<button onclick={actualizar} class="primary-edit">Actualizar</button>

src/routes/tarea/[tareaId]/edit.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ html {
55
.row-edit {
66
font-size: 1.1rem;
77
display: grid;
8-
grid-template-columns: 1fr 1fr 1fr;
8+
grid-template-columns: 1fr 2fr;
99
gap: 10px;
10-
margin: 2rem 0;
10+
margin: 2rem 5rem;
1111
}
1212

1313
.row-edit label {

0 commit comments

Comments
 (0)