about summary refs log tree commit diff
path: root/uploader
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-12-16 12:30:15 -0600
committerFrederick Muriuki Muriithi2024-12-16 12:30:15 -0600
commit2ee4949f29b4c1e16b949c18a17b9e5b1300b8ba (patch)
tree2c98ff987554649ef2291cee9d7592fd5f23afb6 /uploader
parentb8d987f87a37e557a6e20a1b68022e6efe10be76 (diff)
downloadgn-uploader-2ee4949f29b4c1e16b949c18a17b9e5b1300b8ba.tar.gz
Handle error conditions
* Only fetch abstract details if the summary is successful
* Indicate error if fetching summary fails
Diffstat (limited to 'uploader')
-rw-r--r--uploader/templates/phenotypes/add-phenotypes-base.html117
1 files changed, 67 insertions, 50 deletions
diff --git a/uploader/templates/phenotypes/add-phenotypes-base.html b/uploader/templates/phenotypes/add-phenotypes-base.html
index 7ad1e09..c0dd35d 100644
--- a/uploader/templates/phenotypes/add-phenotypes-base.html
+++ b/uploader/templates/phenotypes/add-phenotypes-base.html
@@ -58,6 +58,9 @@
             <button id="btn-search-pubmed-id" class="btn btn-info">Search</button>
           </span>
         </div>
+        <span id="search-pubmed-id-error"
+              class="form-text text-muted text-danger hidden">
+        </span><br />
         <span class="form-text text-muted">
           Enter your publication's PubMed ID above and click "Search" to search
           for some (or all) of the publication details requested below.
@@ -226,7 +229,6 @@
   };
 
   var update_publication_details = (details) => {
-      console.log("Updating with the following details:", details);
       Object.entries(details).forEach((entry) => {;
           switch(entry[0]) {
           case "authors":
@@ -245,41 +247,7 @@
       });
   };
 
-  var freds_variable = undefined;
-  $("#btn-search-pubmed-id").on("click", (event) => {
-      event.preventDefault();
-      var search_button = event.target;
-      var pubmed_id = $("#txt-pubmed-id").val().trim();
-      remove_class($("#txt-pubmed-id").parent(), "has-error");
-      if(pubmed_id == "") {
-          add_class($("#txt-pubmed-id").parent(), "has-error");
-          return false;
-      }
-
-      var flag_pub_details = false;
-      var flag_pub_abstract = false;
-      var enable_button = () => {
-          search_button.disabled = !(flag_pub_details && flag_pub_abstract);
-      };
-      search_button.disabled = true;
-      // Fetch publication details
-      $.ajax("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi",
-             {
-                 "method": "GET",
-                 "data": {"db": "pubmed", "id": pubmed_id, "format": "json"},
-                 "success": (data, textStatus, jqXHR) => {
-                     // process and update publication details
-                     update_publication_details(extract_details(
-                         pubmed_id, data.result));
-                 },
-                 "error": (jqXHR, textStatus, errorThrown) => {},
-                 "complete": () => {
-                     flag_pub_details = true;
-                     enable_button();
-                 },
-                 "dataType": "json"
-             });
-      // Fetch the abstract
+  var fetch_publication_abstract = (pubmed_id, pub_details) => {
       $.ajax("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi",
              {
                  "method": "GET",
@@ -290,25 +258,74 @@
                      "retmode": "xml"
                  },
                  "success": (data, textStatus, jqXHR) => {
-                     // process and update the abstract...
-                     freds_variable = data;
-                     console.log("ABSTRACT DETAILS:", data);
                      update_publication_details({
-                         "abstract": Array.from(data
-                                                .getElementsByTagName(
-                                                    "Abstract")[0]
-                                                .children)
-                             .map((elt) => {return elt.textContent.trim();})
-                             .join("\r\n")
-                     });
+                         ...pub_details,
+                         ...{
+                             "abstract": Array.from(data
+                                                    .getElementsByTagName(
+                                                        "Abstract")[0]
+                                                    .children)
+                                 .map((elt) => {return elt.textContent.trim();})
+                                 .join("\r\n")
+                         }});
                  },
                  "error": (jqXHR, textStatus, errorThrown) => {},
-                 "complete": (jqXHR, textStatus) => {
-                     flag_pub_abstract = true;
-                     enable_button();
-                 },
+                 "complete": (jqXHR, textStatus) => {},
                  "dataType": "xml"
              });
+  };
+
+  var fetch_publication_details = (pubmed_id, complete_thunks) => {
+      error_display = $("#search-pubmed-id-error");
+      error_display.text("");
+      add_class(error_display, "hidden");
+      $.ajax("https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi",
+             {
+                 "method": "GET",
+                 "data": {"db": "pubmed", "id": pubmed_id, "format": "json"},
+                 "success": (data, textStatus, jqXHR) => {
+                     // process and update publication details
+                     hasError = (
+                         Object.hasOwn(data, "error") ||
+                             Object.hasOwn(data.result[pubmed_id], "error"));
+                     if(hasError) {
+                         error_display.text(
+                             "There was an error fetching a publication with " +
+                                 "the given PubMed ID! The error received " +
+                                 "was: '" + (
+                                     data.error ||
+                                         data.result[pubmed_id].error) +
+                                 "'. Please check ID you provided and try " +
+                                 "again.");
+                         remove_class(error_display, "hidden");
+                     } else {
+                         fetch_publication_abstract(
+                             pubmed_id,
+                             extract_details(pubmed_id, data.result));
+                     }
+                 },
+                 "error": (jqXHR, textStatus, errorThrown) => {},
+                 "complete": () => {
+                     complete_thunks.forEach((thunk) => {thunk()});
+                 },
+                 "dataType": "json"
+             });
+  };
+
+  $("#btn-search-pubmed-id").on("click", (event) => {
+      event.preventDefault();
+      var search_button = event.target;
+      var pubmed_id = $("#txt-pubmed-id").val().trim();
+      remove_class($("#txt-pubmed-id").parent(), "has-error");
+      if(pubmed_id == "") {
+          add_class($("#txt-pubmed-id").parent(), "has-error");
+          return false;
+      }
+
+      search_button.disabled = true;
+      // Fetch publication details
+      fetch_publication_details(pubmed_id,
+                                [() => {search_button.disabled = false;}]);
       return false;
   });
 </script>