UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

115 lines (110 loc) 3.68 kB
/** * DevExtreme (esm/__internal/viz/core/base_widget.utils.js) * Version: 25.2.3 * Build date: Fri Dec 12 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import resizeObserverSingleton from "../../../core/resize_observer"; import { each } from "../../../core/utils/iterator"; import _windowResizeCallbacks from "../../../core/utils/resize_callbacks"; import { format as _stringFormat } from "../../../core/utils/string"; import { version } from "../../../core/version"; import warnings from "../../../viz/core/errors_warnings"; import { normalizeEnum } from "../../viz/core/utils"; const { ERROR_MESSAGES: ERROR_MESSAGES } = warnings; export function createEventTrigger(eventsMap, callbackGetter) { let triggers = {}; each(eventsMap, ((name, info) => { if (info.name) { createEvent(name) } })); let changes; triggerEvent.change = function(name) { const eventInfo = eventsMap[name]; if (eventInfo) { (changes = changes || {})[name] = eventInfo } return !!eventInfo }; triggerEvent.applyChanges = function() { if (changes) { each(changes, ((name, eventInfo) => { createEvent(eventInfo.newName || name) })); changes = null } }; triggerEvent.dispose = function() { eventsMap = callbackGetter = triggers = null }; return triggerEvent; function createEvent(name) { const eventInfo = eventsMap[name]; triggers[eventInfo.name] = callbackGetter(name, eventInfo.actionSettings) } function triggerEvent(name, arg, complete) { triggers[name](arg); null === complete || void 0 === complete || complete() } } export let createIncidentOccurred = function(widgetName, eventTrigger) { return function(id, args) { eventTrigger("incidentOccurred", { target: { id: id, type: "E" === id[0] ? "error" : "warning", args: args, text: _stringFormat.apply(null, [ERROR_MESSAGES[id]].concat(args || [])), widget: widgetName, version: version } }) } }; function getResizeManager(resizeCallback) { return (observe, unsubscribe) => { const { handler: handler, dispose: dispose } = createDeferredHandler(resizeCallback, unsubscribe); observe(handler); return dispose } } function createDeferredHandler(callback, unsubscribe) { let timeout; const handler = function() { clearTimeout(timeout); timeout = setTimeout(callback, 100) }; return { handler: handler, dispose() { clearTimeout(timeout); unsubscribe(handler) } } } export function createResizeHandler(contentElement, redrawOnResize, resize) { let disposeHandler; const resizeManager = getResizeManager(resize); if ("windowonly" === normalizeEnum(redrawOnResize)) { disposeHandler = resizeManager((handler => _windowResizeCallbacks.add(handler)), (handler => _windowResizeCallbacks.remove(handler))) } else if (true === redrawOnResize) { disposeHandler = resizeManager((handler => resizeObserverSingleton.observe(contentElement, handler)), (() => resizeObserverSingleton.unobserve(contentElement))) } return disposeHandler }