Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var createUploadFaqButton = {
  2.     icon: 'BulkUpload',
  3.     class: 'uploadFiles',
  4.     text: 'Cargar archivos',
  5.     permissions: 'EditListItems',
  6.     onClick: function(component, item){
  7.         var form = null;
  8.         var context = component._getPageContext();
  9.         var page = component._getPage();
  10.         var item = item != null ? item : context.item;
  11.  
  12.         // Create dynamic Popup
  13.         var dynamicPopup = app.popup.create({
  14.             content: `
  15.                 <div class="popup update-state-popup" style="overflow:auto">
  16.                     <div class="close-popup close-button"><i class="ms-Icon ms-Icon--ChromeClose" aria-hidden="true"></i></div>
  17.                     <div class="block">
  18.                         <div class="update-form"></div>
  19.                         <div class="buttons-container ms-slideLeftIn10 hide">
  20.                             <button class="button button-fill close-popup">Cancelar</button>
  21.                             <button class="button button-fill update">Cargar</button>
  22.                         </div>
  23.                     </div>
  24.                 </div>
  25.             `,
  26.             // Events
  27.             on: {
  28.                 opened: function (popup) {
  29.                     var $container = $(popup.el),
  30.                         $updateButton = $container.find('.update'),
  31.                         $closeButton = $container.find('.close-popup'),
  32.                         $buttonsContainer = $container.find('.buttons-container');
  33.  
  34.                     // formulario de actualización
  35.                     form = new EFWForm({
  36.                         editable: true,
  37.                         container: $container.find('.update-form'),
  38.                         title: ('Carga de documentos sobre carpeta ' + item.FileLeafRef),
  39.                         description: 'Por favor complete los datos para la carga de documentación sobre la capeta actual. Toda esta información será utilizada para que usted pueda realizar búsquedas y filtros de información más efectiva. Si carga más de un archivo al mismo tiempo, la información que especifique en este formulario será compartida por todos estos archivos.',
  40.                         fields: (function(){
  41.                             var fields = context.list.ViewFields;
  42.  
  43.                             fields = fields.filter(function(f){
  44.                                 return f.ReadOnlyField == false
  45.                             })
  46.  
  47.                             // agregar campo de adjuntos virtual
  48.                             fields.push({
  49.                                 Id: generateUUID(),
  50.                                 TypeAsString: 'Attachments',
  51.                                 Title: 'Cargar archivos',
  52.                                 Description: 'Seleccionar simultáneamente un máximo de 8 archivos adjuntos. El tamaño total de los archivos adjuntos, no debe superar los 100 MB.',
  53.                                 InternalName: 'Attachments',
  54.                             })
  55.  
  56.                             return fields
  57.                         })()
  58.                     });
  59.  
  60.                     $buttonsContainer.removeClass('hide');
  61.  
  62.                     // {event} cerrar popup
  63.                     $closeButton.on('click', function(e){
  64.                         popup.close();
  65.                     });
  66.  
  67.                     // {event} enviar correo
  68.                     $updateButton.on('click', function(e){
  69.                         form.checkFieldsRequired();
  70.                        
  71.                         if (form.getValidation()){
  72.                             var successCount = 0;
  73.                             var failureCount = 0;
  74.                             var metadata = form.getMetadata();
  75.                             var dialog = app.dialog.progress('Cargando archivos', 10);
  76.                             var files = metadata['Attachments'];
  77.  
  78.                             delete metadata['Attachments'];
  79.  
  80.                             // función que verifica progreso de carga
  81.                             var uploadProcessComplete = function(){
  82.                                 dialog.setText(successCount + ' archivos cargados de ' + files.length);
  83.                                 dialog.setProgress(successCount * 100 / files.length);
  84.  
  85.                                 // se se han cargado todos los componentes, cerrar panel de carga
  86.                                 if ((successCount + failureCount) == files.length){
  87.                                     dialog.close();
  88.  
  89.                                     // reinicar virtualList con el elemento seleccionado y reacticar contexto
  90.                                     component.requestItems();
  91.                                     popup.close();                                    
  92.                                 }
  93.                             };
  94.  
  95.                             uploadProcessComplete();
  96.                             // inicar cargar y subida de archivos
  97.                             for (var i = 0; i < files.length; i++){
  98.                                 (function(file){                    
  99.                                     spo.uploadFile(spo.getSiteUrl(), context.parameters.folderServerRelativeUrl, context.list.Title, file, metadata, true,
  100.                                         function(response){
  101.                                             successCount++;
  102.                                             uploadProcessComplete();
  103.                                         },
  104.                                         function(response){
  105.                                             failureCount++;
  106.                                             uploadProcessComplete();
  107.                                         },
  108.                                     )
  109.                                 })(files[i])
  110.                             }
  111.                         } else {
  112.                             app.dialog.create({
  113.                                 title: 'Datos insuficientes',
  114.                                 text: 'Por favor complete todos los campos indicados como requeridos e inténtelo nuevamente',
  115.                                 buttons: [
  116.                                     {
  117.                                         text: 'Aceptar',
  118.                                     },
  119.                                 ],
  120.                                 verticalButtons: false,
  121.                             }).open();
  122.                         }
  123.                     })
  124.                 },
  125.                 closed: function (popup) {
  126.                     if (form) form.destroy();
  127.                 },
  128.             }
  129.         });
  130.  
  131.         dynamicPopup.open();
  132.     }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement