UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

64 lines (63 loc) 2.52 kB
/** * DevExtreme (esm/ui/scheduler/instanceFactory.js) * Version: 21.2.4 * Build date: Mon Dec 06 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { isDefined } from "../../core/utils/type"; import { ModelProvider } from "./modelProvider"; import { TimeZoneCalculator } from "../../renovation/ui/scheduler/timeZoneCalculator/utils"; import timeZoneUtils from "./utils.timeZone"; var Names = { timeZoneCalculator: "timeZoneCalculator", appointmentDataProvider: "appointmentDataProvider", model: "model", modelProvider: "modelProvider" }; var factoryInstances = {}; var tailIndex = -1; export var generateKey = key => isDefined(key) ? key : ++tailIndex; export var createFactoryInstances = options => { var key = generateKey(options.key); createModelProvider(key, options.model); createTimeZoneCalculator(key, options.timeZone); return key }; export var createInstance = (name, key, callback) => { if (!isDefined(factoryInstances[name])) { factoryInstances[name] = {} } var result = callback(); factoryInstances[name][key] = result; return result }; var getInstance = (name, key) => factoryInstances[name] ? factoryInstances[name][key] : void 0; var removeInstance = (name, key) => { if (getInstance(name, key)) { factoryInstances[name] = null } }; var createTimeZoneCalculator = (key, currentTimeZone) => createInstance(Names.timeZoneCalculator, key, () => new TimeZoneCalculator({ getClientOffset: date => timeZoneUtils.getClientTimezoneOffset(date), getCommonOffset: (date, timeZone) => timeZoneUtils.calculateTimezoneByValue(timeZone || currentTimeZone, date), getAppointmentOffset: (date, appointmentTimezone) => timeZoneUtils.calculateTimezoneByValue(appointmentTimezone, date) })); export var createModelProvider = (key, model) => createInstance(Names.modelProvider, key, () => { var modelProvider = getInstance(Names.modelProvider, key); return isDefined(modelProvider) ? modelProvider : new ModelProvider(model) }); export var disposeFactoryInstances = key => { Object.getOwnPropertyNames(Names).forEach(name => { removeInstance(name, key) }) }; export var getTimeZoneCalculator = key => getInstance(Names.timeZoneCalculator, key); export var getModelProvider = key => getInstance(Names.modelProvider, key);