codevise/pageflow

View on GitHub
package/src/editor/views/FilesImporterView.js

Summary

Maintainability
A
1 hr
Test Coverage
import Backbone from 'backbone';
import Marionette from 'backbone.marionette';


import {LoadingView} from './LoadingView';
import template from '../templates/filesImporter.jst';
import {dialogView} from './mixins/dialogView';
import {app} from '../app';
import {editor} from '../base'
import {FileImport} from '../models/FileImport'
import {ConfirmFileImportUploadView} from './ConfirmFileImportUploadView'
import {state} from '$state';

export const FilesImporterView = Marionette.ItemView.extend({
  template,
  className: 'files_importer editor dialog',

  mixins: [dialogView],

  ui: {
    contentPanel: '.content_panel',
    spinner: '.lds-spinner',
    importButton: '.import',
    closeButton: '.close'
  },

  events: {
    'click .import': function () {
      this.getMetaData();
    }
  },

  initialize: function(options) {
    this.model = new Backbone.Model({
      importerKey: options.importer.key,
      importer: new FileImport({
        importer: options.importer,
        currentEntry: state.entry
      })
    });

    this.listenTo(this.model.get('importer'), "change", function (event) {
      this.updateImportButton();
      if (!this.isInitialized) {
        this.updateAuthenticationView();
      }
    });
  },
  updateAuthenticationView: function () {
    var importer = this.model.get('importer')
    if (importer.get('isAuthenticated')) {
      this.ui.contentPanel.empty();
      this.ui.contentPanel.append(this.model.get('importer').createFileImportDialogView().render().el);
      this.isInitialized = true
    }
  },
  updateImportButton: function () {
    var importer = this.model.get('importer');
    this.ui.importButton.prop('disabled', importer.get('selectedFiles').length < 1);
  },
  getMetaData: function () {
    var self = this;
    this.model.get('importer').getFilesMetaData().then(function (metaData) {
      if (metaData) {
        self.model.set('metaData', metaData);
        // add each selected file meta to state.files
        for(var i = 0; i<metaData.files.length; i++){
          var file = metaData.files[i];
          var fileType = editor.fileTypes.findByUpload(file);

          file = new fileType.model({
            state: 'uploadable',
            file_name: file.name,
            content_type: file.type,
            file_size: -1,
            rights: file.rights,
            source_url: file.url,
            configuration: {
              source_url: file.source_url
            }
          }, {
            fileType: fileType
          });

          state.entry.getFileCollection(fileType).add(file);
        }
        ConfirmFileImportUploadView.open({
          fileTypes: editor.fileTypes,
          fileImportModel: self.model,
          files: state.files
        });
      }
    });
    this.close();
  },
  onRender: function () {
    if (!this.isInitialized) {
      this.ui.contentPanel.append(this.subview(new LoadingView({tagName: 'div'})).el);
    }
  }
});

FilesImporterView.open = function(options) {
  app.dialogRegion.show(new FilesImporterView(options).render());
};