Use new error handler in UploadCollectionScene
This commit is contained in:
@@ -21,7 +21,9 @@
|
|||||||
|
|
||||||
import { upload_collection } from "../api/api.js";
|
import { upload_collection } from "../api/api.js";
|
||||||
import { Collection } from "../models/collection.js";
|
import { Collection } from "../models/collection.js";
|
||||||
import { cleanHREFinput, isValidHREF, onCleanHREFinput, random_uuid } from "../utils/misc.js";
|
import { ErrorHandler } from "../utils/error.js";
|
||||||
|
import { FormValidator, validate_files, validate_href } from "../utils/form_validator.js";
|
||||||
|
import { cleanHREFinput, onCleanHREFinput, random_uuid } from "../utils/misc.js";
|
||||||
import { Scene, pop_scene, scene_stack } from "./scene_manager.js";
|
import { Scene, pop_scene, scene_stack } from "./scene_manager.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,6 +46,7 @@ export class UploadCollectionScene {
|
|||||||
/** @type {HTMLElement} */ let href_label = html_scene.querySelector("label[for=href]");
|
/** @type {HTMLElement} */ let href_label = html_scene.querySelector("label[for=href]");
|
||||||
/** @type {HTMLElement} */ let hreflimitmsg_html = html_scene.querySelector("[data-name=hreflimitmsg]");
|
/** @type {HTMLElement} */ let hreflimitmsg_html = html_scene.querySelector("[data-name=hreflimitmsg]");
|
||||||
/** @type {HTMLElement} */ let pending_html = html_scene.querySelector("[data-name=pending]");
|
/** @type {HTMLElement} */ let pending_html = html_scene.querySelector("[data-name=pending]");
|
||||||
|
/** @type {HTMLElement} */ let error_form = html_scene.querySelector("[data-name=error]");
|
||||||
|
|
||||||
let files = uploadfile_form.files;
|
let files = uploadfile_form.files;
|
||||||
href_form.addEventListener("input", onCleanHREFinput);
|
href_form.addEventListener("input", onCleanHREFinput);
|
||||||
@@ -53,6 +56,12 @@ export class UploadCollectionScene {
|
|||||||
href_form.value = "";
|
href_form.value = "";
|
||||||
let href = "";
|
let href = "";
|
||||||
|
|
||||||
|
let errorHandler = new ErrorHandler(error_form);
|
||||||
|
let validator = new FormValidator(errorHandler);
|
||||||
|
|
||||||
|
validator.addValidator(href_form, validate_href(href_form, "HREF"));
|
||||||
|
validator.addValidator(uploadfile_form, validate_files(uploadfile_form, "file"));
|
||||||
|
|
||||||
/** @type {?number} */ let scene_index = null;
|
/** @type {?number} */ let scene_index = null;
|
||||||
/** @type {?XMLHttpRequest} */ let upload_req = null;
|
/** @type {?XMLHttpRequest} */ let upload_req = null;
|
||||||
/** @type {Array<string>} */ let results = [];
|
/** @type {Array<string>} */ let results = [];
|
||||||
@@ -60,9 +69,10 @@ export class UploadCollectionScene {
|
|||||||
|
|
||||||
function upload_start() {
|
function upload_start() {
|
||||||
try {
|
try {
|
||||||
if (!read_form()) {
|
if (!validator.validate()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
read_form();
|
||||||
uploadfile_form.classList.add("hidden");
|
uploadfile_form.classList.add("hidden");
|
||||||
uploadfile_lbl.classList.add("hidden");
|
uploadfile_lbl.classList.add("hidden");
|
||||||
href_form.classList.add("hidden");
|
href_form.classList.add("hidden");
|
||||||
@@ -125,40 +135,33 @@ export class UploadCollectionScene {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} i
|
||||||
|
*/
|
||||||
function updateFileStatus(i) {
|
function updateFileStatus(i) {
|
||||||
if (nodes === null) {
|
if (nodes === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let success_form = nodes[i].querySelector("[data-name=success]");
|
/** @type {HTMLElement} */ let file_success_form = nodes[i].querySelector("[data-name=success]");
|
||||||
let error_form = nodes[i].querySelector("[data-name=error]");
|
/** @type {HTMLElement} */ let file_error_form = nodes[i].querySelector("[data-name=error]");
|
||||||
if (results.length > i) {
|
if (results.length > i) {
|
||||||
if (results[i]) {
|
if (results[i]) {
|
||||||
success_form.classList.add("hidden");
|
file_success_form.classList.add("hidden");
|
||||||
error_form.textContent = "Error: " + results[i];
|
file_error_form.textContent = "Error: " + results[i];
|
||||||
error_form.classList.remove("hidden");
|
error_form.classList.remove("hidden");
|
||||||
} else {
|
} else {
|
||||||
success_form.classList.remove("hidden");
|
file_success_form.classList.remove("hidden");
|
||||||
error_form.classList.add("hidden");
|
file_error_form.classList.add("hidden");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
success_form.classList.add("hidden");
|
file_success_form.classList.add("hidden");
|
||||||
error_form.classList.add("hidden");
|
file_error_form.classList.add("hidden");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function read_form() {
|
function read_form() {
|
||||||
cleanHREFinput(href_form);
|
cleanHREFinput(href_form);
|
||||||
let newhreftxtvalue = href_form.value.trim().toLowerCase();
|
href = href_form.value.trim().toLowerCase();
|
||||||
if (!isValidHREF(newhreftxtvalue)) {
|
|
||||||
alert("You must enter a valid HREF");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
href = newhreftxtvalue;
|
|
||||||
|
|
||||||
if (uploadfile_form.files.length == 0) {
|
|
||||||
alert("You must select at least one file to upload");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
files = uploadfile_form.files;
|
files = uploadfile_form.files;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -169,7 +172,7 @@ export class UploadCollectionScene {
|
|||||||
hreflimitmsg_html.classList.remove("hidden");
|
hreflimitmsg_html.classList.remove("hidden");
|
||||||
href_form.classList.add("hidden");
|
href_form.classList.add("hidden");
|
||||||
href_label.classList.add("hidden");
|
href_label.classList.add("hidden");
|
||||||
href_form.value = random_uuid(); // dummy, will be replaced on upload
|
href_form.value = random_uuid(); // fake HREF, will be replaced on upload
|
||||||
} else {
|
} else {
|
||||||
hreflimitmsg_html.classList.add("hidden");
|
hreflimitmsg_html.classList.add("hidden");
|
||||||
href_form.classList.remove("hidden");
|
href_form.classList.remove("hidden");
|
||||||
@@ -195,6 +198,7 @@ export class UploadCollectionScene {
|
|||||||
href_label.classList.remove("hidden");
|
href_label.classList.remove("hidden");
|
||||||
hreflimitmsg_html.classList.add("hidden");
|
hreflimitmsg_html.classList.add("hidden");
|
||||||
pending_html.classList.add("hidden");
|
pending_html.classList.add("hidden");
|
||||||
|
errorHandler.clearError();
|
||||||
close_btn.onclick = null;
|
close_btn.onclick = null;
|
||||||
upload_btn.onclick = null;
|
upload_btn.onclick = null;
|
||||||
href_form.value = "";
|
href_form.value = "";
|
||||||
|
|||||||
@@ -131,3 +131,18 @@ export function validate_equals(input, target, field_name) {
|
|||||||
return "Please type " + target + " in the " + field_name + " field";
|
return "Please type " + target + " in the " + field_name + " field";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates that at least one file is selected in a file input.
|
||||||
|
* @param {HTMLInputElement} input
|
||||||
|
* @param {string} field_name
|
||||||
|
* @returns {function(): ?string}
|
||||||
|
*/
|
||||||
|
export function validate_files(input, field_name) {
|
||||||
|
return () => {
|
||||||
|
if (input.files && input.files.length > 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return "Please select at least one " + field_name;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user