You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by su...@apache.org on 2021/03/19 21:25:49 UTC

[superset] 01/02: remove jquery dependency from excel_to_database_view (+ fix bugs)

This is an automated email from the ASF dual-hosted git repository.

suddjian pushed a commit to branch kill-jquery
in repository https://gitbox.apache.org/repos/asf/superset.git

commit f95f2624c7a4253b134e707b6ebbdaa3a78cf9e1
Author: David Aaron Suddjian <aa...@gmail.com>
AuthorDate: Fri Mar 19 14:24:17 2021 -0700

    remove jquery dependency from excel_to_database_view (+ fix bugs)
---
 .../form_view/excel_to_database_view/edit.html     | 55 +++++++++++++---------
 1 file changed, 34 insertions(+), 21 deletions(-)

diff --git a/superset/templates/superset/form_view/excel_to_database_view/edit.html b/superset/templates/superset/form_view/excel_to_database_view/edit.html
index fb7c432..ff887a9 100644
--- a/superset/templates/superset/form_view/excel_to_database_view/edit.html
+++ b/superset/templates/superset/form_view/excel_to_database_view/edit.html
@@ -21,31 +21,44 @@
 {% block tail_js %}
   {{ super() }}
   <script>
-    var db = $("#con");
-    var schema = $("#schema");
+    var db = document.getElementById("con");
+    var schema = document.getElementById("schema");
 
-    // this element is a text input
+    // this element starts as a text input by default
+    // but is replaced with a select input if we get a list of the db's schemas.
     // copy it here so it can be reused later
-    var any_schema_is_allowed = schema.clone();
+    var any_schema_is_allowed = schema.cloneNode();
 
-    update_schemas_allowed_for_excel_upload(db.val());
-    db.change(function(){
-        update_schemas_allowed_for_excel_upload(db.val());
+    update_schemas_allowed_for_excel_upload(db.value);
+    db.addEventListener("change", function(){
+        update_schemas_allowed_for_excel_upload(db.value);
     });
 
+    function tryParseResponse(responseText, alt) {
+        try {
+            return JSON.parse(responseText);
+        } catch (error) {
+            return null;
+        }
+    }
+
     function update_schemas_allowed_for_excel_upload(db_id) {
-        $.ajax({
-          method: "GET",
-          url: "/superset/schemas_access_for_excel_upload",
-          data: {db_id: db_id},
-          dataType: 'json',
-          contentType: "application/json; charset=utf-8"
-        }).done(function(data) {
-          change_schema_field_in_formview(data)
-        }).fail(function(error) {
-          var errorMsg = error.responseJSON.error;
-          alert("ERROR: " + errorMsg);
-        });
+        var url = "/superset/schemas_access_for_csv_upload?db_id=" + db_id;
+        var request = new XMLHttpRequest();
+        request.open("GET", url, true);
+        //Send the proper header information along with the request
+        request.setRequestHeader("Content-type", 'application/json; charset=UTF-8');
+        request.onload = function() {
+            var response = tryParseResponse(request.responseText);
+            if (request.status === 200) {
+                change_schema_field_in_formview(response);
+            } else {
+                var errorMsg = response ? response.error : "failed to get schemas for this database";
+                change_schema_field_in_formview([]);
+                alert("ERROR: " + errorMsg);
+            }
+        }
+        request.send();
     }
 
     function change_schema_field_in_formview(schemas_allowed){
@@ -55,9 +68,9 @@
               dropdown_schema_lists += ('<option value="' + schema_allowed + '">' + schema_allowed + '</option>');
             });
             dropdown_schema_lists += '</select>';
-            $("#schema").replaceWith(dropdown_schema_lists);
+            document.getElementById("schema").replaceWith(dropdown_schema_lists);
         } else {
-            $("#schema").replaceWith(any_schema_is_allowed)
+            document.getElementById("schema").replaceWith(any_schema_is_allowed)
         }
     }
   </script>