Add client validation

This commit is contained in:
John Stephani
2024-02-21 19:17:13 -06:00
parent 5799cd649b
commit 14b3f38b5d
2 changed files with 36 additions and 9 deletions
+32 -9
View File
@@ -9,6 +9,7 @@
export let onClose: () => void;
let isDateTimeChanged: boolean;
let isDateTimeValid = true;
let currentDateObject = new Date(Date.parse(activity.customDate ?? activity.createdAt));
let currentDateString = dateToInputDateString(currentDateObject);
let currentTimeString = dateToInputTimeString(currentDateObject);
@@ -33,10 +34,22 @@
return `${hours}:${minutes}`;
}
function update(date: string, time: string) {
const epochMillis = Date.parse(`${date} ${time}`);
function validateNewDate() {
const epochMillis = Date.parse(`${selectedDateString} ${selectedTimeString}`);
const dateObj = new Date(epochMillis);
updateActivity(watchedId, activity.id, dateObj);
if (dateObj.getFullYear() > 1970 && dateObj.getFullYear() < 2100) {
isDateTimeValid = true;
} else {
isDateTimeValid = false;
}
return dateObj;
}
function update() {
const dateObj = validateNewDate();
if (isDateTimeValid && isDateTimeChanged) {
updateActivity(watchedId, activity.id, dateObj);
}
onClose();
}
@@ -49,16 +62,26 @@
<Modal title="Edit Activity" desc={activityMessage} maxWidth="400px" {onClose}>
<div class="centered">
<h3>Date</h3>
<input id="activity-date" type="date" bind:value={selectedDateString} />
<input
id="activity-date"
type="date"
bind:value={selectedDateString}
on:change={validateNewDate}
class:invalid={!isDateTimeValid}
/>
<h3>Time</h3>
<input id="activity-time" type="time" bind:value={selectedTimeString} />
<input
id="activity-time"
type="time"
bind:value={selectedTimeString}
on:change={validateNewDate}
/>
<div class="button-row">
<button class="danger" on:click={remove}>Delete</button>
<button
on:click={() => update(selectedDateString, selectedTimeString)}
disabled={!isDateTimeChanged}>Update</button
>
<div>
<button on:click={update} disabled={!(isDateTimeChanged && isDateTimeValid)}>Update</button>
</div>
</div>
</div>
</Modal>
+4
View File
@@ -62,6 +62,10 @@
width: 100%;
}
:global(input.invalid) {
border: 3px solid $error;
}
:global(textarea) {
padding: 5px;
max-width: 100%;