Merge branch 'MDL-74715-400' of https://github.com/paulholden/moodle into MOODLE_400_STABLE

This commit is contained in:
Jun Pataleta
2022-06-20 21:57:28 +08:00
6 changed files with 38 additions and 17 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -24,6 +24,7 @@
"use strict";
import $ from 'jquery';
import CustomEvents from 'core/custom_interaction_events';
import {dispatchEvent} from 'core/event_dispatcher';
import 'core/inplace_editable';
import Notification from 'core/notification';
@@ -52,10 +53,13 @@ const reloadSettingsConditionsRegion = (reportElement, templateContext) => {
return Templates.renderForPromise('core_reportbuilder/local/settings/conditions', {conditions: templateContext})
.then(({html, js}) => {
Templates.replaceNode(settingsConditionsRegion, html, js + templateContext.javascript);
initConditionsForm();
// Re-focus the add condition element after reloading the region.
const reportAddCondition = reportElement.querySelector(reportSelectors.actions.reportAddCondition);
reportAddCondition?.focus();
initConditionsForm(reportElement);
return pendingPromise.resolve();
});
};
@@ -64,6 +68,8 @@ const reloadSettingsConditionsRegion = (reportElement, templateContext) => {
* Initialise conditions form, must be called on each init because the form container is re-created when switching editor modes
*/
const initConditionsForm = () => {
CustomEvents.define(reportSelectors.actions.reportAddCondition, [CustomEvents.events.accessibleChange]);
// Handle dynamic conditions form.
const reportElement = document.querySelector(reportSelectors.regions.report);
const conditionFormContainer = reportElement.querySelector(reportSelectors.regions.settingsConditions);
@@ -138,20 +144,18 @@ export const init = initialized => {
return;
}
document.addEventListener('click', event => {
// Add condition to report.
// Add condition to report. Use custom events helper to ensure consistency across platforms.
$(document).on(CustomEvents.events.accessibleChange, reportSelectors.actions.reportAddCondition, event => {
const reportAddCondition = event.target.closest(reportSelectors.actions.reportAddCondition);
if (reportAddCondition) {
event.preventDefault();
const reportElement = reportAddCondition.closest(reportSelectors.regions.report);
// Check if dropdown is closed with no condition selected.
if (reportAddCondition.value === '0') {
if (reportAddCondition.selectedIndex === 0) {
return;
}
const reportElement = reportAddCondition.closest(reportSelectors.regions.report);
const pendingPromise = new Pending('core_reportbuilder/conditions:add');
addCondition(reportElement.dataset.reportId, reportAddCondition.value)
@@ -165,6 +169,9 @@ export const init = initialized => {
})
.catch(Notification.exception);
}
});
document.addEventListener('click', event => {
// Remove condition from report.
const reportRemoveCondition = event.target.closest(reportSelectors.actions.reportRemoveCondition);
+20 -6
View File
@@ -24,6 +24,7 @@
"use strict";
import $ from 'jquery';
import CustomEvents from 'core/custom_interaction_events';
import {dispatchEvent} from 'core/event_dispatcher';
import 'core/inplace_editable';
import Notification from 'core/notification';
@@ -51,13 +52,24 @@ const reloadSettingsFiltersRegion = (reportElement, templateContext) => {
return Templates.renderForPromise('core_reportbuilder/local/settings/filters', {filters: templateContext})
.then(({html, js}) => {
Templates.replaceNode(settingsFiltersRegion, html, js);
initFiltersForm();
// Re-focus the add filter element after reloading the region.
const reportAddFilter = reportElement.querySelector(reportSelectors.actions.reportAddFilter);
reportAddFilter?.focus();
return pendingPromise.resolve();
});
};
/**
* Initialise filters form, must be called on each init because the form container is re-created when switching editor modes
*/
const initFiltersForm = () => {
CustomEvents.define(reportSelectors.actions.reportAddFilter, [CustomEvents.events.accessibleChange]);
};
/**
* Initialise module, prefetch all required strings
*
@@ -76,24 +88,23 @@ export const init = initialized => {
'delete',
]);
initFiltersForm();
if (initialized) {
return;
}
document.addEventListener('click', event => {
// Add filter to report.
// Add filter to report. Use custom events helper to ensure consistency across platforms.
$(document).on(CustomEvents.events.accessibleChange, reportSelectors.actions.reportAddFilter, event => {
const reportAddFilter = event.target.closest(reportSelectors.actions.reportAddFilter);
if (reportAddFilter) {
event.preventDefault();
const reportElement = reportAddFilter.closest(reportSelectors.regions.report);
// Check if dropdown is closed with no filter selected.
if (reportAddFilter.value === '0') {
if (reportAddFilter.selectedIndex === 0) {
return;
}
const reportElement = reportAddFilter.closest(reportSelectors.regions.report);
const pendingPromise = new Pending('core_reportbuilder/filters:add');
addFilter(reportElement.dataset.reportId, reportAddFilter.value)
@@ -104,6 +115,9 @@ export const init = initialized => {
.then(() => pendingPromise.resolve())
.catch(Notification.exception);
}
});
document.addEventListener('click', event => {
// Remove filter from report.
const reportRemoveFilter = event.target.closest(reportSelectors.actions.reportRemoveFilter);