import GenericFilter from './local/participantsfilter/filter';
import {get_strings as getStrings} from 'core/str';
import Notification from 'core/notification';
+import Pending from 'core/pending';
import Selectors from './local/participantsfilter/selectors';
import Templates from 'core/templates';
* @return {Promise}
*/
const addFilterRow = () => {
+ const pendingPromise = new Pending('core_user/participantsfilter:addFilterRow');
+
const rownum = 1 + getFilterRegion().querySelectorAll(Selectors.filter.region).length;
return Templates.renderForPromise('core_user/local/participantsfilter/filterrow', {"rownumber": rownum})
.then(({html, js}) => {
return filterRow;
})
+ .then(result => {
+ pendingPromise.resolve();
+
+ return result;
+ })
.catch(Notification.exception);
};
* @returns {Promise}
*/
const removeAllFilters = () => {
+ const pendingPromise = new Pending('core_user/participantsfilter:setFilterFromConfig');
+
const filters = getFilterRegion().querySelectorAll(Selectors.filter.region);
filters.forEach(filterRow => removeOrReplaceFilterRow(filterRow));
// Refresh the table.
- return updateTableFromFilter();
+ return updateTableFromFilter()
+ .then(result => {
+ pendingPromise.resolve();
+
+ return result;
+ });
};
/**
* @param {Object} config
* @param {Number} config.jointype
* @param {Object} config.filters
+ * @returns {Promise}
*/
const setFilterFromConfig = config => {
const filterConfig = Object.entries(config.filters);
if (!filterConfig.length) {
// There are no filters to set from.
- return;
+ return Promise.resolve();
}
// Set the main join type.
}).filter(promise => promise);
if (!filterPromises.length) {
- return;
+ return Promise.resolve();
}
- Promise.all(filterPromises).then(() => {
+ return Promise.all(filterPromises).then(() => {
return removeEmptyFilters();
})
.then(updateFiltersOptions)
- .then(updateTableFromFilter)
- .catch();
+ .then(updateTableFromFilter);
};
/**
* @return {Promise}
*/
const updateTableFromFilter = () => {
+ const pendingPromise = new Pending('core_user/participantsfilter:updateTableFromFilter');
+
const filters = {};
Object.values(activeFilters).forEach(filter => {
filters[filter.filterValue.name] = filter.filterValue;
filters,
}
)
+ .then(result => {
+ pendingPromise.resolve();
+
+ return result;
+ })
.catch(Notification.exception);
};
const tableRoot = DynamicTable.getTableFromId(filterSet.dataset.tableRegion);
const initialFilters = DynamicTable.getFilters(tableRoot);
if (initialFilters) {
+ const initialFilterPromise = new Pending('core_user/participantsfilter:setFilterFromConfig');
// Apply the initial filter configuration.
- setFilterFromConfig(initialFilters);
+ setFilterFromConfig(initialFilters)
+ .then(() => initialFilterPromise.resolve())
+ .catch();
}
};