From 0803841d827af2398c0daf18016fe2fa413d8eab Mon Sep 17 00:00:00 2001 From: Valeri Radinovich Date: Mon, 17 Jun 2019 14:32:31 +0300 Subject: [PATCH 1/4] #1017 #864 Users should be able to rename and move files --- css/interface.css | 166 +++++++++++++++++++- interface.html | 102 ++++++++++++ js/interface.js | 390 ++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 640 insertions(+), 18 deletions(-) diff --git a/css/interface.css b/css/interface.css index 39761a8..7abf2d0 100644 --- a/css/interface.css +++ b/css/interface.css @@ -154,22 +154,33 @@ background-color: transparent; } -.empty-state { +.empty-state, +.move-modal-empty-state { width: 100%; text-align: center; padding-top: 40px; display: none; } +.move-modal-empty-state { + padding-bottom: 40px; +} + .empty-state.active { display: table-caption; } -.empty-state span { +.move-modal-empty-state.active { + display: block; +} + +.empty-state span, +.move-modal-empty-state span { font-size: 30px; } -.empty-state h3 { +.empty-state h3, +.move-modal-empty-state h3 { color: #14505e; } @@ -567,6 +578,10 @@ background-color: #f3f3f3; } +.file-row.moving { + opacity: 0.3; +} + .file-cell { border-bottom: 1px solid rgba(0, 0, 0, 0.065); display: table-cell; @@ -892,3 +907,148 @@ .drop-zone-icon i.fa { text-shadow: 0px 0px 8px rgba(0,0,0,0.2); } + +#move-modal .modal-header > .row, +#move-modal .modal-footer.row { + display: flex; + align-items: center; + margin: 0 !important; +} + +#move-modal .form-control{ + height: 35px; + font-size: 12px; +} + +#move-modal .header-breadcrumbs { + margin-top: 20px; +} + +#move-modal .modal-body { + padding: 0 15px; +} + +.move-modal-list { + padding: 0; + margin: 0; + list-style: none; +} + +.move-modal-list li { + position: relative; + border-top: 1px solid #e5e4e4; + padding: 10px 0 10px 10px; +} + +.move-modal-list li.children:after { + content: ''; + position: absolute; + top: 50%; + right: 15px; + width: 8px; + height: 8px; + border-top: 1px solid #323232; + border-left: 1px solid #323232; + transform: rotate(135deg); + margin-top: -4px; +} + +.move-modal-list li:hover { + background-color: #f5f5f5; +} + +.move-modal-list li.selected { + background-color: #00abd2 !important; + color: #fff; +} + +.move-modal-list li:first-child { + border-top: none; +} + +.move-modal-list__file-name { + position: relative; + padding-left: 30px; +} + +.move-modal-list__file-name:before { + content: "\f07c"; + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + position: absolute; + top: 50%; + left: 0; + width: 25px; + height: 25px; + line-height: 25px; + font-size: 18px; + text-align: center; + -webkit-transform: translate3d(0, -50%, 0); + -ms-transform: translate3d(0, -50%, 0); + transform: translate3d(0, -50%, 0); +} + +.move-modal-loading { + display: none; + min-height: 100px; + text-align: center; + align-items: center; + justify-content: center; +} + +.move-modal-loading.visible { + display: flex; +} + +.move-modal-loading div { + display: inline-block; + position: relative; + width: 40px; + height: 40px; +} + +.move-modal-loading div div { + box-sizing: border-box; + display: block; + position: absolute; + width: 30px; + height: 30px; + margin: 2px; + border: 2px solid #000; + border-radius: 50%; + animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; + border-color: #000 transparent transparent transparent; +} + +.move-modal-loading div div:nth-child(1) { + animation-delay: -0.45s; +} + +.move-modal-loading div div:nth-child(2) { + animation-delay: -0.3s; +} + +.move-modal-loading div div:nth-child(3) { + animation-delay: -0.15s; +} + +@keyframes lds-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@-ms-keyframes lds-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/interface.html b/interface.html index ed13387..b0658e7 100644 --- a/interface.html +++ b/interface.html @@ -172,6 +172,9 @@

Did you know?

  • Download
  • +
  • + Move +
  • Delete @@ -188,6 +191,9 @@

    Did you know?

  • Download
  • +
  • + Move +
  • Delete @@ -332,3 +338,99 @@

    + + + + + + + + + + diff --git a/js/interface.js b/js/interface.js index 2462c13..650dc04 100644 --- a/js/interface.js +++ b/js/interface.js @@ -10,7 +10,11 @@ var templates = { file: template('file'), folder: template('folder'), organizations: template('organizations'), - apps: template('apps') + apps: template('apps'), + moveModal: template('move-modal'), + organizationsSelect: template('select-organizations'), + appsSelect: template('select-apps'), + moveModalFolders: template('move-modal-folders') }; // This should contain either app/org/folder of current folder @@ -21,12 +25,15 @@ var currentAppId; var currentFolders; var currentFiles; var counterOrganization; +var foldersForMoving = {}; +foldersForMoving.navStack = []; +var selectedItemsForMoving; var tetherBox; var folders = []; -var apps; -var organizations; +var appsList; +var organizationsList; var navStack = []; var sideBarMinWidth = 240; @@ -36,17 +43,26 @@ var sideBarMaxWidth = 395; // therefore we want this to be an clean direct link to the API with no token. var useCdn = false; +Handlebars.registerHelper({ + eq: function (v1, v2) { + return v1 === v2; + }, + gt: function (v1, v2) { + return v1 > v2; + } +}); + // CORE FUNCTIONS // // Get organizations and apps list for left side menu function getOrganizationsList() { counterOrganization = 0; Fliplet.Organizations.get().then(function(organizations) { // Sort alphabetically - organizations = _.sortBy(organizations, [function(o) { + organizationsList = _.sortBy(organizations, [function(o) { return o.name; }]); // Add to HTML - organizations.forEach(addOrganizations); + organizationsList.forEach(addOrganizations); }).then(function() { getAppsList(); }); @@ -119,11 +135,11 @@ function getAppsList() { return !app.legacy; }); // Sort apps alphabetically - apps = _.sortBy(apps, [function(o) { + appsList = _.sortBy(apps, [function(o) { return o.name; }]); // Add apps to HTML - apps.forEach(addApps); + appsList.forEach(addApps); navigateToDefaultFolder(); }); @@ -555,6 +571,217 @@ function uploadFiles(files) { }); } +// FUNCTIONS FOR MOVING FILES/FOLDERS IN MODAL + +// Check if folder that has selected items to move has a subfolder and filter it +function excludeFolders(items) { + var parentItemIdOfSelectedItems = navStack[navStack.length-1].id; + var selectedIdPlaceInModal = foldersForMoving.navStack[foldersForMoving.navStack.length-1].id; + var searchResult = items; + var selectedIdForMoving = []; + + for (var i = 0; i < selectedItemsForMoving.length; i++) { + if ($(selectedItemsForMoving[i]).attr('data-file-type') === 'folder') { + selectedIdForMoving.push(Number($(selectedItemsForMoving[i]).attr('data-id'))); + } + } + + if (parentItemIdOfSelectedItems === selectedIdPlaceInModal) { + searchResult = searchResult.filter(function (item) { + for (var i = 0; i < selectedIdForMoving.length; i++) { + return item.id !== selectedIdForMoving[i]; + } + }) + } + + return searchResult; + +} + +// Add app select item template +function addAppsToSelect(apps) { + var $appSelectList = $('#organization-optgroup-' + apps.organizationId); + $appSelectList.append(templates.appsSelect(apps)); +} + +// Create list of folders in modal +function addFoldersToMoveModal(res) { + if (Array.isArray(res)) { + if (res.length < 1) { + $('.move-modal-empty-state').addClass('active'); + } else { + res = _.sortBy(res, [function(o) { + return o.name; + }]); + res.forEach(function (folder) { + $('.move-modal-list').append(templates.moveModalFolders(folder)); + }); + } + } else { + $('.move-modal-list').append(templates.moveModalFolders(res)); + $('.move-modal-empty-state').removeClass('active'); + } +} + +// Add organization select item template +function addOrganizationsToSelect(org) { + var $organizationsSelectList = $('#move-model-organizations-select'); + $organizationsSelectList.append(templates.organizationsSelect(org)); + appsList.forEach(addAppsToSelect); +} + +// Users selected folders tree (for breadcrumbs) +function addPathToStack(id, name, orgId, appId, parentId, type) { + foldersForMoving['navStack'].push( + { + id: Number(id)?Number(id):null, + name: name, + organizationId: Number(orgId)?Number(orgId):null, + appId: Number(appId)?Number(appId):null, + parentId: Number(parentId)?Number(parentId):null, + type: type + } + ); +} + +//Check if any folders exists +function checkExistsMovingFolders(id) { + if (foldersForMoving.hasOwnProperty(id)) { + return foldersForMoving[id]; + } else { + return false; + } +} + +//Function for creating breadcrumbs +function createMoveModalBreadCrumbsPaths() { + if (foldersForMoving['navStack'].length >= 1) { + var breadcrumbsPath = ''; + + for (var i = 0; i < foldersForMoving['navStack'].length; i++) { + breadcrumbsPath += + '' + + '' + foldersForMoving['navStack'][i].name + '' + + ''; + } + + $('#move-modal .current-folder-title').html(breadcrumbsPath); + } +} + +//Create array tree form search result +function createTreeFoldersArr(arr) { + var currentArr = arr; + + function transformToTree(arr) { + var nodes = {}; + return arr.filter(function(obj) { + var id = obj["id"], + parentId = obj["parentId"]; + + nodes[id] = _.defaults(obj, nodes[id], { children: [] }); + parentId && (nodes[parentId] = (nodes[parentId] || { children: [] }))["children"].push(obj); + + return !parentId; + }); + } + return transformToTree(currentArr); +} + +//Create and open move modal +function openMovePopup() { + foldersForMoving['navStack'] = []; + selectedItemsForMoving = $('.file-row.active'); + var objData = { + items: selectedItemsForMoving, + itemsLength: selectedItemsForMoving.length + }; + $('.file-manager-wrapper').append(templates.moveModal(objData)); + $('#move-modal').modal('show'); + organizationsList.forEach(addOrganizationsToSelect); + var $moveSelectPlaces = $('#move-model-organizations-select').find('option').first(); + var id = $moveSelectPlaces.attr('data-id'); + var type = $moveSelectPlaces.attr('data-type'); + var name = $moveSelectPlaces.val(); + addPathToStack(id, name, null, null, null, type); + this.searchFolders(id, type); +} + +//Function for opening children folders +function openChildrenFolders(folderId) { + var folder; + var folders = []; + var id = $('#move-model-organizations-select').find(':selected').attr('data-id'); + + foldersForMoving[id].forEach(function (currChild) { + if (!!searchTree(currChild, folderId)) { + folder = searchTree(currChild, folderId); + } + folder = searchTree(currChild, folderId); + }); + + folders = folder.children; + $('.move-modal-list').html(''); + addFoldersToMoveModal(folders); + createMoveModalBreadCrumbsPaths(); +} + +// Call method for searching folders for selected app/organization +function searchFolders(id, type) { + var res; + $('.move-modal-list').html(''); + if (checkExistsMovingFolders(id)) { + res = checkExistsMovingFolders(id); + addFoldersToMoveModal(res); + createMoveModalBreadCrumbsPaths(); + } else { + var filterFolders = function(folders) { + return true + }; + var body = {}; + if (type === "organizationId") { + body.organizationId = id; + filterFolders = function(folder) { + return (!(folder.appId || folder.parentFolderId) && folder.type === 'folder'); + }; + } else if (type === "appId") { + body.appId = id; + filterFolders = function(folder) { + return (!(folder.parentFolderId) && folder.type === 'folder'); + }; + } + $('.move-modal-loading').addClass('visible'); + Fliplet.Media.Folders.search(body).then(function(response) { + res = response.filter(filterFolders); + res = createTreeFoldersArr(excludeFolders(res)); + foldersForMoving[id] = res; + addFoldersToMoveModal(res); + createMoveModalBreadCrumbsPaths(); + $('.move-modal-loading').removeClass('visible'); + }); + } +} + +//Function for searching folders in array tree by id +function searchTree(currChild, searchString) { + if (currChild.id == searchString){ + return currChild; + } else if (currChild.children != null){ + var i; + var result = null; + for (i = 0; result == null && i < currChild.children.length; i++){ + result = searchTree(currChild.children[i], searchString); + } + return result; + } + return null; +} + $dropZone.on('drop', function(e) { e.preventDefault(); hideDropZone(); @@ -580,7 +807,8 @@ $('html').on('dragenter', function(e) { // EVENTS // // Removes options popup by clicking elsewhere -$(document).on("click", function(e) { +$(document) + .on("click", function(e) { if ($(e.target).is(".new-menu") === false && $(e.target).is("ul") === false) { $('.new-menu').removeClass('active'); } @@ -642,8 +870,17 @@ $('.file-manager-wrapper') }) .on('click', '[data-create-folder]', function(event) { // Creates folder + var isCreatingInModal = $(this).attr('data-create-folder-modal'); var folderName = prompt('Type folder name'); - var lastFolderSelected = navStack[navStack.length - 1]; + var lastFolderMainNavStack = navStack[navStack.length - 1]; + var lastFolderModalNavStack = foldersForMoving.navStack[foldersForMoving.navStack.length - 1]; + var lastFolderSelected; + + if (!isCreatingInModal) { + lastFolderSelected = lastFolderMainNavStack; + } else { + lastFolderSelected = lastFolderModalNavStack; + } var options = { name: folderName, @@ -653,7 +890,7 @@ $('.file-manager-wrapper') if (!folderName) { return; } - + if (lastFolderSelected.type === "appId") { options.appId = lastFolderSelected.id; } else if (lastFolderSelected.type === "organizationId") { @@ -667,10 +904,21 @@ $('.file-manager-wrapper') options.appId = lastFolderSelected.appId; } } - - Fliplet.Media.Folders.create(options).then(addFolder); - - $('.new-btn').click(); + console.log('lastFolderSelected', lastFolderSelected) + Fliplet.Media.Folders.create(options).then( function (folder) { + if (!isCreatingInModal) { + addFolder(folder); + } else if (lastFolderMainNavStack.id === lastFolderModalNavStack.id) { + addFolder(folder); + } + if (isCreatingInModal) { + folder.children = []; + addFoldersToMoveModal(folder); + } + }); + if (!isCreatingInModal) { + $('.new-btn').click(); + } }) .on('submit', '[data-upload-file]', function(event) { // Upload file @@ -790,6 +1038,9 @@ $('.file-manager-wrapper') window.location.href = '/v1/media/zip?' + contextType + '=' + contextId + params; }) + .on('click', '[move-action]', function() { + openMovePopup(); + }) .on('click', '[open-action]', function() { // Open folder or file var itemID = $('.file-row.active').data('id'); @@ -825,7 +1076,7 @@ $('.file-manager-wrapper') } } }) - .on('click', '.header-breadcrumbs [data-breadcrumb]', function() { + .on('click', '.file-manager-body .header-breadcrumbs [data-breadcrumb]', function() { var index = $(this).data('breadcrumb'); var position = index + 1; @@ -838,6 +1089,115 @@ $('.file-manager-wrapper') }) .on('hide.bs.collapse', '.panel-collapse', function() { $(this).siblings('.panel-heading').find('.fa').removeClass('rotate'); + }) + .on('hidden.bs.modal', '#move-modal', function() { + $(this).remove(); + foldersForMoving = {}; + }) + .on('change', '#move-model-organizations-select', function() { + $('.move-modal-empty-state').removeClass('active'); + $('[data-move-button]').attr('disabled'); + foldersForMoving['navStack'] = []; + var type = $(this).find(":selected").attr('data-type'); + var id = $(this).find(":selected").attr('data-id'); + var name = $(this).find(":selected").val(); + addPathToStack(id, name, null, null, null, type); + searchFolders(id, type); + }) + .on('click', '[data-move-folder]', function() { + if (!$(this).hasClass('children')) { + $('[data-move-folder]').removeClass('selected'); + $(this).toggleClass('selected'); + } else { + addPathToStack( + $(this).attr('data-folder-id'), + $(this).text(), + $(this).attr('data-org-id'), + $(this).attr('data-app-id'), + $(this).attr('data-parent-id'), + 'folder'); + openChildrenFolders($(this).attr('data-folder-id')); + } + $('[data-move-button]').removeAttr('disabled'); + }) + .on('click', '[data-breadcrumb-item]', function() { + $('.move-modal-empty-state').removeClass('active'); + var index = Number($(this).attr('data-breadcrumb-index')); + var id = $(this).attr('data-breadcrumb'); + var type = $(this).attr('data-breadcrumb-type'); + if (index !== foldersForMoving['navStack'].length - 1) { + $('.move-modal-list').html(''); + foldersForMoving['navStack'].splice(index + 1, foldersForMoving['navStack'].length - 1 - index); + if (type === 'organizationId' || type === 'appId') { + addFoldersToMoveModal(foldersForMoving[id]); + } else { + openChildrenFolders(id); + } + createMoveModalBreadCrumbsPaths(); + } + }) + .on('click', '[data-move-button]', function() { + var $selectedPlace = $('.move-modal-list .selected'); + var appId; + var orgId; + var folderId; + + if ($selectedPlace.length) { + appId = Number($selectedPlace.attr('data-app-id')); + orgId = Number($selectedPlace.attr('data-org-id')); + folderId = Number($selectedPlace.attr('data-folder-id')); + } else { + var $selectedOption = $('#move-model-organizations-select').find(':selected'); + var type = $selectedOption.attr('data-type'); + if (type === 'organizationId') { + appId = null; + orgId = Number($selectedOption.attr('data-id')); + } else { + appId = Number($selectedOption.attr('data-id')); + orgId = null; + } + folderId = null; + } + + appId = appId ? appId : null; + orgId = orgId ? orgId : null; + folderId = folderId ? folderId : null; + var updateMethod; + + $('#move-modal').modal('hide'); + + $(selectedItemsForMoving).each(function(index) { + var $element = $(this); + + $element.addClass('moving'); + $element.removeClass('active'); + + if ($element.attr('data-file-type') === 'folder') { + updateMethod = Fliplet.Media.Folders.update( + Number($element.attr('data-id')), { + appId: appId, + parentId: folderId, + organizationId: orgId + } + ) + } else { + updateMethod = Fliplet.Media.Files.update( + Number($element.attr('data-id')), { + appId: appId, + mediaFolderId: folderId, + organizationId: orgId + } + ) + } + + updateMethod.then(function() { + checkboxStatus(); + if (selectedItemsForMoving.length - 1 === index) { + $(selectedItemsForMoving).remove(); + } + }); + + }); }); /* Resize sidebar .on('mousedown', '.split-bar', function(e) { From 97fefbadd62e3de54e1a99723ca3faddd2321ec3 Mon Sep 17 00:00:00 2001 From: Valeri Radinovich Date: Mon, 17 Jun 2019 20:16:15 +0300 Subject: [PATCH 2/4] #1017 #864 Users should be able to rename and move files - fixed commits --- interface.html | 43 ++++++---- js/interface.js | 220 ++++++++++++++++++++++++++---------------------- 2 files changed, 146 insertions(+), 117 deletions(-) diff --git a/interface.html b/interface.html index b0658e7..90b3ffa 100644 --- a/interface.html +++ b/interface.html @@ -108,7 +108,7 @@
    - 😳 + 😳

    This seems to be empty.

    Use the "New" button.

    @@ -351,24 +351,22 @@

    \{{#if (gt children.length 0)}} -
  • \{{/if}} \{{#if (eq children.length 0)}} -
  • \{{/if}}
    @@ -413,7 +411,7 @@

    This seems to be empty.

    + + diff --git a/js/interface.js b/js/interface.js index 650dc04..aeb12db 100644 --- a/js/interface.js +++ b/js/interface.js @@ -14,7 +14,8 @@ var templates = { moveModal: template('move-modal'), organizationsSelect: template('select-organizations'), appsSelect: template('select-apps'), - moveModalFolders: template('move-modal-folders') + moveModalFolders: template('move-modal-folders'), + breadcrumbsItem: template('breadcrumbs-item') }; // This should contain either app/org/folder of current folder @@ -25,8 +26,7 @@ var currentAppId; var currentFolders; var currentFiles; var counterOrganization; -var foldersForMoving = {}; -foldersForMoving.navStack = []; +var foldersForMoving = { navStack: [] }; var selectedItemsForMoving; var tetherBox; @@ -577,7 +577,7 @@ function uploadFiles(files) { function excludeFolders(items) { var parentItemIdOfSelectedItems = navStack[navStack.length-1].id; var selectedIdPlaceInModal = foldersForMoving.navStack[foldersForMoving.navStack.length-1].id; - var searchResult = items; + var searchingResults = items; var selectedIdForMoving = []; for (var i = 0; i < selectedItemsForMoving.length; i++) { @@ -587,38 +587,38 @@ function excludeFolders(items) { } if (parentItemIdOfSelectedItems === selectedIdPlaceInModal) { - searchResult = searchResult.filter(function (item) { + searchingResults = searchingResults.filter(function (item) { for (var i = 0; i < selectedIdForMoving.length; i++) { return item.id !== selectedIdForMoving[i]; } }) } - return searchResult; - + return searchingResults; } // Add app select item template function addAppsToSelect(apps) { var $appSelectList = $('#organization-optgroup-' + apps.organizationId); + $appSelectList.append(templates.appsSelect(apps)); } // Create list of folders in modal -function addFoldersToMoveModal(res) { - if (Array.isArray(res)) { - if (res.length < 1) { +function addFoldersToMoveModal(folders) { + if (Array.isArray(folders)) { + if (folders.length < 1) { $('.move-modal-empty-state').addClass('active'); } else { - res = _.sortBy(res, [function(o) { + folders = _.sortBy(folders, [function(o) { return o.name; }]); - res.forEach(function (folder) { + folders.forEach(function (folder) { $('.move-modal-list').append(templates.moveModalFolders(folder)); }); } } else { - $('.move-modal-list').append(templates.moveModalFolders(res)); + $('.move-modal-list').append(templates.moveModalFolders(folders)); $('.move-modal-empty-state').removeClass('active'); } } @@ -626,25 +626,24 @@ function addFoldersToMoveModal(res) { // Add organization select item template function addOrganizationsToSelect(org) { var $organizationsSelectList = $('#move-model-organizations-select'); + $organizationsSelectList.append(templates.organizationsSelect(org)); appsList.forEach(addAppsToSelect); } // Users selected folders tree (for breadcrumbs) function addPathToStack(id, name, orgId, appId, parentId, type) { - foldersForMoving['navStack'].push( - { - id: Number(id)?Number(id):null, - name: name, - organizationId: Number(orgId)?Number(orgId):null, - appId: Number(appId)?Number(appId):null, - parentId: Number(parentId)?Number(parentId):null, - type: type - } - ); + foldersForMoving['navStack'].push({ + id: Number(id) || null, + name: name, + organizationId: Number(orgId) || null, + appId: Number(appId) || null, + parentId: Number(parentId) || null, + type: type + }); } -//Check if any folders exists +// Check if any folders exists function checkExistsMovingFolders(id) { if (foldersForMoving.hasOwnProperty(id)) { return foldersForMoving[id]; @@ -653,39 +652,32 @@ function checkExistsMovingFolders(id) { } } -//Function for creating breadcrumbs +// Function for creating breadcrumbs function createMoveModalBreadCrumbsPaths() { + var $breadcrumbsWrapping = $('#move-modal .current-folder-title'); + + $breadcrumbsWrapping.html(''); + if (foldersForMoving['navStack'].length >= 1) { - var breadcrumbsPath = ''; - for (var i = 0; i < foldersForMoving['navStack'].length; i++) { - breadcrumbsPath += - '' + - '' + foldersForMoving['navStack'][i].name + '' + - ''; + $breadcrumbsWrapping.append(templates.breadcrumbsItem(foldersForMoving['navStack'][i])); } - - $('#move-modal .current-folder-title').html(breadcrumbsPath); } } -//Create array tree form search result +// Create array tree form search result function createTreeFoldersArr(arr) { var currentArr = arr; function transformToTree(arr) { var nodes = {}; + return arr.filter(function(obj) { - var id = obj["id"], - parentId = obj["parentId"]; + var id = obj['id']; + var parentId = obj['parentId']; nodes[id] = _.defaults(obj, nodes[id], { children: [] }); - parentId && (nodes[parentId] = (nodes[parentId] || { children: [] }))["children"].push(obj); + parentId && (nodes[parentId] = (nodes[parentId] || { children: [] }))['children'].push(obj); return !parentId; }); @@ -693,26 +685,33 @@ function createTreeFoldersArr(arr) { return transformToTree(currentArr); } -//Create and open move modal +// Create and open move modal function openMovePopup() { foldersForMoving['navStack'] = []; selectedItemsForMoving = $('.file-row.active'); + var objData = { items: selectedItemsForMoving, itemsLength: selectedItemsForMoving.length }; + $('.file-manager-wrapper').append(templates.moveModal(objData)); + $('#move-modal').modal('show'); + organizationsList.forEach(addOrganizationsToSelect); + var $moveSelectPlaces = $('#move-model-organizations-select').find('option').first(); var id = $moveSelectPlaces.attr('data-id'); var type = $moveSelectPlaces.attr('data-type'); var name = $moveSelectPlaces.val(); + addPathToStack(id, name, null, null, null, type); - this.searchFolders(id, type); + + searchFolders(id, type); } -//Function for opening children folders +// Function for opening children folders function openChildrenFolders(folderId) { var folder; var folders = []; @@ -722,63 +721,74 @@ function openChildrenFolders(folderId) { if (!!searchTree(currChild, folderId)) { folder = searchTree(currChild, folderId); } - folder = searchTree(currChild, folderId); }); folders = folder.children; $('.move-modal-list').html(''); + addFoldersToMoveModal(folders); + createMoveModalBreadCrumbsPaths(); } // Call method for searching folders for selected app/organization function searchFolders(id, type) { - var res; $('.move-modal-list').html(''); + if (checkExistsMovingFolders(id)) { - res = checkExistsMovingFolders(id); - addFoldersToMoveModal(res); + addFoldersToMoveModal(checkExistsMovingFolders(id)); createMoveModalBreadCrumbsPaths(); } else { var filterFolders = function(folders) { - return true + return true; }; var body = {}; - if (type === "organizationId") { + + if (type === 'organizationId') { body.organizationId = id; + filterFolders = function(folder) { return (!(folder.appId || folder.parentFolderId) && folder.type === 'folder'); }; - } else if (type === "appId") { + } else if (type === 'appId') { body.appId = id; + filterFolders = function(folder) { return (!(folder.parentFolderId) && folder.type === 'folder'); }; } + $('.move-modal-loading').addClass('visible'); + Fliplet.Media.Folders.search(body).then(function(response) { - res = response.filter(filterFolders); - res = createTreeFoldersArr(excludeFolders(res)); - foldersForMoving[id] = res; - addFoldersToMoveModal(res); + response = response.filter(filterFolders); + response = createTreeFoldersArr(excludeFolders(response)); + foldersForMoving[id] = response; + + addFoldersToMoveModal(response); createMoveModalBreadCrumbsPaths(); + $('.move-modal-loading').removeClass('visible'); }); } } -//Function for searching folders in array tree by id +// Function for searching folders in array tree by id function searchTree(currChild, searchString) { - if (currChild.id == searchString){ + if (currChild.id == searchString) { return currChild; - } else if (currChild.children != null){ + } + + if (currChild.children != null) { var i; var result = null; - for (i = 0; result == null && i < currChild.children.length; i++){ + for (i = 0; result == null && i < currChild.children.length; i++) { result = searchTree(currChild.children[i], searchString); } + return result; } + return null; } @@ -873,15 +883,15 @@ $('.file-manager-wrapper') var isCreatingInModal = $(this).attr('data-create-folder-modal'); var folderName = prompt('Type folder name'); var lastFolderMainNavStack = navStack[navStack.length - 1]; - var lastFolderModalNavStack = foldersForMoving.navStack[foldersForMoving.navStack.length - 1]; + var lastFolderModalNavStack; var lastFolderSelected; - if (!isCreatingInModal) { - lastFolderSelected = lastFolderMainNavStack; - } else { - lastFolderSelected = lastFolderModalNavStack; + if (isCreatingInModal) { + lastFolderModalNavStack = foldersForMoving.navStack[foldersForMoving.navStack.length - 1]; } - + + lastFolderSelected = !isCreatingInModal ? lastFolderMainNavStack : lastFolderModalNavStack; + var options = { name: folderName, parentId: currentFolderId || undefined @@ -891,9 +901,9 @@ $('.file-manager-wrapper') return; } - if (lastFolderSelected.type === "appId") { + if (lastFolderSelected.type === 'appId') { options.appId = lastFolderSelected.id; - } else if (lastFolderSelected.type === "organizationId") { + } else if (lastFolderSelected.type === 'organizationId') { options.organizationId = lastFolderSelected.id; } else { options.parentId = lastFolderSelected.id; @@ -904,15 +914,14 @@ $('.file-manager-wrapper') options.appId = lastFolderSelected.appId; } } - console.log('lastFolderSelected', lastFolderSelected) Fliplet.Media.Folders.create(options).then( function (folder) { - if (!isCreatingInModal) { - addFolder(folder); - } else if (lastFolderMainNavStack.id === lastFolderModalNavStack.id) { + if (!isCreatingInModal || lastFolderMainNavStack.id === lastFolderModalNavStack.id) { addFolder(folder); } + if (isCreatingInModal) { folder.children = []; + addFoldersToMoveModal(folder); } }); @@ -1097,42 +1106,56 @@ $('.file-manager-wrapper') .on('change', '#move-model-organizations-select', function() { $('.move-modal-empty-state').removeClass('active'); $('[data-move-button]').attr('disabled'); + foldersForMoving['navStack'] = []; - var type = $(this).find(":selected").attr('data-type'); - var id = $(this).find(":selected").attr('data-id'); - var name = $(this).find(":selected").val(); + + var type = $(this).find(':selected').attr('data-type'); + var id = $(this).find(':selected').attr('data-id'); + var name = $(this).find(':selected').val(); + addPathToStack(id, name, null, null, null, type); + searchFolders(id, type); }) .on('click', '[data-move-folder]', function() { - if (!$(this).hasClass('children')) { - $('[data-move-folder]').removeClass('selected'); - $(this).toggleClass('selected'); - } else { + $('[data-move-folder]').removeClass('selected'); + $(this).toggleClass('selected'); + $('[data-move-button]').removeAttr('disabled'); + }) + .on('dblclick', '[data-move-folder]', function() { + if ($(this).hasClass('children')) { addPathToStack( $(this).attr('data-folder-id'), $(this).text(), $(this).attr('data-org-id'), $(this).attr('data-app-id'), $(this).attr('data-parent-id'), - 'folder'); + 'folder' + ); + openChildrenFolders($(this).attr('data-folder-id')); } - $('[data-move-button]').removeAttr('disabled'); + + $('[data-move-button]').attr('disabled'); }) .on('click', '[data-breadcrumb-item]', function() { - $('.move-modal-empty-state').removeClass('active'); - var index = Number($(this).attr('data-breadcrumb-index')); + var index = Number($(this).parent().index()); var id = $(this).attr('data-breadcrumb'); var type = $(this).attr('data-breadcrumb-type'); + + $('.move-modal-empty-state').removeClass('active'); + if (index !== foldersForMoving['navStack'].length - 1) { $('.move-modal-list').html(''); + foldersForMoving['navStack'].splice(index + 1, foldersForMoving['navStack'].length - 1 - index); + if (type === 'organizationId' || type === 'appId') { addFoldersToMoveModal(foldersForMoving[id]); } else { openChildrenFolders(id); } + createMoveModalBreadCrumbsPaths(); } }) @@ -1141,28 +1164,23 @@ $('.file-manager-wrapper') var appId; var orgId; var folderId; + var updateMethod; if ($selectedPlace.length) { appId = Number($selectedPlace.attr('data-app-id')); orgId = Number($selectedPlace.attr('data-org-id')); folderId = Number($selectedPlace.attr('data-folder-id')); } else { - var $selectedOption = $('#move-model-organizations-select').find(':selected'); - var type = $selectedOption.attr('data-type'); - if (type === 'organizationId') { - appId = null; - orgId = Number($selectedOption.attr('data-id')); - } else { - appId = Number($selectedOption.attr('data-id')); - orgId = null; - } - folderId = null; + var selectedPath = foldersForMoving.navStack[foldersForMoving.navStack.length - 1]; + + appId = selectedPath.appId; + orgId = selectedPath.organizationId; + folderId = selectedPath.id; } - appId = appId ? appId : null; - orgId = orgId ? orgId : null; - folderId = folderId ? folderId : null; - var updateMethod; + appId = appId || null; + orgId = orgId || null; + folderId = folderId || null; $('#move-modal').modal('hide'); @@ -1174,7 +1192,8 @@ $('.file-manager-wrapper') if ($element.attr('data-file-type') === 'folder') { updateMethod = Fliplet.Media.Folders.update( - Number($element.attr('data-id')), { + Number($element.attr('data-id')), + { appId: appId, parentId: folderId, organizationId: orgId @@ -1182,7 +1201,8 @@ $('.file-manager-wrapper') ) } else { updateMethod = Fliplet.Media.Files.update( - Number($element.attr('data-id')), { + Number($element.attr('data-id')), + { appId: appId, mediaFolderId: folderId, organizationId: orgId @@ -1192,11 +1212,11 @@ $('.file-manager-wrapper') updateMethod.then(function() { checkboxStatus(); + if (selectedItemsForMoving.length - 1 === index) { $(selectedItemsForMoving).remove(); } }); - }); }); /* Resize sidebar From 039a6b461c080bdcec5099d036bddfc054c52742 Mon Sep 17 00:00:00 2001 From: Valeri Radinovich Date: Tue, 18 Jun 2019 14:28:46 +0300 Subject: [PATCH 3/4] #1017 #864 Users should be able to rename and move files - fixed commits --- js/interface.js | 112 ++++++++++++++++++++++++++++++------------------ 1 file changed, 70 insertions(+), 42 deletions(-) diff --git a/js/interface.js b/js/interface.js index aeb12db..4d333c4 100644 --- a/js/interface.js +++ b/js/interface.js @@ -606,20 +606,24 @@ function addAppsToSelect(apps) { // Create list of folders in modal function addFoldersToMoveModal(folders) { + var $emptyStateBlock = $('.move-modal-empty-state'); + var $foldersList = $('.move-modal-list'); + if (Array.isArray(folders)) { if (folders.length < 1) { - $('.move-modal-empty-state').addClass('active'); + $emptyStateBlock.addClass('active'); } else { folders = _.sortBy(folders, [function(o) { return o.name; }]); + folders.forEach(function (folder) { - $('.move-modal-list').append(templates.moveModalFolders(folder)); + $foldersList.append(templates.moveModalFolders(folder)); }); } } else { - $('.move-modal-list').append(templates.moveModalFolders(folders)); - $('.move-modal-empty-state').removeClass('active'); + $foldersList.append(templates.moveModalFolders(folders)); + $emptyStateBlock.removeClass('active'); } } @@ -633,7 +637,7 @@ function addOrganizationsToSelect(org) { // Users selected folders tree (for breadcrumbs) function addPathToStack(id, name, orgId, appId, parentId, type) { - foldersForMoving['navStack'].push({ + foldersForMoving.navStack.push({ id: Number(id) || null, name: name, organizationId: Number(orgId) || null, @@ -658,9 +662,9 @@ function createMoveModalBreadCrumbsPaths() { $breadcrumbsWrapping.html(''); - if (foldersForMoving['navStack'].length >= 1) { - for (var i = 0; i < foldersForMoving['navStack'].length; i++) { - $breadcrumbsWrapping.append(templates.breadcrumbsItem(foldersForMoving['navStack'][i])); + if (foldersForMoving.navStack.length) { + for (var i = 0; i < foldersForMoving.navStack.length; i++) { + $breadcrumbsWrapping.append(templates.breadcrumbsItem(foldersForMoving.navStack[i])); } } } @@ -673,11 +677,11 @@ function createTreeFoldersArr(arr) { var nodes = {}; return arr.filter(function(obj) { - var id = obj['id']; - var parentId = obj['parentId']; + var id = obj.id; + var parentId = obj.parentId; nodes[id] = _.defaults(obj, nodes[id], { children: [] }); - parentId && (nodes[parentId] = (nodes[parentId] || { children: [] }))['children'].push(obj); + parentId && (nodes[parentId] = (nodes[parentId] || { children: [] })).children.push(obj); return !parentId; }); @@ -687,7 +691,9 @@ function createTreeFoldersArr(arr) { // Create and open move modal function openMovePopup() { - foldersForMoving['navStack'] = []; + var $fileManagerBlock = $('.file-manager-wrapper'); + + foldersForMoving.navStack = []; selectedItemsForMoving = $('.file-row.active'); var objData = { @@ -695,13 +701,16 @@ function openMovePopup() { itemsLength: selectedItemsForMoving.length }; - $('.file-manager-wrapper').append(templates.moveModal(objData)); + $fileManagerBlock.append(templates.moveModal(objData)); + + var $moveModal = $('#move-modal'); + var $modalSelect = $('#move-model-organizations-select'); - $('#move-modal').modal('show'); + $moveModal.modal('show'); organizationsList.forEach(addOrganizationsToSelect); - var $moveSelectPlaces = $('#move-model-organizations-select').find('option').first(); + var $moveSelectPlaces = $modalSelect.find('option').first(); var id = $moveSelectPlaces.attr('data-id'); var type = $moveSelectPlaces.attr('data-type'); var name = $moveSelectPlaces.val(); @@ -713,9 +722,12 @@ function openMovePopup() { // Function for opening children folders function openChildrenFolders(folderId) { - var folder; + var $foldersList = $('.move-modal-list'); + var id = $('#move-model-organizations-select :selected').attr('data-id'); var folders = []; - var id = $('#move-model-organizations-select').find(':selected').attr('data-id'); + var folder; + + folderId = +folderId; foldersForMoving[id].forEach(function (currChild) { if (!!searchTree(currChild, folderId)) { @@ -724,7 +736,7 @@ function openChildrenFolders(folderId) { }); folders = folder.children; - $('.move-modal-list').html(''); + $foldersList.html(''); addFoldersToMoveModal(folders); @@ -733,7 +745,10 @@ function openChildrenFolders(folderId) { // Call method for searching folders for selected app/organization function searchFolders(id, type) { - $('.move-modal-list').html(''); + var $foldersList = $('.move-modal-list'); + var $loadingBlock = $('.move-modal-loading'); + + $foldersList.html(''); if (checkExistsMovingFolders(id)) { addFoldersToMoveModal(checkExistsMovingFolders(id)); @@ -757,8 +772,8 @@ function searchFolders(id, type) { return (!(folder.parentFolderId) && folder.type === 'folder'); }; } - - $('.move-modal-loading').addClass('visible'); + + $loadingBlock.addClass('visible'); Fliplet.Media.Folders.search(body).then(function(response) { response = response.filter(filterFolders); @@ -767,22 +782,23 @@ function searchFolders(id, type) { addFoldersToMoveModal(response); createMoveModalBreadCrumbsPaths(); - - $('.move-modal-loading').removeClass('visible'); + + $loadingBlock.removeClass('visible'); }); } } // Function for searching folders in array tree by id function searchTree(currChild, searchString) { - if (currChild.id == searchString) { + if (currChild.id === searchString) { return currChild; } - if (currChild.children != null) { - var i; + if (currChild.children !== null) { var result = null; - for (i = 0; result == null && i < currChild.children.length; i++) { + var i; + + for (i = 0; result === null && i < currChild.children.length; i++) { result = searchTree(currChild.children[i], searchString); } @@ -1104,25 +1120,34 @@ $('.file-manager-wrapper') foldersForMoving = {}; }) .on('change', '#move-model-organizations-select', function() { - $('.move-modal-empty-state').removeClass('active'); - $('[data-move-button]').attr('disabled'); - - foldersForMoving['navStack'] = []; - + var $emptyStateBlock = $('.move-modal-empty-state'); + var $loadingBlock = $('.move-modal-loading'); + var $moveButton = $('[data-move-button]'); var type = $(this).find(':selected').attr('data-type'); var id = $(this).find(':selected').attr('data-id'); var name = $(this).find(':selected').val(); + + $loadingBlock.removeClass('visible'); + $emptyStateBlock.removeClass('active'); + $moveButton.attr('disabled'); + + foldersForMoving.navStack = []; addPathToStack(id, name, null, null, null, type); searchFolders(id, type); }) .on('click', '[data-move-folder]', function() { - $('[data-move-folder]').removeClass('selected'); + var $selectedFolderForMoving = $('[data-move-folder]'); + var $moveButton = $('[data-move-button]'); + + $moveButton.removeAttr('disabled'); + $selectedFolderForMoving.removeClass('selected'); $(this).toggleClass('selected'); - $('[data-move-button]').removeAttr('disabled'); }) .on('dblclick', '[data-move-folder]', function() { + var $moveButton = $('[data-move-button]'); + if ($(this).hasClass('children')) { addPathToStack( $(this).attr('data-folder-id'), @@ -1135,20 +1160,22 @@ $('.file-manager-wrapper') openChildrenFolders($(this).attr('data-folder-id')); } - - $('[data-move-button]').attr('disabled'); + + $moveButton.attr('disabled'); }) .on('click', '[data-breadcrumb-item]', function() { + var $emptyStateBlock = $('.move-modal-empty-state'); + var $foldersList = $('.move-modal-list'); var index = Number($(this).parent().index()); var id = $(this).attr('data-breadcrumb'); var type = $(this).attr('data-breadcrumb-type'); - $('.move-modal-empty-state').removeClass('active'); + $emptyStateBlock.removeClass('active'); - if (index !== foldersForMoving['navStack'].length - 1) { - $('.move-modal-list').html(''); + if (index !== foldersForMoving.navStack.length - 1) { + $foldersList.html(''); - foldersForMoving['navStack'].splice(index + 1, foldersForMoving['navStack'].length - 1 - index); + foldersForMoving.navStack.splice(index + 1, foldersForMoving.navStack.length - 1 - index); if (type === 'organizationId' || type === 'appId') { addFoldersToMoveModal(foldersForMoving[id]); @@ -1160,6 +1187,7 @@ $('.file-manager-wrapper') } }) .on('click', '[data-move-button]', function() { + var $moveModal = $('#move-modal'); var $selectedPlace = $('.move-modal-list .selected'); var appId; var orgId; @@ -1181,8 +1209,8 @@ $('.file-manager-wrapper') appId = appId || null; orgId = orgId || null; folderId = folderId || null; - - $('#move-modal').modal('hide'); + + $moveModal.modal('hide'); $(selectedItemsForMoving).each(function(index) { var $element = $(this); From 4e63612276090e4ebfe055bf40f6b0b00d43caca Mon Sep 17 00:00:00 2001 From: Valeri Radinovich Date: Thu, 20 Jun 2019 14:29:57 +0300 Subject: [PATCH 4/4] #1017 #864 Users should be able to rename and move files - 1) added semicolon, 2) added catch for search method, 3) fixed html structure --- interface.html | 6 +-- js/interface.js | 138 +++++++++++++++++++++++++----------------------- 2 files changed, 75 insertions(+), 69 deletions(-) diff --git a/interface.html b/interface.html index 90b3ffa..cae3832 100644 --- a/interface.html +++ b/interface.html @@ -357,8 +357,7 @@

    + data-parent-id="\{{parentId}}"> \{{/if}} \{{#if (eq children.length 0)}}
  • + data-parent-id="\{{parentId}}"> \{{/if}}
    \{{name}} diff --git a/js/interface.js b/js/interface.js index 4d333c4..12eb536 100644 --- a/js/interface.js +++ b/js/interface.js @@ -6,6 +6,14 @@ var $organizationList = $('.dropdown-menu-holder .panel-group'); var $progress = $('.progress'); var $progressBar = $progress.find('.progress-bar'); var $dropZone = $('#drop-zone'); +var $fileManagerBlock = $('.file-manager-wrapper'); +var $moveModal; +var $modalSelect; +var $emptyStateBlock; +var $foldersList; +var $loadingBlock; +var $moveButton; +var $folderForMoving; var templates = { file: template('file'), folder: template('folder'), @@ -573,30 +581,6 @@ function uploadFiles(files) { // FUNCTIONS FOR MOVING FILES/FOLDERS IN MODAL -// Check if folder that has selected items to move has a subfolder and filter it -function excludeFolders(items) { - var parentItemIdOfSelectedItems = navStack[navStack.length-1].id; - var selectedIdPlaceInModal = foldersForMoving.navStack[foldersForMoving.navStack.length-1].id; - var searchingResults = items; - var selectedIdForMoving = []; - - for (var i = 0; i < selectedItemsForMoving.length; i++) { - if ($(selectedItemsForMoving[i]).attr('data-file-type') === 'folder') { - selectedIdForMoving.push(Number($(selectedItemsForMoving[i]).attr('data-id'))); - } - } - - if (parentItemIdOfSelectedItems === selectedIdPlaceInModal) { - searchingResults = searchingResults.filter(function (item) { - for (var i = 0; i < selectedIdForMoving.length; i++) { - return item.id !== selectedIdForMoving[i]; - } - }) - } - - return searchingResults; -} - // Add app select item template function addAppsToSelect(apps) { var $appSelectList = $('#organization-optgroup-' + apps.organizationId); @@ -606,9 +590,6 @@ function addAppsToSelect(apps) { // Create list of folders in modal function addFoldersToMoveModal(folders) { - var $emptyStateBlock = $('.move-modal-empty-state'); - var $foldersList = $('.move-modal-list'); - if (Array.isArray(folders)) { if (folders.length < 1) { $emptyStateBlock.addClass('active'); @@ -629,9 +610,7 @@ function addFoldersToMoveModal(folders) { // Add organization select item template function addOrganizationsToSelect(org) { - var $organizationsSelectList = $('#move-model-organizations-select'); - - $organizationsSelectList.append(templates.organizationsSelect(org)); + $modalSelect.append(templates.organizationsSelect(org)); appsList.forEach(addAppsToSelect); } @@ -658,7 +637,7 @@ function checkExistsMovingFolders(id) { // Function for creating breadcrumbs function createMoveModalBreadCrumbsPaths() { - var $breadcrumbsWrapping = $('#move-modal .current-folder-title'); + var $breadcrumbsWrapping = $moveModal.find('.current-folder-title'); $breadcrumbsWrapping.html(''); @@ -689,10 +668,43 @@ function createTreeFoldersArr(arr) { return transformToTree(currentArr); } +// Redefinition of dynamic elements after open modal +function declareVariablesForMoveModal() { + $moveModal = $('#move-modal'); + $modalSelect = $('#move-model-organizations-select'); + $emptyStateBlock = $('.move-modal-empty-state'); + $foldersList = $('.move-modal-list'); + $loadingBlock = $('.move-modal-loading'); + $moveButton = $('[data-move-button]'); + $folderForMoving = $('[data-move-folder]'); +} + +// Check if folder that has selected items to move has a subfolder and filter it +function excludeFolders(items) { + var parentItemIdOfSelectedItems = navStack[navStack.length-1].id; + var selectedIdPlaceInModal = foldersForMoving.navStack[foldersForMoving.navStack.length-1].id; + var searchingResults = items; + var selectedIdForMoving = []; + + for (var i = 0; i < selectedItemsForMoving.length; i++) { + if ($(selectedItemsForMoving[i]).attr('data-file-type') === 'folder') { + selectedIdForMoving.push(Number($(selectedItemsForMoving[i]).attr('data-id'))); + } + } + + if (parentItemIdOfSelectedItems === selectedIdPlaceInModal) { + searchingResults = searchingResults.filter(function (item) { + for (var i = 0; i < selectedIdForMoving.length; i++) { + return item.id !== selectedIdForMoving[i]; + } + }); + } + + return searchingResults; +} + // Create and open move modal function openMovePopup() { - var $fileManagerBlock = $('.file-manager-wrapper'); - foldersForMoving.navStack = []; selectedItemsForMoving = $('.file-row.active'); @@ -703,9 +715,8 @@ function openMovePopup() { $fileManagerBlock.append(templates.moveModal(objData)); - var $moveModal = $('#move-modal'); - var $modalSelect = $('#move-model-organizations-select'); - + declareVariablesForMoveModal(); + $moveModal.modal('show'); organizationsList.forEach(addOrganizationsToSelect); @@ -722,8 +733,7 @@ function openMovePopup() { // Function for opening children folders function openChildrenFolders(folderId) { - var $foldersList = $('.move-modal-list'); - var id = $('#move-model-organizations-select :selected').attr('data-id'); + var id = $modalSelect.find(':selected').attr('data-id'); var folders = []; var folder; @@ -745,9 +755,6 @@ function openChildrenFolders(folderId) { // Call method for searching folders for selected app/organization function searchFolders(id, type) { - var $foldersList = $('.move-modal-list'); - var $loadingBlock = $('.move-modal-loading'); - $foldersList.html(''); if (checkExistsMovingFolders(id)) { @@ -1120,9 +1127,6 @@ $('.file-manager-wrapper') foldersForMoving = {}; }) .on('change', '#move-model-organizations-select', function() { - var $emptyStateBlock = $('.move-modal-empty-state'); - var $loadingBlock = $('.move-modal-loading'); - var $moveButton = $('[data-move-button]'); var type = $(this).find(':selected').attr('data-type'); var id = $(this).find(':selected').attr('data-id'); var name = $(this).find(':selected').val(); @@ -1138,16 +1142,11 @@ $('.file-manager-wrapper') searchFolders(id, type); }) .on('click', '[data-move-folder]', function() { - var $selectedFolderForMoving = $('[data-move-folder]'); - var $moveButton = $('[data-move-button]'); - $moveButton.removeAttr('disabled'); - $selectedFolderForMoving.removeClass('selected'); - $(this).toggleClass('selected'); + $folderForMoving.removeClass('selected'); + $(this).addClass('selected'); }) .on('dblclick', '[data-move-folder]', function() { - var $moveButton = $('[data-move-button]'); - if ($(this).hasClass('children')) { addPathToStack( $(this).attr('data-folder-id'), @@ -1164,8 +1163,6 @@ $('.file-manager-wrapper') $moveButton.attr('disabled'); }) .on('click', '[data-breadcrumb-item]', function() { - var $emptyStateBlock = $('.move-modal-empty-state'); - var $foldersList = $('.move-modal-list'); var index = Number($(this).parent().index()); var id = $(this).attr('data-breadcrumb'); var type = $(this).attr('data-breadcrumb-type'); @@ -1187,8 +1184,7 @@ $('.file-manager-wrapper') } }) .on('click', '[data-move-button]', function() { - var $moveModal = $('#move-modal'); - var $selectedPlace = $('.move-modal-list .selected'); + var $selectedPlace = $foldersList.find('.selected'); var appId; var orgId; var folderId; @@ -1201,9 +1197,16 @@ $('.file-manager-wrapper') } else { var selectedPath = foldersForMoving.navStack[foldersForMoving.navStack.length - 1]; - appId = selectedPath.appId; - orgId = selectedPath.organizationId; - folderId = selectedPath.id; + if (selectedPath.type === 'appId') { + appId = selectedPath.id; + } else if (selectedPath.type === 'organizationId') { + orgId = selectedPath.id; + } else { + appId = selectedPath.appId; + orgId = selectedPath.organizationId; + } + + folderId = selectedPath.parentId; } appId = appId || null; @@ -1238,13 +1241,18 @@ $('.file-manager-wrapper') ) } - updateMethod.then(function() { - checkboxStatus(); - - if (selectedItemsForMoving.length - 1 === index) { - $(selectedItemsForMoving).remove(); - } - }); + updateMethod + .then(function() { + checkboxStatus(); + + if (selectedItemsForMoving.length - 1 === index) { + $(selectedItemsForMoving).remove(); + } + }) + .catch(function () { + $element.removeClass('moving'); + alert('Error while moving an item!'); + }); }); }); /* Resize sidebar