/* * * 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. * */ //https://raw.githubusercontent.com/RIFTIO/RIFT.ware/master/rift-shell import _cloneDeep from 'lodash/cloneDeep' import _findIndex from 'lodash/findIndex' import React from 'react'; import ReactDOM from 'react-dom'; import TreeView from 'react-treeview'; import TextInput from 'widgets/form_controls/textInput.jsx'; import Button from '../Button'; import './FileMananger.scss'; import FileManagerActions from './FileManagerActions.js'; import imgSave from '../../../../node_modules/open-iconic/svg/data-transfer-upload.svg' import {Panel, PanelWrapper} from 'widgets/panel/panel'; import SkyquakeComponent from 'widgets/skyquake_container/skyquakeComponent.jsx'; import LoadingIndicator from 'widgets/loading-indicator/loadingIndicator.jsx'; import DropZone from 'dropzone' import Utils from '../../libraries/utils' import FileManagerUploadDropZone from '../../libraries/FileManagerUploadDropZone'; let API_SERVER = require('utils/rw.js').getSearchParams(window.location).api_server; const createDropZone = function (action, clickable, type, id, path, dropTarget) { const dropZone = new FileManagerUploadDropZone(ReactDOM.findDOMNode(dropTarget), [clickable], action, type, id, path); // dropZone.on('dragover', this.onDragOver); // dropZone.on('dragend', this.onDragEnd); // dropZone.on('addedfile', this.onFileAdded); return dropZone; }; //updateFileLocationInput class FileManager extends React.Component { constructor(props) { super(props) } componentWillMount() { // FileManagerActions.openFileManagerSockets() } componentWillUnmount() { // FileManagerActions.closeFileManagerSockets(); } generateFolder(data, nesting) { let nestingLevel = nesting || 1; } deleteFile(name) { return function(e) { FileManagerActions.deletePackageFile(name); } } updateFileLocationInput(name) { return function(e) { FileManagerActions.updateFileLocationInput({ name: name, value: e.target.value }); } } sendDownloadFileRequst = (url, path) => { let self = this; return function(e) { if(!url || url == "") { return self.props.actions.showNotification.defer({type: 'error', msg: 'Value missing in download request'});; } let files = self.props.files.data; let folder = path.split('/'); let splitUrl = url.split('/'); let fileName = splitUrl[splitUrl.length - 1]; folder.pop; let fullPath = _cloneDeep(folder); fullPath.push(fileName); fullPath = fullPath.join('/'); folder = folder.join('/'); let fileIndex = _findIndex(files[folder], function(f) { return f.name == fullPath; }) if (fileIndex == -1) { FileManagerActions.sendDownloadFileRequst({ url: url, path: path }); } else { self.props.actions.showNotification('It seems you\'re attempting to upload a file with a duplicate file name'); } } } render() { let self = this; let html = (
{self.props.files && self.props.files.id && buildList(self, self.props.files) }
) return html; } } function buildList(self, data) { let toReturn = []; data.id.map(function(k,i) { toReturn.push (contentFolder(self, data.data[k], k, i, self.props.filesState, self.updateFileLocationInput, self.sendDownloadFileRequst, self.deleteFile)); }); return toReturn.reverse(); } function contentFolder(context, folder, path, key, inputState, updateFn, sendDownloadFileRequst, deleteFn) { let type = context.props.type; let id = context.props.item.id; let classId = `DZ-${path.replace(/\//g, '-')}`; const onboardDropZone = createDropZone.bind(this, FileManagerUploadDropZone.ACTIONS.onboard, '.ComposerAppAddFile.' + classId, type, id, path); return (
{ folder.map(function(f, i) { if( !f.hasOwnProperty('contents') ){ return contentFile(context, f, path, i, deleteFn); } }) }
OR
); } class ItemUpload extends React.Component { constructor(props) { super(props); } componentDidMount() { if (this.props.dropZone) { const dropTarget = this; const dropZone = this.props.dropZone(dropTarget); } } render() { let {type, id, path, key, ...props} = this.props; let classId = `DZ-${path.replace(/\//g, '-')}`; return (
) } } function contentFile(context, file, path, key, deleteFn) { const name = stripPath(file.name, path); const id = context.props.item.id; const type = context.props.type; const downloadHost = API_SERVER.match('localhost') || API_SERVER.match('127.0.0.1') ? `${window.location.protocol}//${window.location.hostname}` : API_SERVER; //{`${window.location.protocol}//${API_SERVER}:4567/api/package${type}/${id}/${path}/${name}`} return (
{file.status && (file.status == 'IN_PROGRESS' || file.status == 'DOWNLOADING' ) ? : file.status }
{name}
X
) } function stripPath(name, path, returnPath) { let stripSlash = (name.indexOf('/') > -1) ? '/' : ''; // return name.split(path + stripSlash)[1].replace('/', ''); let split = name.split(path + stripSlash)[returnPath ? 0 : 1]; return split ? split.replace('/', '') : name; } export default SkyquakeComponent(FileManager) /** * Sample Data */ // let files = { // "name": ".", // "contents": [ // { // "name": "pong_vnfd", // "contents": [ // { // "name": "pong_vnfd/checksums.txt", // "last_modified_time": 1474458399.6218443, // "byte_size": 168 // }, // { // "name": "pong_vnfd/pong_vnfd.yaml", // "last_modified_time": 1474458399.6258445, // "byte_size": 3514 // }, // { // "name": "pong_vnfd/icons", // "contents": [ // { // "name": "pong_vnfd/icons/rift_logo.png", // "last_modified_time": 1474458399.6218443, // "byte_size": 1658 // } // ], // "last_modified_time": 1474458399.6218443, // "byte_size": 3 // }, // { // "name": "pong_vnfd/cloud_init", // "contents": [ // { // "name": "pong_vnfd/cloud_init/pong_cloud_init.cfg", // "last_modified_time": 1474458399.6258445, // "byte_size": 227 // } // ], // "last_modified_time": 1474458399.6258445, // "byte_size": 3 // } // ], // "last_modified_time": 1474458399.6258445, // "byte_size": 6 // } // ], // "last_modified_time": 1474458399.6218443, // "byte_size": 3 // };