new: [ui:index_table] Fire pending debounced functions on dropdown hidden
parent
351b90d843
commit
67eb9de05a
|
@ -41,6 +41,7 @@ $compactDisplayInputSeed = 'seed-' . mt_rand();
|
||||||
const $container = $dropdownMenu.closest('div[id^="table-container-"]')
|
const $container = $dropdownMenu.closest('div[id^="table-container-"]')
|
||||||
const $table = $container.find(`table[data-table-random-value="${tableRandomValue}"]`)
|
const $table = $container.find(`table[data-table-random-value="${tableRandomValue}"]`)
|
||||||
toggleCompactState($checkbox[0].checked, $table)
|
toggleCompactState($checkbox[0].checked, $table)
|
||||||
|
registerDebouncedFunction($container, debouncedCompactSaver)
|
||||||
})
|
})
|
||||||
})()
|
})()
|
||||||
</script>
|
</script>
|
|
@ -40,7 +40,8 @@ echo $availableColumnsHtml;
|
||||||
const debouncedHiddenColumnSaverWithReload = debounce(mergeAndSaveSettingsWithReload, 2000)
|
const debouncedHiddenColumnSaverWithReload = debounce(mergeAndSaveSettingsWithReload, 2000)
|
||||||
|
|
||||||
function attachListeners() {
|
function attachListeners() {
|
||||||
let debouncedFunctionWithReload = false, debouncedFunction = false // used to flush debounce function if dropdown menu gets closed
|
let debouncedFunctionWithReload = false,
|
||||||
|
debouncedFunction = false // used to flush debounce function if dropdown menu gets closed
|
||||||
$('form.visible-column-form, form.visible-meta-column-form').find('input').change(function() {
|
$('form.visible-column-form, form.visible-meta-column-form').find('input').change(function() {
|
||||||
const $dropdownMenu = $(this).closest(`[data-table-random-value]`)
|
const $dropdownMenu = $(this).closest(`[data-table-random-value]`)
|
||||||
const tableRandomValue = $dropdownMenu.attr('data-table-random-value')
|
const tableRandomValue = $dropdownMenu.attr('data-table-random-value')
|
||||||
|
@ -108,24 +109,6 @@ echo $availableColumnsHtml;
|
||||||
return tableSetting
|
return tableSetting
|
||||||
}
|
}
|
||||||
|
|
||||||
function mergeAndSaveSettingsWithReload(table_setting_id, tableSettings, $table) {
|
|
||||||
mergeAndSaveSettings(table_setting_id, tableSettings, false).then((apiResult) => {
|
|
||||||
const theToast = UI.toast({
|
|
||||||
variant: 'success',
|
|
||||||
title: apiResult.message,
|
|
||||||
bodyHtml: $('<div/>').append(
|
|
||||||
$('<span/>').text('<?= __('The table needs to be reloaded for the new fields to be included.') ?>'),
|
|
||||||
$('<button/>').addClass(['btn', 'btn-primary', 'btn-sm', 'ms-3']).text('<?= __('Reload table') ?>').click(function() {
|
|
||||||
const reloadUrl = $table.data('reload-url');
|
|
||||||
UI.reload(reloadUrl, $table.closest('div[id^="table-container-"]'), $(this)).then(() => {
|
|
||||||
theToast.removeToast()
|
|
||||||
})
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
addSupportOfNestedDropdown();
|
addSupportOfNestedDropdown();
|
||||||
const $form = $('form.visible-column-form, form.visible-meta-column-form')
|
const $form = $('form.visible-column-form, form.visible-meta-column-form')
|
||||||
|
@ -138,6 +121,8 @@ echo $availableColumnsHtml;
|
||||||
toggleColumn(this.getAttribute('data-columnname'), this.checked, $table)
|
toggleColumn(this.getAttribute('data-columnname'), this.checked, $table)
|
||||||
})
|
})
|
||||||
attachListeners()
|
attachListeners()
|
||||||
|
registerDebouncedFunction($container, debouncedHiddenColumnSaver)
|
||||||
|
registerDebouncedFunction($container, debouncedHiddenColumnSaverWithReload)
|
||||||
})
|
})
|
||||||
})()
|
})()
|
||||||
</script>
|
</script>
|
|
@ -10,6 +10,41 @@ function mergeAndSaveSettings(table_setting_id, newTableSettings, automaticFeedb
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mergeAndSaveSettingsWithReload(table_setting_id, tableSettings, $table) {
|
||||||
|
mergeAndSaveSettings(table_setting_id, tableSettings, false).then((apiResult) => {
|
||||||
|
const theToast = UI.toast({
|
||||||
|
variant: 'success',
|
||||||
|
title: apiResult.message,
|
||||||
|
bodyHtml: $('<div/>').append(
|
||||||
|
$('<span/>').text('The table needs to be reloaded for the new fields to be included.'),
|
||||||
|
$('<button/>').addClass(['btn', 'btn-primary', 'btn-sm', 'ms-3']).text('Reload table').click(function () {
|
||||||
|
const reloadUrl = $table.data('reload-url');
|
||||||
|
UI.reload(reloadUrl, $table.closest('div[id^="table-container-"]'), $(this)).then(() => {
|
||||||
|
theToast.removeToast()
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function registerDebouncedFunction($container, fn) {
|
||||||
|
$dropdownButton = $container.find('button.table_setting_dropdown_button')
|
||||||
|
if ($dropdownButton.data('debouncedFunctions') === undefined) {
|
||||||
|
$dropdownButton.data('debouncedFunctions', [])
|
||||||
|
}
|
||||||
|
$dropdownButton.data('debouncedFunctions').push(fn)
|
||||||
|
}
|
||||||
|
|
||||||
|
function firePendingDebouncedFunctions(dropdownBtn) {
|
||||||
|
$dropdownButton = $(dropdownBtn)
|
||||||
|
if ($dropdownButton.data('debouncedFunctions') !== undefined) {
|
||||||
|
$dropdownButton.data('debouncedFunctions').forEach(function (fn) {
|
||||||
|
fn.flush()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function mergeNewTableSettingsIntoOld(table_setting_id, oldTableSettings, newTableSettings) {
|
function mergeNewTableSettingsIntoOld(table_setting_id, oldTableSettings, newTableSettings) {
|
||||||
// Merge recursively
|
// Merge recursively
|
||||||
tableSettings = Object.assign({}, oldTableSettings, newTableSettings)
|
tableSettings = Object.assign({}, oldTableSettings, newTableSettings)
|
||||||
|
|
Loading…
Reference in New Issue