/* global I18n GLOBAL_CONSTANTS InfiniteScroll */ var ExperimnetTable = { permissions: ['editable', 'archivable', 'restorable', 'moveable'], selectedId: [], table: '.experiment-table', render: {}, selectedMyModules: [], pageSize: GLOBAL_CONSTANTS.DEFAULT_ELEMENTS_PER_PAGE, loadPlaceholder: function() { let placeholder = ''; $.each(Array(this.pageSize), function() { placeholder += $('#experimentTablePlaceholder').html(); }); $(placeholder).insertAfter($(this.table).find('.table-body')); }, appendRows: function(result) { $.each(result, (id, data) => { // Checkbox selector let row = `
`; // Task columns $.each(data, (_i, cell) => { row += `
${ExperimnetTable.render[cell.column_type](cell.data)}
`; }); // Menu row += '
'; $(`
${row}
`).appendTo(`${this.table} .table-body`); }); }, checkActionPermission: function(permission) { let allMyModules; allMyModules = this.selectedMyModules.every((id) => { return $(`.table-row[data-id="${id}"]`).data(permission); }); return allMyModules; }, initSelectAllCheckbox: function() { $(this.table).on('click', '.select-all-checkboxes .sci-checkbox', (e1) => { $.each($('.my-module-selector'), (_i, e2) => { if (e1.target.checked !== e2.checked) e2.click(); }); }); }, initSelector: function() { $(this.table).on('click', '.my-module-selector', (e) => { let checkbox = e.target; let myModuleId = checkbox.dataset.myModule; let row = $(`.table-row[data-id="${myModuleId}"]`); let index = $.inArray(myModuleId, this.selectedMyModules); // If checkbox is checked and row ID is not in list of selected project IDs if (checkbox.checked && index === -1) { $(checkbox).closest('.table-row').addClass('selected'); this.selectedMyModules.push(myModuleId); // Otherwise, if checkbox is not checked and ID is in list of selected IDs } else if (!this.checked && index !== -1) { $(checkbox).closest('.table-row').removeClass('selected'); this.selectedMyModules.splice(index, 1); } if (checkbox.checked) { $.get($(`.table-row[data-id="${myModuleId}"] .my-module-urls`).data('url-permissions'), (result) => { this.permissions.forEach((permission) => { row.data(permission, result[permission]); }); this.updateExperimentToolbar(); }); } else { this.updateExperimentToolbar(); } }); }, updateExperimentToolbar: function() { let experimentToolbar = $('.toolbar-row'); if (this.selectedMyModules.length === 0) { experimentToolbar.find('.single-object-action, .multiple-object-action').addClass('hidden'); } else if (this.selectedMyModules.length === 1) { experimentToolbar.find('.single-object-action, .multiple-object-action').removeClass('hidden'); } else { experimentToolbar.find('.single-object-action').addClass('hidden'); experimentToolbar.find('.multiple-object-action').removeClass('hidden'); } this.permissions.forEach((permission) => { if (!this.checkActionPermission(permission)) { experimentToolbar.find(`.btn[data-for="${permission}"]`).addClass('hidden'); } }); }, init: function() { var dataUrl = $(this.table).data('my-modules-url'); this.loadPlaceholder(); this.initSelector(); this.initSelectAllCheckbox(); $.get(dataUrl, (result) => { $(this.table).find('.table-row').remove(); this.appendRows(result.data); InfiniteScroll.init(this.table, { url: dataUrl, eventTarget: window, placeholderTemplate: '#experimentTablePlaceholder', endOfListTemplate: '#experimentTableEndOfList', pageSize: this.pageSize, lastPage: !result.next_page, customResponse: (response) => { this.appendRows(response.data); } }); }); } }; ExperimnetTable.render.task_name = function(data) { return `${data.name}`; }; ExperimnetTable.render.id = function(data) { let element = $(`
${data.id}
`); $.each(data.urls, (name, url) => { element.attr(`data-url-${name}`, url); }); return element.prop('outerHTML'); }; ExperimnetTable.render.due_date = function(data) { return data; }; ExperimnetTable.render.age = function(data) { return data; }; ExperimnetTable.render.results = function(data) { return `${data.count}`; }; ExperimnetTable.render.status = function(data) { return `
${data.name}
`; }; ExperimnetTable.render.assigned = function(data) { let users = ''; $.each(data.users, (_i, user) => { users += ` `; }); if (data.length > 3) { users += ` +${data.length - 3} `; } if (data.manage_url) { users = ` ${users} `; } return users; }; ExperimnetTable.render.tags = function(data) { const value = parseInt(data.tags, 10) === 0 ? I18n.t('experiments.table.add_tag') : data.tags; return `${value}`; }; ExperimnetTable.render.comments = function(data) { return ` ${data.count > 0 ? data.count : '+'} ${data.count_unseen > 0 ? ` ${data.count_unseen} ` : ''} `; }; ExperimnetTable.init();