mirror of
https://github.com/overleaf/overleaf.git
synced 2024-09-16 02:52:31 -04:00
Merge pull request #2471 from overleaf/cmg-ns-existing-item-modal
display modal if file exists in drop location GitOrigin-RevId: 2dbcbce26c32903f1acfdfbf7fdddb676c130098
This commit is contained in:
parent
a1bc0548f2
commit
587c4ba129
5 changed files with 52 additions and 12 deletions
|
@ -281,7 +281,7 @@ script(type='text/ng-template', id='entityListItemTemplate')
|
|||
href
|
||||
ng-click="openNewDocModal()"
|
||||
right-click="openNewDocModal()"
|
||||
) #{translate("new_file")}
|
||||
) #{translate("new_file")}
|
||||
li
|
||||
a(
|
||||
href
|
||||
|
@ -333,7 +333,7 @@ script(type='text/ng-template', id='newFolderModalTemplate')
|
|||
button.btn.btn-default(
|
||||
ng-disabled="state.inflight"
|
||||
ng-click="cancel()"
|
||||
) #{translate("cancel")}
|
||||
) #{translate("cancel")}
|
||||
button.btn.btn-primary(
|
||||
ng-disabled="newFolderForm.$invalid || state.inflight"
|
||||
ng-click="create()"
|
||||
|
@ -341,6 +341,16 @@ script(type='text/ng-template', id='newFolderModalTemplate')
|
|||
span(ng-hide="state.inflight") #{translate("create")}
|
||||
span(ng-show="state.inflight") #{translate("creating")}...
|
||||
|
||||
script(type='text/ng-template', id='duplicateFileModalTemplate')
|
||||
.modal-header
|
||||
h3 #{translate("duplicate_file")}
|
||||
.modal-body
|
||||
p #{translate("file_already_exists_in_this_location", { fileName: "'{{ fileName }}'" })}
|
||||
.modal-footer
|
||||
button.btn.btn-default(
|
||||
ng-click="cancel()"
|
||||
) #{translate("dismiss")}
|
||||
|
||||
include ./new-file-modal
|
||||
|
||||
script(type='text/ng-template', id='deleteEntityModalTemplate')
|
||||
|
|
|
@ -676,21 +676,18 @@ define([
|
|||
})
|
||||
}
|
||||
|
||||
moveEntity(entity, parent_folder, callback) {
|
||||
moveEntity(entity, parent_folder) {
|
||||
// Abort move if the folder being moved (entity) has the parent_folder as child
|
||||
// since that would break the tree structure.
|
||||
if (callback == null) {
|
||||
callback = function(error) {}
|
||||
}
|
||||
if (this._isChildFolder(entity, parent_folder)) {
|
||||
return
|
||||
}
|
||||
// check if a doc/file/folder already exists with this name
|
||||
if (this.existsInThisFolder(parent_folder, entity.name)) {
|
||||
return this.nameExistsError()
|
||||
throw new Error('file exists in this location')
|
||||
}
|
||||
// Wait for the http response before doing the move
|
||||
return this.ide.queuedHttp
|
||||
this.ide.queuedHttp
|
||||
.post(
|
||||
`/project/${this.ide.project_id}/${entity.type}/${entity.id}/move`,
|
||||
{
|
||||
|
@ -699,7 +696,7 @@ define([
|
|||
}
|
||||
)
|
||||
.then(() => {
|
||||
return this._moveEntityInScope(entity, parent_folder)
|
||||
this._moveEntityInScope(entity, parent_folder)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -124,6 +124,15 @@ define(['base'], function(App) {
|
|||
return ($scope.cancel = () => $modalInstance.dismiss('cancel'))
|
||||
})
|
||||
|
||||
App.controller('DuplicateFileModalController', function(
|
||||
$scope,
|
||||
$modalInstance,
|
||||
fileName
|
||||
) {
|
||||
$scope.fileName = fileName
|
||||
$scope.cancel = () => $modalInstance.dismiss('cancel')
|
||||
})
|
||||
|
||||
App.controller('NewFileModalController', function(
|
||||
$scope,
|
||||
ide,
|
||||
|
|
|
@ -39,7 +39,19 @@ define(['base'], App =>
|
|||
entities = [$(ui.draggable).scope().entity]
|
||||
}
|
||||
for (let dropped_entity of Array.from(entities)) {
|
||||
ide.fileTreeManager.moveEntity(dropped_entity, $scope.entity)
|
||||
try {
|
||||
ide.fileTreeManager.moveEntity(dropped_entity, $scope.entity)
|
||||
} catch (err) {
|
||||
$modal.open({
|
||||
templateUrl: 'duplicateFileModalTemplate',
|
||||
controller: 'DuplicateFileModalController',
|
||||
resolve: {
|
||||
fileName() {
|
||||
return dropped_entity.name
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
$scope.$digest()
|
||||
// clear highlight explicitly
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||||
*/
|
||||
define(['base'], App =>
|
||||
App.controller('FileTreeRootFolderController', function($scope, ide) {
|
||||
App.controller('FileTreeRootFolderController', function($scope, $modal, ide) {
|
||||
const { rootFolder } = $scope
|
||||
return ($scope.onDrop = function(events, ui) {
|
||||
let entities
|
||||
|
@ -23,7 +23,19 @@ define(['base'], App =>
|
|||
entities = [$(ui.draggable).scope().entity]
|
||||
}
|
||||
for (let dropped_entity of Array.from(entities)) {
|
||||
ide.fileTreeManager.moveEntity(dropped_entity, rootFolder)
|
||||
try {
|
||||
ide.fileTreeManager.moveEntity(dropped_entity, rootFolder)
|
||||
} catch (err) {
|
||||
$modal.open({
|
||||
templateUrl: 'duplicateFileModalTemplate',
|
||||
controller: 'DuplicateFileModalController',
|
||||
resolve: {
|
||||
fileName() {
|
||||
return dropped_entity.name
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
$scope.$digest()
|
||||
// clear highlight explicitly
|
||||
|
|
Loading…
Reference in a new issue