{#
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
#}
{% extends 'appbuilder/general/model/edit.html' %}

{% block tail_js %}
  {{ super() }}
  <script>
    var db = $("#con");
    var schema = $("#schema");

    // this element is a text input
    // copy it here so it can be reused later
    var any_schema_is_allowed = schema.clone();

    update_schemas_allowed_for_columnar_upload(db.val());
    db.change(function(){
        update_schemas_allowed_for_columnar_upload(db.val());
    });

    function update_schemas_allowed_for_columnar_upload(db_id) {
        $.ajax({
          method: "GET",
          url: "/superset/schemas_access_for_file_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);
        });
    }

    function change_schema_field_in_formview(schemas_allowed){
        if (schemas_allowed && schemas_allowed.length > 0) {
            var dropdown_schema_lists = '<select id="schema" name="schema" required>';
            schemas_allowed.forEach(function(schema_allowed) {
              dropdown_schema_lists += ('<option value="' + schema_allowed + '">' + schema_allowed + '</option>');
            });
            dropdown_schema_lists += '</select>';
            $("#schema").replaceWith(dropdown_schema_lists);
        } else {
            $("#schema").replaceWith(any_schema_is_allowed)
        }
    }
  </script>
{% endblock %}
