UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

104 lines (103 loc) 4.53 kB
/** * DevExtreme (esm/ui/gantt/ui.gantt.custom_fields.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { compileGetter } from "../../core/utils/data"; import { GanttDataCache } from "./ui.gantt.cache"; import { GanttHelper } from "./ui.gantt.helper"; const GANTT_TASKS = "tasks"; export class GanttCustomFieldsManager { constructor(gantt) { this._gantt = gantt; this._mappingHelper = gantt._mappingHelper; this.cache = new GanttDataCache } _getTaskCustomFields() { const columns = this._gantt.option("columns"); const columnFields = columns && columns.map((c => c.dataField)); const mappedFields = this._mappingHelper.getTaskMappedFieldNames(); return columnFields ? columnFields.filter((f => mappedFields.indexOf(f) < 0)) : [] } _getCustomFieldsData(data) { return this._getTaskCustomFields().reduce(((previous, field) => { if (data && void 0 !== data[field]) { previous[field] = data[field] } return previous }), {}) } addCustomFieldsData(key, data) { if (data) { const modelData = this._gantt._tasksOption && this._gantt._tasksOption._getItems(); const keyGetter = compileGetter(this._gantt.option("tasks.keyExpr")); const modelItem = modelData && modelData.filter((obj => keyGetter(obj) === key))[0]; const customFields = this._getTaskCustomFields(); if (modelItem) { for (let i = 0; i < customFields.length; i++) { const field = customFields[i]; if (Object.prototype.hasOwnProperty.call(modelItem, field)) { data[field] = modelItem[field] } } } } } appendCustomFields(data) { const modelData = this._gantt._tasksOption && this._gantt._tasksOption._getItems(); const keyGetter = this._gantt._getTaskKeyGetter(); const invertedData = GanttHelper.getInvertedData(modelData, keyGetter); return data.reduce(((previous, item) => { const key = keyGetter(item); const modelItem = invertedData[key]; if (!modelItem) { previous.push(item) } else { const updatedItem = {}; for (const field in modelItem) { updatedItem[field] = Object.prototype.hasOwnProperty.call(item, field) ? item[field] : modelItem[field] } previous.push(updatedItem) } return previous }), []) } addCustomFieldsDataFromCache(key, data) { this.cache.pullDataFromCache(key, data) } saveCustomFieldsDataToCache(key, data) { let forceUpdateOnKeyExpire = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : false; let isCustomFieldsUpdateOnly = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : false; const customFieldsData = this._getCustomFieldsData(data); if (Object.keys(customFieldsData).length > 0) { const updateCallback = (key, data) => { const dataOption = this._gantt._tasksOption; if (dataOption && data) { dataOption.update(key, data, ((data, key) => { const updatedCustomFields = {}; this.addCustomFieldsData(key, updatedCustomFields); dataOption._reloadDataSource().done((data => { this._gantt._ganttTreeList.updateDataSource(data ?? dataOption._dataSource, false, isCustomFieldsUpdateOnly) })); const selectedRowKey = this._gantt.option("selectedRowKey"); this._gantt._ganttView._selectTask(selectedRowKey); this._gantt._actionsManager.raiseUpdatedAction("tasks", updatedCustomFields, key) })) } }; this.cache.saveData(key, customFieldsData, forceUpdateOnKeyExpire ? updateCallback : null) } } resetCustomFieldsDataCache(key) { this.cache.resetCache(key) } }