import { useTracker } from 'meteor/react-meteor-data'; import { Meteor } from 'meteor/meteor'; import { Mongo } from 'meteor/mongo'; import React, { useState, useRef } from 'react'; // import PropTypes from 'prop-types'; import { FilesCol } from '/imports/api/files.js'; import FolderTreeIndividualFile from '/imports/ui/files/FolderTreeIndividualFile.jsx'; import _, { upperCase } from 'lodash'; const debug = require('debug')('demo:file'); const FolderTreeFileUpload = (props) => { //////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// const treeFileId = new Mongo.ObjectID(); ///////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// const [upId, setUpId] = useState(null); const [uploading, setUploading] = useState([]); const [progress, setProgress] = useState(0); const [inProgress, setInProgress] = useState(false); const fileinput = useRef(); const files = useTracker(() => { const filesHandle = Meteor.subscribe('files.folderTree', upId); // const docsReadyYet = filesHandle.ready(); const files = FilesCol?.find(upId).fetch(); // Meteor.userId() ?? "nop" //"meta.avatarId": avatarId return files; }); function uploadIt(e) { e.preventDefault(); //let self = this; if (e.currentTarget.files && e.currentTarget.files[0]) { // We upload only one file, in case // there was multiple files selected var file = e.currentTarget.files[0]; if (file) { console.log("IfFile: ", file); let uploadInstance = FilesCol.insert({ file, meta: { //locator: file.link(), userId: Meteor.userId(), // Optional, used to check on server for file tampering type: "folderTree" //avatarId }, chunkSize: 'dynamic', allowWebWorkers: true // If you see issues with uploads, change this to false }, false); setUploading(uploadInstance); // Keep track of this instance to use below setInProgress(true); // Show the progress bar now // These are the event functions, don't need most of them, it shows where we are in the process uploadInstance.on('start', function () { console.log('Starting'); }); uploadInstance.on('end', function (error, fileObj) { console.log('On end File Object: ', fileObj); props.setFolderTreeId(fileObj._id); }); uploadInstance.on('uploaded', function (error, fileObj) { console.log('uploaded: ', fileObj); setUpId(fileObj._id); // Remove the filename from the upload box fileinput.current.value = ''; // Reset our state for the next file setUploading([]); setProgress(0); setInProgress(false); props.setNouFolderTree(true); }); uploadInstance.on('error', function (error, fileObj) { console.log('Error during upload: ' + error) }); uploadInstance.on('progress', function (progress, fileObj) { console.log('Upload Percentage: ' + progress) // Update our progress bar setProgress(progress); }); uploadInstance.start(); // Must manually start the upload } } } // This is our progress bar, bootstrap styled // Remove this function if not needed function showUploads() { console.log('**********************************', uploading); if (!_.isEmpty(uploading)) { return
Adjunta un arxiu FolderTree*:
* Un FolderTree és un arxiu en format JSON generat per un commandament 'treedump'** o 'treedumpl'***
{`** treedump () { tree -J -s -f \${@[$#]} }`}