devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
64 lines (63 loc) • 2.52 kB
JavaScript
/**
* 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);