vtenext/modules/Documents/DropAreaForm.js
2021-04-28 20:10:26 +02:00

294 lines
7.7 KiB
JavaScript

/*************************************
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
* SPDX-License-Identifier: AGPL-3.0-only
************************************/
// crmv@176893
window.DropAreaForm = window.DropAreaForm || {
initialize: function() {
this.initializeEvents();
},
initializeEvents: function() {
var me = this;
var availableFolders = me.availableFolders;
jQuery('#doc_folder')
.focus(function() {
var term = this.value;
if (term.length == 0 || this.value == DropAreaForm.emptyString) {
this.placeholder = '';
}
})
.blur(function() {
var term = this.value;
if (term.length == 0) {
this.placeholder = DropAreaForm.emptyString;
}
})
.autocomplete({
minLength: 0,
source: availableFolders,
appendTo: jQuery('.droparea-form'),
open: function() {
if (window.findZMax) {
var zmax = findZMax()+1;
jQuery(this).autocomplete('widget').css('z-index', zmax);
}
return false;
},
select: function(event, ui) {
DropAreaForm.setDocFolder(ui.item.id, ui.item.label);
DropAreaForm.enableAutocompleteField('doc_folder', false);
return false;
}
});
me.setDocFolder(availableFolders[0]['id'], availableFolders[0]['value']);
me.enableAutocompleteField('doc_folder', false);
jQuery('#list-doc-folders').on('click', function() {
DropAreaForm.toggleAutocompleteList('doc_folder');
});
jQuery('#reset-doc-folders').on('click', function() {
DropAreaForm.resetAutocompleteField('doc_folder');
});
jQuery('#add-doc-folder').on('click', function() {
DropAreaForm.toggleAutocompleteField('doc_folder', false);
});
jQuery('#add-doc-folder').tooltip();
jQuery('.add-folder-menu > .add-folder').on('click', function(e) {
e.stopPropagation();
});
jQuery('.add-folder-dropdown').on('show.bs.dropdown', function() {
setTimeout(function() {
jQuery('.add-folder-dropdown').find('input').first().focus();
}, 100);
});
jQuery('.save-add-folder').on('click', function() {
DropAreaForm.saveFolderHandler();
});
var availableUsers = me.availableUsers;
var availableGroups = me.availableGroups;
jQuery('#assigned_user')
.focus(function() {
var term = this.value;
if (term.length == 0 || this.value == DropAreaForm.emptyString) {
this.placeholder = '';
}
})
.blur(function() {
var term = this.value;
if (term.length == 0) {
this.placeholder = DropAreaForm.emptyString;
}
})
.autocomplete({
minLength: 0,
source: availableUsers,
appendTo: jQuery('.droparea-form'),
open: function() {
if (window.findZMax) {
var zmax = findZMax()+1;
jQuery(this).autocomplete('widget').css('z-index', zmax);
}
return false;
},
select: function(event, ui) {
DropAreaForm.setAssignee(ui.item.id, ui.item.label);
DropAreaForm.enableAutocompleteField('assigned_user', false);
return false;
}
});
if (window.current_user) {
var currentUser = availableUsers.filter(function(u) {
return u.id === current_user.id;
});
if (currentUser.length > 0) {
me.setAssignee(currentUser[0].id, currentUser[0].value);
me.enableAutocompleteField('assigned_user', false);
}
}
jQuery('#list-assignee').on('click', function() {
DropAreaForm.toggleAutocompleteList('assigned_user');
});
jQuery('#reset-assignee').on('click', function() {
DropAreaForm.resetAutocompleteField('assigned_user');
});
jQuery('.assignee-type .dropdown-item').on('click', DropAreaForm.changeAssigneeTypeHandler);
},
reloadFolders: function() {
var url = 'index.php?module=Documents&action=DocumentsAjax&file=DropAreaFormAjax';
var payload = {
'subaction': 'get_folders',
};
jQuery('#add-doc-folder').addClass('hidden');
jQuery('#add-doc-folder-loader').removeClass('hidden');
jQuery.ajax({
url: url,
data: payload,
type: 'GET',
dataType: 'json',
success: function(res) {
jQuery('#add-doc-folder').removeClass('hidden');
jQuery('#add-doc-folder-loader').addClass('hidden');
if (res && res.success) {
jQuery('#doc_folder').autocomplete('option', 'source', res.data);
} else {
console.log('Ajax error: ' + res.error);
}
},
error: function() {
jQuery('#add-doc-folder').removeClass('hidden');
jQuery('#add-doc-folder-loader').addClass('hidden');
console.log('Ajax error');
}
});
},
saveFolderHandler: function() {
DropAreaForm.saveFolder();
},
saveFolder: function() {
var me = this;
var url = 'index.php?module=Documents&action=DocumentsAjax&file=DropAreaFormAjax';
var formData = {};
jQuery.each(jQuery('#saveDocumentForm').serializeArray(), function() {
var name = this.name.replace("[]", "");
if (formData.hasOwnProperty(name)) {
if (!formData[name].push) {
formData[name] = [formData[name]];
}
formData[name].push(this.value || '');
} else {
formData[name] = this.value || '';
}
});
var payload = {
'new_folder_name': formData['new_folder_name'],
'new_folder_desc': formData['new_folder_desc'],
'subaction': 'add_folder',
};
jQuery('.add-folder-loader').removeClass('hidden');
jQuery.ajax({
type: 'POST',
url: url,
data: payload,
dataType: 'json',
success: function(res) {
jQuery('.add-folder-loader').addClass('hidden');
if (res && res.success) {
me.setDocFolder(res.folderid, res.foldername);
me.enableAutocompleteField('doc_folder', false);
jQuery("#new_folder_name").val('');
jQuery("#new_folder_desc").val('');
jQuery('.add-folder-dropdown').removeClass('open');
jQuery('.add-folder-dropdown').find('[data-toggle="dropdown"]').attr('aria-expanded', 'false');
me.reloadFolders();
} else {
console.log('Ajax error: ' + res.error);
}
},
error: function() {
jQuery('.add-folder-loader').addClass('hidden');
console.log('Ajax error');
}
});
},
setDocFolder: function(folderId, folderLabel) {
jQuery('#doc_folder_id').val(folderId);
jQuery('#doc_folder').val(folderLabel);
},
setAssignee: function(assigneeId, assigneeLabel) {
jQuery('#assigned_user_id').val(assigneeId);
jQuery('#assigned_user').val(assigneeLabel);
},
toggleAutocompleteList: function(fieldId) {
var element = jQuery('#' + fieldId);
if (element.length > 0) {
if (element.autocomplete('widget').is(':visible')) {
element.autocomplete('close');
return;
}
element.autocomplete('search', '');
}
},
toggleAutocompleteField: function(fieldId, show) {
var element = jQuery('#' + fieldId);
if (element.length > 0) {
element.autocomplete(show ? 'open' : 'close');
}
},
enableAutocompleteField: function(fieldId, enable) {
var element = jQuery('#' + fieldId);
if (element.length > 0) {
element.prop('readonly', !enable);
element.prop('disabled', !enable);
}
},
resetAutocompleteField: function(fieldId) {
var me = this,
element = jQuery('#' + fieldId),
elementId = jQuery('#' + fieldId + '_id');
if (element.length > 0) {
element.val('');
elementId.val('');
me.enableAutocompleteField(fieldId, true);
me.toggleAutocompleteList(fieldId);
element.focus();
}
},
changeAssigneeTypeHandler: function() {
var type = jQuery(this).data('type');
var icon = jQuery(this).find('.vteicon').text();
jQuery(this).closest('.dropdown').find('.assignee-toggle .vteicon').text(icon);
if (type === 'user') {
jQuery('#assigned_user').autocomplete('option', 'source', DropAreaForm.availableUsers); // load users
} else if (type === 'group') {
jQuery('#assigned_user').autocomplete('option', 'source', DropAreaForm.availableGroups); // load groups
}
DropAreaForm.resetAutocompleteField('assigned_user');
},
};