/** * 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. */ define([ "require", "backbone", "hbs!tmpl/import/ImportLayoutView_tmpl", "modules/Modal", 'utils/CommonViewFunction', "utils/Utils", "utils/UrlLinks", "dropzone" ], function(require, Backbone, ImportLayoutViewTmpl, Modal, CommonViewFunction, Utils, UrlLinks, dropzone) { var ImportLayoutView = Backbone.Marionette.LayoutView.extend( /** @lends ImportLayoutView */ { _viewName: "ImportLayoutView", template: ImportLayoutViewTmpl, /** Layout sub regions */ regions: {}, /** ui selector cache */ ui: {}, /** ui events hash */ events: function() { var events = {}; return events; }, /** * intialize a new ImportLayoutView Layout * @constructs */ initialize: function(options) { _.extend(this, _.pick(options, "callback", "isGlossary")); var that = this; this.modal = new Modal({ title: this.isGlossary ? "Import Glossary" : "Import Business Metadata", content: this, cancelText: "Cancel", okText: "upload", allowCancel: true, okCloses: false, mainClass: "dropzone-modal" }).open(); this.modal.$el.find("button.ok").attr("disabled", true); this.modal.on("ok", function(e) { that.dropzone.processQueue(); }); this.modal.on("closeModal", function() { that.modal.trigger("cancel"); }); }, bindEvents: function() {}, onRender: function() { var that = this; this.dropzone = null; var updateButton = function(files) { var buttonEl = that.modal.$el.find("button.ok"); if (files.length === 0) { buttonEl.attr("disabled", true); } else { buttonEl.attr("disabled", false); } } var headers = {}; headers[CommonViewFunction.restCsrfCustomHeader] = '""'; this.$("#importGlossary").dropzone({ url: that.isGlossary ? UrlLinks.glossaryImportUrl() : UrlLinks.businessMetadataImportUrl(), clickable: true, acceptedFiles: ".csv,.xls,.xlsx", autoProcessQueue: false, maxFiles: 1, addRemoveLinks: true, init: function() { that.dropzone = this; this.on('addedfile', function(file) { updateButton(this.files); }) this.on('removedfile', function(file) { updateButton(this.files); }) }, maxfilesexceeded: function(file) { this.removeAllFiles(); this.addFile(file); }, success: function(file, response, responseObj) { var success = true; if (response.failedImportInfoList && response.failedImportInfoList.length) { success = false; Utils.defaultErrorHandler(null, file.xhr, { defaultErrorMessage: response.failedImportInfoList[0].remarks }); } if (success) { that.modal.trigger("cancel"); Utils.notifySuccess({ content: "File: " + file.name + " imported successfully" }); } if (that.callback && ((response.successImportInfoList && response.successImportInfoList.length > 0) || success)) { that.callback(); } }, error: function(file, response, responseObj) { Utils.defaultErrorHandler(null, responseObj, { defaultErrorMessage: (response.errorMessage) || response }); that.modal.$el.find("button.ok").attr("disabled", false); }, dictDefaultMessage: "Drop files here or click to upload.", headers: headers }); } } ); return ImportLayoutView; });