Package Mananger
[osm/UI.git] / skyquake / plugins / composer / src / src / libraries / FileManagerUploadDropZone.js
diff --git a/skyquake/plugins/composer/src/src/libraries/FileManagerUploadDropZone.js b/skyquake/plugins/composer/src/src/libraries/FileManagerUploadDropZone.js
new file mode 100644 (file)
index 0000000..963e57e
--- /dev/null
@@ -0,0 +1,136 @@
+
+/*
+ *
+ *   Copyright 2016 RIFT.IO Inc
+ *
+ *   Licensed 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.
+ *
+ */
+/**
+ * Created by onvelocity on 10/27/15.
+ */
+
+import guid from '../libraries/guid'
+import DropZone from 'dropzone'
+import Utils from '../libraries/utils'
+import CatalogPackageManagerActions from '../actions/CatalogPackageManagerActions';
+import FileManagerActions from '../components/filemanager/FileManagerActions.js';
+
+/**
+ * This class is responsible for wiring the DropZone.js to our React actions.
+ */
+
+const ACTIONS = {
+       onboard: 'onboard',
+       update: 'update'
+};
+
+function getCatalogPackageManagerServerOrigin() {
+       // return Utils.getSearchParams(window.location).upload_server + ':4567';
+       return window.location.origin;
+}
+
+function initializeDropZone(element = '#dropzone', button = false, action = ACTIONS.onboard, type, id, path) {
+       let Auth = 'Basic ' + window.sessionStorage.getItem("auth");
+       let dev_download_server = Utils.getSearchParams(window.location).dev_download_server;
+       DropZone.autoDiscover = false;
+       return new DropZone(element, {
+               paramName: 'package',
+               url() {
+                       if (action === ACTIONS.update) {
+                               return getCatalogPackageManagerServerOrigin() + '/api/update';
+                       }
+                       return getCatalogPackageManagerServerOrigin() + '/composer/api/file-manager?api_server=' + Utils.getSearchParams(window.location).api_server + '&package_type=' + type + '&package_id=' + id + '&package_path=' + path + ( dev_download_server ? '&dev_download_server=' + dev_download_server : '');
+               },
+               headers: {
+                       'Authorization': Auth
+               },
+               maxFilesize: 10000000000,
+               clickable: button,
+               autoProcessQueue: true,
+               previewTemplate: '',
+               sending(file, xhr, formData) {
+                       // NOTE ie11 does not get this form data
+                       formData.append('id', file.id);
+                       FileManagerActions.addFileSuccess({
+                               fileName: file.name,
+                               path: path
+                       })
+               },
+               error(file, errorMessage) {
+                       const response = {
+                               state: file,
+                               data: {
+                                       status: 'upload-error',
+                                       message: errorMessage
+                               }
+                       };
+                       CatalogPackageManagerActions.uploadCatalogPackageError(response);
+               },
+               success(file) {
+                       const data = JSON.parse(file.xhr.responseText);
+                       data.status = 'upload-success';
+                       const response = {
+                               state: file,
+                               data: data
+                       };
+                       //CatalogPackageManagerActions.uploadCatalogPackageStatusUpdated(response);
+               },
+               addedfile(file) {
+                       file.id = file.id || guid();
+                       file.riftAction = action;
+                       //CatalogPackageManagerActions.uploadCatalogPackage(file);
+               },
+               thumbnail(file, dataUrl) {
+                       const response = {
+                               state: file,
+                               data: {
+                                       status: 'upload-thumbnail',
+                                       dataUrl: dataUrl
+                               }
+                       };
+                       //CatalogPackageManagerActions.uploadCatalogPackageStatusUpdated(response);
+               },
+               uploadprogress(file, progress, bytesSent) {
+                       // FileManagerActions.addFileSuccess({
+                       //      path: path,
+                       //      fileName: file.name
+                       // });
+                       const response = {
+                               state: file,
+                               data: {
+                                       status: 'upload-progress',
+                                       progress: progress,
+                                       bytesSent: bytesSent
+                               }
+                       };
+                       //CatalogPackageManagerActions.uploadCatalogPackageStatusUpdated(response);
+               }
+       });
+}
+
+export default class CatalogPackageManagerUploadDropZone {
+
+       constructor(element, button, action, type, id, path) {
+               this.dropZone = initializeDropZone(element, button, action, type, id, path);
+       }
+
+       static get ACTIONS() {
+               return ACTIONS;
+       }
+
+       on(eventName, eventCallback) {
+               this.dropZone.on(eventName, eventCallback);
+       }
+
+}