devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
77 lines (76 loc) • 2.95 kB
JavaScript
/**
* DevExtreme (cjs/__internal/scheduler/resources/resource_processor.js)
* Version: 24.2.7
* Build date: Mon Apr 28 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ResourceProcessor = void 0;
var _array = require("../../../core/utils/array");
var _m_utils = require("./m_utils");
const loadResource = dataSourceConfig => {
if (!dataSourceConfig) {
return Promise.resolve([])
}
const dataSource = (0, _m_utils.getWrappedDataSource)(dataSourceConfig);
if (dataSource.isLoaded()) {
return Promise.resolve(dataSource.items())
}
return new Promise(((resolve, reject) => {
dataSource.load().done((list => resolve(list))).fail((() => reject()))
}))
};
const getAppointmentResources = (resourceMap, rawAppointment) => Object.entries(resourceMap).reduce(((result, _ref) => {
let [fieldName, data] = _ref;
const item = {
label: data.label,
values: []
};
if (fieldName in rawAppointment) {
(0, _array.wrapToArray)(rawAppointment[fieldName]).forEach((value => {
item.values.push(data.texts.get(value) ?? "")
}))
}
if (item.values.length) {
result.push(item)
}
return result
}), []);
class ResourceProcessor {
constructor() {
let resourceConfig = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
let resourceMap = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
this.resourceConfig = resourceConfig;
this.resourceMap = resourceMap
}
async getAppointmentResourcesValues(rawAppointment) {
if (0 === this.resourceConfig.length) {
return Promise.resolve([])
}
return this.loadDataSource().then((resourceMap => getAppointmentResources(resourceMap, rawAppointment)))
}
loadDataSource() {
if (this.loadingPromise) {
return this.loadingPromise
}
this.loadingPromise = Promise.all(this.resourceConfig.map((resource => loadResource(resource.dataSource).then((items => this.onResourceLoaded(resource, items)))))).then((() => this.resourceMap));
return this.loadingPromise
}
onResourceLoaded(resource, items) {
const idExpr = (0, _m_utils.getIdExpr)(resource);
const textExpr = (0, _m_utils.getTextExpr)(resource);
this.resourceMap[(0, _m_utils.getFieldExpr)(resource)] = {
label: resource.label,
texts: items.reduce(((result, item) => {
result.set(item[idExpr], item[textExpr] ?? "");
return result
}), new Map)
}
}
}
exports.ResourceProcessor = ResourceProcessor;