{"version":3,"sources":["../node_modules/devextreme/ui/scheduler/ui.scheduler.table_creator.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.recurrence_editor.js","../node_modules/devextreme/ui/scheduler/ui.loading.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.appointment_form.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.appointments.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.appointment.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.appointments.layout_manager.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.appointment_model.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.header.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.navigator.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.resource_manager.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.subscribes.js","../node_modules/devextreme/ui/scheduler/ui.scheduler.publisher_mixin.js"],"names":["exports","default","_renderer","_interopRequireDefault","require","_dom_adapter","_element_data","_type","_element","obj","__esModule","_default","tableCreator","SchedulerTableCreator","this","VERTICAL","HORIZONTAL","_proto","prototype","insertAllDayRow","allDayElements","tableBody","index","row","find","length","createElement","append","get","appendChild","makeTable","options","templateCallbacks","rowCountInGroup","groupCount","rowCount","allDayElementIndex","groupIndex","container","i","isLastRowInGroup","rowClass","className","j","cellCount","td","cellClass","isFunction","cellDataObject","dataKey","dataValue","getCellData","key","value","data","cellTemplate","render","templateOptions","model","text","getCellText","date","getCellDate","getPublicElement","startDate","endDate","groups","allDay","push","bind","innerHTML","makeGroupedTable","type","cssClasses","groupByDate","_makeVerticalGroupedRows","_makeHorizontalGroupedRows","makeGroupedTableFromJSON","config","table","cellStorage","rowIndex","cellTag","childrenField","titleField","groupTableClass","groupRowClass","groupCellClass","groupCellCustomContent","createCell","childCount","cell","element","cellText","createTextNode","generateCells","item","forEach","cells","rowspans","prev","rowspan","reverse","setAttribute","_makeFlexGroupedRowCells","group","repeatCount","repeatByDate","arguments","items","itemCount","$container","template","attr","addClass","cssClass","groupHeaderClass","cellTemplates","cellsArray","cellIterator","rows","_i","groupHeaderRowClass","_i2","currentColumnLength","elements","_makeGroupedRowCells","map","maxCellCount","$cell","colspan","groupHeaderContentClass","module","_component_registrator","_guid","_date","_extend","_date2","_message","_form","_button_group","_date_box","_editor","_number_box","_recurrence","_toConsumableArray","arr","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","iter","Symbol","iterator","from","_iterableToArray","o","minLen","n","Object","toString","call","slice","constructor","name","test","_unsupportedIterableToArray","TypeError","_nonIterableSpread","len","arr2","_setPrototypeOf","p","setPrototypeOf","__proto__","REPEAT_END_EDITOR","INTERVAL_EDITOR","frequenciesMessages","recurrence","frequencies","format","repeatEndTypes","days","RecurrenceRule","rule","_recurrenceProcessor","getRecurrenceProcessor","_recurrenceRule","evalRecurrenceRule","makeRules","string","makeRule","field","isDefined","count","until","getRepeatEndRule","rules","getRecurrenceString","getRules","getDaysFromByDayRule","daysFromByDayRule","RecurrenceEditor","_Editor","subClass","superClass","apply","create","_proto2","_getDefaultOptions","defaultOptions","extend","Date","firstDayOfWeek","_getFirstDayOfWeek","option","firstDayOfWeekIndex","_createComponent","_extendConfig","readOnly","_init","_render","$element","_$container","appendTo","_prepareEditors","_renderEditors","getEditorByField","fieldName","editor","getRecurrenceForm","getEditor","_weekEditor","_repeatCountEditor","_repeatUntilDate","freq","toLowerCase","_editors","_createFreqEditor","_createIntervalEditor","_createRepeatOnLabel","itemType","colCount","colCountByScreen","xs","_createRepeatOnEditor","_createRepeatEndEditor","_this","dataField","editorType","editorOptions","valueExpr","displayExpr","layout","elementAttr","onValueChanged","args","_valueChangedHandler","label","_this2","interval","concat","width","min","showSpinButtons","useLargeSpinButtons","charAt","toUpperCase","substr","colSpan","visible","_createByDayEditor","_createByMonthEditor","_createByMonthDayEditor","_this3","_","itemElement","byDay","_daysOfWeekByRules","localDaysNames","getDayNames","dayNames","itemsButtonGroup","_$repeatOnWeek","selectionMode","selectedItemKeys","keyExpr","onSelectionChanged","e","selectedKeys","component","_changeEditorValue","_this4","monthsName","getMonthNames","_monthOfYearByRules","_this5","max","_dayOfMonthByRules","_this6","repeatType","itemTemplate","itemData","_renderRepeatCountEditor","_renderRepeatUntilEditor","_renderDefaultRepeatEnd","_repeatEndValueChangedHandler","_recurrenceForm","showValidationSummary","scrollingEnabled","showColonAfterLabel","labelLocation","_disableRepeatEndParts","_setAriaDescribedBy","$label","labelId","setAria","changeValueByVisibility","_handleDefaults","daysByRule","getDay","dayByRule","bymonthday","getDate","monthByRule","bymonth","getMonth","String","$editorTemplate","_getUntilValue","$editorWrapper","_$repeatCountEditor","_repeatCountValueChangeHandler","_formatUntilDate","sameDate","setToDayEnd","repeatUntil","_$repeatDateEditor","_repeatUntilValueChangeHandler","calendarOptions","untilDate","previousValue","_makeRepeatOnRule","_changeRepeatOnVisibility","_optionChanged","_changeRepeatIntervalLabel","_changeEditorsValue","previousFreq","itemOption","_changeDayOfWeekValue","_changeDayOfMonthValue","_changeMonthOfYearValue","_changeIntervalValue","_changeRepeatCountValue","_changeRepeatEndValue","_changeRepeatUntilValue","_days","day","month","toggle","_freqEditor","focus","_switchEditor","hide","loading","_deferred","Deferred","resolve","done","removeLoadPanel","promise","show","_load_panel","_view_port","createLoadPanel","remove","_config","_devices","_bindable_template","_empty_template","_array","_browser","_callbacks","_common","_data","_position","_date_serialization","_iterator","_support","_window","_data_helper","_visibility_change","_dialog","_themes","_ui","_ui2","_appointmentPopup","_compactAppointmentsHelper","_desktopTooltipStrategy","_mobileTooltipStrategy","_ui3","_uiScheduler","_uiSchedulerAppointments","_uiScheduler2","_uiScheduler3","_uiScheduler4","_uiScheduler5","_utils","_uiScheduler6","_uiScheduler7","_uiScheduler8","_uiScheduler9","_uiScheduler10","_uiScheduler11","_uiScheduler12","_uiScheduler13","_uiScheduler14","_appointmentAdapter","_timeZoneCalculator","_dataStructures","_appointmentSettingsGenerator","_utils2","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","_defineProperty","defineProperty","configurable","writable","WIDGET_SMALL_CLASS","WIDGET_ADAPTIVE_CLASS","WIDGET_WIN_NO_TOUCH_CLASS","WIDGET_READONLY_CLASS","VIEWS_CONFIG","workSpace","renderingStrategy","week","workWeek","timelineDay","timelineWeek","timelineWorkWeek","timelineMonth","agenda","StoreEventNames","Scheduler","_Widget","views","currentView","currentDate","trimTime","dateSerializationFormat","resources","dataSource","customizeDateNavigatorText","appointmentTemplate","dropDownAppointmentTemplate","appointmentCollectorTemplate","dataCellTemplate","timeCellTemplate","resourceCellTemplate","dateCellTemplate","startDayHour","endDayHour","editing","allowAdding","allowDeleting","allowDragging","allowResizing","allowUpdating","allowTimeZoneEditing","allowEditingTimeZones","showAllDayPanel","showCurrentTimeIndicator","shadeUntilCurrentTime","indicatorUpdateInterval","indicatorTime","recurrenceEditMode","cellDuration","maxAppointmentsPerCell","selectedCellData","onAppointmentRendered","onAppointmentClick","onAppointmentDblClick","onAppointmentContextMenu","onCellClick","onCellContextMenu","onAppointmentAdding","onAppointmentAdded","onAppointmentUpdating","onAppointmentUpdated","onAppointmentDeleting","onAppointmentDeleted","onAppointmentFormOpening","appointmentTooltipTemplate","appointmentPopupTemplate","crossScrollingEnabled","useDropDownViewSwitcher","startDateExpr","endDateExpr","textExpr","descriptionExpr","allDayExpr","recurrenceRuleExpr","recurrenceExceptionExpr","disabledExpr","remoteFiltering","timeZone","startDateTimeZoneExpr","endDateTimeZoneExpr","noDataText","adaptivityEnabled","allowMultipleCellSelection","scrolling","mode","renovateRender","_appointmentTooltipOffset","x","y","_appointmentTooltipButtonsPosition","_appointmentTooltipOpenButtonText","_dropDownButtonIcon","_appointmentCountPerCell","_collectorOffset","_appointmentOffset","integrationOptions","useDeferUpdateForTemplates","_defaultOptionsRules","device","real","deviceType","isSimulator","focusStateEnabled","current","generic","isMaterial","split","span","_setDeprecatedOptions","_deprecatedOptions","since","message","alias","_getAppointmentSettingsGenerator","AppointmentSettingsGenerator","_postponeDataSourceLoading","postponedOperations","add","_reloadDataSource","_postponeResourceLoading","whenLoaded","_loadResources","resolveCallbacks","_updateOption","_dateOption","_workSpace","_header","_getViewStartByOptions","_appointments","_filterAppointmentsByDate","_initDataSource","_appointmentModel","setDataSource","_dataSource","_processCurrentView","_getCurrentViewOptions","repaint","fire","getLayoutManager","initRenderingStrategy","_getAppointmentsRenderingStrategy","_validateCellDuration","allowDrag","_allowDragging","allowResize","_allowResizing","_getAppointmentTemplate","_refreshWorkSpace","_updateHeader","_resourcesManager","setResources","setDataAccessors","_combineDataAccessors","_actions","_createActionByOption","_getAppointmentRenderedAction","_readyToRenderAppointments","_getAppointmentsToRepaint","_dimensionChanged","_initEditing","_editing","_bringEditingModeToAppointments","hideAppointmentTooltip","_cleanPopup","_updateExpression","_initAppointmentTemplate","_toggleAdaptiveClass","fullName","viewCountConfig","_getViewCountConfig","intervalCount","_getCurrentViewOption","_currentView","optionName","optionValue","deserializeDate","_getSerializationFormat","isString","getDateSerializationFormat","editingConfig","allowDelete","_isAgenda","allowAllDayResize","_supportAllDayResizing","_allowAllDayResizing","_getCurrentViewType","_isAllDayExpanded","hasAllDayAppointments","_getTimezoneOffsetByOption","calculateTimezoneByValue","dateRange","getDateRange","filterByDate","result","loadResources","_loadedResources","load","_fireContentReadyAction","fail","reject","isLoading","position","of","_this$_workSpaceRecal","contentReadyBase","fireContentReady","_workSpaceRecalculation","filteredItems","getFilteredItems","_toggleSmallClass","_isVisible","_cleanAllowedPositions","appointments","_layoutManager","createAppointmentsMap","triggerResize","updatePopupFullScreenMode","_clean","getBoundingRect","toggleClass","_visibilityChanged","_dataSourceOptions","paginate","_initExpressions","startDateTimeZone","endDateTimeZone","description","recurrenceRule","recurrenceException","disabled","msie","touch","combinedDataAccessors","getAppointmentDurationInMinutes","_initActions","CompactAppointmentsHelper","_asyncTemplatesTimers","_dataSourceLoadedCallback","_subscribes","timeZoneCalculator","TimeZoneCalculator","getClientOffset","getClientTimezoneOffset","getCommonOffset","getAppointmentOffset","appointmentTimezone","_initTemplates","_templateManager","addDefaultTemplates","appointmentTooltip","EmptyTemplate","dropDownAppointment","expr","_dataAccessors","createGetter","property","compileGetter","getter","valueOf","BindableTemplate","getAppointmentsInstance","_renderAppointmentTemplate","resourcesDataAccessors","each","accessor","_renderContent","_renderContentImpl","_dataSourceChangedHandler","_renderAppointments","_renderView","fireWith","isVirtualScrolling","_this$getWorkSpace","getWorkSpace","_filterAppointments","prerenderFilterName","_filteredItems","getRenderingStrategyInstance","calculateRows","cleanModelState","getRepaintedAppointments","fields","setter","dateGetter","dateSetter","compileSetter","that","forceIsoDateParsing","serializeDate","exprObj","replace","isObject","_isReadOnly","prop","hasOwnProperty","_dispose","_appointmentTooltip","dispose","hideAppointmentPopup","clearTimeout","excludeValidators","_renderFocusTarget","noop","_initMarkup","_renderHeader","_appointmentsConfig","MobileTooltipStrategy","DesktopTooltipStrategy","_getAppointmentTooltipOptions","_isLoaded","_isDataSourceLoading","_initMarkupCore","createComponent","getScrollableContainer","getWorkSpaceScrollableContainer","getAppointmentTemplate","showAppointmentPopup","checkAndDeleteAppointment","isAppointmentInAllDayPanel","createFormattedDateText","appointment","targetedAppointment","getAppointmentDisabled","createAppointmentAdapter","targetedAdapter","_checkRecurringAppointment","deleteAppointment","_getExtraAppointmentTooltipOptions","rtlEnabled","offset","appointmentData","appointmentTakesAllDay","supportAllDayRow","_this7","hasWindow","_cleanWorkspace","_renderWorkSpace","fixedContainer","getFixedContainer","allDayContainer","getAllDayContainer","_waitAsyncTemplate","_this7$_workSpaceReca","_isResourcesLoaded","_isDataSourceLoaded","isLoaded","$header","_headerConfig","_this8","currentViewOptions","countConfig","isAdaptive","tabIndex","observer","todayDate","createDate","path","onItemRendered","onItemClick","onItemContextMenu","onContentReady","getCollectorOffset","needApplyCollectorOffset","view","viewName","viewType","isCurrentViewValid","log","$workSpace","workSpaceComponent","workSpaceConfig","_workSpaceConfig","initDragBehavior","_all","_attachTablesEvents","getWorkArea","_recalculateWorkspace","_getHeaderDate","_getViewByName","_this9","triggerResizeEvent","_refreshDateTimeIndication","_currentViewOptions$s","_this10","accessKey","allDayExpanded","hoursInterval","_getTemplate","callback","_options","silent","timer","setTimeout","_getTemplateByOption","_this11","detach","getWorkSpaceScrollable","getScrollable","getWorkSpaceScrollableScrollTop","getGroupedScrollableScrollTop","getWorkSpaceScrollableScrollLeft","getScrollableScrollLeft","getWorkSpaceAllDayHeight","getAllDayHeight","getWorkSpaceAllDayOffset","getAllDayOffset","getWorkSpaceHeaderPanelHeight","getHeaderPanelHeight","getWorkSpaceDateTableOffset","getWorkSpaceLeftOffset","getAppointmentModel","getHeader","getMaxAppointmentsPerCell","targetAppointment","singleAppointment","exceptionDate","isDeleted","isPopupEditing","dragEvent","_this12","_updatedRecAppointment","isValid","_excludeAppointmentFromSeries","cancel","_showRecurrenceChangeConfirm","moveAppointmentBack","rawAppointment","newRawAppointment","_this13","target","source","getOwnPropertyDescriptors","defineProperties","_objectSpread","newAppointment","keyName","addAppointment","_createRecurrenceException","_editAppointmentData","_updateAppointment","_getSerializedDate","join","isAllDay","setHours","getHours","getMinutes","getSeconds","getMilliseconds","FULL_DATE_FORMAT","seriesText","occurrenceText","custom","messageHtml","showCloseButton","showTitle","buttons","onClick","_getUpdatedData","_this14","getConvertedFromGrid","isValidDate","isNaN","getTime","targetCell","getTargetCellData","cellStartDate","cellEndDate","appointmentStartDate","appointmentEndDate","resultedStartDate","duration","keepOriginalHours","timeInMs","resultedEndDate","calculateEndDate","dateCopy","timeZoneOffset","getTimezoneOffsetChangeInMs","rawResult","setResourcesToItem","getTargetedAppointment","settings","dataAccessors","getAppointmentSettings","info","getAppointmentInfo","appointmentIndex","_itemIndexKey","adapter","clone","isRecurrent","newStartDate","getAppointmentDataCalculator","getStartDate","sourceAppointment","rawTargetedAppointment","setTargetedAppointmentResources","subscribe","subject","action","Error","getDataByDroppableCell","onUpdatePrevented","updatingOptions","newData","oldData","performFailAction","err","isDeferred","_processActionResult","canceled","_this15","deferred","_expandAllDayPanel","update","always","storeAppointment","_onDataPromiseCompleted","actionOptions","_this16","resolveCallback","callbackResult","when","fromPromise","isPromise","state","handlerName","error","isVisible","getAppointmentPopup","getPopup","getUpdatedAppointment","getUpdatedAppointmentKeys","getResourceManager","getActions","_getRecurrenceException","exceptions","_convertRecurrenceException","exceptionString","_this17","getConvertedToTimeZone","convertedStartDate","convertedExceptionDate","correctRecurrenceExceptionByTimezone","dayHasAppointment","_this18","dayTimeStamp","startDateTimeStamp","endDateTimeStamp","inArray","getGroups","setResourceCallback","resourcesSetter","apptSettings","_positionMap","_getCellGroups","id","setting","getCellDataByCoordinates","left","top","getStartViewDate","getEndViewDate","createNewAppointment","_this19","newTargetedAppointment","isEmptyObject","saveChanges","showAppointmentTooltip","AppointmentTooltipInfo","_tryGetAppointmentColor","showAppointmentTooltipCore","isAlreadyShown","scrollToTime","hours","minutes","scrollTo","_this20","serializedAppointment","addingOptions","updateAppointment","deletingOptions","_this21","getFirstDayOfWeek","_this22","getField","setField","getTimeZoneCalculator","include","AppointmentForm","APPOINTMENT_FORM_GROUP_NAMES","_data_source","Main","Recurrence","SchedulerAppointmentForm","_appointmentForm","_lockDateShiftFlag","_validateAppointmentFormDate","_getAllDayStartDate","_getStartDateWithStartHour","componentCreator","isReadOnly","formData","lg","screenByWidth","_dateBoxValueChanged","dateExpr","isNeedCorrect","dateEditor","dateValue","_createTimezoneEditor","timeZoneExpr","secondTimeZoneExpr","visibleIndex","isMainTimeZone","isShow","noTzTitle","placeholder","searchEnabled","secondTimezoneEditor","_createDateBoxEditor","dataExpr","validationRules","_createDateBoxItems","dataExprs","schedulerInst","endValue","startValue","_changeFormItemDateType","itemPath","newEditorOption","_createMainItems","changeSize","location","startDateEditor","endDateEditor","allDayStartDate","startDateWithStartHour","startDateItemPath","endDateItemPath","form","_updateRecurrenceItemVisibility","_form$getEditor","updateData","prepareAppointmentFormEditors","recurrenceEditorVisibility","getRecurrenceRule","_createRecurrenceEditor","concatResources","setEditorsType","startDateFormItem","endDateFormItem","startDateEditorOptions","endDateEditorOptions","updateTimeZoneEditorDataSource","expression","store","getDisplayedTimeZones","pageSize","setEditorOptions","updateRecurrenceEditorStartDate","groupName","editorPath","updateFormData","appointmentForm","_events_engine","_translator","_object","_index","_double_click","_uiCollection_widget","_utilsTimeZone","_constants","DBLCLICK_EVENT_NAME","addNamespace","toMs","dateToMilliseconds","SchedulerAppointments","inherit","ctor","callBase","_supportedKeys","parent","escape","_escPressed","del","preventDefault","_getItemData","notifyObserver","tab","_getAccessAppointments","APPOINTMENT_SETTINGS_KEY","sortedIndex","lastIndex","shiftKey","$nextAppointment","_getAppointmentByIndex","_resetTabIndex","trigger","$item","eq","_itemElements","not","$appointment","_focusTarget","_moveFocus","_focusInHandler","_$currentAppointment","_focusOutHandler","_eventBindingTarget","_itemContainer","activeStateEnabled","hoverStateEnabled","_cleanFocusState","_clearDropDownItems","_clearDropDownItemsElements","_repaintAppointments","_renderDropDownAppointments","_attachAppointmentsEvents","_invalidate","_isAllDayAppointment","_isRepaintAppointment","needRepaint","_isRepaintAll","invoke","_applyFragment","fragment","children","_getAppointmentContainer","_onEachAppointment","isRepaintAll","needRemove","_clearItem","_renderItem","_renderByFragments","$commonFragment","$allDayFragment","html","_cleanItemContainer","renderFunction","createDocumentFragment","_attachClickEvent","_attachHoldEvent","_attachContextMenuEvent","_attachAppointmentDblClick","_renderFocusState","_attachFeedbackEvents","_attachHoverEvents","$items","_findItemElementByItem","_virtualAppointments","itemElements","_itemDataKey","_itemClass","$result","$allDayContainer","empty","_initialSize","_initialCoordinates","_preventSingleAppointmentClick","formatText","_currentAppointmentSettings","agendaSettings","targetedAppointmentData","isPlainObject","$contentDetails","formatDate","RECURRING_ICON_CLASS","prependTo","_executeItemRenderAction","_getItemRenderAction","_itemClickHandler","afterExecute","_processItemClick","event","$target","currentTarget","isFakeClickEvent","_appointmentClickTimeout","getBody","contains","_extendActionArgs","itemSelector","_itemSelector","itemContainer","off","on","_itemDXEventHandler","_dblClickHandler","$targetAppointment","_getItemContent","$itemFrame","_createItemByTemplate","renderArgs","itemsContainer","_postprocessRenderItem","_renderAppointment","_applyResourceDataAttr","geometry","skipResizing","deferredColor","_getAppointmentColor","virtual","_processVirtualAppointment","direction","reduced","appointmentReduced","isCompact","cellWidth","cellHeight","resizableConfig","_resizableConfig","color","css","values","normalizeKey","itemSetting","area","_calculateResizableArea","onResizeStart","updatedArea","_renderDragOffsets","height","locate","onResizeEnd","_resizeEndHandler","closest","coordinates","scheduler","modifiedAppointmentAdapter","_getEndResizeAppointmentStartDate","_getDateRange","pathTimeZone","appointmentInfo","appointmentAdapter","recurrenceProcessor","isValidRecurrenceRule","handles","appointmentTimeZone","startTime","endTime","deltaTime","renderingStrategyDirection","needCorrectDates","right","_correctStartDateByDelta","_correctEndDateByDelta","visibleDayDuration","daysCount","Math","ceil","floor","maxDate","minDate","tailOfPrevDays","lastDay","setDate","firstDay","res","_calculateBoundOffset","appointmentSetting","virtualAppointment","virtualGroupIndex","colors","buttonColor","virtualGroup","virtualItems","virtualCoordinates","$fragment","buttonWidth","buttonHeight","rtlOffset","_isGroupCompact","applyOffset","_sortAppointmentsByStartDate","sort","a","b","firstDate","secondDate","_processRecurrenceAppointment","skipLongAppointments","parts","indexes","dates","appointmentDuration","startViewDate","endViewDate","recurrentDates","generateDates","exception","start","end","recurrentDateCount","appointmentPart","appointmentSettings","_applyStartDateToObj","_applyEndDateToObj","_processLongAppointment","splitAppointmentByDay","partCount","_reduceRecurrenceAppointments","recurrenceIndexes","splice","_combineAppointments","additionalAppointments","merge","size","coords","_removeDragSourceClassFromDraggedAppointment","move","outerWidth","outerHeight","focusedElement","originalStartDate","makeDate","maxAllowedDate","appointmentIsLong","currentStartDate","currentEndDate","_checkStartDate","_checkEndDate","deepExtendArraySafe","originalDate","APPOINTMENT_DRAG_SOURCE_CLASS","dxSchedulerAppointment","_setDragSourceAppointment","$appointments","_settings$info$source","_$item$data","itemInfo","itemGroupIndex","_itemInfo$sourceAppoi","itemStartDate","itemEndDate","appointmentInstance","isDragSource","_pointer","_dom_component","_resizable","REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME","enter","REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME","leave","Appointment","_renderDragSourceClass","_getHorizontalResizingRule","reducedHandles","head","body","tail","minHeight","minWidth","step","roundStepValue","_getVerticalResizingRule","_renderAppointmentGeometry","_renderEmptyClass","_renderReducedAppointment","_renderAllDayClass","_renderDirection","_renderRecurrenceClass","_renderResizable","EMPTY_APPOINTMENT_CLASS","reducedPart","REDUCED_APPOINTMENT_CLASS","REDUCED_APPOINTMENT_PARTS_CLASSES","_renderAppointmentReducedIcon","$icon","REDUCED_APPOINTMENT_ICON","_getEndDate","tooltipText","content","ALL_DAY_APPOINTMENT_CLASS","RECURRENCE_APPOINTMENT_CLASS","DIRECTION_APPOINTMENT_CLASSES","_createResizingConfig","stepPrecision","_useTemplates","_uiSchedulerAppointmentsStrategy","_uiSchedulerAppointmentsStrategy2","_uiSchedulerAppointmentsStrategy3","_uiSchedulerAppointmentsStrategy4","_uiSchedulerAppointmentsStrategy5","RENDERING_STRATEGIES","horizontal","horizontalMonth","horizontalMonthLine","vertical","AppointmentLayoutManager","instance","getCellDimensions","getCellWidth","getCellHeight","allDayHeight","getGroupOrientation","_getRealGroupOrientation","Strategy","_renderingStrategyInstance","_allDayCellHeight","groupOrientation","_groupOrientation","createTaskPositionMap","_createAppointmentsMapCore","list","positionMap","keepAppointmentSettings","_isDataChanged","some","_isAppointmentShouldAppear","currentAppointment","_isSettingChanged","sourceSetting","newSettings","oldSettings","equalByValue","_getAssociatedSourceAppointment","sourceAppointments","_getDeletedAppointments","currentAppointments","_query","_defineProperties","props","descriptor","FilterMaker","_filterRegistry","isRegistered","clearRegistry","make","_make","useAccessors","userFilter","user","combine","dateFilter","AppointmentModel","baseAppointmentDuration","_updatedAppointmentKeys","_filterMaker","_baseAppointmentDuration","Constructor","protoProps","staticProps","_createFilter","userFilterPosition","_excessFiltering","_combineRemoteFilter","dataSourceFilter","_combineFilter","_getStoreKey","keyOf","_filterAppointmentByResources","resourceName","checkAppointmentResourceValues","resource","resourceGetter","appointmentResourceValues","wrapToArray","resourceData","itemDataCount","_filterAppointmentByRRule","_appointmentPartInInterval","trimmedDates","_trimDates","hasRecurrence","apptStartDayHour","apptEndDayHour","_createCombinedFilter","filterOptions","getRecurrenceException","viewStartDayHour","viewEndDayHour","_appointment$visible","appointmentTakesSeveralDays","useRecurrence","comparableStartDate","comparableEndDate","severalDays","dateTimeFromDecimal","compareDateWithStartDayHour","hiddenInterval","apptDuration","delta","apptStartHour","apptStartMinutes","compareDateWithEndDayHour","_initStoreChangeHandlers","newItem","_updatedAppointment","pushItems","pushItem","_this$_dataSource$fil","_serializeRemoteFilter","combinedFilter","_createAppointmentFilter","customizeDateFilter","filterLoadedAppointments","filterOption","getPreparedDataItems","toArray","dataItems","replaceWrongEndDate","_isEndDateWrong","calculatedEndDate","_calculateAppointmentEndDate","filterLoadedVirtualAppointments","combinedFilters","itemsToFilter","minCopy","maxCopy","_appointmentHasAllDayDuration","_getAppointmentDurationInHours","_appointmentHasShortDayDuration","currentFilter","insert","d","_inflector","_drop_down_menu","_tabs","_errors","STEP_MAP","VIEWS","SchedulerHeader","_setOptionsByReference","_optionsByReference","_validateViews","_viewSwitcher","selectedItem","_navigator","_changeViewSwitcherLabelText","_refreshViewSwitcher","_renderNavigator","_renderViewSwitcher","$viewSwitcher","_renderViewSwitcherDropDownMenu","_renderViewSwitcherTabs","TABS_EXPANDED_CLASS","selectionRequired","_updateCurrentView","_getItemText","camelize","_removeViewSwitcherLabel","_$viewSwitcherLabel","buttonIcon","currentViewText","_getCurrentViewName","_button","_calendar","_popover","_popup","getDateMonthFormat","short","monthName","getMonthYearFormat","getCaptionFormat","dateMonthFormat","lastIntervalDate","defaultViewDuration","isDifferentMonthDates","useShortFormat","getWeekCaption","shift","rejectWeekend","getDefaultFirstDayOfWeekIndex","firstWeekDate","getFirstWeekDate","normalizeDateByWeek","lastWeekDate","formatCaptionByMonths","lastDate","lastDateText","firstDateText","isDifferentYears","getFullYear","getMonthCaption","getFirstMonthDate","getLastMonthDate","setMonth","isSameYear","getYear","getConfig","agendaDuration","getCaption","_getConfig","getLastMonthDay","isNumeric","SchedulerNavigator","displayedDate","_useShortDateFormat","_updateButtonsState","_renderCaption","_setCalendarOption","_next","_caption","_prev","_initButtons","$next","icon","_updateCurrentDate","$caption","$prev","caption","_getNextDate","normalizeDate","initialDate","stepConfig","_renderPopover","_renderCaptionKeys","_isMobileLayout","overlayType","popoverContainer","contentTemplate","_createPopupContent","defaultOptionsRules","fullScreen","toolbarItems","shortcut","_createScrollable","$content","_calendarOptions","_todayDate","hasFocus","captionConfig","customizationFunction","onKeyboardHandled","opts","_keyboardHandler","executeHandler","is","registerKeyHandler","getValueExpr","getDisplayExpr","ResourceManager","_resourceLoader","_createWrappedDataSource","DataSource","normalizeDataSourceOptions","_mapResourceData","valueGetter","displayGetter","_isMultipleResource","resourceField","getResources","allowMultiple","getDataAccessors","accessorName","accessors","fieldExpr","_resources","_resourceFields","getResourcesData","_resourcesData","getEditors","currentResourceItems","_getResourceDataByField","getResourceDataByValue","filteredData","getResourcesFromItem","wrapOnlyMultipleResources","fieldValue","tempObject","deferreds","getResourcesByFields","mapFunction","grep","getResourceByField","getResourceColor","colorExpr","colorGetter","resourceDataLength","getResourceForPainting","useColorAsDefault","createResourcesTree","leafIndex","currentGroupItem","resultItem","title","nextGroupIndex","_hasGroupItem","appointmentResources","itemValue","loadedResources","currentResourceData","resourceCount","getResourceTreeLeaves","tree","groupAppointmentsByResources","treeLeaves","reduceResourcesTree","existingAppointments","_result","node","ok","resourceValue","resourceTitle","resourceFromAppointment","indexOf","getResourcesDataByGroups","resourcesData","fieldNames","getOwnPropertyNames","currentResourcesData","currentItems","currentData","HOUR_MS","isCurrentViewAgenda","currentViewUpdated","currentDateUpdated","getOption","setCellDataCacheAlias","createAppointmentSettings","isGroupedByDate","showAddAppointmentPopup","cellData","cellGroups","resultAppointment","showEditAppointmentPopup","targetedData","updateAppointmentAfterResize","getUpdatedData","updateAppointmentAfterDrag","_ref","targetedRawAppointment","newCellIndex","getDroppableCellIndex","oldCellIndex","getCellIndexByCoordinates","becomeAllDay","wasAllDay","movedBetweenAllDayAndSimple","onDeleteButtonPress","getAppointmentColor","resourcesManager","resourceForPainting","response","resourceValues","groupId","getHeaderHeight","_$element","parseInt","getBoundOffset","getTextAndFormatDate","appointmentRaw","targetedAppointmentRaw","formatType","_getTypeFormat","_createAppointmentTitle","_formatDates","isSameDate","getResizableAppointmentArea","_needHorizontalGroupBounds","horizontalGroupBounds","getGroupBounds","bottom","_needVerticalGroupBounds","_isVerticalGroupedWorkSpace","verticalGroupBounds","needRecalculateResizableArea","getAppointmentGeometry","getDeltaTime","initialSize","getDropDownAppointmentWidth","getDropDownAppointmentHeight","getResizableStep","_getGroupCount","getRenderingStrategy","getMaxAppointmentCountPerCellByType","_getMaxAppointmentCountPerCellByType","needCorrectAppointmentDates","getRenderingStrategyDirection","getDirection","getFullWeekAppointmentWidth","getGroupWidth","getMaxAppointmentWidth","getCellCountToLastViewDate","updateAppointmentStartDate","updatedStartDate","firstViewDate","roundDateByStartDayHour","updateAppointmentEndDate","updatedEndDate","renderCompactAppointments","clearCompactAppointments","clear","supportCompactDropDownAppointments","_supportCompactDropDownAppointments","isApplyCompactAppointmentOffset","_isApplyCompactAppointmentOffset","getGroupCount","mapAppointmentFields","appointmentElement","getOffsetByAllDayPanel","_getOffsetByAllDayPanel","getGroupTop","_getGroupTop","updateResizableArea","$allResizableElements","horizontalResizables","el","resizableInst","dxResizable","$el","splitExprStr","rootField","emptyChain","tmp","arrLength","renderAppointments","prerenderFilter","prerenderFilterVirtual","workspace","isAllDaySupported","viewDataProvider","groupedDataToRender","viewData","groupedData","_ref2","dateTable","isVerticalGrouping","getEndViewDateByEndDayHour","_ref3","allDayPanel","getGroupStartDate","getGroupEndDate","getCellsGroup","groupResources","createReducedResourcesTree","0","totalResourceCount","getAgendaRows","rowsCalculated","getAgendaVerticalStepHeight","getAgendaDuration","forceMaxAppointmentPerCell","onAgendaReady","$appts","total","applyClass","AGENDA_LAST_IN_DATE_APPOINTMENT_CLASS","getTimezone","getTargetedAppointmentData","getAppointmentDurationInMs","dayDuration","getVisibleDayDuration","tailDuration","isDifferentDates","isSameAppointmentDates","floorQuantityOfDays","startDateEndHour","hiddenDayDuration","startDayTime","endPartDuration","calculateAppointmentEndDate","getEndDayHour","getStartDayHour","validateDayHours","removeDroppableCellClass"],"mappings":"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","file":"static/js/main~056261f3.f557c07d.chunk.js","sourcesContent":["/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.table_creator.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _dom_adapter = _interopRequireDefault(require(\"../../core/dom_adapter\"));\r\nvar _element_data = require(\"../../core/element_data\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _element = require(\"../../core/element\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar ROW_SELECTOR = \"tr\";\r\nvar SchedulerTableCreator = function() {\r\n function SchedulerTableCreator() {\r\n this.VERTICAL = \"vertical\";\r\n this.HORIZONTAL = \"horizontal\"\r\n }\r\n var _proto = SchedulerTableCreator.prototype;\r\n _proto.insertAllDayRow = function(allDayElements, tableBody, index) {\r\n if (allDayElements[index]) {\r\n var row = allDayElements[index].find(ROW_SELECTOR);\r\n if (!row.length) {\r\n row = (0, _renderer.default)(_dom_adapter.default.createElement(ROW_SELECTOR));\r\n row.append(allDayElements[index].get(0))\r\n }\r\n tableBody.appendChild(row.get ? row.get(0) : row)\r\n }\r\n };\r\n _proto.makeTable = function(options) {\r\n var tableBody = _dom_adapter.default.createElement(\"tbody\");\r\n var templateCallbacks = [];\r\n var row;\r\n var rowCountInGroup = options.groupCount ? options.rowCount / options.groupCount : options.rowCount;\r\n var allDayElementIndex = 0;\r\n var allDayElements = options.allDayElements;\r\n var groupIndex = options.groupIndex;\r\n var rowCount = options.rowCount;\r\n (0, _renderer.default)(options.container).append(tableBody);\r\n if (allDayElements) {\r\n this.insertAllDayRow(allDayElements, tableBody, 0);\r\n allDayElementIndex++\r\n }\r\n for (var i = 0; i < rowCount; i++) {\r\n row = _dom_adapter.default.createElement(ROW_SELECTOR);\r\n tableBody.appendChild(row);\r\n var isLastRowInGroup = (i + 1) % rowCountInGroup === 0;\r\n if (options.rowClass) {\r\n row.className = options.rowClass\r\n }\r\n for (var j = 0; j < options.cellCount; j++) {\r\n var td = _dom_adapter.default.createElement(\"td\");\r\n row.appendChild(td);\r\n if (options.cellClass) {\r\n if ((0, _type.isFunction)(options.cellClass)) {\r\n td.className = options.cellClass(i, j)\r\n } else {\r\n td.className = options.cellClass\r\n }\r\n }\r\n var cellDataObject = void 0;\r\n var dataKey = void 0;\r\n var dataValue = void 0;\r\n if (options.getCellData) {\r\n cellDataObject = options.getCellData(td, i, j, groupIndex);\r\n dataKey = cellDataObject.key;\r\n dataValue = cellDataObject.value;\r\n dataKey && (0, _element_data.data)(td, dataKey, dataValue)\r\n }\r\n if (options.cellTemplate && options.cellTemplate.render) {\r\n var templateOptions = {\r\n model: {\r\n text: options.getCellText ? options.getCellText(i, j) : \"\",\r\n date: options.getCellDate ? options.getCellDate(i) : void 0\r\n },\r\n container: (0, _element.getPublicElement)((0, _renderer.default)(td)),\r\n index: i * options.cellCount + j\r\n };\r\n if (dataValue) {\r\n if (dataValue.startDate) {\r\n templateOptions.model.startDate = dataValue.startDate\r\n }\r\n if (dataValue.endDate) {\r\n templateOptions.model.endDate = dataValue.endDate\r\n }\r\n if (dataValue.groups) {\r\n templateOptions.model.groups = dataValue.groups\r\n }\r\n if (dataValue.allDay) {\r\n templateOptions.model.allDay = dataValue.allDay\r\n }\r\n }\r\n templateCallbacks.push(options.cellTemplate.render.bind(options.cellTemplate, templateOptions))\r\n } else {\r\n if (options.getCellText) {\r\n td.innerHTML = \"
\" + options.getCellText(i, j) + \"
\"\r\n }\r\n }\r\n }\r\n if (allDayElements && isLastRowInGroup) {\r\n this.insertAllDayRow(allDayElements, tableBody, allDayElementIndex);\r\n allDayElementIndex++\r\n }\r\n }\r\n return templateCallbacks\r\n };\r\n _proto.makeGroupedTable = function(type, groups, cssClasses, cellCount, cellTemplate, rowCount, groupByDate) {\r\n var rows = [];\r\n if (type === this.VERTICAL) {\r\n rows = this._makeVerticalGroupedRows(groups, cssClasses, cellTemplate, rowCount)\r\n } else {\r\n rows = this._makeHorizontalGroupedRows(groups, cssClasses, cellCount, cellTemplate, groupByDate)\r\n }\r\n return rows\r\n };\r\n _proto.makeGroupedTableFromJSON = function(type, data, config) {\r\n var table;\r\n var cellStorage = [];\r\n var rowIndex = 0;\r\n config = config || {};\r\n var cellTag = config.cellTag || \"td\";\r\n var childrenField = config.childrenField || \"children\";\r\n var titleField = config.titleField || \"title\";\r\n var groupTableClass = config.groupTableClass;\r\n var groupRowClass = config.groupRowClass;\r\n var groupCellClass = config.groupCellClass;\r\n var groupCellCustomContent = config.groupCellCustomContent;\r\n\r\n function createTable() {\r\n table = _dom_adapter.default.createElement(\"table\");\r\n if (groupTableClass) {\r\n table.className = groupTableClass\r\n }\r\n }\r\n\r\n function getChildCount(item) {\r\n if (item[childrenField]) {\r\n return item[childrenField].length\r\n }\r\n return 0\r\n }\r\n\r\n function createCell(text, childCount, index, data) {\r\n var cell = {\r\n element: _dom_adapter.default.createElement(cellTag),\r\n childCount: childCount\r\n };\r\n if (groupCellClass) {\r\n cell.element.className = groupCellClass\r\n }\r\n var cellText = _dom_adapter.default.createTextNode(text);\r\n if (\"function\" === typeof groupCellCustomContent) {\r\n groupCellCustomContent(cell.element, cellText, index, data)\r\n } else {\r\n cell.element.appendChild(cellText)\r\n }\r\n return cell\r\n }\r\n\r\n function generateCells(data) {\r\n for (var i = 0; i < data.length; i++) {\r\n var childCount = getChildCount(data[i]);\r\n var cell = createCell(data[i][titleField], childCount, i, data[i]);\r\n if (!cellStorage[rowIndex]) {\r\n cellStorage[rowIndex] = []\r\n }\r\n cellStorage[rowIndex].push(cell);\r\n if (childCount) {\r\n generateCells(data[i][childrenField])\r\n } else {\r\n rowIndex++\r\n }\r\n }\r\n }\r\n\r\n function putCellsToRows() {\r\n cellStorage.forEach(function(cells) {\r\n var row = _dom_adapter.default.createElement(ROW_SELECTOR);\r\n if (groupRowClass) {\r\n row.className = groupRowClass\r\n }\r\n var rowspans = [];\r\n for (var i = cells.length - 1; i >= 0; i--) {\r\n var prev = cells[i + 1];\r\n var rowspan = cells[i].childCount;\r\n if (prev && prev.childCount) {\r\n rowspan *= prev.childCount\r\n }\r\n rowspans.push(rowspan)\r\n }\r\n rowspans.reverse();\r\n cells.forEach(function(cell, index) {\r\n if (rowspans[index]) {\r\n cell.element.setAttribute(\"rowSpan\", rowspans[index])\r\n }\r\n row.appendChild(cell.element)\r\n });\r\n table.appendChild(row)\r\n })\r\n }\r\n createTable();\r\n generateCells(data);\r\n putCellsToRows();\r\n return table\r\n };\r\n _proto._makeFlexGroupedRowCells = function(group, repeatCount, cssClasses, cellTemplate) {\r\n var repeatByDate = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 1;\r\n var cells = [];\r\n var items = group.items;\r\n var itemCount = items.length;\r\n for (var i = 0; i < repeatCount * repeatByDate; i++) {\r\n for (var j = 0; j < itemCount; j++) {\r\n var $container = (0, _renderer.default)(\"
\");\r\n var cell = {};\r\n if (cellTemplate && cellTemplate.render) {\r\n var templateOptions = {\r\n model: items[j],\r\n container: (0, _element.getPublicElement)($container),\r\n index: i * itemCount + j\r\n };\r\n if (group.data) {\r\n templateOptions.model.data = group.data[j]\r\n }\r\n cell.template = cellTemplate.render.bind(cellTemplate, templateOptions)\r\n } else {\r\n $container.text(items[j].text).attr(\"title\", items[j].text).addClass(\"dx-scheduler-group-header-content\");\r\n $container = (0, _renderer.default)(\"
\").append($container)\r\n }\r\n var cssClass = (0, _type.isFunction)(cssClasses.groupHeaderClass) ? cssClasses.groupHeaderClass(j) : cssClasses.groupHeaderClass;\r\n cell.element = $container.addClass(cssClass);\r\n cells.push(cell)\r\n }\r\n }\r\n return cells\r\n };\r\n _proto._makeVerticalGroupedRows = function(groups, cssClasses, cellTemplate) {\r\n var cellTemplates = [];\r\n var repeatCount = 1;\r\n var cellsArray = [];\r\n var cellIterator = function(cell) {\r\n if (cell.template) {\r\n cellTemplates.push(cell.template)\r\n }\r\n };\r\n for (var i = 0; i < groups.length; i++) {\r\n if (i > 0) {\r\n repeatCount = groups[i - 1].items.length * repeatCount\r\n }\r\n var cells = this._makeFlexGroupedRowCells(groups[i], repeatCount, cssClasses, cellTemplate);\r\n cells.forEach(cellIterator);\r\n cellsArray.push(cells)\r\n }\r\n var rows = [];\r\n var groupCount = cellsArray.length;\r\n for (var _i = 0; _i < groupCount; _i++) {\r\n rows.push((0, _renderer.default)(\"
\").addClass(cssClasses.groupHeaderRowClass))\r\n }\r\n for (var _i2 = groupCount - 1; _i2 >= 0; _i2--) {\r\n var currentColumnLength = cellsArray[_i2].length;\r\n for (var j = 0; j < currentColumnLength; j++) {\r\n rows[_i2].append(cellsArray[_i2][j].element)\r\n }\r\n }\r\n return {\r\n elements: (0, _renderer.default)(\"
\").addClass(\"dx-scheduler-group-flex-container\").append(rows),\r\n cellTemplates: cellTemplates\r\n }\r\n };\r\n _proto._makeHorizontalGroupedRows = function(groups, cssClasses, cellCount, cellTemplate, groupByDate) {\r\n var repeatCount = 1;\r\n var groupCount = groups.length;\r\n var rows = [];\r\n var cellTemplates = [];\r\n var repeatByDate = groupByDate ? cellCount : 1;\r\n var cellIterator = function(cell) {\r\n if (cell.template) {\r\n cellTemplates.push(cell.template)\r\n }\r\n return cell.element\r\n };\r\n for (var i = 0; i < groupCount; i++) {\r\n if (i > 0) {\r\n repeatCount = groups[i - 1].items.length * repeatCount\r\n }\r\n var cells = this._makeGroupedRowCells(groups[i], repeatCount, cssClasses, cellTemplate, repeatByDate);\r\n rows.push((0, _renderer.default)(\"\").addClass(cssClasses.groupRowClass).append(cells.map(cellIterator)))\r\n }\r\n var maxCellCount = rows[groupCount - 1].find(\"th\").length;\r\n for (var j = 0; j < groupCount; j++) {\r\n var $cell = rows[j].find(\"th\");\r\n var colspan = maxCellCount / $cell.length;\r\n if (!groupByDate) {\r\n colspan *= cellCount\r\n }\r\n if (colspan > 1 && 1 === repeatByDate || groupByDate && groupCount > 1) {\r\n $cell.attr(\"colSpan\", colspan)\r\n }\r\n }\r\n return {\r\n elements: rows,\r\n cellTemplates: cellTemplates\r\n }\r\n };\r\n _proto._makeGroupedRowCells = function(group, repeatCount, cssClasses, cellTemplate, repeatByDate) {\r\n repeatByDate = repeatByDate || 1;\r\n repeatCount *= repeatByDate;\r\n var cells = [];\r\n var items = group.items;\r\n var itemCount = items.length;\r\n for (var i = 0; i < repeatCount; i++) {\r\n for (var j = 0; j < itemCount; j++) {\r\n var $container = (0, _renderer.default)(\"
\");\r\n var cell = {};\r\n if (cellTemplate && cellTemplate.render) {\r\n var templateOptions = {\r\n model: items[j],\r\n container: (0, _element.getPublicElement)($container),\r\n index: i * itemCount + j\r\n };\r\n if (group.data) {\r\n templateOptions.model.data = group.data[j]\r\n }\r\n cell.template = cellTemplate.render.bind(cellTemplate, templateOptions)\r\n } else {\r\n $container.text(items[j].text);\r\n $container = (0, _renderer.default)(\"
\").append($container)\r\n }\r\n $container.addClass(cssClasses.groupHeaderContentClass);\r\n var cssClass = void 0;\r\n if ((0, _type.isFunction)(cssClasses.groupHeaderClass)) {\r\n cssClass = cssClasses.groupHeaderClass(j)\r\n } else {\r\n cssClass = cssClasses.groupHeaderClass\r\n }\r\n cell.element = (0, _renderer.default)(\"\").addClass(cssClass).append($container);\r\n cells.push(cell)\r\n }\r\n }\r\n return cells\r\n };\r\n return SchedulerTableCreator\r\n}();\r\nvar _default = {\r\n tableCreator: new SchedulerTableCreator\r\n};\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.recurrence_editor.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _component_registrator = _interopRequireDefault(require(\"../../core/component_registrator\"));\r\nvar _guid = _interopRequireDefault(require(\"../../core/guid\"));\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _date = _interopRequireDefault(require(\"../../core/utils/date\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _date2 = _interopRequireDefault(require(\"../../localization/date\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _form = _interopRequireDefault(require(\"../form\"));\r\nvar _button_group = _interopRequireDefault(require(\"../button_group\"));\r\nvar _date_box = _interopRequireDefault(require(\"../date_box\"));\r\nvar _editor = _interopRequireDefault(require(\"../editor/editor\"));\r\nvar _number_box = _interopRequireDefault(require(\"../number_box\"));\r\nvar _recurrence = require(\"./recurrence\");\r\nrequire(\"../radio_group\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\n\r\nfunction _toConsumableArray(arr) {\r\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread()\r\n}\r\n\r\nfunction _nonIterableSpread() {\r\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")\r\n}\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) {\r\n if (!o) {\r\n return\r\n }\r\n if (\"string\" === typeof o) {\r\n return _arrayLikeToArray(o, minLen)\r\n }\r\n var n = Object.prototype.toString.call(o).slice(8, -1);\r\n if (\"Object\" === n && o.constructor) {\r\n n = o.constructor.name\r\n }\r\n if (\"Map\" === n || \"Set\" === n) {\r\n return Array.from(o)\r\n }\r\n if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) {\r\n return _arrayLikeToArray(o, minLen)\r\n }\r\n}\r\n\r\nfunction _iterableToArray(iter) {\r\n if (\"undefined\" !== typeof Symbol && null != iter[Symbol.iterator] || null != iter[\"@@iterator\"]) {\r\n return Array.from(iter)\r\n }\r\n}\r\n\r\nfunction _arrayWithoutHoles(arr) {\r\n if (Array.isArray(arr)) {\r\n return _arrayLikeToArray(arr)\r\n }\r\n}\r\n\r\nfunction _arrayLikeToArray(arr, len) {\r\n if (null == len || len > arr.length) {\r\n len = arr.length\r\n }\r\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\r\n arr2[i] = arr[i]\r\n }\r\n return arr2\r\n}\r\n\r\nfunction _inheritsLoose(subClass, superClass) {\r\n subClass.prototype = Object.create(superClass.prototype);\r\n subClass.prototype.constructor = subClass;\r\n _setPrototypeOf(subClass, superClass)\r\n}\r\n\r\nfunction _setPrototypeOf(o, p) {\r\n _setPrototypeOf = Object.setPrototypeOf || function(o, p) {\r\n o.__proto__ = p;\r\n return o\r\n };\r\n return _setPrototypeOf(o, p)\r\n}\r\nvar RECURRENCE_EDITOR = \"dx-recurrence-editor\";\r\nvar LABEL_POSTFIX = \"-label\";\r\nvar WRAPPER_POSTFIX = \"-wrapper\";\r\nvar RECURRENCE_EDITOR_CONTAINER = \"dx-recurrence-editor-container\";\r\nvar REPEAT_END_EDITOR = \"dx-recurrence-repeat-end\";\r\nvar REPEAT_END_TYPE_EDITOR = \"dx-recurrence-radiogroup-repeat-type\";\r\nvar REPEAT_COUNT_EDITOR = \"dx-recurrence-numberbox-repeat-count\";\r\nvar REPEAT_UNTIL_DATE_EDITOR = \"dx-recurrence-datebox-until-date\";\r\nvar RECURRENCE_BUTTON_GROUP = \"dx-recurrence-button-group\";\r\nvar FREQUENCY_EDITOR = \"dx-recurrence-selectbox-freq\";\r\nvar INTERVAL_EDITOR = \"dx-recurrence-numberbox-interval\";\r\nvar REPEAT_ON_EDITOR = \"dx-recurrence-repeat-on\";\r\nvar DAY_OF_MONTH = \"dx-recurrence-numberbox-day-of-month\";\r\nvar MONTH_OF_YEAR = \"dx-recurrence-selectbox-month-of-year\";\r\nvar recurrentEditorNumberBoxWidth = 70;\r\nvar recurrentEditorSelectBoxWidth = 120;\r\nvar defaultRecurrenceTypeIndex = 1;\r\nvar frequenciesMessages = [{\r\n recurrence: \"dxScheduler-recurrenceHourly\",\r\n value: \"hourly\"\r\n}, {\r\n recurrence: \"dxScheduler-recurrenceDaily\",\r\n value: \"daily\"\r\n}, {\r\n recurrence: \"dxScheduler-recurrenceWeekly\",\r\n value: \"weekly\"\r\n}, {\r\n recurrence: \"dxScheduler-recurrenceMonthly\",\r\n value: \"monthly\"\r\n}, {\r\n recurrence: \"dxScheduler-recurrenceYearly\",\r\n value: \"yearly\"\r\n}];\r\nvar frequencies = frequenciesMessages.map(function(item) {\r\n return {\r\n text: function() {\r\n return _message.default.format(item.recurrence)\r\n },\r\n value: item.value\r\n }\r\n});\r\nvar repeatEndTypes = [{\r\n type: \"never\"\r\n}, {\r\n type: \"until\"\r\n}, {\r\n type: \"count\"\r\n}];\r\nvar days = [\"SU\", \"MO\", \"TU\", \"WE\", \"TH\", \"FR\", \"SA\"];\r\nvar RecurrenceRule = function() {\r\n function RecurrenceRule(rule) {\r\n this._recurrenceProcessor = (0, _recurrence.getRecurrenceProcessor)();\r\n this._recurrenceRule = this._recurrenceProcessor.evalRecurrenceRule(rule).rule\r\n }\r\n var _proto = RecurrenceRule.prototype;\r\n _proto.makeRules = function(string) {\r\n this._recurrenceRule = this._recurrenceProcessor.evalRecurrenceRule(string).rule\r\n };\r\n _proto.makeRule = function(field, value) {\r\n if (!value || Array.isArray(value) && !value.length) {\r\n delete this._recurrenceRule[field];\r\n return\r\n }\r\n if ((0, _type.isDefined)(field)) {\r\n if (\"until\" === field) {\r\n delete this._recurrenceRule.count\r\n }\r\n if (\"count\" === field) {\r\n delete this._recurrenceRule.until\r\n }\r\n this._recurrenceRule[field] = value\r\n }\r\n };\r\n _proto.getRepeatEndRule = function() {\r\n var rules = this._recurrenceRule;\r\n if (\"count\" in rules) {\r\n return \"count\"\r\n }\r\n if (\"until\" in rules) {\r\n return \"until\"\r\n }\r\n return \"never\"\r\n };\r\n _proto.getRecurrenceString = function() {\r\n return this._recurrenceProcessor.getRecurrenceString(this._recurrenceRule)\r\n };\r\n _proto.getRules = function() {\r\n return this._recurrenceRule\r\n };\r\n _proto.getDaysFromByDayRule = function() {\r\n return this._recurrenceProcessor.daysFromByDayRule(this._recurrenceRule)\r\n };\r\n return RecurrenceRule\r\n}();\r\nvar RecurrenceEditor = function(_Editor) {\r\n _inheritsLoose(RecurrenceEditor, _Editor);\r\n\r\n function RecurrenceEditor() {\r\n return _Editor.apply(this, arguments) || this\r\n }\r\n var _proto2 = RecurrenceEditor.prototype;\r\n _proto2._getDefaultOptions = function() {\r\n var defaultOptions = _Editor.prototype._getDefaultOptions.call(this);\r\n return (0, _extend.extend)(defaultOptions, {\r\n value: null,\r\n startDate: new Date,\r\n firstDayOfWeek: void 0\r\n })\r\n };\r\n _proto2._getFirstDayOfWeek = function() {\r\n var firstDayOfWeek = this.option(\"firstDayOfWeek\");\r\n return (0, _type.isDefined)(firstDayOfWeek) ? firstDayOfWeek : _date2.default.firstDayOfWeekIndex()\r\n };\r\n _proto2._createComponent = function(element, name) {\r\n var config = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\r\n this._extendConfig(config, {\r\n readOnly: this.option(\"readOnly\")\r\n });\r\n return _Editor.prototype._createComponent.call(this, element, name, config)\r\n };\r\n _proto2._init = function() {\r\n _Editor.prototype._init.call(this);\r\n this._recurrenceRule = new RecurrenceRule(this.option(\"value\"))\r\n };\r\n _proto2._render = function() {\r\n _Editor.prototype._render.call(this);\r\n this.$element().addClass(RECURRENCE_EDITOR);\r\n this._$container = (0, _renderer.default)(\"
\").addClass(RECURRENCE_EDITOR_CONTAINER).appendTo(this.$element());\r\n this._prepareEditors();\r\n this._renderEditors(this._$container)\r\n };\r\n _proto2.getEditorByField = function(fieldName) {\r\n var editor = this.getRecurrenceForm().getEditor(fieldName);\r\n if (!(0, _type.isDefined)(editor)) {\r\n switch (fieldName) {\r\n case \"byday\":\r\n editor = this._weekEditor;\r\n break;\r\n case \"count\":\r\n editor = this._repeatCountEditor;\r\n break;\r\n case \"until\":\r\n editor = this._repeatUntilDate\r\n }\r\n }\r\n return editor\r\n };\r\n _proto2._prepareEditors = function() {\r\n var freq = (this._recurrenceRule.getRules().freq || frequenciesMessages[defaultRecurrenceTypeIndex].value).toLowerCase();\r\n this._editors = [this._createFreqEditor(freq), this._createIntervalEditor(freq), this._createRepeatOnLabel(freq), {\r\n itemType: \"group\",\r\n cssClass: REPEAT_ON_EDITOR,\r\n colCount: 2,\r\n colCountByScreen: {\r\n xs: 2\r\n },\r\n items: this._createRepeatOnEditor(freq)\r\n }, {\r\n itemType: \"group\",\r\n items: this._createRepeatEndEditor()\r\n }];\r\n return this._editors\r\n };\r\n _proto2._createFreqEditor = function(freq) {\r\n var _this = this;\r\n return {\r\n dataField: \"freq\",\r\n name: \"FREQ\",\r\n editorType: \"dxSelectBox\",\r\n cssClass: FREQUENCY_EDITOR,\r\n editorOptions: {\r\n items: frequencies,\r\n value: freq,\r\n field: \"freq\",\r\n valueExpr: \"value\",\r\n displayExpr: \"text\",\r\n layout: \"horizontal\",\r\n elementAttr: {\r\n \"class\": FREQUENCY_EDITOR\r\n },\r\n onValueChanged: function(args) {\r\n return _this._valueChangedHandler(args)\r\n }\r\n },\r\n label: {\r\n text: _message.default.format(\"dxScheduler-editorLabelRecurrence\")\r\n }\r\n }\r\n };\r\n _proto2._createIntervalEditor = function(freq) {\r\n var _this2 = this;\r\n var interval = this._recurrenceRule.getRules().interval || 1;\r\n return {\r\n itemType: \"group\",\r\n colCount: 2,\r\n cssClass: \"\".concat(INTERVAL_EDITOR).concat(WRAPPER_POSTFIX),\r\n colCountByScreen: {\r\n xs: 2\r\n },\r\n items: [{\r\n dataField: \"interval\",\r\n editorType: \"dxNumberBox\",\r\n editorOptions: {\r\n width: recurrentEditorNumberBoxWidth,\r\n min: 1,\r\n field: \"interval\",\r\n value: interval,\r\n showSpinButtons: true,\r\n useLargeSpinButtons: false,\r\n elementAttr: {\r\n \"class\": INTERVAL_EDITOR\r\n },\r\n onValueChanged: function(args) {\r\n return _this2._valueChangedHandler(args)\r\n }\r\n },\r\n label: {\r\n text: _message.default.format(\"dxScheduler-recurrenceRepeatEvery\")\r\n }\r\n }, {\r\n name: \"intervalLabel\",\r\n cssClass: \"\".concat(INTERVAL_EDITOR).concat(LABEL_POSTFIX),\r\n template: function() {\r\n return _message.default.format(\"dxScheduler-recurrenceRepeat\".concat(freq.charAt(0).toUpperCase()).concat(freq.substr(1).toLowerCase()))\r\n }\r\n }]\r\n }\r\n };\r\n _proto2._createRepeatOnLabel = function(freq) {\r\n return {\r\n itemType: \"group\",\r\n cssClass: \"\".concat(REPEAT_ON_EDITOR).concat(LABEL_POSTFIX),\r\n items: [{\r\n name: \"repeatOnLabel\",\r\n colSpan: 2,\r\n template: function() {\r\n return _message.default.format(\"dxScheduler-recurrenceRepeatOn\")\r\n },\r\n visible: freq && \"daily\" !== freq && \"hourly\" !== freq\r\n }]\r\n }\r\n };\r\n _proto2._createRepeatOnEditor = function(freq) {\r\n return [this._createByDayEditor(freq), this._createByMonthEditor(freq), this._createByMonthDayEditor(freq)]\r\n };\r\n _proto2._createByDayEditor = function(freq) {\r\n var _this3 = this;\r\n return {\r\n dataField: \"byday\",\r\n colSpan: 2,\r\n template: function(_, itemElement) {\r\n var firstDayOfWeek = _this3._getFirstDayOfWeek();\r\n var byDay = _this3._daysOfWeekByRules();\r\n var localDaysNames = _date2.default.getDayNames(\"abbreviated\");\r\n var dayNames = days.slice(firstDayOfWeek).concat(days.slice(0, firstDayOfWeek));\r\n var itemsButtonGroup = localDaysNames.slice(firstDayOfWeek).concat(localDaysNames.slice(0, firstDayOfWeek)).map(function(item, index) {\r\n return {\r\n text: item,\r\n key: dayNames[index]\r\n }\r\n });\r\n _this3._$repeatOnWeek = (0, _renderer.default)(\"
\").addClass(RECURRENCE_BUTTON_GROUP).appendTo(itemElement);\r\n _this3._weekEditor = _this3._createComponent(_this3._$repeatOnWeek, _button_group.default, {\r\n items: itemsButtonGroup,\r\n field: \"byday\",\r\n selectionMode: \"multiple\",\r\n selectedItemKeys: byDay,\r\n keyExpr: \"key\",\r\n onSelectionChanged: function(e) {\r\n var selectedKeys = e.component.option(\"selectedItemKeys\");\r\n _this3._recurrenceRule.makeRule(\"byday\", selectedKeys);\r\n _this3._changeEditorValue()\r\n }\r\n })\r\n },\r\n visible: \"weekly\" === freq,\r\n label: {\r\n visible: false\r\n }\r\n }\r\n };\r\n _proto2._createByMonthEditor = function(freq) {\r\n var _this4 = this;\r\n var monthsName = _date2.default.getMonthNames(\"wide\");\r\n var months = _toConsumableArray(Array(12)).map(function(_, i) {\r\n return {\r\n value: \"\".concat(i + 1),\r\n text: monthsName[i]\r\n }\r\n });\r\n return {\r\n dataField: \"bymonth\",\r\n editorType: \"dxSelectBox\",\r\n editorOptions: {\r\n field: \"bymonth\",\r\n items: months,\r\n value: this._monthOfYearByRules(),\r\n width: recurrentEditorSelectBoxWidth,\r\n displayExpr: \"text\",\r\n valueExpr: \"value\",\r\n elementAttr: {\r\n \"class\": MONTH_OF_YEAR\r\n },\r\n onValueChanged: function(args) {\r\n return _this4._valueChangedHandler(args)\r\n }\r\n },\r\n visible: \"yearly\" === freq,\r\n label: {\r\n visible: false\r\n }\r\n }\r\n };\r\n _proto2._createByMonthDayEditor = function(freq) {\r\n var _this5 = this;\r\n return {\r\n dataField: \"bymonthday\",\r\n editorType: \"dxNumberBox\",\r\n editorOptions: {\r\n min: 1,\r\n max: 31,\r\n width: recurrentEditorNumberBoxWidth,\r\n field: \"bymonthday\",\r\n showSpinButtons: true,\r\n useLargeSpinButtons: false,\r\n value: this._dayOfMonthByRules(),\r\n elementAttr: {\r\n \"class\": DAY_OF_MONTH\r\n },\r\n onValueChanged: function(args) {\r\n return _this5._valueChangedHandler(args)\r\n }\r\n },\r\n visible: \"monthly\" === freq || \"yearly\" === freq,\r\n label: {\r\n visible: false\r\n }\r\n }\r\n };\r\n _proto2._createRepeatEndEditor = function() {\r\n var _this6 = this;\r\n var repeatType = this._recurrenceRule.getRepeatEndRule();\r\n return [{\r\n dataField: \"repeatEnd\",\r\n editorType: \"dxRadioGroup\",\r\n editorOptions: {\r\n items: repeatEndTypes,\r\n value: repeatType,\r\n valueExpr: \"type\",\r\n field: \"repeatEnd\",\r\n itemTemplate: function(itemData) {\r\n if (\"count\" === itemData.type) {\r\n return _this6._renderRepeatCountEditor()\r\n }\r\n if (\"until\" === itemData.type) {\r\n return _this6._renderRepeatUntilEditor()\r\n }\r\n return _this6._renderDefaultRepeatEnd()\r\n },\r\n layout: \"vertical\",\r\n elementAttr: {\r\n \"class\": REPEAT_END_TYPE_EDITOR\r\n },\r\n onValueChanged: function(args) {\r\n return _this6._repeatEndValueChangedHandler(args)\r\n }\r\n },\r\n label: {\r\n text: _message.default.format(\"dxScheduler-recurrenceEnd\")\r\n }\r\n }]\r\n };\r\n _proto2._renderEditors = function($container) {\r\n this._recurrenceForm = this._createComponent($container, _form.default, {\r\n items: this._editors,\r\n showValidationSummary: true,\r\n scrollingEnabled: true,\r\n showColonAfterLabel: false,\r\n labelLocation: \"top\"\r\n });\r\n this._disableRepeatEndParts()\r\n };\r\n _proto2._setAriaDescribedBy = function(editor, $label) {\r\n var labelId = \"label-\".concat(new _guid.default);\r\n editor.setAria(\"describedby\", labelId);\r\n editor.setAria(\"id\", labelId, $label)\r\n };\r\n _proto2.getRecurrenceForm = function() {\r\n return this._recurrenceForm\r\n };\r\n _proto2.changeValueByVisibility = function(value) {\r\n if (value) {\r\n if (!this.option(\"value\")) {\r\n this._handleDefaults()\r\n }\r\n } else {\r\n this._recurrenceRule.makeRules(\"\");\r\n this.option(\"value\", \"\")\r\n }\r\n };\r\n _proto2._handleDefaults = function() {\r\n this._recurrenceRule.makeRule(\"freq\", frequenciesMessages[defaultRecurrenceTypeIndex].value);\r\n this._changeEditorValue()\r\n };\r\n _proto2._changeEditorValue = function() {\r\n this.option(\"value\", this._recurrenceRule.getRecurrenceString() || \"\")\r\n };\r\n _proto2._daysOfWeekByRules = function() {\r\n var daysByRule = this._recurrenceRule.getDaysFromByDayRule();\r\n if (!daysByRule.length) {\r\n daysByRule = [days[this.option(\"startDate\").getDay()]]\r\n }\r\n return daysByRule\r\n };\r\n _proto2._dayOfMonthByRules = function() {\r\n var dayByRule = this._recurrenceRule.getRules().bymonthday;\r\n if (!dayByRule) {\r\n dayByRule = this.option(\"startDate\").getDate()\r\n }\r\n return dayByRule\r\n };\r\n _proto2._monthOfYearByRules = function() {\r\n var monthByRule = this._recurrenceRule.getRules().bymonth;\r\n if (!monthByRule) {\r\n monthByRule = this.option(\"startDate\").getMonth() + 1\r\n }\r\n return String(monthByRule)\r\n };\r\n _proto2._renderDefaultRepeatEnd = function() {\r\n var $editorTemplate = (0, _renderer.default)(\"
\").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);\r\n (0, _renderer.default)(\"
\").text(_message.default.format(\"dxScheduler-recurrenceNever\")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorTemplate);\r\n return $editorTemplate\r\n };\r\n _proto2._repeatEndValueChangedHandler = function(args) {\r\n var value = args.value;\r\n this._disableRepeatEndParts(value);\r\n if (\"until\" === value) {\r\n this._recurrenceRule.makeRule(value, this._getUntilValue())\r\n }\r\n if (\"count\" === value) {\r\n this._recurrenceRule.makeRule(value, this._repeatCountEditor.option(\"value\"))\r\n }\r\n if (\"never\" === value) {\r\n this._recurrenceRule.makeRule(\"count\", \"\");\r\n this._recurrenceRule.makeRule(\"until\", \"\")\r\n }\r\n this._changeEditorValue()\r\n };\r\n _proto2._disableRepeatEndParts = function() {\r\n var value = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this._recurrenceRule.getRepeatEndRule();\r\n if (\"until\" === value) {\r\n this._repeatCountEditor.option(\"disabled\", true);\r\n this._repeatUntilDate.option(\"disabled\", false)\r\n }\r\n if (\"count\" === value) {\r\n this._repeatCountEditor.option(\"disabled\", false);\r\n this._repeatUntilDate.option(\"disabled\", true)\r\n }\r\n if (\"never\" === value) {\r\n this._repeatCountEditor.option(\"disabled\", true);\r\n this._repeatUntilDate.option(\"disabled\", true)\r\n }\r\n };\r\n _proto2._renderRepeatCountEditor = function() {\r\n var repeatCount = this._recurrenceRule.getRules().count || 1;\r\n var $editorWrapper = (0, _renderer.default)(\"
\").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);\r\n (0, _renderer.default)(\"
\").text(_message.default.format(\"dxScheduler-recurrenceAfter\")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorWrapper);\r\n this._$repeatCountEditor = (0, _renderer.default)(\"
\").addClass(REPEAT_COUNT_EDITOR).appendTo($editorWrapper);\r\n (0, _renderer.default)(\"
\").text(_message.default.format(\"dxScheduler-recurrenceRepeatCount\")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorWrapper);\r\n this._repeatCountEditor = this._createComponent(this._$repeatCountEditor, _number_box.default, {\r\n field: \"count\",\r\n width: recurrentEditorNumberBoxWidth,\r\n min: 1,\r\n showSpinButtons: true,\r\n useLargeSpinButtons: false,\r\n value: repeatCount,\r\n onValueChanged: this._repeatCountValueChangeHandler.bind(this)\r\n });\r\n return $editorWrapper\r\n };\r\n _proto2._repeatCountValueChangeHandler = function(args) {\r\n if (\"count\" === this._recurrenceRule.getRepeatEndRule()) {\r\n var value = args.value;\r\n this._recurrenceRule.makeRule(\"count\", value);\r\n this._changeEditorValue()\r\n }\r\n };\r\n _proto2._formatUntilDate = function(date) {\r\n if (this._recurrenceRule.getRules().until && _date.default.sameDate(this._recurrenceRule.getRules().until, date)) {\r\n return date\r\n }\r\n return _date.default.setToDayEnd(date)\r\n };\r\n _proto2._renderRepeatUntilEditor = function() {\r\n var repeatUntil = this._recurrenceRule.getRules().until || this._formatUntilDate(new Date);\r\n var $editorWrapper = (0, _renderer.default)(\"
\").addClass(REPEAT_END_EDITOR + WRAPPER_POSTFIX);\r\n (0, _renderer.default)(\"
\").text(_message.default.format(\"dxScheduler-recurrenceOn\")).addClass(REPEAT_END_EDITOR + LABEL_POSTFIX).appendTo($editorWrapper);\r\n this._$repeatDateEditor = (0, _renderer.default)(\"
\").addClass(REPEAT_UNTIL_DATE_EDITOR).appendTo($editorWrapper);\r\n this._repeatUntilDate = this._createComponent(this._$repeatDateEditor, _date_box.default, {\r\n field: \"until\",\r\n value: repeatUntil,\r\n type: \"date\",\r\n onValueChanged: this._repeatUntilValueChangeHandler.bind(this),\r\n calendarOptions: {\r\n firstDayOfWeek: this._getFirstDayOfWeek()\r\n }\r\n });\r\n return $editorWrapper\r\n };\r\n _proto2._repeatUntilValueChangeHandler = function(args) {\r\n if (\"until\" === this._recurrenceRule.getRepeatEndRule()) {\r\n var untilDate = this._formatUntilDate(new Date(args.value));\r\n this._repeatUntilDate.option(\"value\", untilDate);\r\n this._recurrenceRule.makeRule(\"until\", untilDate);\r\n this._changeEditorValue()\r\n }\r\n };\r\n _proto2._valueChangedHandler = function(args) {\r\n var value = args.value,\r\n previousValue = args.previousValue;\r\n var field = args.component.option(\"field\");\r\n if (!this.option(\"visible\")) {\r\n this.option(\"value\", \"\")\r\n } else {\r\n this._recurrenceRule.makeRule(field, value);\r\n if (\"freq\" === field) {\r\n this._makeRepeatOnRule(value);\r\n this._changeRepeatOnVisibility(value, previousValue)\r\n }\r\n this._changeEditorValue()\r\n }\r\n };\r\n _proto2._makeRepeatOnRule = function(value) {\r\n if (\"daily\" === value || \"hourly\" === value) {\r\n this._recurrenceRule.makeRule(\"byday\", \"\");\r\n this._recurrenceRule.makeRule(\"bymonth\", \"\");\r\n this._recurrenceRule.makeRule(\"bymonthday\", \"\")\r\n }\r\n if (\"weekly\" === value) {\r\n this._recurrenceRule.makeRule(\"byday\", this._daysOfWeekByRules());\r\n this._recurrenceRule.makeRule(\"bymonth\", \"\");\r\n this._recurrenceRule.makeRule(\"bymonthday\", \"\")\r\n }\r\n if (\"monthly\" === value) {\r\n this._recurrenceRule.makeRule(\"bymonthday\", this._dayOfMonthByRules());\r\n this._recurrenceRule.makeRule(\"bymonth\", \"\");\r\n this._recurrenceRule.makeRule(\"byday\", \"\")\r\n }\r\n if (\"yearly\" === value) {\r\n this._recurrenceRule.makeRule(\"bymonthday\", this._dayOfMonthByRules());\r\n this._recurrenceRule.makeRule(\"bymonth\", this._monthOfYearByRules());\r\n this._recurrenceRule.makeRule(\"byday\", \"\")\r\n }\r\n };\r\n _proto2._optionChanged = function(args) {\r\n switch (args.name) {\r\n case \"value\":\r\n this._recurrenceRule.makeRules(args.value);\r\n this._changeRepeatIntervalLabel();\r\n this._disableRepeatEndParts();\r\n this._changeEditorsValue(this._recurrenceRule.getRules());\r\n _Editor.prototype._optionChanged.call(this, args);\r\n break;\r\n case \"startDate\":\r\n this._makeRepeatOnRule(this._recurrenceRule.getRules().freq);\r\n if ((0, _type.isDefined)(this._recurrenceRule.getRecurrenceString())) {\r\n this._changeEditorValue()\r\n }\r\n break;\r\n case \"firstDayOfWeek\":\r\n if (this._weekEditor) {\r\n var localDaysNames = _date2.default.getDayNames(\"abbreviated\");\r\n var dayNames = days.slice(args.value).concat(days.slice(0, args.value));\r\n var itemsButtonGroup = localDaysNames.slice(args.value).concat(localDaysNames.slice(0, args.value)).map(function(item, index) {\r\n return {\r\n text: item,\r\n key: dayNames[index]\r\n }\r\n });\r\n this._weekEditor.option(\"items\", itemsButtonGroup)\r\n }\r\n if (this._$repeatDateEditor) {\r\n this._repeatUntilDate.option(\"calendarOptions.firstDayOfWeek\", this._getFirstDayOfWeek())\r\n }\r\n break;\r\n default:\r\n _Editor.prototype._optionChanged.call(this, args)\r\n }\r\n };\r\n _proto2._changeRepeatOnVisibility = function(freq, previousFreq) {\r\n if (freq !== previousFreq) {\r\n this._recurrenceForm.itemOption(\"byday\", \"visible\", false);\r\n this._recurrenceForm.itemOption(\"bymonthday\", \"visible\", false);\r\n this._recurrenceForm.itemOption(\"bymonth\", \"visible\", false);\r\n this._recurrenceForm.itemOption(\"repeatOnLabel\", \"visible\", freq && \"daily\" !== freq && \"hourly\" !== freq);\r\n if (\"weekly\" === freq) {\r\n this._recurrenceForm.itemOption(\"byday\", \"visible\", true)\r\n }\r\n if (\"monthly\" === freq) {\r\n this._recurrenceForm.itemOption(\"bymonthday\", \"visible\", true)\r\n }\r\n if (\"yearly\" === freq) {\r\n this._recurrenceForm.itemOption(\"bymonthday\", \"visible\", true);\r\n this._recurrenceForm.itemOption(\"bymonth\", \"visible\", true)\r\n }\r\n }\r\n };\r\n _proto2._changeRepeatIntervalLabel = function() {\r\n var freq = this._recurrenceRule.getRules().freq;\r\n freq && this._recurrenceForm.itemOption(\"intervalLabel\", \"template\", _message.default.format(\"dxScheduler-recurrenceRepeat\".concat(freq.charAt(0).toUpperCase()).concat(freq.substr(1).toLowerCase())))\r\n };\r\n _proto2._changeEditorsValue = function(rules) {\r\n this._recurrenceForm.getEditor(\"freq\").option(\"value\", (rules.freq || frequenciesMessages[defaultRecurrenceTypeIndex].value).toLowerCase());\r\n this._changeDayOfWeekValue();\r\n this._changeDayOfMonthValue();\r\n this._changeMonthOfYearValue();\r\n this._changeIntervalValue(rules.interval);\r\n this._changeRepeatCountValue();\r\n this._changeRepeatEndValue();\r\n this._changeRepeatUntilValue()\r\n };\r\n _proto2._changeIntervalValue = function(value) {\r\n this._recurrenceForm.getEditor(\"interval\").option(\"value\", value || 1)\r\n };\r\n _proto2._changeRepeatEndValue = function() {\r\n var repeatType = this._recurrenceRule.getRepeatEndRule();\r\n this._recurrenceForm.getEditor(\"repeatEnd\").option(\"value\", repeatType)\r\n };\r\n _proto2._changeDayOfWeekValue = function() {\r\n var isEditorVisible = this._recurrenceForm.itemOption(\"byday\").visible;\r\n if (isEditorVisible) {\r\n var _days = this._daysOfWeekByRules();\r\n this.getEditorByField(\"byday\").option(\"selectedItemKeys\", _days)\r\n }\r\n };\r\n _proto2._changeDayOfMonthValue = function() {\r\n var isEditorVisible = this._recurrenceForm.itemOption(\"bymonthday\").visible;\r\n if (isEditorVisible) {\r\n var day = this._dayOfMonthByRules();\r\n this._recurrenceForm.getEditor(\"bymonthday\").option(\"value\", day)\r\n }\r\n };\r\n _proto2._changeMonthOfYearValue = function() {\r\n var isEditorVisible = this._recurrenceForm.itemOption(\"bymonth\").visible;\r\n if (isEditorVisible) {\r\n var month = this._monthOfYearByRules();\r\n this._recurrenceForm.getEditor(\"bymonth\").option(\"value\", month)\r\n }\r\n };\r\n _proto2._changeRepeatCountValue = function() {\r\n var count = this._recurrenceRule.getRules().count || 1;\r\n this._repeatCountEditor.option(\"value\", count)\r\n };\r\n _proto2._changeRepeatUntilValue = function() {\r\n this._repeatUntilDate.option(\"value\", this._getUntilValue())\r\n };\r\n _proto2._getUntilValue = function() {\r\n return this._recurrenceRule.getRules().until || this._formatUntilDate(new Date)\r\n };\r\n _proto2.toggle = function() {\r\n this._freqEditor.focus()\r\n };\r\n _proto2.setAria = function() {\r\n if (this._switchEditor) {\r\n this._switchEditor.setAria(arguments.length <= 0 ? void 0 : arguments[0], arguments.length <= 1 ? void 0 : arguments[1])\r\n }\r\n };\r\n return RecurrenceEditor\r\n}(_editor.default);\r\n(0, _component_registrator.default)(\"dxRecurrenceEditor\", RecurrenceEditor);\r\nvar _default = RecurrenceEditor;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.loading.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.hide = hide;\r\nexports.show = show;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _view_port = require(\"../../core/utils/view_port\");\r\nvar _load_panel = _interopRequireDefault(require(\"../load_panel\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar loading = null;\r\nvar createLoadPanel = function(options) {\r\n return new _load_panel.default((0, _renderer.default)(\"
\").appendTo(options && options.container || (0, _view_port.value)()), options)\r\n};\r\nvar removeLoadPanel = function() {\r\n if (!loading) {\r\n return\r\n }\r\n loading.$element().remove();\r\n loading = null\r\n};\r\n\r\nfunction show(options) {\r\n removeLoadPanel();\r\n loading = createLoadPanel(options);\r\n return loading.show()\r\n}\r\n\r\nfunction hide() {\r\n if (!loading) {\r\n return (new _deferred.Deferred).resolve()\r\n }\r\n return loading.hide().done(removeLoadPanel).promise()\r\n}\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _component_registrator = _interopRequireDefault(require(\"../../core/component_registrator\"));\r\nvar _config = _interopRequireDefault(require(\"../../core/config\"));\r\nvar _devices = _interopRequireDefault(require(\"../../core/devices\"));\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _bindable_template = require(\"../../core/templates/bindable_template\");\r\nvar _empty_template = require(\"../../core/templates/empty_template\");\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _browser = _interopRequireDefault(require(\"../../core/utils/browser\"));\r\nvar _callbacks = _interopRequireDefault(require(\"../../core/utils/callbacks\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _data = require(\"../../core/utils/data\");\r\nvar _position = require(\"../../core/utils/position\");\r\nvar _date = _interopRequireDefault(require(\"../../core/utils/date\"));\r\nvar _date_serialization = _interopRequireDefault(require(\"../../core/utils/date_serialization\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _support = require(\"../../core/utils/support\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _window = require(\"../../core/utils/window\");\r\nvar _data_helper = _interopRequireDefault(require(\"../../data_helper\"));\r\nvar _visibility_change = require(\"../../events/visibility_change\");\r\nvar _date2 = _interopRequireDefault(require(\"../../localization/date\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _dialog = require(\"../dialog\");\r\nvar _themes = require(\"../themes\");\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _ui2 = _interopRequireDefault(require(\"../widget/ui.widget\"));\r\nvar _appointmentPopup = _interopRequireDefault(require(\"./appointmentPopup\"));\r\nvar _compactAppointmentsHelper = require(\"./compactAppointmentsHelper\");\r\nvar _desktopTooltipStrategy = require(\"./tooltip_strategies/desktopTooltipStrategy\");\r\nvar _mobileTooltipStrategy = require(\"./tooltip_strategies/mobileTooltipStrategy\");\r\nvar _ui3 = require(\"./ui.loading\");\r\nvar _uiScheduler = _interopRequireDefault(require(\"./ui.scheduler.appointments\"));\r\nvar _uiSchedulerAppointments = _interopRequireDefault(require(\"./ui.scheduler.appointments.layout_manager\"));\r\nvar _uiScheduler2 = _interopRequireDefault(require(\"./ui.scheduler.appointment_model\"));\r\nvar _uiScheduler3 = _interopRequireDefault(require(\"./ui.scheduler.header\"));\r\nvar _uiScheduler4 = _interopRequireDefault(require(\"./ui.scheduler.resource_manager\"));\r\nvar _uiScheduler5 = _interopRequireDefault(require(\"./ui.scheduler.subscribes\"));\r\nvar _recurrence = require(\"./recurrence\");\r\nvar _utils = _interopRequireDefault(require(\"./utils.timeZone\"));\r\nvar _uiScheduler6 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.agenda\"));\r\nvar _uiScheduler7 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.timeline_day\"));\r\nvar _uiScheduler8 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.timeline_month\"));\r\nvar _uiScheduler9 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.timeline_week\"));\r\nvar _uiScheduler10 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.timeline_work_week\"));\r\nvar _uiScheduler11 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.work_space_day\"));\r\nvar _uiScheduler12 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.work_space_month\"));\r\nvar _uiScheduler13 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.work_space_week\"));\r\nvar _uiScheduler14 = _interopRequireDefault(require(\"./workspaces/ui.scheduler.work_space_work_week\"));\r\nvar _appointmentAdapter = _interopRequireDefault(require(\"./appointmentAdapter\"));\r\nvar _timeZoneCalculator = require(\"./timeZoneCalculator\");\r\nvar _dataStructures = require(\"./dataStructures\");\r\nvar _appointmentSettingsGenerator = require(\"./appointmentSettingsGenerator\");\r\nvar _utils2 = _interopRequireDefault(require(\"./utils\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\n\r\nfunction ownKeys(object, enumerableOnly) {\r\n var keys = Object.keys(object);\r\n if (Object.getOwnPropertySymbols) {\r\n var symbols = Object.getOwnPropertySymbols(object);\r\n enumerableOnly && (symbols = symbols.filter(function(sym) {\r\n return Object.getOwnPropertyDescriptor(object, sym).enumerable\r\n })), keys.push.apply(keys, symbols)\r\n }\r\n return keys\r\n}\r\n\r\nfunction _objectSpread(target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = null != arguments[i] ? arguments[i] : {};\r\n i % 2 ? ownKeys(Object(source), !0).forEach(function(key) {\r\n _defineProperty(target, key, source[key])\r\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {\r\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key))\r\n })\r\n }\r\n return target\r\n}\r\n\r\nfunction _defineProperty(obj, key, value) {\r\n if (key in obj) {\r\n Object.defineProperty(obj, key, {\r\n value: value,\r\n enumerable: true,\r\n configurable: true,\r\n writable: true\r\n })\r\n } else {\r\n obj[key] = value\r\n }\r\n return obj\r\n}\r\n\r\nfunction _inheritsLoose(subClass, superClass) {\r\n subClass.prototype = Object.create(superClass.prototype);\r\n subClass.prototype.constructor = subClass;\r\n _setPrototypeOf(subClass, superClass)\r\n}\r\n\r\nfunction _setPrototypeOf(o, p) {\r\n _setPrototypeOf = Object.setPrototypeOf || function(o, p) {\r\n o.__proto__ = p;\r\n return o\r\n };\r\n return _setPrototypeOf(o, p)\r\n}\r\nvar MINUTES_IN_HOUR = 60;\r\nvar WIDGET_CLASS = \"dx-scheduler\";\r\nvar WIDGET_SMALL_CLASS = \"\".concat(WIDGET_CLASS, \"-small\");\r\nvar WIDGET_ADAPTIVE_CLASS = \"\".concat(WIDGET_CLASS, \"-adaptive\");\r\nvar WIDGET_WIN_NO_TOUCH_CLASS = \"\".concat(WIDGET_CLASS, \"-win-no-touch\");\r\nvar WIDGET_READONLY_CLASS = \"\".concat(WIDGET_CLASS, \"-readonly\");\r\nvar WIDGET_SMALL_WIDTH = 400;\r\nvar FULL_DATE_FORMAT = \"yyyyMMddTHHmmss\";\r\nvar UTC_FULL_DATE_FORMAT = FULL_DATE_FORMAT + \"Z\";\r\nvar VIEWS_CONFIG = {\r\n day: {\r\n workSpace: _uiScheduler11.default,\r\n renderingStrategy: \"vertical\"\r\n },\r\n week: {\r\n workSpace: _uiScheduler13.default,\r\n renderingStrategy: \"vertical\"\r\n },\r\n workWeek: {\r\n workSpace: _uiScheduler14.default,\r\n renderingStrategy: \"vertical\"\r\n },\r\n month: {\r\n workSpace: _uiScheduler12.default,\r\n renderingStrategy: \"horizontalMonth\"\r\n },\r\n timelineDay: {\r\n workSpace: _uiScheduler7.default,\r\n renderingStrategy: \"horizontal\"\r\n },\r\n timelineWeek: {\r\n workSpace: _uiScheduler9.default,\r\n renderingStrategy: \"horizontal\"\r\n },\r\n timelineWorkWeek: {\r\n workSpace: _uiScheduler10.default,\r\n renderingStrategy: \"horizontal\"\r\n },\r\n timelineMonth: {\r\n workSpace: _uiScheduler8.default,\r\n renderingStrategy: \"horizontalMonthLine\"\r\n },\r\n agenda: {\r\n workSpace: _uiScheduler6.default,\r\n renderingStrategy: \"agenda\"\r\n }\r\n};\r\nvar StoreEventNames = {\r\n ADDING: \"onAppointmentAdding\",\r\n ADDED: \"onAppointmentAdded\",\r\n DELETING: \"onAppointmentDeleting\",\r\n DELETED: \"onAppointmentDeleted\",\r\n UPDATING: \"onAppointmentUpdating\",\r\n UPDATED: \"onAppointmentUpdated\"\r\n};\r\nvar Scheduler = function(_Widget) {\r\n _inheritsLoose(Scheduler, _Widget);\r\n\r\n function Scheduler() {\r\n return _Widget.apply(this, arguments) || this\r\n }\r\n var _proto = Scheduler.prototype;\r\n _proto._getDefaultOptions = function() {\r\n var defaultOptions = (0, _extend.extend)(_Widget.prototype._getDefaultOptions.call(this), {\r\n views: [\"day\", \"week\"],\r\n currentView: \"day\",\r\n currentDate: _date.default.trimTime(new Date),\r\n min: void 0,\r\n max: void 0,\r\n dateSerializationFormat: void 0,\r\n firstDayOfWeek: void 0,\r\n groups: [],\r\n resources: [],\r\n dataSource: null,\r\n customizeDateNavigatorText: void 0,\r\n appointmentTemplate: \"item\",\r\n dropDownAppointmentTemplate: \"dropDownAppointment\",\r\n appointmentCollectorTemplate: \"appointmentCollector\",\r\n dataCellTemplate: null,\r\n timeCellTemplate: null,\r\n resourceCellTemplate: null,\r\n dateCellTemplate: null,\r\n startDayHour: 0,\r\n endDayHour: 24,\r\n editing: {\r\n allowAdding: true,\r\n allowDeleting: true,\r\n allowDragging: true,\r\n allowResizing: true,\r\n allowUpdating: true,\r\n allowTimeZoneEditing: false,\r\n allowEditingTimeZones: false\r\n },\r\n showAllDayPanel: true,\r\n showCurrentTimeIndicator: true,\r\n shadeUntilCurrentTime: false,\r\n indicatorUpdateInterval: 3e5,\r\n indicatorTime: void 0,\r\n recurrenceEditMode: \"dialog\",\r\n cellDuration: 30,\r\n maxAppointmentsPerCell: \"auto\",\r\n selectedCellData: [],\r\n groupByDate: false,\r\n onAppointmentRendered: null,\r\n onAppointmentClick: null,\r\n onAppointmentDblClick: null,\r\n onAppointmentContextMenu: null,\r\n onCellClick: null,\r\n onCellContextMenu: null,\r\n onAppointmentAdding: null,\r\n onAppointmentAdded: null,\r\n onAppointmentUpdating: null,\r\n onAppointmentUpdated: null,\r\n onAppointmentDeleting: null,\r\n onAppointmentDeleted: null,\r\n onAppointmentFormOpening: null,\r\n appointmentTooltipTemplate: \"appointmentTooltip\",\r\n appointmentPopupTemplate: \"appointmentPopup\",\r\n crossScrollingEnabled: false,\r\n useDropDownViewSwitcher: false,\r\n startDateExpr: \"startDate\",\r\n endDateExpr: \"endDate\",\r\n textExpr: \"text\",\r\n descriptionExpr: \"description\",\r\n allDayExpr: \"allDay\",\r\n recurrenceRuleExpr: \"recurrenceRule\",\r\n recurrenceExceptionExpr: \"recurrenceException\",\r\n disabledExpr: \"disabled\",\r\n remoteFiltering: false,\r\n timeZone: \"\",\r\n startDateTimeZoneExpr: \"startDateTimeZone\",\r\n endDateTimeZoneExpr: \"endDateTimeZone\",\r\n noDataText: _message.default.format(\"dxCollectionWidget-noDataText\"),\r\n adaptivityEnabled: false,\r\n allowMultipleCellSelection: true,\r\n scrolling: {\r\n mode: \"standard\"\r\n },\r\n renovateRender: false,\r\n _appointmentTooltipOffset: {\r\n x: 0,\r\n y: 0\r\n },\r\n _appointmentTooltipButtonsPosition: \"bottom\",\r\n _appointmentTooltipOpenButtonText: _message.default.format(\"dxScheduler-openAppointment\"),\r\n _dropDownButtonIcon: \"overflow\",\r\n _appointmentCountPerCell: 2,\r\n _collectorOffset: 0,\r\n _appointmentOffset: 26\r\n });\r\n return (0, _extend.extend)(true, defaultOptions, {\r\n integrationOptions: {\r\n useDeferUpdateForTemplates: false\r\n }\r\n })\r\n };\r\n _proto._defaultOptionsRules = function() {\r\n return _Widget.prototype._defaultOptionsRules.call(this).concat([{\r\n device: function() {\r\n return \"desktop\" === _devices.default.real().deviceType && !_devices.default.isSimulator()\r\n },\r\n options: {\r\n focusStateEnabled: true\r\n }\r\n }, {\r\n device: function() {\r\n return !_devices.default.current().generic\r\n },\r\n options: {\r\n useDropDownViewSwitcher: true,\r\n editing: {\r\n allowDragging: false,\r\n allowResizing: false\r\n }\r\n }\r\n }, {\r\n device: function() {\r\n return (0, _themes.isMaterial)()\r\n },\r\n options: {\r\n useDropDownViewSwitcher: true,\r\n dateCellTemplate: function(data, index, element) {\r\n var text = data.text;\r\n text.split(\" \").forEach(function(text, index) {\r\n var span = (0, _renderer.default)(\"\").text(text).addClass(\"dx-scheduler-header-panel-cell-date\");\r\n (0, _renderer.default)(element).append(span);\r\n if (!index) {\r\n (0, _renderer.default)(element).append(\" \")\r\n }\r\n })\r\n },\r\n _appointmentTooltipOffset: {\r\n x: 0,\r\n y: 11\r\n },\r\n _appointmentTooltipButtonsPosition: \"top\",\r\n _appointmentTooltipOpenButtonText: null,\r\n _dropDownButtonIcon: \"chevrondown\",\r\n _appointmentCountPerCell: 1,\r\n _collectorOffset: 20,\r\n _appointmentOffset: 30\r\n }\r\n }])\r\n };\r\n _proto._setDeprecatedOptions = function() {\r\n _Widget.prototype._setDeprecatedOptions.call(this);\r\n (0, _extend.extend)(this._deprecatedOptions, {\r\n dropDownAppointmentTemplate: {\r\n since: \"19.2\",\r\n message: \"appointmentTooltipTemplate\"\r\n },\r\n allowEditingTimeZones: {\r\n since: \"20.1\",\r\n alias: \"allowTimeZoneEditing\"\r\n }\r\n })\r\n };\r\n _proto._getAppointmentSettingsGenerator = function() {\r\n return new _appointmentSettingsGenerator.AppointmentSettingsGenerator(this)\r\n };\r\n _proto._postponeDataSourceLoading = function(promise) {\r\n this.postponedOperations.add(\"_reloadDataSource\", this._reloadDataSource.bind(this), promise)\r\n };\r\n _proto._postponeResourceLoading = function() {\r\n var _this = this;\r\n var whenLoaded = this.postponedOperations.add(\"_loadResources\", function() {\r\n return _this._loadResources()\r\n });\r\n var resolveCallbacks = new _deferred.Deferred;\r\n whenLoaded.done(function(resources) {\r\n resolveCallbacks.resolve(resources)\r\n });\r\n this._postponeDataSourceLoading(whenLoaded);\r\n return resolveCallbacks.promise()\r\n };\r\n _proto._optionChanged = function(args) {\r\n var _this2 = this;\r\n var value = args.value;\r\n var name = args.name;\r\n switch (args.name) {\r\n case \"customizeDateNavigatorText\":\r\n this._updateOption(\"header\", name, value);\r\n break;\r\n case \"firstDayOfWeek\":\r\n this._updateOption(\"workSpace\", name, value);\r\n this._updateOption(\"header\", name, value);\r\n break;\r\n case \"currentDate\":\r\n value = this._dateOption(name);\r\n value = _date.default.trimTime(new Date(value));\r\n this.option(\"selectedCellData\", []);\r\n this._workSpace.option(name, new Date(value));\r\n this._header.option(name, new Date(value));\r\n this._header.option(\"displayedDate\", this._workSpace._getViewStartByOptions());\r\n this._appointments.option(\"items\", []);\r\n this._filterAppointmentsByDate();\r\n this._postponeDataSourceLoading();\r\n break;\r\n case \"dataSource\":\r\n this._initDataSource();\r\n this._appointmentModel.setDataSource(this._dataSource);\r\n this._postponeResourceLoading().done(function(resources) {\r\n _this2._filterAppointmentsByDate();\r\n _this2._updateOption(\"workSpace\", \"showAllDayPanel\", _this2.option(\"showAllDayPanel\"))\r\n });\r\n break;\r\n case \"min\":\r\n case \"max\":\r\n value = this._dateOption(name);\r\n this._updateOption(\"header\", name, new Date(value));\r\n this._updateOption(\"workSpace\", name, new Date(value));\r\n break;\r\n case \"views\":\r\n this._processCurrentView();\r\n if (this._getCurrentViewOptions()) {\r\n this.repaint()\r\n } else {\r\n this._header.option(name, value)\r\n }\r\n break;\r\n case \"useDropDownViewSwitcher\":\r\n this._header.option(name, value);\r\n break;\r\n case \"currentView\":\r\n this._processCurrentView();\r\n this.fire(\"validateDayHours\");\r\n this.getLayoutManager().initRenderingStrategy(this._getAppointmentsRenderingStrategy());\r\n this._validateCellDuration();\r\n this._appointments.option({\r\n items: [],\r\n allowDrag: this._allowDragging(),\r\n allowResize: this._allowResizing(),\r\n itemTemplate: this._getAppointmentTemplate(\"appointmentTemplate\")\r\n });\r\n this._postponeResourceLoading().done(function(resources) {\r\n _this2._refreshWorkSpace(resources);\r\n _this2._updateHeader();\r\n _this2._filterAppointmentsByDate();\r\n _this2._appointments.option(\"allowAllDayResize\", \"day\" !== value)\r\n });\r\n break;\r\n case \"appointmentTemplate\":\r\n this._appointments.option(\"itemTemplate\", value);\r\n break;\r\n case \"dateCellTemplate\":\r\n case \"resourceCellTemplate\":\r\n case \"dataCellTemplate\":\r\n case \"timeCellTemplate\":\r\n this._updateOption(\"workSpace\", name, value);\r\n this.repaint();\r\n break;\r\n case \"groups\":\r\n this._postponeResourceLoading().done(function(resources) {\r\n _this2._refreshWorkSpace(resources);\r\n _this2._filterAppointmentsByDate()\r\n });\r\n break;\r\n case \"resources\":\r\n this._resourcesManager.setResources(this.option(\"resources\"));\r\n this._appointmentModel.setDataAccessors(this._combineDataAccessors());\r\n this._postponeResourceLoading().done(function(resources) {\r\n _this2._appointments.option(\"items\", []);\r\n _this2._refreshWorkSpace(resources);\r\n _this2._filterAppointmentsByDate()\r\n });\r\n break;\r\n case \"startDayHour\":\r\n case \"endDayHour\":\r\n this.fire(\"validateDayHours\");\r\n this._appointments.option(\"items\", []);\r\n this._updateOption(\"workSpace\", name, value);\r\n this._appointments.repaint();\r\n this._filterAppointmentsByDate();\r\n this._postponeDataSourceLoading();\r\n break;\r\n case StoreEventNames.ADDING:\r\n case StoreEventNames.ADDED:\r\n case StoreEventNames.UPDATING:\r\n case StoreEventNames.UPDATED:\r\n case StoreEventNames.DELETING:\r\n case StoreEventNames.DELETED:\r\n case \"onAppointmentFormOpening\":\r\n this._actions[name] = this._createActionByOption(name);\r\n break;\r\n case \"onAppointmentRendered\":\r\n this._appointments.option(\"onItemRendered\", this._getAppointmentRenderedAction());\r\n break;\r\n case \"onAppointmentClick\":\r\n this._appointments.option(\"onItemClick\", this._createActionByOption(name));\r\n break;\r\n case \"onAppointmentDblClick\":\r\n this._appointments.option(name, this._createActionByOption(name));\r\n break;\r\n case \"onAppointmentContextMenu\":\r\n this._appointments.option(\"onItemContextMenu\", this._createActionByOption(name));\r\n break;\r\n case \"noDataText\":\r\n case \"allowMultipleCellSelection\":\r\n case \"selectedCellData\":\r\n case \"accessKey\":\r\n case \"onCellClick\":\r\n this._workSpace.option(name, value);\r\n break;\r\n case \"onCellContextMenu\":\r\n this._workSpace.option(name, value);\r\n break;\r\n case \"crossScrollingEnabled\":\r\n this._postponeResourceLoading().done(function(resources) {\r\n _this2._appointments.option(\"items\", []);\r\n _this2._refreshWorkSpace(resources);\r\n if (_this2._readyToRenderAppointments) {\r\n _this2._appointments.option(\"items\", _this2._getAppointmentsToRepaint())\r\n }\r\n });\r\n break;\r\n case \"cellDuration\":\r\n this._validateCellDuration();\r\n this._appointments.option(\"items\", []);\r\n if (this._readyToRenderAppointments) {\r\n this._updateOption(\"workSpace\", \"hoursInterval\", value / 60);\r\n this._appointments.option(\"items\", this._getAppointmentsToRepaint())\r\n }\r\n break;\r\n case \"tabIndex\":\r\n case \"focusStateEnabled\":\r\n this._updateOption(\"header\", name, value);\r\n this._updateOption(\"workSpace\", name, value);\r\n this._appointments.option(name, value);\r\n _Widget.prototype._optionChanged.call(this, args);\r\n break;\r\n case \"width\":\r\n this._updateOption(\"header\", name, value);\r\n if (this.option(\"crossScrollingEnabled\")) {\r\n this._updateOption(\"workSpace\", \"width\", value)\r\n }\r\n _Widget.prototype._optionChanged.call(this, args);\r\n this._dimensionChanged();\r\n break;\r\n case \"height\":\r\n _Widget.prototype._optionChanged.call(this, args);\r\n this._dimensionChanged();\r\n break;\r\n case \"editing\":\r\n this._initEditing();\r\n var editing = this._editing;\r\n this._bringEditingModeToAppointments(editing);\r\n this.hideAppointmentTooltip();\r\n this._cleanPopup();\r\n break;\r\n case \"showAllDayPanel\":\r\n this._postponeResourceLoading().done(function(resources) {\r\n _this2._filterAppointmentsByDate();\r\n _this2._updateOption(\"workSpace\", \"allDayExpanded\", value);\r\n _this2._updateOption(\"workSpace\", name, value)\r\n });\r\n break;\r\n case \"showCurrentTimeIndicator\":\r\n case \"indicatorTime\":\r\n case \"indicatorUpdateInterval\":\r\n case \"shadeUntilCurrentTime\":\r\n case \"groupByDate\":\r\n this._updateOption(\"workSpace\", name, value);\r\n this.repaint();\r\n break;\r\n case \"appointmentDragging\":\r\n case \"appointmentTooltipTemplate\":\r\n case \"appointmentPopupTemplate\":\r\n case \"recurrenceEditMode\":\r\n case \"remoteFiltering\":\r\n case \"timeZone\":\r\n case \"dropDownAppointmentTemplate\":\r\n case \"appointmentCollectorTemplate\":\r\n case \"_appointmentTooltipOffset\":\r\n case \"_appointmentTooltipButtonsPosition\":\r\n case \"_appointmentTooltipOpenButtonText\":\r\n case \"_dropDownButtonIcon\":\r\n case \"_appointmentCountPerCell\":\r\n case \"_collectorOffset\":\r\n case \"_appointmentOffset\":\r\n this.repaint();\r\n break;\r\n case \"dateSerializationFormat\":\r\n break;\r\n case \"maxAppointmentsPerCell\":\r\n break;\r\n case \"startDateExpr\":\r\n case \"endDateExpr\":\r\n case \"startDateTimeZoneExpr\":\r\n case \"endDateTimeZoneExpr\":\r\n case \"textExpr\":\r\n case \"descriptionExpr\":\r\n case \"allDayExpr\":\r\n case \"recurrenceRuleExpr\":\r\n case \"recurrenceExceptionExpr\":\r\n case \"disabledExpr\":\r\n this._updateExpression(name, value);\r\n this._appointmentModel.setDataAccessors(this._combineDataAccessors());\r\n this._initAppointmentTemplate();\r\n this.repaint();\r\n break;\r\n case \"adaptivityEnabled\":\r\n this._toggleAdaptiveClass();\r\n this.repaint();\r\n break;\r\n case \"scrolling\":\r\n this._updateOption(\"workSpace\", args.fullName, value);\r\n break;\r\n case \"renovateRender\":\r\n this._updateOption(\"workSpace\", name, value);\r\n break;\r\n default:\r\n _Widget.prototype._optionChanged.call(this, args)\r\n }\r\n };\r\n _proto._updateHeader = function() {\r\n var viewCountConfig = this._getViewCountConfig();\r\n this._header.option(\"intervalCount\", viewCountConfig.intervalCount);\r\n this._header.option(\"displayedDate\", this._workSpace._getViewStartByOptions());\r\n this._header.option(\"min\", this._dateOption(\"min\"));\r\n this._header.option(\"max\", this._dateOption(\"max\"));\r\n this._header.option(\"currentDate\", this._dateOption(\"currentDate\"));\r\n this._header.option(\"firstDayOfWeek\", this._getCurrentViewOption(\"firstDayOfWeek\"));\r\n this._header.option(\"currentView\", this._currentView)\r\n };\r\n _proto._dateOption = function(optionName) {\r\n var optionValue = this._getCurrentViewOption(optionName);\r\n return _date_serialization.default.deserializeDate(optionValue)\r\n };\r\n _proto._getSerializationFormat = function(optionName) {\r\n var value = this._getCurrentViewOption(optionName);\r\n if (\"number\" === typeof value) {\r\n return \"number\"\r\n }\r\n if (!(0, _type.isString)(value)) {\r\n return\r\n }\r\n return _date_serialization.default.getDateSerializationFormat(value)\r\n };\r\n _proto._bringEditingModeToAppointments = function(editing) {\r\n var editingConfig = {\r\n allowDelete: editing.allowUpdating && editing.allowDeleting\r\n };\r\n if (!this._isAgenda()) {\r\n editingConfig.allowDrag = editing.allowDragging;\r\n editingConfig.allowResize = editing.allowResizing;\r\n editingConfig.allowAllDayResize = editing.allowResizing && this._supportAllDayResizing()\r\n }\r\n this._appointments.option(editingConfig);\r\n this.repaint()\r\n };\r\n _proto._isAgenda = function() {\r\n return \"agenda\" === this._getAppointmentsRenderingStrategy()\r\n };\r\n _proto._allowDragging = function() {\r\n return this._editing.allowDragging && !this._isAgenda()\r\n };\r\n _proto._allowResizing = function() {\r\n return this._editing.allowResizing && !this._isAgenda()\r\n };\r\n _proto._allowAllDayResizing = function() {\r\n return this._editing.allowResizing && this._supportAllDayResizing()\r\n };\r\n _proto._supportAllDayResizing = function() {\r\n return \"day\" !== this._getCurrentViewType() || this._currentView.intervalCount > 1\r\n };\r\n _proto._isAllDayExpanded = function(items) {\r\n return this.option(\"showAllDayPanel\") && this._appointmentModel.hasAllDayAppointments(items, this._getCurrentViewOption(\"startDayHour\"), this._getCurrentViewOption(\"endDayHour\"))\r\n };\r\n _proto._getTimezoneOffsetByOption = function(date) {\r\n return _utils.default.calculateTimezoneByValue(this.option(\"timeZone\"), date)\r\n };\r\n _proto._filterAppointmentsByDate = function() {\r\n var dateRange = this._workSpace.getDateRange();\r\n this._appointmentModel.filterByDate(dateRange[0], dateRange[1], this.option(\"remoteFiltering\"), this.option(\"dateSerializationFormat\"))\r\n };\r\n _proto._loadResources = function() {\r\n var groups = this._getCurrentViewOption(\"groups\");\r\n var result = new _deferred.Deferred;\r\n this._resourcesManager.loadResources(groups).done(function(resources) {\r\n this._loadedResources = resources;\r\n result.resolve(resources)\r\n }.bind(this));\r\n return result.promise()\r\n };\r\n _proto._reloadDataSource = function() {\r\n var result = new _deferred.Deferred;\r\n if (this._dataSource) {\r\n this._dataSource.load().done(function() {\r\n (0, _ui3.hide)();\r\n this._fireContentReadyAction(result)\r\n }.bind(this)).fail(function() {\r\n (0, _ui3.hide)();\r\n result.reject()\r\n });\r\n this._dataSource.isLoading() && (0, _ui3.show)({\r\n container: this.$element(),\r\n position: {\r\n of: this.$element()\r\n }\r\n })\r\n } else {\r\n this._fireContentReadyAction(result)\r\n }\r\n return result.promise()\r\n };\r\n _proto._fireContentReadyAction = function(result) {\r\n var contentReadyBase = _Widget.prototype._fireContentReadyAction.bind(this);\r\n var fireContentReady = function() {\r\n contentReadyBase();\r\n null === result || void 0 === result ? void 0 : result.resolve()\r\n };\r\n if (this._workSpaceRecalculation) {\r\n var _this$_workSpaceRecal;\r\n null === (_this$_workSpaceRecal = this._workSpaceRecalculation) || void 0 === _this$_workSpaceRecal ? void 0 : _this$_workSpaceRecal.done(function() {\r\n fireContentReady()\r\n })\r\n } else {\r\n fireContentReady()\r\n }\r\n };\r\n _proto._dimensionChanged = function() {\r\n var filteredItems = this.getFilteredItems();\r\n this._toggleSmallClass();\r\n if (!this._isAgenda() && filteredItems && this._isVisible()) {\r\n this._workSpace._cleanAllowedPositions();\r\n this._workSpace.option(\"allDayExpanded\", this._isAllDayExpanded(filteredItems));\r\n this._workSpace._dimensionChanged();\r\n var appointments = this._layoutManager.createAppointmentsMap(filteredItems);\r\n this._appointments.option(\"items\", appointments)\r\n }\r\n this.hideAppointmentTooltip();\r\n this._appointmentPopup.triggerResize();\r\n this._appointmentPopup.updatePopupFullScreenMode()\r\n };\r\n _proto._clean = function() {\r\n this._cleanPopup();\r\n _Widget.prototype._clean.call(this)\r\n };\r\n _proto._toggleSmallClass = function() {\r\n var width = (0, _position.getBoundingRect)(this.$element().get(0)).width;\r\n this.$element().toggleClass(WIDGET_SMALL_CLASS, width < WIDGET_SMALL_WIDTH)\r\n };\r\n _proto._toggleAdaptiveClass = function() {\r\n this.$element().toggleClass(WIDGET_ADAPTIVE_CLASS, this.option(\"adaptivityEnabled\"))\r\n };\r\n _proto._visibilityChanged = function(visible) {\r\n visible && this._dimensionChanged()\r\n };\r\n _proto._dataSourceOptions = function() {\r\n return {\r\n paginate: false\r\n }\r\n };\r\n _proto._init = function() {\r\n var _this3 = this;\r\n this._initExpressions({\r\n startDate: this.option(\"startDateExpr\"),\r\n endDate: this.option(\"endDateExpr\"),\r\n startDateTimeZone: this.option(\"startDateTimeZoneExpr\"),\r\n endDateTimeZone: this.option(\"endDateTimeZoneExpr\"),\r\n allDay: this.option(\"allDayExpr\"),\r\n text: this.option(\"textExpr\"),\r\n description: this.option(\"descriptionExpr\"),\r\n recurrenceRule: this.option(\"recurrenceRuleExpr\"),\r\n recurrenceException: this.option(\"recurrenceExceptionExpr\"),\r\n disabled: this.option(\"disabledExpr\")\r\n });\r\n _Widget.prototype._init.call(this);\r\n this._initDataSource();\r\n this._loadedResources = [];\r\n this.$element().addClass(WIDGET_CLASS).toggleClass(WIDGET_WIN_NO_TOUCH_CLASS, !!(_browser.default.msie && _support.touch));\r\n this._initEditing();\r\n this._resourcesManager = new _uiScheduler4.default(this.option(\"resources\"));\r\n var combinedDataAccessors = this._combineDataAccessors();\r\n this._appointmentModel = new _uiScheduler2.default(this._dataSource, combinedDataAccessors, this.getAppointmentDurationInMinutes());\r\n this._initActions();\r\n this._compactAppointmentsHelper = new _compactAppointmentsHelper.CompactAppointmentsHelper(this);\r\n this._asyncTemplatesTimers = [];\r\n this._dataSourceLoadedCallback = (0, _callbacks.default)();\r\n this._subscribes = _uiScheduler5.default;\r\n this.timeZoneCalculator = new _timeZoneCalculator.TimeZoneCalculator({\r\n getClientOffset: function(date) {\r\n return _utils.default.getClientTimezoneOffset(date)\r\n },\r\n getCommonOffset: function(date, timeZone) {\r\n return _utils.default.calculateTimezoneByValue(timeZone || _this3.option(\"timeZone\"), date)\r\n },\r\n getAppointmentOffset: function(date, appointmentTimezone) {\r\n return _utils.default.calculateTimezoneByValue(appointmentTimezone, date)\r\n }\r\n })\r\n };\r\n _proto._initTemplates = function() {\r\n this._initAppointmentTemplate();\r\n this._templateManager.addDefaultTemplates({\r\n appointmentTooltip: new _empty_template.EmptyTemplate,\r\n dropDownAppointment: new _empty_template.EmptyTemplate\r\n });\r\n _Widget.prototype._initTemplates.call(this)\r\n };\r\n _proto._initAppointmentTemplate = function() {\r\n var _this4 = this;\r\n var expr = this._dataAccessors.expr;\r\n var createGetter = function(property) {\r\n return (0, _data.compileGetter)(\"appointmentData.\".concat(property))\r\n };\r\n var getDate = function(getter) {\r\n return function(data) {\r\n var value = getter(data);\r\n if (value instanceof Date) {\r\n return value.valueOf()\r\n }\r\n return value\r\n }\r\n };\r\n this._templateManager.addDefaultTemplates(_defineProperty({}, \"item\", new _bindable_template.BindableTemplate(function($container, data, model) {\r\n return _this4.getAppointmentsInstance()._renderAppointmentTemplate($container, data, model)\r\n }, [\"html\", \"text\", \"startDate\", \"endDate\", \"allDay\", \"description\", \"recurrenceRule\", \"recurrenceException\", \"startDateTimeZone\", \"endDateTimeZone\"], this.option(\"integrationOptions.watchMethod\"), {\r\n text: createGetter(expr.textExpr),\r\n startDate: getDate(createGetter(expr.startDateExpr)),\r\n endDate: getDate(createGetter(expr.endDateExpr)),\r\n startDateTimeZone: createGetter(expr.startDateTimeZoneExpr),\r\n endDateTimeZone: createGetter(expr.endDateTimeZoneExpr),\r\n allDay: createGetter(expr.allDayExpr),\r\n recurrenceRule: createGetter(expr.recurrenceRuleExpr)\r\n })))\r\n };\r\n _proto._combineDataAccessors = function() {\r\n var resourcesDataAccessors = this._resourcesManager._dataAccessors;\r\n var result = (0, _extend.extend)(true, {}, this._dataAccessors);\r\n (0, _iterator.each)(resourcesDataAccessors, function(type, accessor) {\r\n result[type].resources = accessor\r\n }.bind(this));\r\n return result\r\n };\r\n _proto._renderContent = function() {\r\n this._renderContentImpl()\r\n };\r\n _proto._dataSourceChangedHandler = function(result) {\r\n if (this._readyToRenderAppointments) {\r\n this._workSpaceRecalculation.done(function() {\r\n this._renderAppointments();\r\n if (this._isAgenda()) {\r\n this._workSpace._renderView();\r\n this._dataSourceLoadedCallback.fireWith(this, [this.getFilteredItems()])\r\n }\r\n }.bind(this))\r\n }\r\n };\r\n _proto.isVirtualScrolling = function() {\r\n var _this$getWorkSpace;\r\n return null === (_this$getWorkSpace = this.getWorkSpace()) || void 0 === _this$getWorkSpace ? void 0 : _this$getWorkSpace.isVirtualScrolling()\r\n };\r\n _proto._filterAppointments = function() {\r\n var prerenderFilterName = this.isVirtualScrolling() ? \"prerenderFilterVirtual\" : \"prerenderFilter\";\r\n return this.fire(prerenderFilterName)\r\n };\r\n _proto._renderAppointments = function() {\r\n this._filteredItems = this._filterAppointments();\r\n this._workSpace.option(\"allDayExpanded\", this._isAllDayExpanded(this._filteredItems));\r\n if (this._isAgenda()) {\r\n this.getRenderingStrategyInstance().calculateRows(this._filteredItems, 7, this.option(\"currentDate\"), true)\r\n }\r\n if (this._filteredItems.length && this._isVisible()) {\r\n this._appointments.option(\"items\", this._getAppointmentsToRepaint());\r\n this._appointmentModel.cleanModelState()\r\n } else {\r\n this._appointments.option(\"items\", [])\r\n }\r\n };\r\n _proto._getAppointmentsToRepaint = function() {\r\n var appointments = this._layoutManager.createAppointmentsMap(this._filteredItems);\r\n return this._layoutManager.getRepaintedAppointments(appointments, this.getAppointmentsInstance().option(\"items\"))\r\n };\r\n _proto._initExpressions = function(fields) {\r\n var isDateField = function(field) {\r\n return \"startDate\" === field || \"endDate\" === field\r\n };\r\n if (!this._dataAccessors) {\r\n this._dataAccessors = {\r\n getter: {},\r\n setter: {},\r\n expr: {}\r\n }\r\n }(0, _iterator.each)(fields, function(name, expr) {\r\n if (expr) {\r\n var getter = (0, _data.compileGetter)(expr);\r\n var setter = (0, _data.compileSetter)(expr);\r\n var dateGetter;\r\n var dateSetter;\r\n if (isDateField(name)) {\r\n var that = this;\r\n dateGetter = function() {\r\n var value = getter.apply(this, arguments);\r\n if ((0, _config.default)().forceIsoDateParsing) {\r\n if (!that.option(\"dateSerializationFormat\")) {\r\n var format = _date_serialization.default.getDateSerializationFormat(value);\r\n if (format) {\r\n that.option(\"dateSerializationFormat\", format)\r\n }\r\n }\r\n value = _date_serialization.default.deserializeDate(value)\r\n }\r\n return value\r\n };\r\n dateSetter = function(object, value) {\r\n if ((0, _config.default)().forceIsoDateParsing || that.option(\"dateSerializationFormat\")) {\r\n value = _date_serialization.default.serializeDate(value, that.option(\"dateSerializationFormat\"))\r\n }\r\n setter.call(this, object, value)\r\n }\r\n }\r\n this._dataAccessors.getter[name] = dateGetter || getter;\r\n this._dataAccessors.setter[name] = dateSetter || setter;\r\n this._dataAccessors.expr[name + \"Expr\"] = expr\r\n } else {\r\n delete this._dataAccessors.getter[name];\r\n delete this._dataAccessors.setter[name];\r\n delete this._dataAccessors.expr[name + \"Expr\"]\r\n }\r\n }.bind(this))\r\n };\r\n _proto._updateExpression = function(name, value) {\r\n var exprObj = {};\r\n exprObj[name.replace(\"Expr\", \"\")] = value;\r\n this._initExpressions(exprObj)\r\n };\r\n _proto._initEditing = function() {\r\n var editing = this.option(\"editing\");\r\n this._editing = {\r\n allowAdding: !!editing,\r\n allowUpdating: !!editing,\r\n allowDeleting: !!editing,\r\n allowResizing: !!editing,\r\n allowDragging: !!editing\r\n };\r\n if ((0, _type.isObject)(editing)) {\r\n this._editing = (0, _extend.extend)(this._editing, editing)\r\n }\r\n this._editing.allowDragging = this._editing.allowDragging && this._editing.allowUpdating;\r\n this._editing.allowResizing = this._editing.allowResizing && this._editing.allowUpdating;\r\n this.$element().toggleClass(WIDGET_READONLY_CLASS, this._isReadOnly())\r\n };\r\n _proto._isReadOnly = function() {\r\n var result = true;\r\n var editing = this._editing;\r\n for (var prop in editing) {\r\n if (Object.prototype.hasOwnProperty.call(editing, prop)) {\r\n result = result && !editing[prop]\r\n }\r\n }\r\n return result\r\n };\r\n _proto._dispose = function() {\r\n this._appointmentTooltip && this._appointmentTooltip.dispose();\r\n this.hideAppointmentPopup();\r\n this.hideAppointmentTooltip();\r\n this._asyncTemplatesTimers.forEach(clearTimeout);\r\n this._asyncTemplatesTimers = [];\r\n _Widget.prototype._dispose.call(this)\r\n };\r\n _proto._initActions = function() {\r\n this._actions = {\r\n onAppointmentAdding: this._createActionByOption(StoreEventNames.ADDING),\r\n onAppointmentAdded: this._createActionByOption(StoreEventNames.ADDED),\r\n onAppointmentUpdating: this._createActionByOption(StoreEventNames.UPDATING),\r\n onAppointmentUpdated: this._createActionByOption(StoreEventNames.UPDATED),\r\n onAppointmentDeleting: this._createActionByOption(StoreEventNames.DELETING),\r\n onAppointmentDeleted: this._createActionByOption(StoreEventNames.DELETED),\r\n onAppointmentFormOpening: this._createActionByOption(\"onAppointmentFormOpening\")\r\n }\r\n };\r\n _proto._getAppointmentRenderedAction = function() {\r\n return this._createActionByOption(\"onAppointmentRendered\", {\r\n excludeValidators: [\"disabled\", \"readOnly\"]\r\n })\r\n };\r\n _proto._renderFocusTarget = function() {\r\n return (0, _common.noop)()\r\n };\r\n _proto._initMarkup = function() {\r\n _Widget.prototype._initMarkup.call(this);\r\n this.fire(\"validateDayHours\");\r\n this._validateCellDuration();\r\n this._processCurrentView();\r\n this._renderHeader();\r\n this._layoutManager = new _uiSchedulerAppointments.default(this, this._getAppointmentsRenderingStrategy());\r\n this._appointments = this._createComponent(\"
\", _uiScheduler.default, this._appointmentsConfig());\r\n this._appointments.option(\"itemTemplate\", this._getAppointmentTemplate(\"appointmentTemplate\"));\r\n this._appointmentTooltip = new(this.option(\"adaptivityEnabled\") ? _mobileTooltipStrategy.MobileTooltipStrategy : _desktopTooltipStrategy.DesktopTooltipStrategy)(this._getAppointmentTooltipOptions());\r\n this._appointmentPopup = new _appointmentPopup.default(this);\r\n if (this._isLoaded() || this._isDataSourceLoading()) {\r\n this._initMarkupCore(this._loadedResources);\r\n this._dataSourceChangedHandler(this._dataSource.items());\r\n this._fireContentReadyAction()\r\n } else {\r\n this._loadResources().done(function(resources) {\r\n this._initMarkupCore(resources);\r\n this._reloadDataSource()\r\n }.bind(this))\r\n }\r\n };\r\n _proto._getAppointmentTooltipOptions = function() {\r\n var _this5 = this;\r\n var that = this;\r\n return {\r\n createComponent: that._createComponent.bind(that),\r\n container: that.$element(),\r\n getScrollableContainer: that.getWorkSpaceScrollableContainer.bind(that),\r\n addDefaultTemplates: that._templateManager.addDefaultTemplates.bind(that._templateManager),\r\n getAppointmentTemplate: that._getAppointmentTemplate.bind(that),\r\n showAppointmentPopup: that.showAppointmentPopup.bind(that),\r\n checkAndDeleteAppointment: that.checkAndDeleteAppointment.bind(that),\r\n isAppointmentInAllDayPanel: that.isAppointmentInAllDayPanel.bind(that),\r\n createFormattedDateText: function(appointment, targetedAppointment, format) {\r\n return _this5.fire(\"getTextAndFormatDate\", appointment, targetedAppointment, format)\r\n },\r\n getAppointmentDisabled: function(appointment) {\r\n return _this5.createAppointmentAdapter(appointment).disabled;\r\n }\r\n }\r\n };\r\n _proto.checkAndDeleteAppointment = function(appointment, targetedAppointment) {\r\n var _this6 = this;\r\n var targetedAdapter = this.createAppointmentAdapter(targetedAppointment);\r\n this._checkRecurringAppointment(appointment, targetedAppointment, targetedAdapter.startDate, function() {\r\n _this6.deleteAppointment(appointment)\r\n }, true)\r\n };\r\n _proto._getExtraAppointmentTooltipOptions = function() {\r\n return {\r\n rtlEnabled: this.option(\"rtlEnabled\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n editing: this.option(\"editing\"),\r\n offset: this.option(\"_appointmentTooltipOffset\")\r\n }\r\n };\r\n _proto.isAppointmentInAllDayPanel = function(appointmentData) {\r\n var workSpace = this._workSpace;\r\n var itTakesAllDay = this.appointmentTakesAllDay(appointmentData);\r\n return itTakesAllDay && workSpace.supportAllDayRow() && workSpace.option(\"showAllDayPanel\")\r\n };\r\n _proto._initMarkupCore = function(resources) {\r\n var _this7 = this;\r\n this._readyToRenderAppointments = (0, _window.hasWindow)();\r\n this._workSpace && this._cleanWorkspace();\r\n this._renderWorkSpace(resources);\r\n this._appointments.option({\r\n fixedContainer: this._workSpace.getFixedContainer(),\r\n allDayContainer: this._workSpace.getAllDayContainer()\r\n });\r\n this._waitAsyncTemplate(function() {\r\n var _this7$_workSpaceReca;\r\n return null === (_this7$_workSpaceReca = _this7._workSpaceRecalculation) || void 0 === _this7$_workSpaceReca ? void 0 : _this7$_workSpaceReca.resolve()\r\n });\r\n this._filterAppointmentsByDate()\r\n };\r\n _proto._isLoaded = function() {\r\n return this._isResourcesLoaded() && this._isDataSourceLoaded()\r\n };\r\n _proto._isResourcesLoaded = function() {\r\n return (0, _type.isDefined)(this._loadedResources)\r\n };\r\n _proto._isDataSourceLoaded = function() {\r\n return this._dataSource && this._dataSource.isLoaded()\r\n };\r\n _proto._render = function() {\r\n this._toggleSmallClass();\r\n this._toggleAdaptiveClass();\r\n _Widget.prototype._render.call(this)\r\n };\r\n _proto._renderHeader = function() {\r\n var $header = (0, _renderer.default)(\"
\").appendTo(this.$element());\r\n this._header = this._createComponent($header, _uiScheduler3.default, this._headerConfig())\r\n };\r\n _proto._headerConfig = function() {\r\n var _this8 = this;\r\n var currentViewOptions = this._getCurrentViewOptions();\r\n var countConfig = this._getViewCountConfig();\r\n var result = (0, _extend.extend)({\r\n isAdaptive: this.option(\"adaptivityEnabled\"),\r\n firstDayOfWeek: this.option(\"firstDayOfWeek\"),\r\n currentView: this._currentView,\r\n tabIndex: this.option(\"tabIndex\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n width: this.option(\"width\"),\r\n rtlEnabled: this.option(\"rtlEnabled\"),\r\n useDropDownViewSwitcher: this.option(\"useDropDownViewSwitcher\"),\r\n _dropDownButtonIcon: this.option(\"_dropDownButtonIcon\"),\r\n customizeDateNavigatorText: this.option(\"customizeDateNavigatorText\")\r\n }, currentViewOptions);\r\n result.observer = this;\r\n result.intervalCount = countConfig.intervalCount;\r\n result.views = this.option(\"views\");\r\n result.min = new Date(this._dateOption(\"min\"));\r\n result.max = new Date(this._dateOption(\"max\"));\r\n result.currentDate = _date.default.trimTime(new Date(this._dateOption(\"currentDate\")));\r\n result.todayDate = function() {\r\n var result = _this8.timeZoneCalculator.createDate(new Date, {\r\n path: \"toGrid\"\r\n });\r\n return result\r\n };\r\n return result\r\n };\r\n _proto._appointmentsConfig = function() {\r\n var that = this;\r\n var config = {\r\n observer: this,\r\n onItemRendered: this._getAppointmentRenderedAction(),\r\n onItemClick: this._createActionByOption(\"onAppointmentClick\"),\r\n onItemContextMenu: this._createActionByOption(\"onAppointmentContextMenu\"),\r\n onAppointmentDblClick: this._createActionByOption(\"onAppointmentDblClick\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n allowDrag: this._allowDragging(),\r\n allowDelete: this._editing.allowUpdating && this._editing.allowDeleting,\r\n allowResize: this._allowResizing(),\r\n allowAllDayResize: this._allowAllDayResizing(),\r\n rtlEnabled: this.option(\"rtlEnabled\"),\r\n currentView: this.option(\"currentView\"),\r\n onContentReady: function() {\r\n that._workSpace && that._workSpace.option(\"allDayExpanded\", that._isAllDayExpanded(that.getFilteredItems()))\r\n }\r\n };\r\n return config\r\n };\r\n _proto.getCollectorOffset = function() {\r\n if (this._workSpace.needApplyCollectorOffset() && !this.option(\"adaptivityEnabled\")) {\r\n return this.option(\"_collectorOffset\")\r\n } else {\r\n return 0\r\n }\r\n };\r\n _proto.getAppointmentDurationInMinutes = function() {\r\n return this._getCurrentViewOption(\"cellDuration\")\r\n };\r\n _proto._processCurrentView = function() {\r\n var views = this.option(\"views\");\r\n var currentView = this.option(\"currentView\");\r\n var that = this;\r\n this._currentView = null;\r\n (0, _iterator.each)(views, function(_, view) {\r\n var isViewIsObject = (0, _type.isObject)(view);\r\n var viewName = isViewIsObject ? view.name : view;\r\n var viewType = view.type;\r\n if (currentView === viewName || currentView === viewType) {\r\n that._currentView = view;\r\n return false\r\n }\r\n });\r\n if (!this._currentView) {\r\n var isCurrentViewValid = !!VIEWS_CONFIG[currentView];\r\n if (isCurrentViewValid) {\r\n this._currentView = currentView\r\n } else {\r\n this._currentView = views[0]\r\n }\r\n }\r\n };\r\n _proto._validateCellDuration = function() {\r\n var endDayHour = this._getCurrentViewOption(\"endDayHour\");\r\n var startDayHour = this._getCurrentViewOption(\"startDayHour\");\r\n var cellDuration = this._getCurrentViewOption(\"cellDuration\");\r\n if ((endDayHour - startDayHour) * MINUTES_IN_HOUR % cellDuration !== 0) {\r\n _ui.default.log(\"W1015\")\r\n }\r\n };\r\n _proto._getCurrentViewType = function() {\r\n return this._currentView.type || this._currentView\r\n };\r\n _proto._getAppointmentsRenderingStrategy = function() {\r\n return VIEWS_CONFIG[this._getCurrentViewType()].renderingStrategy\r\n };\r\n _proto._renderWorkSpace = function(groups) {\r\n this._readyToRenderAppointments && this._toggleSmallClass();\r\n var $workSpace = (0, _renderer.default)(\"
\").appendTo(this.$element());\r\n var countConfig = this._getViewCountConfig();\r\n var workSpaceComponent = VIEWS_CONFIG[this._getCurrentViewType()].workSpace;\r\n var workSpaceConfig = this._workSpaceConfig(groups, countConfig);\r\n this._workSpace = this._createComponent($workSpace, workSpaceComponent, workSpaceConfig);\r\n this._allowDragging() && this._workSpace.initDragBehavior(this, this._all);\r\n this._workSpace._attachTablesEvents();\r\n this._workSpace.getWorkArea().append(this._appointments.$element());\r\n this._recalculateWorkspace();\r\n countConfig.startDate && this._header && this._header.option(\"currentDate\", this._workSpace._getHeaderDate());\r\n this._appointments.option(\"_collectorOffset\", this.getCollectorOffset())\r\n };\r\n _proto._getViewCountConfig = function() {\r\n var currentView = this.option(\"currentView\");\r\n var view = this._getViewByName(currentView);\r\n var viewCount = view && view.intervalCount || 1;\r\n var startDate = view && view.startDate || null;\r\n return {\r\n intervalCount: viewCount,\r\n startDate: startDate\r\n }\r\n };\r\n _proto._getViewByName = function(name) {\r\n var views = this.option(\"views\");\r\n for (var i = 0; i < views.length; i++) {\r\n if (views[i].name === name || views[i].type === name || views[i] === name) {\r\n return views[i]\r\n }\r\n }\r\n };\r\n _proto._recalculateWorkspace = function() {\r\n var _this9 = this;\r\n this._workSpaceRecalculation = new _deferred.Deferred;\r\n this._waitAsyncTemplate(function() {\r\n (0, _visibility_change.triggerResizeEvent)(_this9._workSpace.$element());\r\n _this9._workSpace._refreshDateTimeIndication()\r\n })\r\n };\r\n _proto._workSpaceConfig = function(groups, countConfig) {\r\n var _currentViewOptions$s, _this10 = this;\r\n var currentViewOptions = this._getCurrentViewOptions();\r\n var scrolling = this.option(\"scrolling\");\r\n var result = (0, _extend.extend)({\r\n noDataText: this.option(\"noDataText\"),\r\n firstDayOfWeek: this.option(\"firstDayOfWeek\"),\r\n startDayHour: this.option(\"startDayHour\"),\r\n endDayHour: this.option(\"endDayHour\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n accessKey: this.option(\"accessKey\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n cellDuration: this.option(\"cellDuration\"),\r\n showAllDayPanel: this.option(\"showAllDayPanel\"),\r\n showCurrentTimeIndicator: this.option(\"showCurrentTimeIndicator\"),\r\n indicatorTime: this.option(\"indicatorTime\"),\r\n indicatorUpdateInterval: this.option(\"indicatorUpdateInterval\"),\r\n shadeUntilCurrentTime: this.option(\"shadeUntilCurrentTime\"),\r\n allDayExpanded: this._appointments.option(\"items\"),\r\n crossScrollingEnabled: this.option(\"crossScrollingEnabled\"),\r\n dataCellTemplate: this.option(\"dataCellTemplate\"),\r\n timeCellTemplate: this.option(\"timeCellTemplate\"),\r\n resourceCellTemplate: this.option(\"resourceCellTemplate\"),\r\n dateCellTemplate: this.option(\"dateCellTemplate\"),\r\n allowMultipleCellSelection: this.option(\"allowMultipleCellSelection\"),\r\n selectedCellData: this.option(\"selectedCellData\"),\r\n onSelectionChanged: function(args) {\r\n _this10.option(\"selectedCellData\", args.selectedCellData)\r\n },\r\n groupByDate: this._getCurrentViewOption(\"groupByDate\"),\r\n scrolling: scrolling,\r\n renovateRender: this.option(\"renovateRender\") || \"virtual\" === scrolling.mode || \"virtual\" === (null === (_currentViewOptions$s = currentViewOptions.scrolling) || void 0 === _currentViewOptions$s ? void 0 : _currentViewOptions$s.mode)\r\n }, currentViewOptions);\r\n result.observer = this;\r\n result.intervalCount = countConfig.intervalCount;\r\n result.startDate = countConfig.startDate;\r\n result.groups = groups;\r\n result.onCellClick = this._createActionByOption(\"onCellClick\");\r\n result.onCellContextMenu = this._createActionByOption(\"onCellContextMenu\");\r\n result.min = new Date(this._dateOption(\"min\"));\r\n result.max = new Date(this._dateOption(\"max\"));\r\n result.currentDate = _date.default.trimTime(new Date(this._dateOption(\"currentDate\")));\r\n result.hoursInterval = result.cellDuration / 60;\r\n result.allDayExpanded = this._isAllDayExpanded(this.getFilteredItems());\r\n result.dataCellTemplate = result.dataCellTemplate ? this._getTemplate(result.dataCellTemplate) : null;\r\n result.timeCellTemplate = result.timeCellTemplate ? this._getTemplate(result.timeCellTemplate) : null;\r\n result.resourceCellTemplate = result.resourceCellTemplate ? this._getTemplate(result.resourceCellTemplate) : null;\r\n result.dateCellTemplate = result.dateCellTemplate ? this._getTemplate(result.dateCellTemplate) : null;\r\n return result\r\n };\r\n _proto._waitAsyncTemplate = function(callback) {\r\n if (this._options.silent(\"templatesRenderAsynchronously\")) {\r\n var timer = setTimeout(function() {\r\n callback();\r\n clearTimeout(timer)\r\n });\r\n this._asyncTemplatesTimers.push(timer)\r\n } else {\r\n callback()\r\n }\r\n };\r\n _proto._getCurrentViewOptions = function() {\r\n return this._currentView\r\n };\r\n _proto._getCurrentViewOption = function(optionName) {\r\n var currentViewOptions = this._getCurrentViewOptions();\r\n if (currentViewOptions && void 0 !== currentViewOptions[optionName]) {\r\n return currentViewOptions[optionName]\r\n }\r\n return this.option(optionName)\r\n };\r\n _proto._getAppointmentTemplate = function(optionName) {\r\n var currentViewOptions = this._getCurrentViewOptions();\r\n if (currentViewOptions && currentViewOptions[optionName]) {\r\n return this._getTemplate(currentViewOptions[optionName])\r\n }\r\n return this._getTemplateByOption(optionName)\r\n };\r\n _proto._updateOption = function(viewName, optionName, value) {\r\n var currentViewOptions = this._getCurrentViewOptions();\r\n if (!currentViewOptions || !(0, _type.isDefined)(currentViewOptions[optionName])) {\r\n this[\"_\" + viewName].option(optionName, value)\r\n }\r\n };\r\n _proto._refreshWorkSpace = function(groups) {\r\n var _this11 = this;\r\n this._cleanWorkspace();\r\n delete this._workSpace;\r\n this._renderWorkSpace(groups);\r\n if (this._readyToRenderAppointments) {\r\n this._appointments.option({\r\n fixedContainer: this._workSpace.getFixedContainer(),\r\n allDayContainer: this._workSpace.getAllDayContainer()\r\n });\r\n this._waitAsyncTemplate(function() {\r\n return _this11._workSpaceRecalculation.resolve()\r\n })\r\n }\r\n };\r\n _proto._cleanWorkspace = function() {\r\n this._appointments.$element().detach();\r\n this._workSpace._dispose();\r\n this._workSpace.$element().remove();\r\n this.option(\"selectedCellData\", [])\r\n };\r\n _proto.getWorkSpaceScrollable = function() {\r\n return this._workSpace.getScrollable()\r\n };\r\n _proto.getWorkSpaceScrollableScrollTop = function(allDay) {\r\n return this._workSpace.getGroupedScrollableScrollTop(allDay)\r\n };\r\n _proto.getWorkSpaceScrollableScrollLeft = function() {\r\n return this._workSpace.getScrollableScrollLeft()\r\n };\r\n _proto.getWorkSpaceScrollableContainer = function() {\r\n return this._workSpace.getScrollableContainer()\r\n };\r\n _proto.getWorkSpaceAllDayHeight = function() {\r\n return this._workSpace.getAllDayHeight()\r\n };\r\n _proto.getWorkSpaceAllDayOffset = function() {\r\n return this._workSpace.getAllDayOffset()\r\n };\r\n _proto.getWorkSpaceHeaderPanelHeight = function() {\r\n return this._workSpace.getHeaderPanelHeight()\r\n };\r\n _proto.getWorkSpaceDateTableOffset = function() {\r\n return !this.option(\"crossScrollingEnabled\") || this.option(\"rtlEnabled\") ? this._workSpace.getWorkSpaceLeftOffset() : 0\r\n };\r\n _proto.getWorkSpace = function() {\r\n return this._workSpace\r\n };\r\n _proto.getAppointmentModel = function() {\r\n return this._appointmentModel\r\n };\r\n _proto.getHeader = function() {\r\n return this._header\r\n };\r\n _proto.getMaxAppointmentsPerCell = function() {\r\n return this._getCurrentViewOption(\"maxAppointmentsPerCell\")\r\n };\r\n _proto._cleanPopup = function() {\r\n this._appointmentPopup && this._appointmentPopup.dispose()\r\n };\r\n _proto._checkRecurringAppointment = function(targetAppointment, singleAppointment, exceptionDate, callback, isDeleted, isPopupEditing, dragEvent) {\r\n var _this12 = this;\r\n delete this._updatedRecAppointment;\r\n var recurrenceRule = this.fire(\"getField\", \"recurrenceRule\", targetAppointment);\r\n if (!(0, _recurrence.getRecurrenceProcessor)().evalRecurrenceRule(recurrenceRule).isValid || !this._editing.allowUpdating) {\r\n callback();\r\n return\r\n }\r\n var editMode = this.option(\"recurrenceEditMode\");\r\n switch (editMode) {\r\n case \"series\":\r\n callback();\r\n break;\r\n case \"occurrence\":\r\n this._excludeAppointmentFromSeries(targetAppointment, singleAppointment, exceptionDate, isDeleted, isPopupEditing, dragEvent);\r\n break;\r\n default:\r\n if (dragEvent) {\r\n dragEvent.cancel = new _deferred.Deferred\r\n }\r\n this._showRecurrenceChangeConfirm(isDeleted).done(function(result) {\r\n result && callback();\r\n !result && _this12._excludeAppointmentFromSeries(targetAppointment, singleAppointment, exceptionDate, isDeleted, isPopupEditing, dragEvent)\r\n }).fail(function() {\r\n return _this12._appointments.moveAppointmentBack(dragEvent)\r\n })\r\n }\r\n };\r\n _proto._excludeAppointmentFromSeries = function(rawAppointment, newRawAppointment, exceptionDate, isDeleted, isPopupEditing, dragEvent) {\r\n var _this13 = this;\r\n var appointment = this.createAppointmentAdapter(_objectSpread({}, rawAppointment));\r\n var newAppointment = this.createAppointmentAdapter(newRawAppointment);\r\n newAppointment.recurrenceRule = \"\";\r\n newAppointment.recurrenceException = \"\";\r\n var keyPropertyName = this._appointmentModel.keyName;\r\n delete newRawAppointment[keyPropertyName];\r\n var canCreateNewAppointment = !isDeleted && !isPopupEditing;\r\n if (canCreateNewAppointment) {\r\n this.addAppointment(newRawAppointment)\r\n }\r\n appointment.recurrenceException = this._createRecurrenceException(appointment, exceptionDate);\r\n if (isPopupEditing) {\r\n this._updatedRecAppointment = appointment.source();\r\n this._appointmentPopup.show(newRawAppointment, true);\r\n this._editAppointmentData = rawAppointment\r\n } else {\r\n this._updateAppointment(rawAppointment, appointment.source(), function() {\r\n _this13._appointments.moveAppointmentBack(dragEvent)\r\n }, dragEvent)\r\n }\r\n };\r\n _proto._createRecurrenceException = function(appointment, exceptionDate) {\r\n var result = [];\r\n if (appointment.recurrenceException) {\r\n result.push(appointment.recurrenceException)\r\n }\r\n result.push(this._getSerializedDate(exceptionDate, appointment.startDate, appointment.allDay));\r\n return result.join()\r\n };\r\n _proto._getSerializedDate = function(date, startDate, isAllDay) {\r\n isAllDay && date.setHours(startDate.getHours(), startDate.getMinutes(), startDate.getSeconds(), startDate.getMilliseconds());\r\n return _date_serialization.default.serializeDate(date, UTC_FULL_DATE_FORMAT)\r\n };\r\n _proto._showRecurrenceChangeConfirm = function(isDeleted) {\r\n var message = _message.default.format(isDeleted ? \"dxScheduler-confirmRecurrenceDeleteMessage\" : \"dxScheduler-confirmRecurrenceEditMessage\");\r\n var seriesText = _message.default.format(isDeleted ? \"dxScheduler-confirmRecurrenceDeleteSeries\" : \"dxScheduler-confirmRecurrenceEditSeries\");\r\n var occurrenceText = _message.default.format(isDeleted ? \"dxScheduler-confirmRecurrenceDeleteOccurrence\" : \"dxScheduler-confirmRecurrenceEditOccurrence\");\r\n return (0, _dialog.custom)({\r\n messageHtml: message,\r\n showCloseButton: true,\r\n showTitle: true,\r\n buttons: [{\r\n text: seriesText,\r\n onClick: function() {\r\n return true\r\n }\r\n }, {\r\n text: occurrenceText,\r\n onClick: function() {\r\n return false\r\n }\r\n }]\r\n }).show()\r\n };\r\n _proto._getUpdatedData = function(rawAppointment) {\r\n var _this14 = this;\r\n var getConvertedFromGrid = function(date) {\r\n return date ? _this14.timeZoneCalculator.createDate(date, {\r\n path: \"fromGrid\"\r\n }) : void 0\r\n };\r\n var isValidDate = function(date) {\r\n return !isNaN(new Date(date).getTime())\r\n };\r\n var targetCell = this.getTargetCellData();\r\n var appointment = this.createAppointmentAdapter(rawAppointment);\r\n var cellStartDate = getConvertedFromGrid(targetCell.startDate);\r\n var cellEndDate = getConvertedFromGrid(targetCell.endDate);\r\n var appointmentStartDate = new Date(appointment.startDate);\r\n var appointmentEndDate = new Date(appointment.endDate);\r\n var resultedStartDate = cellStartDate || appointmentStartDate;\r\n if (!isValidDate(appointmentStartDate)) {\r\n appointmentStartDate = resultedStartDate\r\n }\r\n if (!isValidDate(appointmentEndDate)) {\r\n appointmentEndDate = cellEndDate\r\n }\r\n var duration = appointmentEndDate.getTime() - appointmentStartDate.getTime();\r\n var isKeepAppointmentHours = this._workSpace.keepOriginalHours() && isValidDate(appointment.startDate) && isValidDate(cellStartDate);\r\n if (isKeepAppointmentHours) {\r\n var trimTime = _date.default.trimTime;\r\n var startDate = this.timeZoneCalculator.createDate(appointment.startDate, {\r\n path: \"toGrid\"\r\n });\r\n var timeInMs = startDate.getTime() - trimTime(startDate).getTime();\r\n resultedStartDate = new Date(trimTime(targetCell.startDate).getTime() + timeInMs);\r\n resultedStartDate = this.timeZoneCalculator.createDate(resultedStartDate, {\r\n path: \"fromGrid\"\r\n })\r\n }\r\n var result = this.createAppointmentAdapter({});\r\n if (void 0 !== targetCell.allDay) {\r\n result.allDay = targetCell.allDay\r\n }\r\n result.startDate = resultedStartDate;\r\n var resultedEndDate = new Date(resultedStartDate.getTime() + duration);\r\n if (this.appointmentTakesAllDay(rawAppointment) && !result.allDay && this._workSpace.supportAllDayRow()) {\r\n resultedEndDate = this._workSpace.calculateEndDate(resultedStartDate)\r\n }\r\n if (appointment.allDay && !this._workSpace.supportAllDayRow() && !this._workSpace.keepOriginalHours()) {\r\n var dateCopy = new Date(resultedStartDate);\r\n dateCopy.setHours(0);\r\n resultedEndDate = new Date(dateCopy.getTime() + duration);\r\n if (0 !== resultedEndDate.getHours()) {\r\n resultedEndDate.setHours(this._getCurrentViewOption(\"endDayHour\"))\r\n }\r\n }\r\n var timeZoneOffset = _utils.default.getTimezoneOffsetChangeInMs(appointmentStartDate, appointmentEndDate, resultedStartDate, resultedEndDate);\r\n result.endDate = new Date(resultedEndDate.getTime() - timeZoneOffset);\r\n var rawResult = result.source();\r\n this._resourcesManager.setResourcesToItem(rawResult, targetCell.groups);\r\n return rawResult\r\n };\r\n _proto.getTargetedAppointment = function(appointment, element) {\r\n var settings = _utils2.default.dataAccessors.getAppointmentSettings(element);\r\n var info = _utils2.default.dataAccessors.getAppointmentInfo(element);\r\n var appointmentIndex = (0, _renderer.default)(element).data(this._appointments._itemIndexKey());\r\n var adapter = this.createAppointmentAdapter(appointment);\r\n var targetedAdapter = adapter.clone();\r\n if (this._isAgenda() && adapter.isRecurrent) {\r\n var getStartDate = this.getRenderingStrategyInstance().getAppointmentDataCalculator();\r\n var newStartDate = getStartDate((0, _renderer.default)(element), adapter.startDate).startDate;\r\n targetedAdapter.startDate = newStartDate;\r\n targetedAdapter.endDate = new Date(newStartDate.getTime() + adapter.duration)\r\n } else {\r\n if (settings) {\r\n targetedAdapter.startDate = info ? info.sourceAppointment.startDate : adapter.startDate;\r\n targetedAdapter.endDate = info ? info.sourceAppointment.endDate : adapter.endDate\r\n }\r\n }\r\n var rawTargetedAppointment = targetedAdapter.source();\r\n if (element) {\r\n this.setTargetedAppointmentResources(rawTargetedAppointment, element, appointmentIndex)\r\n }\r\n return rawTargetedAppointment\r\n };\r\n _proto.subscribe = function(subject, action) {\r\n this._subscribes[subject] = _uiScheduler5.default[subject] = action\r\n };\r\n _proto.fire = function(subject) {\r\n var callback = this._subscribes[subject];\r\n var args = Array.prototype.slice.call(arguments);\r\n if (!(0, _type.isFunction)(callback)) {\r\n throw _ui.default.Error(\"E1031\", subject)\r\n }\r\n return callback.apply(this, args.slice(1))\r\n };\r\n _proto.getTargetCellData = function() {\r\n return this._workSpace.getDataByDroppableCell()\r\n };\r\n _proto._updateAppointment = function(target, rawAppointment, onUpdatePrevented, dragEvent) {\r\n var updatingOptions = {\r\n newData: rawAppointment,\r\n oldData: (0, _extend.extend)({}, target),\r\n cancel: false\r\n };\r\n var performFailAction = function(err) {\r\n if (onUpdatePrevented) {\r\n onUpdatePrevented.call(this)\r\n }\r\n if (err && \"Error\" === err.name) {\r\n throw err\r\n }\r\n }.bind(this);\r\n this._actions[StoreEventNames.UPDATING](updatingOptions);\r\n if (dragEvent && !(0, _type.isDeferred)(dragEvent.cancel)) {\r\n dragEvent.cancel = new _deferred.Deferred\r\n }\r\n return this._processActionResult(updatingOptions, function(canceled) {\r\n var _this15 = this;\r\n var deferred = new _deferred.Deferred;\r\n if (!canceled) {\r\n this._expandAllDayPanel(rawAppointment);\r\n try {\r\n deferred = this._appointmentModel.update(target, rawAppointment).done(function() {\r\n dragEvent && dragEvent.cancel.resolve(false)\r\n }).always(function(storeAppointment) {\r\n return _this15._onDataPromiseCompleted(StoreEventNames.UPDATED, storeAppointment)\r\n }).fail(function() {\r\n return performFailAction()\r\n })\r\n } catch (err) {\r\n performFailAction(err);\r\n deferred.resolve()\r\n }\r\n } else {\r\n performFailAction();\r\n deferred.resolve()\r\n }\r\n return deferred.promise()\r\n })\r\n };\r\n _proto._processActionResult = function(actionOptions, callback) {\r\n var _this16 = this;\r\n var deferred = new _deferred.Deferred;\r\n var resolveCallback = function(callbackResult) {\r\n (0, _deferred.when)((0, _deferred.fromPromise)(callbackResult)).always(deferred.resolve)\r\n };\r\n if ((0, _type.isPromise)(actionOptions.cancel)) {\r\n (0, _deferred.when)((0, _deferred.fromPromise)(actionOptions.cancel)).always(function(cancel) {\r\n if (!(0, _type.isDefined)(cancel)) {\r\n cancel = \"rejected\" === actionOptions.cancel.state()\r\n }\r\n resolveCallback(callback.call(_this16, cancel))\r\n })\r\n } else {\r\n resolveCallback(callback.call(this, actionOptions.cancel))\r\n }\r\n return deferred.promise()\r\n };\r\n _proto._expandAllDayPanel = function(appointment) {\r\n if (!this._isAllDayExpanded(this.getFilteredItems()) && this.appointmentTakesAllDay(appointment)) {\r\n this._workSpace.option(\"allDayExpanded\", true)\r\n }\r\n };\r\n _proto._onDataPromiseCompleted = function(handlerName, storeAppointment, appointment) {\r\n var args = {\r\n appointmentData: appointment || storeAppointment\r\n };\r\n if (storeAppointment instanceof Error) {\r\n args.error = storeAppointment\r\n } else {\r\n this._appointmentPopup.isVisible() && this._appointmentPopup.hide()\r\n }\r\n this._actions[handlerName](args);\r\n this._fireContentReadyAction()\r\n };\r\n _proto.getAppointmentPopup = function() {\r\n return this._appointmentPopup.getPopup()\r\n };\r\n _proto.getUpdatedAppointment = function() {\r\n return this._appointmentModel.getUpdatedAppointment()\r\n };\r\n _proto.getUpdatedAppointmentKeys = function() {\r\n return this._appointmentModel.getUpdatedAppointmentKeys()\r\n };\r\n _proto.getAppointmentsInstance = function() {\r\n return this._appointments\r\n };\r\n _proto.getResourceManager = function() {\r\n return this._resourcesManager\r\n };\r\n _proto.getLayoutManager = function() {\r\n return this._layoutManager\r\n };\r\n _proto.getRenderingStrategyInstance = function() {\r\n return this._layoutManager.getRenderingStrategyInstance()\r\n };\r\n _proto.getFilteredItems = function() {\r\n return this._filteredItems\r\n };\r\n _proto.getActions = function() {\r\n return this._actions\r\n };\r\n _proto.appointmentTakesAllDay = function(appointment) {\r\n return this._appointmentModel.appointmentTakesAllDay(appointment, this._getCurrentViewOption(\"startDayHour\"), this._getCurrentViewOption(\"endDayHour\"))\r\n };\r\n _proto._getRecurrenceException = function(rawAppointment) {\r\n var appointment = this.createAppointmentAdapter(rawAppointment);\r\n var recurrenceException = appointment.recurrenceException;\r\n if (recurrenceException) {\r\n var exceptions = recurrenceException.split(\",\");\r\n for (var i = 0; i < exceptions.length; i++) {\r\n exceptions[i] = this._convertRecurrenceException(exceptions[i], appointment.startDate)\r\n }\r\n return exceptions.join()\r\n }\r\n return recurrenceException\r\n };\r\n _proto._convertRecurrenceException = function(exceptionString, startDate) {\r\n var _this17 = this;\r\n exceptionString = exceptionString.replace(/\\s/g, \"\");\r\n var getConvertedToTimeZone = function(date) {\r\n return _this17.timeZoneCalculator.createDate(date, {\r\n path: \"toGrid\"\r\n })\r\n };\r\n var exceptionDate = _date_serialization.default.deserializeDate(exceptionString);\r\n var convertedStartDate = getConvertedToTimeZone(startDate);\r\n var convertedExceptionDate = getConvertedToTimeZone(exceptionDate);\r\n convertedExceptionDate = _utils.default.correctRecurrenceExceptionByTimezone(convertedExceptionDate, convertedStartDate, this.option(\"timeZone\"));\r\n exceptionString = _date_serialization.default.serializeDate(convertedExceptionDate, FULL_DATE_FORMAT);\r\n return exceptionString\r\n };\r\n _proto.dayHasAppointment = function(day, rawAppointment, trimTime) {\r\n var _this18 = this;\r\n var getConvertedToTimeZone = function(date) {\r\n return _this18.timeZoneCalculator.createDate(date, {\r\n path: \"toGrid\"\r\n })\r\n };\r\n var appointment = this.createAppointmentAdapter(rawAppointment);\r\n var startDate = new Date(appointment.startDate);\r\n var endDate = new Date(appointment.endDate);\r\n startDate = getConvertedToTimeZone(startDate);\r\n endDate = getConvertedToTimeZone(endDate);\r\n if (day.getTime() === endDate.getTime()) {\r\n return startDate.getTime() === endDate.getTime()\r\n }\r\n if (trimTime) {\r\n day = _date.default.trimTime(day);\r\n startDate = _date.default.trimTime(startDate);\r\n endDate = _date.default.trimTime(endDate)\r\n }\r\n var dayTimeStamp = day.getTime();\r\n var startDateTimeStamp = startDate.getTime();\r\n var endDateTimeStamp = endDate.getTime();\r\n return (0, _array.inArray)(dayTimeStamp, [startDateTimeStamp, endDateTimeStamp]) > -1 || startDateTimeStamp < dayTimeStamp && endDateTimeStamp > dayTimeStamp\r\n };\r\n _proto.setTargetedAppointmentResources = function(rawAppointment, element, appointmentIndex) {\r\n var groups = this._getCurrentViewOption(\"groups\");\r\n if (null !== groups && void 0 !== groups && groups.length) {\r\n var resourcesSetter = this._resourcesManager._dataAccessors.setter;\r\n var workSpace = this._workSpace;\r\n var getGroups;\r\n var setResourceCallback;\r\n if (this._isAgenda()) {\r\n getGroups = function() {\r\n var apptSettings = this.getLayoutManager()._positionMap[appointmentIndex];\r\n return workSpace._getCellGroups(apptSettings[0].groupIndex)\r\n };\r\n setResourceCallback = function(_, group) {\r\n resourcesSetter[group.name](rawAppointment, group.id)\r\n }\r\n } else {\r\n getGroups = function() {\r\n var setting = _utils2.default.dataAccessors.getAppointmentSettings(element) || {};\r\n return workSpace.getCellDataByCoordinates({\r\n left: setting.left,\r\n top: setting.top\r\n }).groups\r\n };\r\n setResourceCallback = function(field, value) {\r\n resourcesSetter[field](rawAppointment, value)\r\n }\r\n }(0, _iterator.each)(getGroups.call(this), setResourceCallback)\r\n }\r\n };\r\n _proto.getStartViewDate = function() {\r\n return this._workSpace.getStartViewDate()\r\n };\r\n _proto.getEndViewDate = function() {\r\n return this._workSpace.getEndViewDate()\r\n };\r\n _proto.showAppointmentPopup = function(rawAppointment, createNewAppointment, rawTargetedAppointment) {\r\n var _this19 = this;\r\n var appointment = this.createAppointmentAdapter(rawTargetedAppointment || rawAppointment);\r\n var newTargetedAppointment = (0, _extend.extend)({}, rawAppointment, rawTargetedAppointment);\r\n this._checkRecurringAppointment(rawAppointment, newTargetedAppointment, appointment.startDate, function() {\r\n if (createNewAppointment || (0, _type.isEmptyObject)(rawAppointment)) {\r\n delete _this19._editAppointmentData;\r\n _this19._editing.allowAdding && _this19._appointmentPopup.show(rawAppointment, true)\r\n } else {\r\n _this19._editAppointmentData = rawAppointment;\r\n _this19._appointmentPopup.show(rawAppointment, _this19._editing.allowUpdating)\r\n }\r\n }, false, true)\r\n };\r\n _proto.hideAppointmentPopup = function(saveChanges) {\r\n if (this._appointmentPopup && this._appointmentPopup.isVisible()) {\r\n saveChanges && this._appointmentPopup.saveChanges();\r\n this._appointmentPopup.hide()\r\n }\r\n };\r\n _proto.showAppointmentTooltip = function(appointment, target, targetedAppointment) {\r\n if (appointment) {\r\n var info = new _dataStructures.AppointmentTooltipInfo(appointment, targetedAppointment, this._appointments._tryGetAppointmentColor(target));\r\n this.showAppointmentTooltipCore(target, [info])\r\n }\r\n };\r\n _proto.showAppointmentTooltipCore = function(target, data, options) {\r\n if (this._appointmentTooltip.isAlreadyShown(target)) {\r\n this.hideAppointmentTooltip()\r\n } else {\r\n this._appointmentTooltip.show(target, data, (0, _extend.extend)(this._getExtraAppointmentTooltipOptions(), options))\r\n }\r\n };\r\n _proto.hideAppointmentTooltip = function() {\r\n this._appointmentTooltip && this._appointmentTooltip.hide()\r\n };\r\n _proto.scrollToTime = function(hours, minutes, date) {\r\n this._workSpace.scrollToTime(hours, minutes, date)\r\n };\r\n _proto.scrollTo = function(date, groups, allDay) {\r\n this._workSpace.scrollTo(date, groups, allDay)\r\n };\r\n _proto.addAppointment = function(rawAppointment) {\r\n var _this20 = this;\r\n var appointment = this.createAppointmentAdapter(rawAppointment);\r\n appointment.text = appointment.text || \"\";\r\n var serializedAppointment = appointment.source(true);\r\n var addingOptions = {\r\n appointmentData: serializedAppointment,\r\n cancel: false\r\n };\r\n this._actions[StoreEventNames.ADDING](addingOptions);\r\n return this._processActionResult(addingOptions, function(canceled) {\r\n if (canceled) {\r\n return (new _deferred.Deferred).resolve()\r\n }\r\n _this20._expandAllDayPanel(serializedAppointment);\r\n return _this20._appointmentModel.add(serializedAppointment).always(function(storeAppointment) {\r\n return _this20._onDataPromiseCompleted(StoreEventNames.ADDED, storeAppointment)\r\n })\r\n })\r\n };\r\n _proto.updateAppointment = function(target, appointment) {\r\n return this._updateAppointment(target, appointment)\r\n };\r\n _proto.deleteAppointment = function(rawAppointment) {\r\n var deletingOptions = {\r\n appointmentData: rawAppointment,\r\n cancel: false\r\n };\r\n this._actions[StoreEventNames.DELETING](deletingOptions);\r\n this._processActionResult(deletingOptions, function(canceled) {\r\n var _this21 = this;\r\n if (!canceled) {\r\n this._appointmentModel.remove(rawAppointment).always(function(storeAppointment) {\r\n return _this21._onDataPromiseCompleted(StoreEventNames.DELETED, storeAppointment, rawAppointment)\r\n })\r\n }\r\n })\r\n };\r\n _proto.focus = function() {\r\n if (this._editAppointmentData) {\r\n this._appointments.focus()\r\n } else {\r\n this._workSpace.focus()\r\n }\r\n };\r\n _proto.getFirstDayOfWeek = function() {\r\n return (0, _type.isDefined)(this.option(\"firstDayOfWeek\")) ? this.option(\"firstDayOfWeek\") : _date2.default.firstDayOfWeekIndex()\r\n };\r\n _proto.createAppointmentAdapter = function(rawAppointment) {\r\n var _this22 = this;\r\n var options = {\r\n getField: function(rawAppointment, property) {\r\n return _this22.fire(\"getField\", property, rawAppointment)\r\n },\r\n setField: function(rawAppointment, property, value) {\r\n return _this22.fire(\"setField\", property, rawAppointment, value)\r\n },\r\n getTimeZoneCalculator: function() {\r\n return _this22.timeZoneCalculator\r\n }\r\n };\r\n return new _appointmentAdapter.default(rawAppointment, options)\r\n };\r\n return Scheduler\r\n}(_ui2.default);\r\nScheduler.include(_data_helper.default);\r\n(0, _component_registrator.default)(\"dxScheduler\", Scheduler);\r\nvar _default = Scheduler;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.appointment_form.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.AppointmentForm = exports.APPOINTMENT_FORM_GROUP_NAMES = void 0;\r\nvar _form = _interopRequireDefault(require(\"../form\"));\r\nvar _date_serialization = _interopRequireDefault(require(\"../../core/utils/date_serialization\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _devices = _interopRequireDefault(require(\"../../core/devices\"));\r\nvar _data_source = _interopRequireDefault(require(\"../../data/data_source\"));\r\nvar _utils = _interopRequireDefault(require(\"./timezones/utils.timezones_data\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nrequire(\"./ui.scheduler.recurrence_editor\");\r\nrequire(\"../text_area\");\r\nrequire(\"../tag_box\");\r\nrequire(\"../switch\");\r\nrequire(\"../select_box\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\n\r\nfunction ownKeys(object, enumerableOnly) {\r\n var keys = Object.keys(object);\r\n if (Object.getOwnPropertySymbols) {\r\n var symbols = Object.getOwnPropertySymbols(object);\r\n enumerableOnly && (symbols = symbols.filter(function(sym) {\r\n return Object.getOwnPropertyDescriptor(object, sym).enumerable\r\n })), keys.push.apply(keys, symbols)\r\n }\r\n return keys\r\n}\r\n\r\nfunction _objectSpread(target) {\r\n for (var i = 1; i < arguments.length; i++) {\r\n var source = null != arguments[i] ? arguments[i] : {};\r\n i % 2 ? ownKeys(Object(source), !0).forEach(function(key) {\r\n _defineProperty(target, key, source[key])\r\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {\r\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key))\r\n })\r\n }\r\n return target\r\n}\r\n\r\nfunction _defineProperty(obj, key, value) {\r\n if (key in obj) {\r\n Object.defineProperty(obj, key, {\r\n value: value,\r\n enumerable: true,\r\n configurable: true,\r\n writable: true\r\n })\r\n } else {\r\n obj[key] = value\r\n }\r\n return obj\r\n}\r\nvar SCREEN_SIZE_OF_SINGLE_COLUMN = 600;\r\nvar APPOINTMENT_FORM_GROUP_NAMES = {\r\n Main: \"mainGroup\",\r\n Recurrence: \"recurrenceGroup\"\r\n};\r\nexports.APPOINTMENT_FORM_GROUP_NAMES = APPOINTMENT_FORM_GROUP_NAMES;\r\nvar SchedulerAppointmentForm = {\r\n _appointmentForm: {},\r\n _lockDateShiftFlag: false,\r\n _validateAppointmentFormDate: function(editor, value, previousValue) {\r\n var isCurrentDateCorrect = null === value || !!value;\r\n var isPreviousDateCorrect = null === previousValue || !!previousValue;\r\n if (!isCurrentDateCorrect && isPreviousDateCorrect) {\r\n editor.option(\"value\", previousValue)\r\n }\r\n },\r\n _getAllDayStartDate: function(startDate) {\r\n return new Date(new Date(startDate).setHours(0, 0, 0, 0))\r\n },\r\n _getStartDateWithStartHour: function(startDate, startDayHour) {\r\n return new Date(new Date(startDate).setHours(startDayHour))\r\n },\r\n create: function(componentCreator, $container, isReadOnly, formData) {\r\n this._appointmentForm = componentCreator($container, _form.default, {\r\n items: this._editors,\r\n readOnly: isReadOnly,\r\n showValidationSummary: true,\r\n scrollingEnabled: true,\r\n colCount: \"auto\",\r\n colCountByScreen: {\r\n lg: 2,\r\n xs: 1\r\n },\r\n formData: formData,\r\n showColonAfterLabel: false,\r\n labelLocation: \"top\",\r\n screenByWidth: function(width) {\r\n return width < SCREEN_SIZE_OF_SINGLE_COLUMN || \"desktop\" !== _devices.default.current().deviceType ? \"xs\" : \"lg\"\r\n }\r\n });\r\n return this._appointmentForm\r\n },\r\n _dateBoxValueChanged: function(args, dateExpr, isNeedCorrect) {\r\n this._validateAppointmentFormDate(args.component, args.value, args.previousValue);\r\n var value = _date_serialization.default.deserializeDate(args.value);\r\n var previousValue = _date_serialization.default.deserializeDate(args.previousValue);\r\n var dateEditor = this._appointmentForm.getEditor(dateExpr);\r\n var dateValue = _date_serialization.default.deserializeDate(dateEditor.option(\"value\"));\r\n if (!this._appointmentForm._lockDateShiftFlag && dateValue && value && isNeedCorrect(dateValue, value)) {\r\n var duration = previousValue ? dateValue.getTime() - previousValue.getTime() : 0;\r\n dateEditor.option(\"value\", new Date(value.getTime() + duration))\r\n }\r\n },\r\n _createTimezoneEditor: function(timeZoneExpr, secondTimeZoneExpr, visibleIndex, colSpan, isMainTimeZone) {\r\n var _this = this;\r\n var isShow = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : false;\r\n var noTzTitle = _message.default.format(\"dxScheduler-noTimezoneTitle\");\r\n return {\r\n dataField: timeZoneExpr,\r\n editorType: \"dxSelectBox\",\r\n visibleIndex: visibleIndex,\r\n colSpan: colSpan,\r\n label: {\r\n text: \" \"\r\n },\r\n editorOptions: {\r\n displayExpr: \"title\",\r\n valueExpr: \"id\",\r\n placeholder: noTzTitle,\r\n searchEnabled: true,\r\n onValueChanged: function(args) {\r\n var form = _this._appointmentForm;\r\n var secondTimezoneEditor = form.getEditor(secondTimeZoneExpr);\r\n if (isMainTimeZone) {\r\n secondTimezoneEditor.option(\"value\", args.value)\r\n }\r\n }\r\n },\r\n visible: isShow\r\n }\r\n },\r\n _createDateBoxEditor: function(dataExpr, colSpan, firstDayOfWeek, label, callback) {\r\n return {\r\n dataField: dataExpr,\r\n editorType: \"dxDateBox\",\r\n colSpan: colSpan,\r\n label: {\r\n text: _message.default.format(label)\r\n },\r\n validationRules: [{\r\n type: \"required\"\r\n }],\r\n editorOptions: {\r\n width: \"100%\",\r\n calendarOptions: {\r\n firstDayOfWeek: firstDayOfWeek\r\n },\r\n onValueChanged: callback\r\n }\r\n }\r\n },\r\n _createDateBoxItems: function(dataExprs, schedulerInst, allowTimeZoneEditing) {\r\n var _this2 = this;\r\n var colSpan = allowTimeZoneEditing ? 2 : 1;\r\n var firstDayOfWeek = schedulerInst.option(\"firstDayOfWeek\");\r\n return [this._createDateBoxEditor(dataExprs.startDateExpr, colSpan, firstDayOfWeek, \"dxScheduler-editorLabelStartDate\", function(args) {\r\n _this2._dateBoxValueChanged(args, dataExprs.endDateExpr, function(endValue, startValue) {\r\n return endValue < startValue\r\n })\r\n }), this._createTimezoneEditor(dataExprs.startDateTimeZoneExpr, dataExprs.endDateTimeZoneExpr, 1, colSpan, true, allowTimeZoneEditing), this._createDateBoxEditor(dataExprs.endDateExpr, colSpan, firstDayOfWeek, \"dxScheduler-editorLabelEndDate\", function(args) {\r\n _this2._dateBoxValueChanged(args, dataExprs.startDateExpr, function(startValue, endValue) {\r\n return endValue < startValue\r\n })\r\n }), this._createTimezoneEditor(dataExprs.endDateTimeZoneExpr, dataExprs.startDateTimeZoneExpr, 3, colSpan, false, allowTimeZoneEditing)]\r\n },\r\n _changeFormItemDateType: function(itemPath, isAllDay) {\r\n var itemEditorOptions = this._appointmentForm.itemOption(itemPath).editorOptions;\r\n var type = isAllDay ? \"date\" : \"datetime\";\r\n var newEditorOption = _objectSpread(_objectSpread({}, itemEditorOptions), {}, {\r\n type: type\r\n });\r\n this._appointmentForm.itemOption(itemPath, \"editorOptions\", newEditorOption)\r\n },\r\n _createMainItems: function(dataExprs, schedulerInst, triggerResize, changeSize, allowTimeZoneEditing) {\r\n var _this3 = this;\r\n return [{\r\n dataField: dataExprs.textExpr,\r\n editorType: \"dxTextBox\",\r\n colSpan: 2,\r\n label: {\r\n text: _message.default.format(\"dxScheduler-editorLabelTitle\")\r\n }\r\n }, {\r\n itemType: \"group\",\r\n colSpan: 2,\r\n colCountByScreen: {\r\n lg: 2,\r\n xs: 1\r\n },\r\n items: this._createDateBoxItems(dataExprs, schedulerInst, allowTimeZoneEditing)\r\n }, {\r\n itemType: \"group\",\r\n colCountByScreen: {\r\n lg: 3,\r\n xs: 3\r\n },\r\n colSpan: 2,\r\n items: [{\r\n dataField: dataExprs.allDayExpr,\r\n cssClass: \"dx-appointment-form-switch\",\r\n editorType: \"dxSwitch\",\r\n label: {\r\n text: _message.default.format(\"dxScheduler-allDay\"),\r\n location: \"right\"\r\n },\r\n editorOptions: {\r\n onValueChanged: function(args) {\r\n var value = args.value;\r\n var startDateEditor = _this3._appointmentForm.getEditor(dataExprs.startDateExpr);\r\n var endDateEditor = _this3._appointmentForm.getEditor(dataExprs.endDateExpr);\r\n var startDate = _date_serialization.default.deserializeDate(startDateEditor.option(\"value\"));\r\n if (!_this3._appointmentForm._lockDateShiftFlag && startDate) {\r\n if (value) {\r\n var allDayStartDate = _this3._getAllDayStartDate(startDate);\r\n startDateEditor.option(\"value\", new Date(allDayStartDate));\r\n endDateEditor.option(\"value\", new Date(allDayStartDate))\r\n } else {\r\n var startDateWithStartHour = _this3._getStartDateWithStartHour(startDate, schedulerInst.option(\"startDayHour\"));\r\n var endDate = schedulerInst._workSpace.calculateEndDate(startDateWithStartHour);\r\n startDateEditor.option(\"value\", startDateWithStartHour);\r\n endDateEditor.option(\"value\", endDate)\r\n }\r\n }\r\n var startDateItemPath = \"\".concat(APPOINTMENT_FORM_GROUP_NAMES.Main, \".\").concat(dataExprs.startDateExpr);\r\n var endDateItemPath = \"\".concat(APPOINTMENT_FORM_GROUP_NAMES.Main, \".\").concat(dataExprs.endDateExpr);\r\n _this3._changeFormItemDateType(startDateItemPath, value);\r\n _this3._changeFormItemDateType(endDateItemPath, value)\r\n }\r\n }\r\n }, {\r\n editorType: \"dxSwitch\",\r\n dataField: \"repeat\",\r\n cssClass: \"dx-appointment-form-switch\",\r\n name: \"visibilityChanged\",\r\n label: {\r\n text: _message.default.format(\"dxScheduler-editorLabelRecurrence\"),\r\n location: \"right\"\r\n },\r\n editorOptions: {\r\n onValueChanged: function(args) {\r\n var form = _this3._appointmentForm;\r\n var colSpan = args.value ? 1 : 2;\r\n form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Main, \"colSpan\", colSpan);\r\n form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence, \"colSpan\", colSpan);\r\n _this3._updateRecurrenceItemVisibility(dataExprs.recurrenceRuleExpr, args.value, form);\r\n changeSize(args.value);\r\n triggerResize()\r\n }\r\n }\r\n }]\r\n }, {\r\n itemType: \"empty\",\r\n colSpan: 2\r\n }, {\r\n dataField: dataExprs.descriptionExpr,\r\n editorType: \"dxTextArea\",\r\n colSpan: 2,\r\n label: {\r\n text: _message.default.format(\"dxScheduler-editorLabelDescription\")\r\n }\r\n }, {\r\n itemType: \"empty\",\r\n colSpan: 2\r\n }]\r\n },\r\n _updateRecurrenceItemVisibility: function(recurrenceRuleExpr, value, form) {\r\n var _form$getEditor;\r\n form.itemOption(APPOINTMENT_FORM_GROUP_NAMES.Recurrence, \"visible\", value);\r\n !value && form.updateData(recurrenceRuleExpr, \"\");\r\n null === (_form$getEditor = form.getEditor(recurrenceRuleExpr)) || void 0 === _form$getEditor ? void 0 : _form$getEditor.changeValueByVisibility(value)\r\n },\r\n prepareAppointmentFormEditors: function(dataExprs, schedulerInst, triggerResize, changeSize, appointmentData, allowTimeZoneEditing, readOnly) {\r\n var recurrenceEditorVisibility = !!this.getRecurrenceRule(appointmentData, dataExprs);\r\n changeSize(recurrenceEditorVisibility);\r\n this._editors = [{\r\n itemType: \"group\",\r\n name: APPOINTMENT_FORM_GROUP_NAMES.Main,\r\n colCountByScreen: {\r\n lg: 2,\r\n xs: 1\r\n },\r\n colSpan: recurrenceEditorVisibility ? 1 : 2,\r\n items: this._createMainItems(dataExprs, schedulerInst, triggerResize, changeSize, allowTimeZoneEditing)\r\n }, {\r\n itemType: \"group\",\r\n name: APPOINTMENT_FORM_GROUP_NAMES.Recurrence,\r\n visible: recurrenceEditorVisibility,\r\n colSpan: recurrenceEditorVisibility ? 1 : 2,\r\n items: this._createRecurrenceEditor(dataExprs, schedulerInst, readOnly)\r\n }];\r\n return this._editors\r\n },\r\n _createRecurrenceEditor: function(dataExprs, schedulerInst, readOnly) {\r\n return [{\r\n dataField: dataExprs.recurrenceRuleExpr,\r\n editorType: \"dxRecurrenceEditor\",\r\n editorOptions: {\r\n readOnly: readOnly,\r\n firstDayOfWeek: schedulerInst.option(\"firstDayOfWeek\")\r\n },\r\n label: {\r\n text: \" \",\r\n visible: false\r\n }\r\n }]\r\n },\r\n getRecurrenceRule: function(data, dataExprs) {\r\n return data[dataExprs.recurrenceRuleExpr]\r\n },\r\n concatResources: function(resources) {\r\n this._editors[0].items = this._editors[0].items.concat(resources)\r\n },\r\n setEditorsType: function(form, startDateExpr, endDateExpr, allDay) {\r\n var startDateItemPath = \"\".concat(APPOINTMENT_FORM_GROUP_NAMES.Main, \".\").concat(startDateExpr);\r\n var endDateItemPath = \"\".concat(APPOINTMENT_FORM_GROUP_NAMES.Recurrence, \".\").concat(endDateExpr);\r\n var startDateFormItem = form.itemOption(startDateItemPath);\r\n var endDateFormItem = form.itemOption(endDateItemPath);\r\n if (startDateFormItem && endDateFormItem) {\r\n var startDateEditorOptions = startDateFormItem.editorOptions;\r\n var endDateEditorOptions = endDateFormItem.editorOptions;\r\n startDateEditorOptions.type = endDateEditorOptions.type = allDay ? \"date\" : \"datetime\";\r\n form.itemOption(startDateItemPath, \"editorOptions\", startDateEditorOptions);\r\n form.itemOption(endDateItemPath, \"editorOptions\", endDateEditorOptions)\r\n }\r\n },\r\n updateTimeZoneEditorDataSource: function(date, expression) {\r\n var timeZoneDataSource = new _data_source.default({\r\n store: _utils.default.getDisplayedTimeZones(date),\r\n paginate: true,\r\n pageSize: 10\r\n });\r\n var options = {\r\n dataSource: timeZoneDataSource\r\n };\r\n this.setEditorOptions(expression, \"Main\", options)\r\n },\r\n updateRecurrenceEditorStartDate: function(date, expression) {\r\n var options = {\r\n startDate: date\r\n };\r\n this.setEditorOptions(expression, \"Recurrence\", options)\r\n },\r\n setEditorOptions: function(name, groupName, options) {\r\n var editorPath = \"\".concat(APPOINTMENT_FORM_GROUP_NAMES.groupName, \".\").concat(name);\r\n var editor = this._appointmentForm.itemOption(editorPath);\r\n editor && this._appointmentForm.itemOption(editorPath, \"editorOptions\", (0, _extend.extend)({}, editor.editorOptions, options))\r\n },\r\n updateFormData: function(appointmentForm, formData, dataExprs) {\r\n appointmentForm._lockDateShiftFlag = true;\r\n var startDate = new Date(formData[dataExprs.startDateExpr]);\r\n var endDate = new Date(formData[dataExprs.endDateExpr]);\r\n this.updateTimeZoneEditorDataSource(startDate, dataExprs.startDateTimeZoneExpr);\r\n this.updateTimeZoneEditorDataSource(endDate, dataExprs.endDateTimeZoneExpr);\r\n this.updateRecurrenceEditorStartDate(startDate, dataExprs.recurrenceRuleExpr);\r\n appointmentForm.option(\"formData\", formData);\r\n appointmentForm._lockDateShiftFlag = false\r\n }\r\n};\r\nexports.AppointmentForm = SchedulerAppointmentForm;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.appointments.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _dom_adapter = _interopRequireDefault(require(\"../../core/dom_adapter\"));\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _element_data = require(\"../../core/element_data\");\r\nvar _translator = require(\"../../animation/translator\");\r\nvar _date = _interopRequireDefault(require(\"../../core/utils/date\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _object = require(\"../../core/utils/object\");\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _element = require(\"../../core/element\");\r\nvar _recurrence = require(\"./recurrence\");\r\nvar _component_registrator = _interopRequireDefault(require(\"../../core/component_registrator\"));\r\nvar _uiScheduler = _interopRequireDefault(require(\"./ui.scheduler.publisher_mixin\"));\r\nvar _uiScheduler2 = _interopRequireDefault(require(\"./ui.scheduler.appointment\"));\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _double_click = require(\"../../events/double_click\");\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _uiCollection_widget = _interopRequireDefault(require(\"../collection/ui.collection_widget.edit\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _utilsTimeZone = _interopRequireDefault(require(\"./utils.timeZone.js\"));\r\nvar _constants = require(\"./constants\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar COMPONENT_CLASS = \"dx-scheduler-scrollable-appointments\";\r\nvar APPOINTMENT_ITEM_CLASS = \"dx-scheduler-appointment\";\r\nvar APPOINTMENT_TITLE_CLASS = \"dx-scheduler-appointment-title\";\r\nvar APPOINTMENT_CONTENT_DETAILS_CLASS = \"dx-scheduler-appointment-content-details\";\r\nvar APPOINTMENT_DATE_CLASS = \"dx-scheduler-appointment-content-date\";\r\nvar RECURRING_ICON_CLASS = \"dx-scheduler-appointment-recurrence-icon\";\r\nvar ALL_DAY_CONTENT_CLASS = \"dx-scheduler-appointment-content-allday\";\r\nvar DBLCLICK_EVENT_NAME = (0, _index.addNamespace)(_double_click.name, \"dxSchedulerAppointment\");\r\nvar toMs = _date.default.dateToMilliseconds;\r\nvar SchedulerAppointments = _uiCollection_widget.default.inherit({\r\n ctor: function(element, options) {\r\n this.callBase(element, options)\r\n },\r\n _supportedKeys: function() {\r\n var parent = this.callBase();\r\n var tabHandler = function(e) {\r\n var appointments = this._getAccessAppointments();\r\n var focusedAppointment = appointments.filter(\".dx-state-focused\");\r\n var index = focusedAppointment.data(_constants.APPOINTMENT_SETTINGS_KEY).sortedIndex;\r\n var lastIndex = appointments.length - 1;\r\n if (index > 0 && e.shiftKey || index < lastIndex && !e.shiftKey) {\r\n e.preventDefault();\r\n e.shiftKey ? index-- : index++;\r\n var $nextAppointment = this._getAppointmentByIndex(index);\r\n this._resetTabIndex($nextAppointment);\r\n _events_engine.default.trigger($nextAppointment, \"focus\")\r\n }\r\n };\r\n return (0, _extend.extend)(parent, {\r\n escape: function() {\r\n this.moveAppointmentBack();\r\n this._escPressed = true\r\n }.bind(this),\r\n del: function(e) {\r\n if (this.option(\"allowDelete\")) {\r\n e.preventDefault();\r\n var data = this._getItemData(e.target);\r\n this.notifyObserver(\"onDeleteButtonPress\", {\r\n data: data,\r\n target: e.target\r\n })\r\n }\r\n }.bind(this),\r\n tab: tabHandler\r\n })\r\n },\r\n _getAppointmentByIndex: function(sortedIndex) {\r\n var appointments = this._getAccessAppointments();\r\n return appointments.filter(function(_, $item) {\r\n return (0, _element_data.data)($item, _constants.APPOINTMENT_SETTINGS_KEY).sortedIndex === sortedIndex\r\n }).eq(0)\r\n },\r\n _getAccessAppointments: function() {\r\n return this._itemElements().filter(\":visible\").not(\".dx-state-disabled\")\r\n },\r\n _resetTabIndex: function($appointment) {\r\n this._focusTarget().attr(\"tabIndex\", -1);\r\n $appointment.attr(\"tabIndex\", this.option(\"tabIndex\"))\r\n },\r\n _moveFocus: _common.noop,\r\n _focusTarget: function() {\r\n return this._itemElements()\r\n },\r\n _renderFocusTarget: function() {\r\n var $appointment = this._getAppointmentByIndex(0);\r\n this._resetTabIndex($appointment)\r\n },\r\n _focusInHandler: function(e) {\r\n this.callBase.apply(this, arguments);\r\n this._$currentAppointment = (0, _renderer.default)(e.target);\r\n this.option(\"focusedElement\", (0, _element.getPublicElement)((0, _renderer.default)(e.target)))\r\n },\r\n _focusOutHandler: function() {\r\n var $appointment = this._getAppointmentByIndex(0);\r\n this.option(\"focusedElement\", (0, _element.getPublicElement)($appointment));\r\n this.callBase.apply(this, arguments)\r\n },\r\n _eventBindingTarget: function() {\r\n return this._itemContainer()\r\n },\r\n _getDefaultOptions: function() {\r\n return (0, _extend.extend)(this.callBase(), {\r\n noDataText: null,\r\n activeStateEnabled: true,\r\n hoverStateEnabled: true,\r\n tabIndex: 0,\r\n fixedContainer: null,\r\n allDayContainer: null,\r\n allowDrag: true,\r\n allowResize: true,\r\n allowAllDayResize: true,\r\n onAppointmentDblClick: null,\r\n _collectorOffset: 0\r\n })\r\n },\r\n _optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"items\":\r\n this._cleanFocusState();\r\n this._clearDropDownItems();\r\n this._clearDropDownItemsElements();\r\n this._repaintAppointments(args.value);\r\n this._renderDropDownAppointments();\r\n this._attachAppointmentsEvents();\r\n break;\r\n case \"fixedContainer\":\r\n case \"allDayContainer\":\r\n case \"onAppointmentDblClick\":\r\n break;\r\n case \"allowDrag\":\r\n case \"allowResize\":\r\n case \"allowAllDayResize\":\r\n this._invalidate();\r\n break;\r\n case \"focusedElement\":\r\n this._resetTabIndex((0, _renderer.default)(args.value));\r\n this.callBase(args);\r\n break;\r\n case \"allowDelete\":\r\n break;\r\n case \"focusStateEnabled\":\r\n this._clearDropDownItemsElements();\r\n this._renderDropDownAppointments();\r\n this.callBase(args);\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n _isAllDayAppointment: function(appointment) {\r\n return appointment.settings.length && appointment.settings[0].allDay || false\r\n },\r\n _isRepaintAppointment: function(appointment) {\r\n return !(0, _type.isDefined)(appointment.needRepaint) || true === appointment.needRepaint\r\n },\r\n _isRepaintAll: function(appointments) {\r\n if (this.invoke(\"isVirtualScrolling\")) {\r\n return true\r\n }\r\n if (this.invoke(\"isCurrentViewAgenda\")) {\r\n return true\r\n }\r\n for (var i = 0; i < appointments.length; i++) {\r\n var appointment = appointments[i];\r\n if (!this._isRepaintAppointment(appointment)) {\r\n return false\r\n }\r\n }\r\n return true\r\n },\r\n _applyFragment: function(fragment, allDay) {\r\n if (fragment.children().length > 0) {\r\n this._getAppointmentContainer(allDay).append(fragment)\r\n }\r\n },\r\n _onEachAppointment: function(appointment, index, container, isRepaintAll) {\r\n var _this = this;\r\n var repaintAppointment = function() {\r\n appointment.needRepaint = false;\r\n _this._clearItem(appointment);\r\n _this._renderItem(index, appointment, container)\r\n };\r\n if (true === (null === appointment || void 0 === appointment ? void 0 : appointment.needRemove)) {\r\n this._clearItem(appointment)\r\n } else {\r\n if (isRepaintAll || this._isRepaintAppointment(appointment)) {\r\n repaintAppointment()\r\n }\r\n }\r\n },\r\n _repaintAppointments: function(appointments) {\r\n var _this2 = this;\r\n this._renderByFragments(function($commonFragment, $allDayFragment) {\r\n var isRepaintAll = _this2._isRepaintAll(appointments);\r\n if (isRepaintAll) {\r\n _this2._getAppointmentContainer(true).html(\"\");\r\n _this2._getAppointmentContainer(false).html(\"\")\r\n }!appointments.length && _this2._cleanItemContainer();\r\n appointments.forEach(function(appointment, index) {\r\n var container = _this2._isAllDayAppointment(appointment) ? $allDayFragment : $commonFragment;\r\n _this2._onEachAppointment(appointment, index, container, isRepaintAll)\r\n })\r\n })\r\n },\r\n _renderByFragments: function(renderFunction) {\r\n var isVirtualScrolling = this.invoke(\"isVirtualScrolling\");\r\n if (isVirtualScrolling) {\r\n var $commonFragment = (0, _renderer.default)(_dom_adapter.default.createDocumentFragment());\r\n var $allDayFragment = (0, _renderer.default)(_dom_adapter.default.createDocumentFragment());\r\n renderFunction($commonFragment, $allDayFragment);\r\n this._applyFragment($commonFragment, false);\r\n this._applyFragment($allDayFragment, true)\r\n } else {\r\n renderFunction(this._getAppointmentContainer(false), this._getAppointmentContainer(true))\r\n }\r\n },\r\n _attachAppointmentsEvents: function() {\r\n this._attachClickEvent();\r\n this._attachHoldEvent();\r\n this._attachContextMenuEvent();\r\n this._attachAppointmentDblClick();\r\n this._renderFocusState();\r\n this._attachFeedbackEvents();\r\n this._attachHoverEvents()\r\n },\r\n _clearItem: function(item) {\r\n var $items = this._findItemElementByItem(item.itemData);\r\n if (!$items.length) {\r\n return\r\n }(0, _iterator.each)($items, function(_, $item) {\r\n $item.detach();\r\n $item.remove()\r\n })\r\n },\r\n _clearDropDownItems: function() {\r\n this._virtualAppointments = {}\r\n },\r\n _clearDropDownItemsElements: function() {\r\n this.invoke(\"clearCompactAppointments\")\r\n },\r\n _findItemElementByItem: function(item) {\r\n var result = [];\r\n var that = this;\r\n this.itemElements().each(function() {\r\n var $item = (0, _renderer.default)(this);\r\n if ($item.data(that._itemDataKey()) === item) {\r\n result.push($item)\r\n }\r\n });\r\n return result\r\n },\r\n _itemClass: function() {\r\n return APPOINTMENT_ITEM_CLASS\r\n },\r\n _itemContainer: function() {\r\n var $container = this.callBase();\r\n var $result = $container;\r\n var $allDayContainer = this.option(\"allDayContainer\");\r\n if ($allDayContainer) {\r\n $result = $container.add($allDayContainer)\r\n }\r\n return $result\r\n },\r\n _cleanItemContainer: function() {\r\n this.callBase();\r\n var $allDayContainer = this.option(\"allDayContainer\");\r\n if ($allDayContainer) {\r\n $allDayContainer.empty()\r\n }\r\n this._virtualAppointments = {}\r\n },\r\n _clean: function() {\r\n this.callBase();\r\n delete this._$currentAppointment;\r\n delete this._initialSize;\r\n delete this._initialCoordinates\r\n },\r\n _init: function() {\r\n this.callBase();\r\n this.$element().addClass(COMPONENT_CLASS);\r\n this._preventSingleAppointmentClick = false\r\n },\r\n _renderAppointmentTemplate: function($container, data, model) {\r\n var formatText = this.invoke(\"getTextAndFormatDate\", model.appointmentData, this._currentAppointmentSettings.agendaSettings || model.targetedAppointmentData, \"TIME\");\r\n (0, _renderer.default)(\"
\").text(formatText.text).addClass(APPOINTMENT_TITLE_CLASS).appendTo($container);\r\n if ((0, _type.isPlainObject)(data)) {\r\n if (data.html) {\r\n $container.html(data.html)\r\n }\r\n }\r\n var $contentDetails = (0, _renderer.default)(\"
\").addClass(APPOINTMENT_CONTENT_DETAILS_CLASS);\r\n (0, _renderer.default)(\"
\").addClass(APPOINTMENT_DATE_CLASS).text(formatText.formatDate).appendTo($contentDetails);\r\n $contentDetails.appendTo($container);\r\n if (data.recurrenceRule) {\r\n (0, _renderer.default)(\"\").addClass(RECURRING_ICON_CLASS + \" dx-icon-repeat\").appendTo($container)\r\n }\r\n if (data.allDay) {\r\n (0, _renderer.default)(\"
\").text(\" \" + _message.default.format(\"dxScheduler-allDay\") + \": \").addClass(ALL_DAY_CONTENT_CLASS).prependTo($contentDetails)\r\n }\r\n },\r\n _executeItemRenderAction: function(index, itemData, itemElement) {\r\n var action = this._getItemRenderAction();\r\n if (action) {\r\n action(this.invoke(\"mapAppointmentFields\", {\r\n itemData: itemData,\r\n itemElement: itemElement\r\n }))\r\n }\r\n delete this._currentAppointmentSettings\r\n },\r\n _itemClickHandler: function(e) {\r\n this.callBase(e, {}, {\r\n afterExecute: function(e) {\r\n this._processItemClick(e.args[0].event)\r\n }.bind(this)\r\n })\r\n },\r\n _processItemClick: function(e) {\r\n var $target = (0, _renderer.default)(e.currentTarget);\r\n var data = this._getItemData($target);\r\n if (\"keydown\" === e.type || (0, _index.isFakeClickEvent)(e)) {\r\n this.notifyObserver(\"showEditAppointmentPopup\", {\r\n data: data,\r\n target: $target\r\n });\r\n return\r\n }\r\n this._appointmentClickTimeout = setTimeout(function() {\r\n if (!this._preventSingleAppointmentClick && _dom_adapter.default.getBody().contains($target[0])) {\r\n this.notifyObserver(\"showAppointmentTooltip\", {\r\n data: data,\r\n target: $target\r\n })\r\n }\r\n this._preventSingleAppointmentClick = false\r\n }.bind(this), 300)\r\n },\r\n _extendActionArgs: function() {\r\n var args = this.callBase.apply(this, arguments);\r\n return this.invoke(\"mapAppointmentFields\", args)\r\n },\r\n _render: function() {\r\n this.callBase.apply(this, arguments);\r\n this._attachAppointmentDblClick()\r\n },\r\n _attachAppointmentDblClick: function() {\r\n var that = this;\r\n var itemSelector = that._itemSelector();\r\n var itemContainer = this._itemContainer();\r\n _events_engine.default.off(itemContainer, DBLCLICK_EVENT_NAME, itemSelector);\r\n _events_engine.default.on(itemContainer, DBLCLICK_EVENT_NAME, itemSelector, function(e) {\r\n that._itemDXEventHandler(e, \"onAppointmentDblClick\", {}, {\r\n afterExecute: function(e) {\r\n that._dblClickHandler(e.args[0].event)\r\n }\r\n })\r\n })\r\n },\r\n _dblClickHandler: function(e) {\r\n var $targetAppointment = (0, _renderer.default)(e.currentTarget);\r\n var appointmentData = this._getItemData($targetAppointment);\r\n clearTimeout(this._appointmentClickTimeout);\r\n this._preventSingleAppointmentClick = true;\r\n this.notifyObserver(\"showEditAppointmentPopup\", {\r\n data: appointmentData,\r\n target: $targetAppointment\r\n })\r\n },\r\n _renderItem: function(index, item, container) {\r\n var itemData = item.itemData;\r\n var $items = [];\r\n for (var i = 0; i < item.settings.length; i++) {\r\n var setting = item.settings[i];\r\n this._currentAppointmentSettings = setting;\r\n var $item = this.callBase(index, itemData, container);\r\n $item.data(_constants.APPOINTMENT_SETTINGS_KEY, setting);\r\n $items.push($item)\r\n }\r\n return $items\r\n },\r\n _getItemContent: function($itemFrame) {\r\n $itemFrame.data(_constants.APPOINTMENT_SETTINGS_KEY, this._currentAppointmentSettings);\r\n var $itemContent = this.callBase($itemFrame);\r\n return $itemContent\r\n },\r\n _createItemByTemplate: function(itemTemplate, renderArgs) {\r\n var itemData = renderArgs.itemData,\r\n container = renderArgs.container,\r\n index = renderArgs.index;\r\n return itemTemplate.render({\r\n model: {\r\n appointmentData: itemData,\r\n targetedAppointmentData: this.invoke(\"getTargetedAppointmentData\", itemData, (0, _renderer.default)(container).parent())\r\n },\r\n container: container,\r\n index: index\r\n })\r\n },\r\n _getAppointmentContainer: function(allDay) {\r\n var $allDayContainer = this.option(\"allDayContainer\");\r\n var $container = this.itemsContainer().not($allDayContainer);\r\n if (allDay && $allDayContainer) {\r\n $container = $allDayContainer\r\n }\r\n return $container\r\n },\r\n _postprocessRenderItem: function(args) {\r\n this._renderAppointment(args.itemElement, this._currentAppointmentSettings)\r\n },\r\n _renderAppointment: function($appointment, settings) {\r\n $appointment.data(_constants.APPOINTMENT_SETTINGS_KEY, settings);\r\n this._applyResourceDataAttr($appointment);\r\n var data = this._getItemData($appointment);\r\n var geometry = this.invoke(\"getAppointmentGeometry\", settings);\r\n var allowResize = this.option(\"allowResize\") && (!(0, _type.isDefined)(settings.skipResizing) || (0, _type.isString)(settings.skipResizing));\r\n var allowDrag = this.option(\"allowDrag\");\r\n var allDay = settings.allDay;\r\n this.invoke(\"setCellDataCacheAlias\", this._currentAppointmentSettings, geometry);\r\n var deferredColor = this._getAppointmentColor($appointment, settings.groupIndex);\r\n if (settings.virtual) {\r\n this._processVirtualAppointment(settings, $appointment, data, deferredColor)\r\n } else {\r\n var info = settings.info;\r\n this._createComponent($appointment, _uiScheduler2.default, {\r\n observer: this.option(\"observer\"),\r\n data: data,\r\n geometry: geometry,\r\n direction: settings.direction || \"vertical\",\r\n allowResize: allowResize,\r\n allowDrag: allowDrag,\r\n allDay: allDay,\r\n reduced: settings.appointmentReduced,\r\n isCompact: settings.isCompact,\r\n startDate: new Date(null === info || void 0 === info ? void 0 : info.appointment.startDate),\r\n cellWidth: this.invoke(\"getCellWidth\"),\r\n cellHeight: this.invoke(\"getCellHeight\"),\r\n resizableConfig: this._resizableConfig(data, settings)\r\n });\r\n deferredColor.done(function(color) {\r\n if (color) {\r\n $appointment.css(\"backgroundColor\", color)\r\n }\r\n })\r\n }\r\n },\r\n _applyResourceDataAttr: function($appointment) {\r\n var resources = this.invoke(\"getResourcesFromItem\", this._getItemData($appointment));\r\n if (resources) {\r\n (0, _iterator.each)(resources, function(name, values) {\r\n var attr = \"data-\" + (0, _common.normalizeKey)(name.toLowerCase()) + \"-\";\r\n for (var i = 0; i < values.length; i++) {\r\n $appointment.attr(attr + (0, _common.normalizeKey)(values[i]), true)\r\n }\r\n })\r\n }\r\n },\r\n _resizableConfig: function(appointmentData, itemSetting) {\r\n return {\r\n area: this._calculateResizableArea(itemSetting, appointmentData),\r\n onResizeStart: function(e) {\r\n this._$currentAppointment = (0, _renderer.default)(e.element);\r\n if (this.invoke(\"needRecalculateResizableArea\")) {\r\n var updatedArea = this._calculateResizableArea(this._$currentAppointment.data(_constants.APPOINTMENT_SETTINGS_KEY), this._$currentAppointment.data(\"dxItemData\"));\r\n e.component.option(\"area\", updatedArea);\r\n e.component._renderDragOffsets(e.event)\r\n }\r\n this._initialSize = {\r\n width: e.width,\r\n height: e.height\r\n };\r\n this._initialCoordinates = (0, _translator.locate)(this._$currentAppointment)\r\n }.bind(this),\r\n onResizeEnd: function(e) {\r\n if (this._escPressed) {\r\n e.event.cancel = true;\r\n return\r\n }\r\n this._resizeEndHandler(e)\r\n }.bind(this)\r\n }\r\n },\r\n _calculateResizableArea: function(itemSetting, appointmentData) {\r\n var area = this.$element().closest(\".dx-scrollable-content\");\r\n return this.invoke(\"getResizableAppointmentArea\", {\r\n coordinates: {\r\n left: itemSetting.left,\r\n top: 0,\r\n groupIndex: itemSetting.groupIndex\r\n },\r\n allDay: itemSetting.allDay\r\n }) || area\r\n },\r\n _resizeEndHandler: function(e) {\r\n var scheduler = this.option(\"observer\");\r\n var $element = (0, _renderer.default)(e.element);\r\n var _$element$data = $element.data(\"dxAppointmentSettings\"),\r\n info = _$element$data.info;\r\n var sourceAppointment = this._getItemData($element);\r\n var modifiedAppointmentAdapter = scheduler.createAppointmentAdapter(sourceAppointment).clone();\r\n var startDate = this._getEndResizeAppointmentStartDate(e, sourceAppointment, info.appointment);\r\n var endDate = info.appointment.endDate;\r\n var dateRange = this._getDateRange(e, startDate, endDate);\r\n modifiedAppointmentAdapter.startDate = new Date(dateRange[0]);\r\n modifiedAppointmentAdapter.endDate = new Date(dateRange[1]);\r\n this.notifyObserver(\"updateAppointmentAfterResize\", {\r\n target: sourceAppointment,\r\n data: modifiedAppointmentAdapter.clone({\r\n pathTimeZone: \"fromGrid\"\r\n }).source(),\r\n $appointment: $element\r\n })\r\n },\r\n _getEndResizeAppointmentStartDate: function(e, rawAppointment, appointmentInfo) {\r\n var scheduler = this.option(\"observer\");\r\n var appointmentAdapter = scheduler.createAppointmentAdapter(rawAppointment);\r\n var startDate = appointmentInfo.startDate;\r\n var recurrenceProcessor = (0, _recurrence.getRecurrenceProcessor)();\r\n var recurrenceRule = appointmentAdapter.recurrenceRule,\r\n startDateTimeZone = appointmentAdapter.startDateTimeZone;\r\n var isAllDay = this.invoke(\"isAllDay\", rawAppointment);\r\n var isRecurrent = recurrenceProcessor.isValidRecurrenceRule(recurrenceRule);\r\n if (!e.handles.top && !isRecurrent && !isAllDay) {\r\n startDate = scheduler.timeZoneCalculator.createDate(appointmentAdapter.startDate, {\r\n appointmentTimeZone: startDateTimeZone,\r\n path: \"toGrid\"\r\n })\r\n }\r\n return startDate\r\n },\r\n _getDateRange: function(e, startDate, endDate) {\r\n var itemData = this._getItemData(e.element);\r\n var deltaTime = this.invoke(\"getDeltaTime\", e, this._initialSize, itemData);\r\n var renderingStrategyDirection = this.invoke(\"getRenderingStrategyDirection\");\r\n var isStartDateChanged = false;\r\n var isAllDay = this.invoke(\"isAllDay\", itemData);\r\n var needCorrectDates = this.invoke(\"needCorrectAppointmentDates\") && !isAllDay;\r\n var startTime;\r\n var endTime;\r\n if (\"vertical\" !== renderingStrategyDirection || isAllDay) {\r\n isStartDateChanged = this.option(\"rtlEnabled\") ? e.handles.right : e.handles.left\r\n } else {\r\n isStartDateChanged = e.handles.top\r\n }\r\n if (isStartDateChanged) {\r\n startTime = needCorrectDates ? this._correctStartDateByDelta(startDate, deltaTime) : startDate.getTime() - deltaTime;\r\n startTime += _utilsTimeZone.default.getTimezoneOffsetChangeInMs(startDate, endDate, startTime, endDate);\r\n endTime = endDate.getTime()\r\n } else {\r\n startTime = startDate.getTime();\r\n endTime = needCorrectDates ? this._correctEndDateByDelta(endDate, deltaTime) : endDate.getTime() + deltaTime;\r\n endTime -= _utilsTimeZone.default.getTimezoneOffsetChangeInMs(startDate, endDate, startDate, endTime)\r\n }\r\n return [startTime, endTime]\r\n },\r\n _correctEndDateByDelta: function(endDate, deltaTime) {\r\n var endDayHour = this.invoke(\"getEndDayHour\");\r\n var startDayHour = this.invoke(\"getStartDayHour\");\r\n var result = endDate.getTime() + deltaTime;\r\n var visibleDayDuration = (endDayHour - startDayHour) * toMs(\"hour\");\r\n var daysCount = deltaTime > 0 ? Math.ceil(deltaTime / visibleDayDuration) : Math.floor(deltaTime / visibleDayDuration);\r\n var maxDate = new Date(endDate);\r\n var minDate = new Date(endDate);\r\n minDate.setHours(startDayHour, 0, 0, 0);\r\n maxDate.setHours(endDayHour, 0, 0, 0);\r\n if (result > maxDate.getTime() || result <= minDate.getTime()) {\r\n var tailOfCurrentDay = maxDate.getTime() - endDate.getTime();\r\n var tailOfPrevDays = deltaTime - tailOfCurrentDay;\r\n var lastDay = new Date(endDate.setDate(endDate.getDate() + daysCount));\r\n lastDay.setHours(startDayHour, 0, 0, 0);\r\n result = lastDay.getTime() + tailOfPrevDays - visibleDayDuration * (daysCount - 1)\r\n }\r\n return result\r\n },\r\n _correctStartDateByDelta: function(startDate, deltaTime) {\r\n var endDayHour = this.invoke(\"getEndDayHour\");\r\n var startDayHour = this.invoke(\"getStartDayHour\");\r\n var result = startDate.getTime() - deltaTime;\r\n var visibleDayDuration = (endDayHour - startDayHour) * toMs(\"hour\");\r\n var daysCount = deltaTime > 0 ? Math.ceil(deltaTime / visibleDayDuration) : Math.floor(deltaTime / visibleDayDuration);\r\n var maxDate = new Date(startDate);\r\n var minDate = new Date(startDate);\r\n minDate.setHours(startDayHour, 0, 0, 0);\r\n maxDate.setHours(endDayHour, 0, 0, 0);\r\n if (result < minDate.getTime() || result >= maxDate.getTime()) {\r\n var tailOfCurrentDay = startDate.getTime() - minDate.getTime();\r\n var tailOfPrevDays = deltaTime - tailOfCurrentDay;\r\n var firstDay = new Date(startDate.setDate(startDate.getDate() - daysCount));\r\n firstDay.setHours(endDayHour, 0, 0, 0);\r\n result = firstDay.getTime() - tailOfPrevDays + visibleDayDuration * (daysCount - 1)\r\n }\r\n return result\r\n },\r\n _tryGetAppointmentColor: function(appointment) {\r\n var settings = (0, _renderer.default)(appointment).data(_constants.APPOINTMENT_SETTINGS_KEY);\r\n if (!settings) {\r\n return\r\n }\r\n return this._getAppointmentColor(appointment, settings.groupIndex)\r\n },\r\n _getAppointmentColor: function($appointment, groupIndex) {\r\n var res = new _deferred.Deferred;\r\n var response = this.invoke(\"getAppointmentColor\", {\r\n itemData: this._getItemData($appointment),\r\n groupIndex: groupIndex\r\n });\r\n response.done(function(color) {\r\n return res.resolve(color)\r\n });\r\n return res.promise()\r\n },\r\n _calculateBoundOffset: function() {\r\n return this.invoke(\"getBoundOffset\")\r\n },\r\n _virtualAppointments: {},\r\n _processVirtualAppointment: function(appointmentSetting, $appointment, appointmentData, color) {\r\n var virtualAppointment = appointmentSetting.virtual;\r\n var virtualGroupIndex = virtualAppointment.index;\r\n if (!(0, _type.isDefined)(this._virtualAppointments[virtualGroupIndex])) {\r\n this._virtualAppointments[virtualGroupIndex] = {\r\n coordinates: {\r\n top: virtualAppointment.top,\r\n left: virtualAppointment.left\r\n },\r\n items: {\r\n data: [],\r\n colors: [],\r\n settings: []\r\n },\r\n isAllDay: virtualAppointment.isAllDay ? true : false,\r\n buttonColor: color\r\n }\r\n }\r\n appointmentSetting.targetedAppointmentData = this.invoke(\"getTargetedAppointmentData\", appointmentData, $appointment);\r\n this._virtualAppointments[virtualGroupIndex].items.settings.push(appointmentSetting);\r\n this._virtualAppointments[virtualGroupIndex].items.data.push(appointmentData);\r\n this._virtualAppointments[virtualGroupIndex].items.colors.push(color);\r\n $appointment.remove()\r\n },\r\n _renderContentImpl: function() {\r\n this.callBase();\r\n this._renderDropDownAppointments()\r\n },\r\n _renderDropDownAppointments: function() {\r\n var _this3 = this;\r\n this._renderByFragments(function($commonFragment, $allDayFragment) {\r\n (0, _iterator.each)(_this3._virtualAppointments, function(groupIndex) {\r\n var virtualGroup = this._virtualAppointments[groupIndex];\r\n var virtualItems = virtualGroup.items;\r\n var virtualCoordinates = virtualGroup.coordinates;\r\n var $fragment = virtualGroup.isAllDay ? $allDayFragment : $commonFragment;\r\n var left = virtualCoordinates.left;\r\n var buttonWidth = this.invoke(\"getDropDownAppointmentWidth\", virtualGroup.isAllDay);\r\n var buttonHeight = this.invoke(\"getDropDownAppointmentHeight\");\r\n var rtlOffset = this.option(\"rtlEnabled\") ? buttonWidth : 0;\r\n this.notifyObserver(\"renderCompactAppointments\", {\r\n $container: $fragment,\r\n coordinates: {\r\n top: virtualCoordinates.top,\r\n left: left + rtlOffset\r\n },\r\n items: virtualItems,\r\n buttonColor: virtualGroup.buttonColor,\r\n width: buttonWidth - this.option(\"_collectorOffset\"),\r\n height: buttonHeight,\r\n onAppointmentClick: this.option(\"onItemClick\"),\r\n allowDrag: this.option(\"allowDrag\"),\r\n cellWidth: this.invoke(\"getCellWidth\"),\r\n isCompact: this.invoke(\"isAdaptive\") || this._isGroupCompact(virtualGroup),\r\n applyOffset: !virtualGroup.isAllDay && this.invoke(\"isApplyCompactAppointmentOffset\")\r\n })\r\n }.bind(_this3))\r\n })\r\n },\r\n _isGroupCompact: function(virtualGroup) {\r\n return !virtualGroup.isAllDay && this.invoke(\"supportCompactDropDownAppointments\")\r\n },\r\n _sortAppointmentsByStartDate: function(appointments) {\r\n appointments.sort(function(a, b) {\r\n var result = 0;\r\n var firstDate = new Date(this.invoke(\"getField\", \"startDate\", a.settings || a)).getTime();\r\n var secondDate = new Date(this.invoke(\"getField\", \"startDate\", b.settings || b)).getTime();\r\n if (firstDate < secondDate) {\r\n result = -1\r\n }\r\n if (firstDate > secondDate) {\r\n result = 1\r\n }\r\n return result\r\n }.bind(this))\r\n },\r\n _processRecurrenceAppointment: function(appointment, index, skipLongAppointments) {\r\n var recurrenceRule = this.invoke(\"getField\", \"recurrenceRule\", appointment);\r\n var result = {\r\n parts: [],\r\n indexes: []\r\n };\r\n if (recurrenceRule) {\r\n var dates = appointment.settings || appointment;\r\n var startDate = new Date(this.invoke(\"getField\", \"startDate\", dates));\r\n var endDate = new Date(this.invoke(\"getField\", \"endDate\", dates));\r\n var appointmentDuration = endDate.getTime() - startDate.getTime();\r\n var recurrenceException = this.invoke(\"getField\", \"recurrenceException\", appointment);\r\n var startViewDate = this.invoke(\"getStartViewDate\");\r\n var endViewDate = this.invoke(\"getEndViewDate\");\r\n var recurrentDates = (0, _recurrence.getRecurrenceProcessor)().generateDates({\r\n rule: recurrenceRule,\r\n exception: recurrenceException,\r\n start: startDate,\r\n end: endDate,\r\n min: startViewDate,\r\n max: endViewDate\r\n });\r\n var recurrentDateCount = appointment.settings ? 1 : recurrentDates.length;\r\n for (var i = 0; i < recurrentDateCount; i++) {\r\n var appointmentPart = (0, _extend.extend)({}, appointment, true);\r\n if (recurrentDates[i]) {\r\n var appointmentSettings = this._applyStartDateToObj(recurrentDates[i], {});\r\n this._applyEndDateToObj(new Date(recurrentDates[i].getTime() + appointmentDuration), appointmentSettings);\r\n appointmentPart.settings = appointmentSettings\r\n } else {\r\n appointmentPart.settings = dates\r\n }\r\n result.parts.push(appointmentPart);\r\n if (!skipLongAppointments) {\r\n this._processLongAppointment(appointmentPart, result)\r\n }\r\n }\r\n result.indexes.push(index)\r\n }\r\n return result\r\n },\r\n _processLongAppointment: function(appointment, result) {\r\n var parts = this.splitAppointmentByDay(appointment);\r\n var partCount = parts.length;\r\n var endViewDate = this.invoke(\"getEndViewDate\").getTime();\r\n var startViewDate = this.invoke(\"getStartViewDate\").getTime();\r\n var timeZoneCalculator = this.invoke(\"getTimeZoneCalculator\");\r\n result = result || {\r\n parts: []\r\n };\r\n if (partCount > 1) {\r\n (0, _extend.extend)(appointment, parts[0]);\r\n for (var i = 1; i < partCount; i++) {\r\n var startDate = this.invoke(\"getField\", \"startDate\", parts[i].settings).getTime();\r\n startDate = timeZoneCalculator.createDate(startDate, {\r\n path: \"toGrid\"\r\n });\r\n if (startDate < endViewDate && startDate > startViewDate) {\r\n result.parts.push(parts[i])\r\n }\r\n }\r\n }\r\n return result\r\n },\r\n _reduceRecurrenceAppointments: function(recurrenceIndexes, appointments) {\r\n (0, _iterator.each)(recurrenceIndexes, function(i, index) {\r\n appointments.splice(index - i, 1)\r\n })\r\n },\r\n _combineAppointments: function(appointments, additionalAppointments) {\r\n if (additionalAppointments.length) {\r\n (0, _array.merge)(appointments, additionalAppointments)\r\n }\r\n this._sortAppointmentsByStartDate(appointments)\r\n },\r\n _applyStartDateToObj: function(startDate, obj) {\r\n this.invoke(\"setField\", \"startDate\", obj, startDate);\r\n return obj\r\n },\r\n _applyEndDateToObj: function(endDate, obj) {\r\n this.invoke(\"setField\", \"endDate\", obj, endDate);\r\n return obj\r\n },\r\n moveAppointmentBack: function(dragEvent) {\r\n var $appointment = this._$currentAppointment;\r\n var size = this._initialSize;\r\n var coords = this._initialCoordinates;\r\n if (dragEvent) {\r\n this._removeDragSourceClassFromDraggedAppointment();\r\n if ((0, _type.isDeferred)(dragEvent.cancel)) {\r\n dragEvent.cancel.resolve(true)\r\n } else {\r\n dragEvent.cancel = true\r\n }\r\n }\r\n if ($appointment && !dragEvent) {\r\n if (coords) {\r\n (0, _translator.move)($appointment, coords);\r\n delete this._initialSize\r\n }\r\n if (size) {\r\n $appointment.outerWidth(size.width);\r\n $appointment.outerHeight(size.height);\r\n delete this._initialCoordinates\r\n }\r\n }\r\n },\r\n focus: function() {\r\n if (this._$currentAppointment) {\r\n var focusedElement = (0, _element.getPublicElement)(this._$currentAppointment);\r\n this.option(\"focusedElement\", focusedElement);\r\n _events_engine.default.trigger(focusedElement, \"focus\")\r\n }\r\n },\r\n splitAppointmentByDay: function(appointment) {\r\n var dates = appointment.settings || appointment;\r\n var originalStartDate = new Date(this.invoke(\"getField\", \"startDate\", dates));\r\n var startDate = _date.default.makeDate(originalStartDate);\r\n var endDate = _date.default.makeDate(this.invoke(\"getField\", \"endDate\", dates));\r\n var maxAllowedDate = this.invoke(\"getEndViewDate\");\r\n var startDayHour = this.invoke(\"getStartDayHour\");\r\n var endDayHour = this.invoke(\"getEndDayHour\");\r\n var appointmentIsLong = this.invoke(\"appointmentTakesSeveralDays\", appointment);\r\n var result = [];\r\n var timeZoneCalculator = this.invoke(\"getTimeZoneCalculator\");\r\n startDate = timeZoneCalculator.createDate(startDate, {\r\n path: \"toGrid\"\r\n });\r\n endDate = timeZoneCalculator.createDate(endDate, {\r\n path: \"toGrid\"\r\n });\r\n if (startDate.getHours() <= endDayHour && startDate.getHours() >= startDayHour && !appointmentIsLong) {\r\n result.push(this._applyStartDateToObj(new Date(startDate), {\r\n appointmentData: appointment\r\n }));\r\n startDate.setDate(startDate.getDate() + 1)\r\n }\r\n while (appointmentIsLong && startDate.getTime() < endDate.getTime() && startDate < maxAllowedDate) {\r\n var currentStartDate = new Date(startDate);\r\n var currentEndDate = new Date(startDate);\r\n this._checkStartDate(currentStartDate, originalStartDate, startDayHour);\r\n this._checkEndDate(currentEndDate, endDate, endDayHour);\r\n var appointmentData = (0, _object.deepExtendArraySafe)({}, appointment, true);\r\n var appointmentSettings = {};\r\n this._applyStartDateToObj(currentStartDate, appointmentSettings);\r\n this._applyEndDateToObj(currentEndDate, appointmentSettings);\r\n appointmentData.settings = appointmentSettings;\r\n result.push(appointmentData);\r\n startDate = _date.default.trimTime(startDate);\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(startDayHour)\r\n }\r\n return result\r\n },\r\n _checkStartDate: function(currentDate, originalDate, startDayHour) {\r\n if (!_date.default.sameDate(currentDate, originalDate) || currentDate.getHours() <= startDayHour) {\r\n currentDate.setHours(startDayHour, 0, 0, 0)\r\n } else {\r\n currentDate.setHours(originalDate.getHours(), originalDate.getMinutes(), originalDate.getSeconds(), originalDate.getMilliseconds())\r\n }\r\n },\r\n _checkEndDate: function(currentDate, originalDate, endDayHour) {\r\n if (!_date.default.sameDate(currentDate, originalDate) || currentDate.getHours() > endDayHour) {\r\n currentDate.setHours(endDayHour, 0, 0, 0)\r\n } else {\r\n currentDate.setHours(originalDate.getHours(), originalDate.getMinutes(), originalDate.getSeconds(), originalDate.getMilliseconds())\r\n }\r\n },\r\n _removeDragSourceClassFromDraggedAppointment: function() {\r\n var $appointments = this._itemElements().filter(\".\".concat(_constants.APPOINTMENT_DRAG_SOURCE_CLASS));\r\n $appointments.each(function(_, element) {\r\n var appointmentInstance = (0, _renderer.default)(element).dxSchedulerAppointment(\"instance\");\r\n appointmentInstance.option(\"isDragSource\", false)\r\n })\r\n },\r\n _setDragSourceAppointment: function(appointment, settings) {\r\n var $appointments = this._findItemElementByItem(appointment);\r\n var _settings$info$source = settings.info.sourceAppointment,\r\n startDate = _settings$info$source.startDate,\r\n endDate = _settings$info$source.endDate;\r\n var groupIndex = settings.groupIndex;\r\n $appointments.forEach(function($item) {\r\n var _$item$data = $item.data(_constants.APPOINTMENT_SETTINGS_KEY),\r\n itemInfo = _$item$data.info,\r\n itemGroupIndex = _$item$data.groupIndex;\r\n var _itemInfo$sourceAppoi = itemInfo.sourceAppointment,\r\n itemStartDate = _itemInfo$sourceAppoi.startDate,\r\n itemEndDate = _itemInfo$sourceAppoi.endDate;\r\n var appointmentInstance = $item.dxSchedulerAppointment(\"instance\");\r\n var isDragSource = startDate.getTime() === itemStartDate.getTime() && endDate.getTime() === itemEndDate.getTime() && groupIndex === itemGroupIndex;\r\n appointmentInstance.option(\"isDragSource\", isDragSource)\r\n })\r\n }\r\n}).include(_uiScheduler.default);\r\n(0, _component_registrator.default)(\"dxSchedulerAppointments\", SchedulerAppointments);\r\nvar _default = SchedulerAppointments;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.appointment.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _events_engine = _interopRequireDefault(require(\"../../events/core/events_engine\"));\r\nvar _translator = require(\"../../animation/translator\");\r\nvar _recurrence = require(\"./recurrence\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _component_registrator = _interopRequireDefault(require(\"../../core/component_registrator\"));\r\nvar _ui = require(\"../tooltip/ui.tooltip\");\r\nvar _uiScheduler = _interopRequireDefault(require(\"./ui.scheduler.publisher_mixin\"));\r\nvar _index = require(\"../../events/utils/index\");\r\nvar _pointer = _interopRequireDefault(require(\"../../events/pointer\"));\r\nvar _dom_component = _interopRequireDefault(require(\"../../core/dom_component\"));\r\nvar _resizable = _interopRequireDefault(require(\"../resizable\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\nvar _date = _interopRequireDefault(require(\"../../localization/date\"));\r\nvar _constants = require(\"./constants\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar DEFAULT_HORIZONTAL_HANDLES = \"left right\";\r\nvar DEFAULT_VERTICAL_HANDLES = \"top bottom\";\r\nvar REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME = (0, _index.addNamespace)(_pointer.default.enter, \"dxSchedulerAppointment\");\r\nvar REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME = (0, _index.addNamespace)(_pointer.default.leave, \"dxSchedulerAppointment\");\r\nvar Appointment = _dom_component.default.inherit({\r\n _getDefaultOptions: function() {\r\n return (0, _extend.extend)(this.callBase(), {\r\n data: {},\r\n geometry: {\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n height: 0\r\n },\r\n allowDrag: true,\r\n allowResize: true,\r\n reduced: null,\r\n isCompact: false,\r\n direction: \"vertical\",\r\n resizableConfig: {},\r\n cellHeight: 0,\r\n cellWidth: 0,\r\n isDragSource: false\r\n })\r\n },\r\n _optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"data\":\r\n case \"geometry\":\r\n case \"allowDrag\":\r\n case \"allowResize\":\r\n case \"reduced\":\r\n case \"sortedIndex\":\r\n case \"isCompact\":\r\n case \"direction\":\r\n case \"resizableConfig\":\r\n case \"cellHeight\":\r\n case \"cellWidth\":\r\n this._invalidate();\r\n break;\r\n case \"isDragSource\":\r\n this._renderDragSourceClass();\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n _getHorizontalResizingRule: function() {\r\n var reducedHandles = {\r\n head: this.option(\"rtlEnabled\") ? \"right\" : \"left\",\r\n body: \"\",\r\n tail: this.option(\"rtlEnabled\") ? \"left\" : \"right\"\r\n };\r\n return {\r\n handles: this.option(\"reduced\") ? reducedHandles[this.option(\"reduced\")] : DEFAULT_HORIZONTAL_HANDLES,\r\n minHeight: 0,\r\n minWidth: this.invoke(\"getCellWidth\"),\r\n step: this.invoke(\"getResizableStep\"),\r\n roundStepValue: false\r\n }\r\n },\r\n _getVerticalResizingRule: function() {\r\n var height = this.invoke(\"getCellHeight\");\r\n return {\r\n handles: DEFAULT_VERTICAL_HANDLES,\r\n minWidth: 0,\r\n minHeight: height,\r\n step: height,\r\n roundStepValue: true\r\n }\r\n },\r\n _render: function() {\r\n this.callBase();\r\n this._renderAppointmentGeometry();\r\n this._renderEmptyClass();\r\n this._renderReducedAppointment();\r\n this._renderAllDayClass();\r\n this._renderDragSourceClass();\r\n this._renderDirection();\r\n this.$element().data(\"dxAppointmentStartDate\", this.option(\"startDate\"));\r\n this.$element().attr(\"title\", this.invoke(\"getField\", \"text\", this.option(\"data\")));\r\n this.$element().attr(\"role\", \"button\");\r\n this._renderRecurrenceClass();\r\n this._renderResizable()\r\n },\r\n _renderAppointmentGeometry: function() {\r\n var geometry = this.option(\"geometry\");\r\n var $element = this.$element();\r\n (0, _translator.move)($element, {\r\n top: geometry.top,\r\n left: geometry.left\r\n });\r\n $element.css({\r\n width: geometry.width < 0 ? 0 : geometry.width,\r\n height: geometry.height < 0 ? 0 : geometry.height\r\n })\r\n },\r\n _renderEmptyClass: function() {\r\n var geometry = this.option(\"geometry\");\r\n if (geometry.empty || this.option(\"isCompact\")) {\r\n this.$element().addClass(_constants.EMPTY_APPOINTMENT_CLASS)\r\n }\r\n },\r\n _renderReducedAppointment: function() {\r\n var reducedPart = this.option(\"reduced\");\r\n if (!reducedPart) {\r\n return\r\n }\r\n this.$element().toggleClass(_constants.REDUCED_APPOINTMENT_CLASS, true).toggleClass(_constants.REDUCED_APPOINTMENT_PARTS_CLASSES[reducedPart], true);\r\n this._renderAppointmentReducedIcon()\r\n },\r\n _renderAppointmentReducedIcon: function() {\r\n var $icon = (0, _renderer.default)(\"
\").addClass(_constants.REDUCED_APPOINTMENT_ICON).appendTo(this.$element());\r\n var endDate = this._getEndDate();\r\n var tooltipLabel = _message.default.format(\"dxScheduler-editorLabelEndDate\");\r\n var tooltipText = [tooltipLabel, \": \", _date.default.format(endDate, \"monthAndDay\"), \", \", _date.default.format(endDate, \"year\")].join(\"\");\r\n _events_engine.default.off($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME);\r\n _events_engine.default.on($icon, REDUCED_APPOINTMENT_POINTERENTER_EVENT_NAME, function() {\r\n (0, _ui.show)({\r\n target: $icon,\r\n content: tooltipText\r\n })\r\n });\r\n _events_engine.default.off($icon, REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME);\r\n _events_engine.default.on($icon, REDUCED_APPOINTMENT_POINTERLEAVE_EVENT_NAME, function() {\r\n (0, _ui.hide)()\r\n })\r\n },\r\n _getEndDate: function() {\r\n var result = this.invoke(\"getField\", \"endDate\", this.option(\"data\"));\r\n if (result) {\r\n return new Date(result)\r\n }\r\n return result\r\n },\r\n _renderAllDayClass: function() {\r\n this.$element().toggleClass(_constants.ALL_DAY_APPOINTMENT_CLASS, !!this.option(\"allDay\"))\r\n },\r\n _renderDragSourceClass: function() {\r\n this.$element().toggleClass(_constants.APPOINTMENT_DRAG_SOURCE_CLASS, !!this.option(\"isDragSource\"))\r\n },\r\n _renderRecurrenceClass: function() {\r\n var rule = this.invoke(\"getField\", \"recurrenceRule\", this.option(\"data\"));\r\n if ((0, _recurrence.getRecurrenceProcessor)().isValidRecurrenceRule(rule)) {\r\n this.$element().addClass(_constants.RECURRENCE_APPOINTMENT_CLASS)\r\n }\r\n },\r\n _renderDirection: function() {\r\n this.$element().addClass(_constants.DIRECTION_APPOINTMENT_CLASSES[this.option(\"direction\")])\r\n },\r\n _createResizingConfig: function() {\r\n var config = \"vertical\" === this.option(\"direction\") ? this._getVerticalResizingRule() : this._getHorizontalResizingRule();\r\n if (!this.invoke(\"isGroupedByDate\")) {\r\n config.stepPrecision = \"strict\"\r\n }\r\n return config\r\n },\r\n _renderResizable: function() {\r\n if (this.option(\"allowResize\")) {\r\n this._createComponent(this.$element(), _resizable.default, (0, _extend.extend)(this._createResizingConfig(), this.option(\"resizableConfig\")))\r\n }\r\n },\r\n _useTemplates: function() {\r\n return false\r\n }\r\n}).include(_uiScheduler.default);\r\n(0, _component_registrator.default)(\"dxSchedulerAppointment\", Appointment);\r\nvar _default = Appointment;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.appointments.layout_manager.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _uiSchedulerAppointmentsStrategy = _interopRequireDefault(require(\"./rendering_strategies/ui.scheduler.appointments.strategy.vertical\"));\r\nvar _uiSchedulerAppointmentsStrategy2 = _interopRequireDefault(require(\"./rendering_strategies/ui.scheduler.appointments.strategy.horizontal\"));\r\nvar _uiSchedulerAppointmentsStrategy3 = _interopRequireDefault(require(\"./rendering_strategies/ui.scheduler.appointments.strategy.horizontal_month_line\"));\r\nvar _uiSchedulerAppointmentsStrategy4 = _interopRequireDefault(require(\"./rendering_strategies/ui.scheduler.appointments.strategy.horizontal_month\"));\r\nvar _uiSchedulerAppointmentsStrategy5 = _interopRequireDefault(require(\"./rendering_strategies/ui.scheduler.appointments.strategy.agenda\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar RENDERING_STRATEGIES = {\r\n horizontal: _uiSchedulerAppointmentsStrategy2.default,\r\n horizontalMonth: _uiSchedulerAppointmentsStrategy4.default,\r\n horizontalMonthLine: _uiSchedulerAppointmentsStrategy3.default,\r\n vertical: _uiSchedulerAppointmentsStrategy.default,\r\n agenda: _uiSchedulerAppointmentsStrategy5.default\r\n};\r\nvar AppointmentLayoutManager = function() {\r\n function AppointmentLayoutManager(instance, renderingStrategy) {\r\n this.instance = instance;\r\n renderingStrategy && this.initRenderingStrategy(renderingStrategy)\r\n }\r\n var _proto = AppointmentLayoutManager.prototype;\r\n _proto.getCellDimensions = function(options) {\r\n if (this.instance._workSpace) {\r\n return {\r\n width: this.instance._workSpace.getCellWidth(),\r\n height: this.instance._workSpace.getCellHeight(),\r\n allDayHeight: this.instance._workSpace.getAllDayHeight()\r\n }\r\n }\r\n };\r\n _proto.getGroupOrientation = function(options) {\r\n if (this.instance._workSpace) {\r\n options.callback(this.instance._workSpace._getRealGroupOrientation())\r\n }\r\n };\r\n _proto.initRenderingStrategy = function(renderingStrategy) {\r\n var Strategy = RENDERING_STRATEGIES[renderingStrategy];\r\n this._renderingStrategyInstance = new Strategy(this.instance);\r\n this.renderingStrategy = renderingStrategy\r\n };\r\n _proto.createAppointmentsMap = function(items) {\r\n var _this = this;\r\n var _this$getCellDimensio = this.getCellDimensions(),\r\n allDayHeight = _this$getCellDimensio.allDayHeight;\r\n this.instance._allDayCellHeight = allDayHeight;\r\n this.getGroupOrientation({\r\n callback: function(groupOrientation) {\r\n return _this.instance._groupOrientation = groupOrientation\r\n }\r\n });\r\n var appointments = items ? items.slice() : [];\r\n this._positionMap = this._renderingStrategyInstance.createTaskPositionMap(appointments);\r\n return this._createAppointmentsMapCore(appointments, this._positionMap)\r\n };\r\n _proto._createAppointmentsMapCore = function(list, positionMap) {\r\n var _this2 = this;\r\n return list.map(function(data, index) {\r\n if (!_this2._renderingStrategyInstance.keepAppointmentSettings()) {\r\n delete data.settings\r\n }\r\n var appointmentSettings = positionMap[index];\r\n appointmentSettings.forEach(function(settings) {\r\n settings.direction = \"vertical\" === _this2.renderingStrategy && !settings.allDay ? \"vertical\" : \"horizontal\"\r\n });\r\n return {\r\n itemData: data,\r\n settings: appointmentSettings,\r\n needRepaint: true,\r\n needRemove: false\r\n }\r\n })\r\n };\r\n _proto._isDataChanged = function(data) {\r\n var updatedData = this.instance.getUpdatedAppointment();\r\n return updatedData === data || this.instance.getUpdatedAppointmentKeys().some(function(item) {\r\n return data[item.key] === item.value\r\n })\r\n };\r\n _proto._isAppointmentShouldAppear = function(currentAppointment, sourceAppointment) {\r\n return currentAppointment.needRepaint && sourceAppointment.needRemove\r\n };\r\n _proto._isSettingChanged = function(settings, sourceSetting) {\r\n if (settings.length !== sourceSetting.length) {\r\n return true\r\n }\r\n for (var i = 0; i < settings.length; i++) {\r\n var newSettings = settings[i];\r\n var oldSettings = sourceSetting[i];\r\n if (oldSettings) {\r\n oldSettings.sortedIndex = newSettings.sortedIndex\r\n }\r\n if (!(0, _common.equalByValue)(newSettings, oldSettings)) {\r\n return true\r\n }\r\n }\r\n return false\r\n };\r\n _proto._getAssociatedSourceAppointment = function(currentAppointment, sourceAppointments) {\r\n for (var i = 0; i < sourceAppointments.length; i++) {\r\n var item = sourceAppointments[i];\r\n if (item.itemData === currentAppointment.itemData) {\r\n return item\r\n }\r\n }\r\n return null\r\n };\r\n _proto._getDeletedAppointments = function(currentAppointments, sourceAppointments) {\r\n var result = [];\r\n for (var i = 0; i < sourceAppointments.length; i++) {\r\n var sourceAppointment = sourceAppointments[i];\r\n var currentAppointment = this._getAssociatedSourceAppointment(sourceAppointment, currentAppointments);\r\n if (!currentAppointment) {\r\n sourceAppointment.needRemove = true;\r\n result.push(sourceAppointment)\r\n }\r\n }\r\n return result\r\n };\r\n _proto.getRepaintedAppointments = function(currentAppointments, sourceAppointments) {\r\n var _this3 = this;\r\n if (0 === sourceAppointments.length || \"agenda\" === this.renderingStrategy) {\r\n return currentAppointments\r\n }\r\n currentAppointments.forEach(function(appointment) {\r\n var sourceAppointment = _this3._getAssociatedSourceAppointment(appointment, sourceAppointments);\r\n if (sourceAppointment) {\r\n appointment.needRepaint = _this3._isDataChanged(appointment.itemData) || _this3._isSettingChanged(appointment.settings, sourceAppointment.settings) || _this3._isAppointmentShouldAppear(appointment, sourceAppointment)\r\n }\r\n });\r\n return currentAppointments.concat(this._getDeletedAppointments(currentAppointments, sourceAppointments))\r\n };\r\n _proto.getRenderingStrategyInstance = function() {\r\n return this._renderingStrategyInstance\r\n };\r\n return AppointmentLayoutManager\r\n}();\r\nvar _default = AppointmentLayoutManager;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.appointment_model.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _config = _interopRequireDefault(require(\"../../core/config\"));\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _date_serialization = _interopRequireDefault(require(\"../../core/utils/date_serialization\"));\r\nvar _recurrence = require(\"./recurrence\");\r\nvar _date = _interopRequireDefault(require(\"../../core/utils/date\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _query = _interopRequireDefault(require(\"../../data/query\"));\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\n\r\nfunction _defineProperties(target, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var descriptor = props[i];\r\n descriptor.enumerable = descriptor.enumerable || false;\r\n descriptor.configurable = true;\r\n if (\"value\" in descriptor) {\r\n descriptor.writable = true\r\n }\r\n Object.defineProperty(target, descriptor.key, descriptor)\r\n }\r\n}\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) {\r\n if (protoProps) {\r\n _defineProperties(Constructor.prototype, protoProps)\r\n }\r\n if (staticProps) {\r\n _defineProperties(Constructor, staticProps)\r\n }\r\n Object.defineProperty(Constructor, \"prototype\", {\r\n writable: false\r\n });\r\n return Constructor\r\n}\r\nvar toMs = _date.default.dateToMilliseconds;\r\nvar DATE_FILTER_POSITION = 0;\r\nvar USER_FILTER_POSITION = 1;\r\nvar FilterMaker = function() {\r\n function FilterMaker(dataAccessors) {\r\n this._filterRegistry = null;\r\n this._dataAccessors = dataAccessors\r\n }\r\n var _proto = FilterMaker.prototype;\r\n _proto.isRegistered = function() {\r\n return !!this._filterRegistry\r\n };\r\n _proto.clearRegistry = function() {\r\n delete this._filterRegistry\r\n };\r\n _proto.make = function(type, args) {\r\n if (!this._filterRegistry) {\r\n this._filterRegistry = {}\r\n }\r\n this._make(type).apply(this, args)\r\n };\r\n _proto._make = function(type) {\r\n var _this = this;\r\n switch (type) {\r\n case \"date\":\r\n return function(min, max, useAccessors) {\r\n var startDate = useAccessors ? _this._dataAccessors.getter.startDate : _this._dataAccessors.expr.startDateExpr;\r\n var endDate = useAccessors ? _this._dataAccessors.getter.endDate : _this._dataAccessors.expr.endDateExpr;\r\n var recurrenceRule = _this._dataAccessors.expr.recurrenceRuleExpr;\r\n _this._filterRegistry.date = [\r\n [\r\n [endDate, \">=\", min],\r\n [startDate, \"<\", max]\r\n ], \"or\", [recurrenceRule, \"startswith\", \"freq\"], \"or\", [\r\n [endDate, min],\r\n [startDate, min]\r\n ]\r\n ];\r\n if (!recurrenceRule) {\r\n _this._filterRegistry.date.splice(1, 2)\r\n }\r\n };\r\n case \"user\":\r\n return function(userFilter) {\r\n _this._filterRegistry.user = userFilter\r\n }\r\n }\r\n };\r\n _proto.combine = function() {\r\n var filter = [];\r\n this._filterRegistry.date && filter.push(this._filterRegistry.date);\r\n this._filterRegistry.user && filter.push(this._filterRegistry.user);\r\n return filter\r\n };\r\n _proto.dateFilter = function() {\r\n return this._filterRegistry.date\r\n };\r\n return FilterMaker\r\n}();\r\nvar compareDateWithStartDayHour = function(startDate, endDate, startDayHour, allDay, severalDays) {\r\n var startTime = _date.default.dateTimeFromDecimal(startDayHour);\r\n var result = startDate.getHours() >= startTime.hours && startDate.getMinutes() >= startTime.minutes || endDate.getHours() === startTime.hours && endDate.getMinutes() > startTime.minutes || endDate.getHours() > startTime.hours || severalDays || allDay;\r\n return result\r\n};\r\nvar compareDateWithEndDayHour = function(startDate, endDate, startDayHour, endDayHour, allDay, severalDays, max, min) {\r\n var hiddenInterval = (24 - endDayHour + startDayHour) * toMs(\"hour\");\r\n var apptDuration = endDate.getTime() - startDate.getTime();\r\n var delta = (hiddenInterval - apptDuration) / toMs(\"hour\");\r\n var apptStartHour = startDate.getHours();\r\n var apptStartMinutes = startDate.getMinutes();\r\n var result;\r\n var endTime = _date.default.dateTimeFromDecimal(endDayHour);\r\n var startTime = _date.default.dateTimeFromDecimal(startDayHour);\r\n result = apptStartHour < endTime.hours || apptStartHour === endTime.hours && apptStartMinutes < endTime.minutes || allDay && startDate <= max || severalDays && startDate < max && endDate > min && (apptStartHour < endTime.hours || 60 * endDate.getHours() + endDate.getMinutes() > 60 * startTime.hours);\r\n if (apptDuration < hiddenInterval) {\r\n if (apptStartHour > endTime.hours && apptStartMinutes > endTime.minutes && delta <= apptStartHour - endDayHour) {\r\n result = false\r\n }\r\n }\r\n return result\r\n};\r\nvar AppointmentModel = function() {\r\n function AppointmentModel(dataSource, dataAccessors, baseAppointmentDuration) {\r\n this.setDataAccessors(dataAccessors);\r\n this.setDataSource(dataSource);\r\n this._updatedAppointmentKeys = [];\r\n this._filterMaker = new FilterMaker(dataAccessors);\r\n this._baseAppointmentDuration = baseAppointmentDuration\r\n }\r\n var _proto2 = AppointmentModel.prototype;\r\n _proto2._createFilter = function(min, max, remoteFiltering, dateSerializationFormat) {\r\n this._filterMaker.make(\"date\", [min, max]);\r\n var userFilterPosition = this._excessFiltering() ? this._dataSource.filter()[USER_FILTER_POSITION] : this._dataSource.filter();\r\n this._filterMaker.make(\"user\", [userFilterPosition]);\r\n if (remoteFiltering) {\r\n this._dataSource.filter(this._combineRemoteFilter(dateSerializationFormat))\r\n }\r\n };\r\n _proto2._excessFiltering = function() {\r\n var dateFilter = this._filterMaker.dateFilter();\r\n var dataSourceFilter = this._dataSource.filter();\r\n return dataSourceFilter && ((0, _common.equalByValue)(dataSourceFilter, dateFilter) || dataSourceFilter.length && (0, _common.equalByValue)(dataSourceFilter[DATE_FILTER_POSITION], dateFilter))\r\n };\r\n _proto2._combineFilter = function() {\r\n return this._filterMaker.combine()\r\n };\r\n _proto2._getStoreKey = function(target) {\r\n var store = this._dataSource.store();\r\n return store.keyOf(target)\r\n };\r\n _proto2._filterAppointmentByResources = function(appointment, resources) {\r\n var _this2 = this;\r\n var result = false;\r\n var i;\r\n var len;\r\n var resourceName;\r\n var checkAppointmentResourceValues = function() {\r\n var resourceGetter = _this2._dataAccessors.getter.resources[resourceName];\r\n var resource;\r\n if ((0, _type.isFunction)(resourceGetter)) {\r\n resource = resourceGetter(appointment)\r\n }\r\n var appointmentResourceValues = (0, _array.wrapToArray)(resource);\r\n var resourceData = (0, _iterator.map)(resources[i].items, function(item) {\r\n return item.id\r\n });\r\n for (var j = 0, itemDataCount = appointmentResourceValues.length; j < itemDataCount; j++) {\r\n if ((0, _array.inArray)(appointmentResourceValues[j], resourceData) > -1) {\r\n return true\r\n }\r\n }\r\n return false\r\n };\r\n for (i = 0, len = resources.length; i < len; i++) {\r\n resourceName = resources[i].name;\r\n result = checkAppointmentResourceValues.call(this);\r\n if (!result) {\r\n return false\r\n }\r\n }\r\n return result\r\n };\r\n _proto2._filterAppointmentByRRule = function(appointment, min, max, startDayHour, endDayHour, firstDayOfWeek) {\r\n var recurrenceRule = appointment.recurrenceRule;\r\n var recurrenceException = appointment.recurrenceException;\r\n var allDay = appointment.allDay;\r\n var result = true;\r\n var appointmentStartDate = appointment.startDate;\r\n var appointmentEndDate = appointment.endDate;\r\n var recurrenceProcessor = (0, _recurrence.getRecurrenceProcessor)();\r\n if (allDay || this._appointmentPartInInterval(appointmentStartDate, appointmentEndDate, startDayHour, endDayHour)) {\r\n var trimmedDates = this._trimDates(min, max);\r\n min = trimmedDates.min;\r\n max = new Date(trimmedDates.max.getTime() - toMs(\"minute\"))\r\n }\r\n if (recurrenceRule && !recurrenceProcessor.isValidRecurrenceRule(recurrenceRule)) {\r\n result = appointmentEndDate > min && appointmentStartDate <= max\r\n }\r\n if (result && recurrenceProcessor.isValidRecurrenceRule(recurrenceRule)) {\r\n result = recurrenceProcessor.hasRecurrence({\r\n rule: recurrenceRule,\r\n exception: recurrenceException,\r\n start: appointmentStartDate,\r\n end: appointmentEndDate,\r\n min: min,\r\n max: max,\r\n firstDayOfWeek: firstDayOfWeek\r\n })\r\n }\r\n return result\r\n };\r\n _proto2._appointmentPartInInterval = function(startDate, endDate, startDayHour, endDayHour) {\r\n var apptStartDayHour = startDate.getHours();\r\n var apptEndDayHour = endDate.getHours();\r\n return apptStartDayHour <= startDayHour && apptEndDayHour <= endDayHour && apptEndDayHour >= startDayHour || apptEndDayHour >= endDayHour && apptStartDayHour <= endDayHour && apptStartDayHour >= startDayHour\r\n };\r\n _proto2._createCombinedFilter = function(filterOptions, timeZoneCalculator) {\r\n var dataAccessors = this._dataAccessors;\r\n var min = new Date(filterOptions.min);\r\n var max = new Date(filterOptions.max);\r\n var getRecurrenceException = filterOptions.recurrenceException;\r\n var startDayHour = filterOptions.startDayHour,\r\n endDayHour = filterOptions.endDayHour,\r\n viewStartDayHour = filterOptions.viewStartDayHour,\r\n viewEndDayHour = filterOptions.viewEndDayHour,\r\n resources = filterOptions.resources,\r\n firstDayOfWeek = filterOptions.firstDayOfWeek;\r\n var that = this;\r\n return [\r\n [function(appointment) {\r\n var _appointment$visible;\r\n var appointmentVisible = null !== (_appointment$visible = appointment.visible) && void 0 !== _appointment$visible ? _appointment$visible : true;\r\n var result = appointmentVisible;\r\n var startDate = new Date(dataAccessors.getter.startDate(appointment));\r\n var endDate = new Date(dataAccessors.getter.endDate(appointment));\r\n var appointmentTakesAllDay = that.appointmentTakesAllDay(appointment, viewStartDayHour, viewEndDayHour);\r\n var appointmentTakesSeveralDays = that.appointmentTakesSeveralDays(appointment);\r\n var isAllDay = dataAccessors.getter.allDay(appointment);\r\n var appointmentIsLong = appointmentTakesSeveralDays || appointmentTakesAllDay;\r\n var useRecurrence = (0, _type.isDefined)(dataAccessors.getter.recurrenceRule);\r\n var recurrenceRule;\r\n if (useRecurrence) {\r\n recurrenceRule = dataAccessors.getter.recurrenceRule(appointment)\r\n }\r\n if (resources && resources.length) {\r\n result = that._filterAppointmentByResources(appointment, resources)\r\n }\r\n if (appointmentTakesAllDay && false === filterOptions.allDay) {\r\n result = false\r\n }\r\n var startDateTimeZone = dataAccessors.getter.startDateTimeZone(appointment);\r\n var endDateTimeZone = dataAccessors.getter.endDateTimeZone(appointment);\r\n var comparableStartDate = timeZoneCalculator.createDate(startDate, {\r\n appointmentTimeZone: startDateTimeZone,\r\n path: \"toGrid\"\r\n });\r\n var comparableEndDate = timeZoneCalculator.createDate(endDate, {\r\n appointmentTimeZone: endDateTimeZone,\r\n path: \"toGrid\"\r\n });\r\n if (result && useRecurrence) {\r\n var recurrenceException = getRecurrenceException ? getRecurrenceException(appointment) : dataAccessors.getter.recurrenceException(appointment);\r\n result = that._filterAppointmentByRRule({\r\n startDate: comparableStartDate,\r\n endDate: comparableEndDate,\r\n recurrenceRule: recurrenceRule,\r\n recurrenceException: recurrenceException,\r\n allDay: appointmentTakesAllDay\r\n }, min, max, startDayHour, endDayHour, firstDayOfWeek)\r\n }\r\n if (result && comparableEndDate < min && appointmentIsLong && !isAllDay && (!useRecurrence || useRecurrence && !recurrenceRule)) {\r\n result = false\r\n }\r\n if (result && void 0 !== startDayHour && (!useRecurrence || !filterOptions.isVirtualScrolling)) {\r\n result = compareDateWithStartDayHour(comparableStartDate, comparableEndDate, startDayHour, appointmentTakesAllDay, appointmentTakesSeveralDays)\r\n }\r\n if (result && void 0 !== endDayHour) {\r\n result = compareDateWithEndDayHour(comparableStartDate, comparableEndDate, startDayHour, endDayHour, appointmentTakesAllDay, appointmentTakesSeveralDays, max, min)\r\n }\r\n if (result && useRecurrence && !recurrenceRule) {\r\n if (comparableEndDate < min && !isAllDay) {\r\n result = false\r\n }\r\n }\r\n return result\r\n }]\r\n ]\r\n };\r\n _proto2.setDataSource = function(dataSource) {\r\n this._dataSource = dataSource;\r\n this.cleanModelState();\r\n this._initStoreChangeHandlers();\r\n this._filterMaker && this._filterMaker.clearRegistry()\r\n };\r\n _proto2._initStoreChangeHandlers = function() {\r\n var _this3 = this;\r\n var dataSource = this._dataSource;\r\n var store = null === dataSource || void 0 === dataSource ? void 0 : dataSource.store();\r\n if (store) {\r\n store.on(\"updating\", function(newItem) {\r\n _this3._updatedAppointment = newItem\r\n });\r\n store.on(\"push\", function(pushItems) {\r\n var items = dataSource.items();\r\n var keyName = store.key();\r\n pushItems.forEach(function(pushItem) {\r\n var itemExists = 0 !== items.filter(function(item) {\r\n return item[keyName] === pushItem.key\r\n }).length;\r\n if (itemExists) {\r\n _this3._updatedAppointmentKeys.push({\r\n key: keyName,\r\n value: pushItem.key\r\n })\r\n } else {\r\n var data = pushItem.data;\r\n data && items.push(data)\r\n }\r\n })\r\n })\r\n }\r\n };\r\n _proto2.getUpdatedAppointment = function() {\r\n return this._updatedAppointment\r\n };\r\n _proto2.getUpdatedAppointmentKeys = function() {\r\n return this._updatedAppointmentKeys\r\n };\r\n _proto2.cleanModelState = function() {\r\n this._updatedAppointment = null;\r\n this._updatedAppointmentKeys = []\r\n };\r\n _proto2.setDataAccessors = function(dataAccessors) {\r\n this._dataAccessors = dataAccessors;\r\n this._filterMaker = new FilterMaker(dataAccessors)\r\n };\r\n _proto2.filterByDate = function(min, max, remoteFiltering, dateSerializationFormat) {\r\n if (!this._dataSource) {\r\n return\r\n }\r\n var trimmedDates = this._trimDates(min, max);\r\n if (!this._filterMaker.isRegistered()) {\r\n this._createFilter(trimmedDates.min, trimmedDates.max, remoteFiltering, dateSerializationFormat)\r\n } else {\r\n var _this$_dataSource$fil;\r\n this._filterMaker.make(\"date\", [trimmedDates.min, trimmedDates.max]);\r\n if ((null === (_this$_dataSource$fil = this._dataSource.filter()) || void 0 === _this$_dataSource$fil ? void 0 : _this$_dataSource$fil.length) > 1) {\r\n var userFilter = this._serializeRemoteFilter([this._dataSource.filter()[1]], dateSerializationFormat);\r\n this._filterMaker.make(\"user\", userFilter)\r\n }\r\n if (remoteFiltering) {\r\n this._dataSource.filter(this._combineRemoteFilter(dateSerializationFormat))\r\n }\r\n }\r\n };\r\n _proto2._combineRemoteFilter = function(dateSerializationFormat) {\r\n var combinedFilter = this._filterMaker.combine();\r\n return this._serializeRemoteFilter(combinedFilter, dateSerializationFormat)\r\n };\r\n _proto2._serializeRemoteFilter = function(filter, dateSerializationFormat) {\r\n if (!Array.isArray(filter)) {\r\n return filter\r\n }\r\n filter = (0, _extend.extend)([], filter);\r\n var startDate = this._dataAccessors.expr.startDateExpr;\r\n var endDate = this._dataAccessors.expr.endDateExpr;\r\n if ((0, _type.isString)(filter[0])) {\r\n if ((0, _config.default)().forceIsoDateParsing && filter.length > 1) {\r\n if (filter[0] === startDate || filter[0] === endDate) {\r\n filter[filter.length - 1] = _date_serialization.default.serializeDate(new Date(filter[filter.length - 1]), dateSerializationFormat)\r\n }\r\n }\r\n }\r\n for (var i = 0; i < filter.length; i++) {\r\n filter[i] = this._serializeRemoteFilter(filter[i], dateSerializationFormat)\r\n }\r\n return filter\r\n };\r\n _proto2._createAppointmentFilter = function(filterOptions, timeZoneCalculator) {\r\n var combinedFilter = this._createCombinedFilter(filterOptions, timeZoneCalculator);\r\n if (this._filterMaker.isRegistered()) {\r\n this._filterMaker.make(\"user\", void 0);\r\n var trimmedDates = this._trimDates(filterOptions.min, filterOptions.max);\r\n this._filterMaker.make(\"date\", [trimmedDates.min, trimmedDates.max, true]);\r\n var dateFilter = this.customizeDateFilter(this._filterMaker.combine(), timeZoneCalculator);\r\n combinedFilter.push([dateFilter])\r\n }\r\n return combinedFilter\r\n };\r\n _proto2.filterLoadedAppointments = function(filterOption, timeZoneCalculator) {\r\n var combinedFilter = this._createAppointmentFilter(filterOption, timeZoneCalculator);\r\n return (0, _query.default)(this.getPreparedDataItems()).filter(combinedFilter).toArray()\r\n };\r\n _proto2.getPreparedDataItems = function() {\r\n var _this4 = this;\r\n var dataItems = this._dataSource.items();\r\n return (0, _iterator.map)(dataItems, function(item) {\r\n var startDate = new Date(_this4._dataAccessors.getter.startDate(item));\r\n var endDate = new Date(_this4._dataAccessors.getter.endDate(item));\r\n _this4.replaceWrongEndDate(item, startDate, endDate);\r\n return item\r\n })\r\n };\r\n _proto2.replaceWrongEndDate = function(appointment, startDate, endDate) {\r\n if (this._isEndDateWrong(startDate, endDate)) {\r\n var isAllDay = this._dataAccessors.getter.allDay(appointment);\r\n var calculatedEndDate = this._calculateAppointmentEndDate(isAllDay, startDate);\r\n this._dataAccessors.setter.endDate(appointment, calculatedEndDate)\r\n }\r\n };\r\n _proto2.filterLoadedVirtualAppointments = function(filterOptions, timeZoneCalculator, groupCount) {\r\n var _this5 = this;\r\n var combinedFilters = [];\r\n var itemsToFilter = this.getPreparedDataItems();\r\n var needPreFilter = groupCount > 0;\r\n if (needPreFilter) {\r\n itemsToFilter = itemsToFilter.filter(function(item) {\r\n for (var i = 0; i < filterOptions.length; ++i) {\r\n var resources = filterOptions[i].resources;\r\n if (_this5._filterAppointmentByResources(item, resources)) {\r\n return true\r\n }\r\n }\r\n })\r\n }\r\n filterOptions.forEach(function(filterOption) {\r\n combinedFilters.length && combinedFilters.push(\"or\");\r\n var filter = _this5._createAppointmentFilter(filterOption, timeZoneCalculator);\r\n combinedFilters.push(filter)\r\n });\r\n return (0, _query.default)(itemsToFilter).filter(combinedFilters).toArray()\r\n };\r\n _proto2._trimDates = function(min, max) {\r\n var minCopy = _date.default.trimTime(new Date(min));\r\n var maxCopy = _date.default.trimTime(new Date(max));\r\n maxCopy.setDate(maxCopy.getDate() + 1);\r\n return {\r\n min: minCopy,\r\n max: maxCopy\r\n }\r\n };\r\n _proto2.hasAllDayAppointments = function(items, startDayHour, endDayHour) {\r\n if (!items) {\r\n return false\r\n }\r\n var that = this;\r\n var result = false;\r\n (0, _iterator.each)(items, function(index, item) {\r\n if (that.appointmentTakesAllDay(item, startDayHour, endDayHour)) {\r\n result = true;\r\n return false\r\n }\r\n });\r\n return result\r\n };\r\n _proto2.appointmentTakesAllDay = function(appointment, startDayHour, endDayHour) {\r\n var dataAccessors = this._dataAccessors;\r\n var startDate = dataAccessors.getter.startDate(appointment);\r\n var endDate = dataAccessors.getter.endDate(appointment);\r\n var allDay = dataAccessors.getter.allDay(appointment);\r\n return allDay || this._appointmentHasAllDayDuration(startDate, endDate, startDayHour, endDayHour)\r\n };\r\n _proto2._appointmentHasAllDayDuration = function(startDate, endDate, startDayHour, endDayHour) {\r\n startDate = new Date(startDate);\r\n endDate = new Date(endDate);\r\n var dayDuration = 24;\r\n var appointmentDurationInHours = this._getAppointmentDurationInHours(startDate, endDate);\r\n return appointmentDurationInHours >= dayDuration || this._appointmentHasShortDayDuration(startDate, endDate, startDayHour, endDayHour)\r\n };\r\n _proto2._appointmentHasShortDayDuration = function(startDate, endDate, startDayHour, endDayHour) {\r\n var appointmentDurationInHours = this._getAppointmentDurationInHours(startDate, endDate);\r\n var shortDayDurationInHours = endDayHour - startDayHour;\r\n return appointmentDurationInHours >= shortDayDurationInHours && startDate.getHours() === startDayHour && endDate.getHours() === endDayHour\r\n };\r\n _proto2._getAppointmentDurationInHours = function(startDate, endDate) {\r\n return (endDate.getTime() - startDate.getTime()) / toMs(\"hour\")\r\n };\r\n _proto2.appointmentTakesSeveralDays = function(appointment) {\r\n var dataAccessors = this._dataAccessors;\r\n var startDate = new Date(dataAccessors.getter.startDate(appointment));\r\n var endDate = new Date(dataAccessors.getter.endDate(appointment));\r\n return !_date.default.sameDate(startDate, endDate)\r\n };\r\n _proto2.customizeDateFilter = function(dateFilter, timeZoneCalculator) {\r\n var _this6 = this;\r\n var currentFilter = (0, _extend.extend)(true, [], dateFilter);\r\n return function(appointment) {\r\n var startDate = new Date(_this6._dataAccessors.getter.startDate(appointment));\r\n var endDate = new Date(_this6._dataAccessors.getter.endDate(appointment));\r\n appointment = (0, _extend.extend)(true, {}, appointment);\r\n var startDateTimeZone = _this6._dataAccessors.getter.startDateTimeZone(appointment);\r\n var endDateTimeZone = _this6._dataAccessors.getter.endDateTimeZone(appointment);\r\n var comparableStartDate = timeZoneCalculator.createDate(startDate, {\r\n appointmentTimeZone: startDateTimeZone,\r\n path: \"toGrid\"\r\n });\r\n var comparableEndDate = timeZoneCalculator.createDate(endDate, {\r\n appointmentTimeZone: endDateTimeZone,\r\n path: \"toGrid\"\r\n });\r\n _this6._dataAccessors.setter.startDate(appointment, comparableStartDate);\r\n _this6._dataAccessors.setter.endDate(appointment, comparableEndDate);\r\n return (0, _query.default)([appointment]).filter(currentFilter).toArray().length > 0\r\n }.bind(this)\r\n };\r\n _proto2._calculateAppointmentEndDate = function(isAllDay, startDate) {\r\n if (isAllDay) {\r\n return _date.default.setToDayEnd(new Date(startDate))\r\n }\r\n return new Date(startDate.getTime() + this._baseAppointmentDuration * toMs(\"minute\"))\r\n };\r\n _proto2._isEndDateWrong = function(startDate, endDate) {\r\n return !endDate || isNaN(endDate.getTime()) || startDate.getTime() > endDate.getTime()\r\n };\r\n _proto2.add = function(rawAppointment) {\r\n var _this7 = this;\r\n return this._dataSource.store().insert(rawAppointment).done(function() {\r\n return _this7._dataSource.load()\r\n })\r\n };\r\n _proto2.update = function(target, data) {\r\n var _this8 = this;\r\n var key = this._getStoreKey(target);\r\n var d = new _deferred.Deferred;\r\n this._dataSource.store().update(key, data).done(function(result) {\r\n return _this8._dataSource.load().done(function() {\r\n return d.resolve(result)\r\n }).fail(d.reject)\r\n }).fail(d.reject);\r\n return d.promise()\r\n };\r\n _proto2.remove = function(rawAppointment) {\r\n var _this9 = this;\r\n var key = this._getStoreKey(rawAppointment);\r\n return this._dataSource.store().remove(key).done(function() {\r\n return _this9._dataSource.load()\r\n })\r\n };\r\n _createClass(AppointmentModel, [{\r\n key: \"keyName\",\r\n get: function() {\r\n var store = this._dataSource.store();\r\n return store.key()\r\n }\r\n }]);\r\n return AppointmentModel\r\n}();\r\nvar _default = AppointmentModel;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.header.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _inflector = require(\"../../core/utils/inflector\");\r\nvar _component_registrator = _interopRequireDefault(require(\"../../core/component_registrator\"));\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.widget\"));\r\nvar _uiScheduler = _interopRequireDefault(require(\"./ui.scheduler.publisher_mixin\"));\r\nvar _uiScheduler2 = _interopRequireDefault(require(\"./ui.scheduler.navigator\"));\r\nvar _drop_down_menu = _interopRequireDefault(require(\"../drop_down_menu\"));\r\nvar _tabs = _interopRequireDefault(require(\"../tabs\"));\r\nvar _constants = require(\"../tabs/constants\");\r\nvar _errors = _interopRequireDefault(require(\"../../core/errors\"));\r\nvar _message = _interopRequireDefault(require(\"../../localization/message\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar COMPONENT_CLASS = \"dx-scheduler-header\";\r\nvar VIEW_SWITCHER_CLASS = \"dx-scheduler-view-switcher\";\r\nvar VIEW_SWITCHER_LABEL_CLASS = \"dx-scheduler-view-switcher-label\";\r\nvar STEP_MAP = {\r\n day: \"day\",\r\n week: \"week\",\r\n workWeek: \"workWeek\",\r\n month: \"month\",\r\n timelineDay: \"day\",\r\n timelineWeek: \"week\",\r\n timelineWorkWeek: \"workWeek\",\r\n timelineMonth: \"month\",\r\n agenda: \"agenda\"\r\n};\r\nvar VIEWS = [\"day\", \"week\", \"workWeek\", \"month\", \"timelineDay\", \"timelineWeek\", \"timelineWorkWeek\", \"timelineMonth\", \"agenda\"];\r\nvar SchedulerHeader = _ui.default.inherit({\r\n _getDefaultOptions: function() {\r\n return (0, _extend.extend)(this.callBase(), {\r\n views: [],\r\n isAdaptive: false,\r\n intervalCount: 1,\r\n currentView: \"day\",\r\n firstDayOfWeek: void 0,\r\n currentDate: new Date,\r\n min: void 0,\r\n max: void 0,\r\n useDropDownViewSwitcher: false,\r\n _dropDownButtonIcon: \"overlay\"\r\n })\r\n },\r\n _setOptionsByReference: function() {\r\n this.callBase();\r\n (0, _extend.extend)(this._optionsByReference, {\r\n currentView: true\r\n })\r\n },\r\n _optionChanged: function(args) {\r\n var value = args.value;\r\n switch (args.name) {\r\n case \"views\":\r\n this._validateViews();\r\n this._viewSwitcher.option({\r\n items: value,\r\n selectedItem: this.option(\"currentView\")\r\n });\r\n break;\r\n case \"customizeDateNavigatorText\":\r\n this._navigator.option(args.name, value);\r\n break;\r\n case \"currentView\":\r\n this._viewSwitcher.option(\"selectedItem\", value);\r\n this._navigator.option(\"step\", STEP_MAP[this._getCurrentViewType()]);\r\n this._changeViewSwitcherLabelText();\r\n break;\r\n case \"currentDate\":\r\n this._navigator.option(\"date\", value);\r\n break;\r\n case \"displayedDate\":\r\n this._navigator.option(\"displayedDate\", value);\r\n break;\r\n case \"min\":\r\n case \"max\":\r\n case \"firstDayOfWeek\":\r\n case \"intervalCount\":\r\n this._navigator.option(args.name, value);\r\n break;\r\n case \"tabIndex\":\r\n case \"focusStateEnabled\":\r\n this._viewSwitcher.option(args.name, value);\r\n this._navigator.option(args.name, value);\r\n this.callBase(args);\r\n break;\r\n case \"useDropDownViewSwitcher\":\r\n this._refreshViewSwitcher();\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n _init: function() {\r\n this.callBase();\r\n this.$element().addClass(COMPONENT_CLASS)\r\n },\r\n _initMarkup: function() {\r\n this.callBase();\r\n this._renderNavigator();\r\n this._renderViewSwitcher()\r\n },\r\n _renderNavigator: function() {\r\n this._navigator = this._createComponent(\"
\", _uiScheduler2.default, {\r\n min: this.option(\"min\"),\r\n max: this.option(\"max\"),\r\n intervalCount: this.option(\"intervalCount\"),\r\n date: this.option(\"currentDate\"),\r\n step: STEP_MAP[this._getCurrentViewType()],\r\n firstDayOfWeek: this.option(\"firstDayOfWeek\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n observer: this.option(\"observer\"),\r\n customizeDateNavigatorText: this.option(\"customizeDateNavigatorText\"),\r\n todayDate: this.option(\"todayDate\")\r\n });\r\n this._navigator.$element().appendTo(this.$element())\r\n },\r\n _renderViewSwitcher: function() {\r\n this._validateViews();\r\n var $viewSwitcher = (0, _renderer.default)(\"
\").addClass(VIEW_SWITCHER_CLASS).appendTo(this.$element());\r\n this.option(\"useDropDownViewSwitcher\") ? this._renderViewSwitcherDropDownMenu($viewSwitcher) : this._renderViewSwitcherTabs($viewSwitcher)\r\n },\r\n _validateViews: function() {\r\n var views = this.option(\"views\");\r\n (0, _iterator.each)(views, function(_, view) {\r\n var isViewIsObject = (0, _type.isObject)(view);\r\n var viewType = isViewIsObject && view.type ? view.type : view;\r\n if ((0, _array.inArray)(viewType, VIEWS) === -1) {\r\n _errors.default.log(\"W0008\", viewType)\r\n }\r\n })\r\n },\r\n _getCurrentViewType: function() {\r\n var currentView = this.option(\"currentView\");\r\n return currentView.type || currentView\r\n },\r\n _renderViewSwitcherTabs: function($element) {\r\n var that = this;\r\n $element.addClass(_constants.TABS_EXPANDED_CLASS);\r\n this._viewSwitcher = this._createComponent($element, _tabs.default, {\r\n selectionRequired: true,\r\n scrollingEnabled: true,\r\n onSelectionChanged: this._updateCurrentView.bind(this),\r\n items: this.option(\"views\"),\r\n itemTemplate: function(item) {\r\n return (0, _renderer.default)(\"\").addClass(\"dx-tab-text\").text(that._getItemText(item))\r\n },\r\n selectedItem: this.option(\"currentView\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\")\r\n })\r\n },\r\n _getItemText: function(item) {\r\n return item.name || _message.default.format(\"dxScheduler-switcher\" + (0, _inflector.camelize)(item.type || item, true))\r\n },\r\n _refreshViewSwitcher: function() {\r\n this._viewSwitcher._dispose();\r\n this._viewSwitcher.$element().remove();\r\n delete this._viewSwitcher;\r\n this._removeViewSwitcherLabel();\r\n this._renderViewSwitcher()\r\n },\r\n _removeViewSwitcherLabel: function() {\r\n if ((0, _type.isDefined)(this._$viewSwitcherLabel)) {\r\n this._$viewSwitcherLabel.detach();\r\n this._$viewSwitcherLabel.remove();\r\n delete this._$viewSwitcherLabel\r\n }\r\n },\r\n _renderViewSwitcherDropDownMenu: function($element) {\r\n var that = this;\r\n this._$viewSwitcherLabel = (0, _renderer.default)(\"
\").addClass(VIEW_SWITCHER_LABEL_CLASS).appendTo(this.$element());\r\n this._changeViewSwitcherLabelText();\r\n this._viewSwitcher = this._createComponent($element, _drop_down_menu.default, {\r\n onItemClick: this._updateCurrentView.bind(this),\r\n buttonIcon: this.option(\"_dropDownButtonIcon\"),\r\n items: this.option(\"views\"),\r\n selectionMode: this.option(\"isAdaptive\") ? \"single\" : \"none\",\r\n selectedItemKeys: [this.option(\"currentView\")],\r\n itemTemplate: function(item) {\r\n return (0, _renderer.default)(\"\").addClass(\"dx-dropdownmenu-item-text\").text(that._getItemText(item))\r\n }\r\n })\r\n },\r\n _changeViewSwitcherLabelText: function() {\r\n if (!(0, _type.isDefined)(this._$viewSwitcherLabel)) {\r\n return\r\n }\r\n var currentView = this.option(\"currentView\");\r\n var currentViewText = this._getItemText(currentView);\r\n this._$viewSwitcherLabel.text(currentViewText)\r\n },\r\n _getCurrentViewName: function(currentView) {\r\n return (0, _type.isObject)(currentView) ? currentView.name || currentView.type : currentView\r\n },\r\n _updateCurrentView: function(e) {\r\n var selectedItem = e.itemData || e.component.option(\"selectedItem\");\r\n var viewName = this._getCurrentViewName(selectedItem);\r\n this.notifyObserver(\"currentViewUpdated\", viewName)\r\n },\r\n _renderFocusTarget: _common.noop\r\n}).include(_uiScheduler.default);\r\n(0, _component_registrator.default)(\"dxSchedulerHeader\", SchedulerHeader);\r\nvar _default = SchedulerHeader;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.navigator.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _date = _interopRequireDefault(require(\"../../core/utils/date\"));\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _component_registrator = _interopRequireDefault(require(\"../../core/component_registrator\"));\r\nvar _devices = _interopRequireDefault(require(\"../../core/devices\"));\r\nvar _ui2 = _interopRequireDefault(require(\"../widget/ui.widget\"));\r\nvar _button = _interopRequireDefault(require(\"../button\"));\r\nvar _calendar = _interopRequireDefault(require(\"../calendar\"));\r\nvar _popover = _interopRequireDefault(require(\"../popover\"));\r\nvar _popup = _interopRequireDefault(require(\"../popup\"));\r\nvar _uiScheduler = _interopRequireDefault(require(\"./ui.scheduler.publisher_mixin\"));\r\nvar _date2 = _interopRequireDefault(require(\"../../localization/date\"));\r\nvar _ui3 = _interopRequireDefault(require(\"../scroll_view/ui.scrollable\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar ELEMENT_CLASS = \"dx-scheduler-navigator\";\r\nvar CALENDAR_CLASS = \"dx-scheduler-navigator-calendar\";\r\nvar NEXT_BUTTON_CLASS = \"dx-scheduler-navigator-next\";\r\nvar CAPTION_BUTTON_CLASS = \"dx-scheduler-navigator-caption\";\r\nvar PREVIOUS_BUTTON_CLASS = \"dx-scheduler-navigator-previous\";\r\nvar CALENDAR_POPOVER_CLASS = \"dx-scheduler-navigator-calendar-popover\";\r\nvar MONDAY_INDEX = 1;\r\nvar getDefaultFirstDayOfWeekIndex = function(shift) {\r\n return shift ? MONDAY_INDEX : _date2.default.firstDayOfWeekIndex()\r\n};\r\nvar getDateMonthFormat = function(short) {\r\n return function(date) {\r\n var monthName = _date2.default.getMonthNames(short ? \"abbreviated\" : \"wide\")[date.getMonth()];\r\n return [_date2.default.format(date, \"day\"), monthName].join(\" \")\r\n }\r\n};\r\nvar getMonthYearFormat = function(date) {\r\n return _date2.default.getMonthNames(\"abbreviated\")[date.getMonth()] + \" \" + _date2.default.format(date, \"year\")\r\n};\r\nvar getCaptionFormat = function getCaptionFormat(short, intervalCount, duration) {\r\n var dateMonthFormat = getDateMonthFormat(short);\r\n return function(date) {\r\n if (intervalCount > 1) {\r\n var lastIntervalDate = new Date(date);\r\n var defaultViewDuration = duration;\r\n lastIntervalDate.setDate(date.getDate() + defaultViewDuration - 1);\r\n var isDifferentMonthDates = date.getMonth() !== lastIntervalDate.getMonth();\r\n var useShortFormat = isDifferentMonthDates || short;\r\n var firstWeekDateText = _date2.default.format(date, isDifferentMonthDates ? getDateMonthFormat(useShortFormat) : \"d\");\r\n var lastWeekDateText = _date2.default.format(lastIntervalDate, getCaptionFormat(useShortFormat));\r\n return firstWeekDateText + \"-\" + lastWeekDateText\r\n }\r\n return [dateMonthFormat(date), _date2.default.format(date, \"year\")].join(\" \")\r\n }\r\n};\r\nvar getWeekCaption = function(date, shift, rejectWeekend) {\r\n var firstDayOfWeek = this.option(\"firstDayOfWeek\");\r\n var firstDayOfWeekIndex = (0, _type.isDefined)(firstDayOfWeek) ? firstDayOfWeek : getDefaultFirstDayOfWeekIndex(shift);\r\n if (0 === firstDayOfWeekIndex && rejectWeekend) {\r\n firstDayOfWeekIndex = MONDAY_INDEX\r\n }\r\n var firstWeekDate = _date.default.getFirstWeekDate(date, firstDayOfWeekIndex);\r\n var weekendDuration = 2;\r\n if (rejectWeekend) {\r\n firstWeekDate = _date.default.normalizeDateByWeek(firstWeekDate, date)\r\n }\r\n if (firstDayOfWeek >= 6 && rejectWeekend) {\r\n firstWeekDate.setDate(firstWeekDate.getDate() + (7 - firstDayOfWeek + 1))\r\n }\r\n var lastWeekDate = new Date(firstWeekDate);\r\n var intervalCount = this.option(\"intervalCount\");\r\n shift = shift || 6;\r\n lastWeekDate = new Date(lastWeekDate.setDate(lastWeekDate.getDate() + (intervalCount > 1 ? 7 * (intervalCount - 1) + shift : shift)));\r\n if (lastWeekDate.getDay() % 6 === 0 && rejectWeekend) {\r\n lastWeekDate.setDate(lastWeekDate.getDate() + weekendDuration)\r\n }\r\n return {\r\n text: formatCaptionByMonths.call(this, lastWeekDate, firstWeekDate),\r\n startDate: firstWeekDate,\r\n endDate: lastWeekDate\r\n }\r\n};\r\nvar formatCaptionByMonths = function(lastDate, firstDate) {\r\n var isDifferentMonthDates = firstDate.getMonth() !== lastDate.getMonth();\r\n var isDifferentYears = firstDate.getFullYear() !== lastDate.getFullYear();\r\n var useShortFormat = isDifferentMonthDates || this.option(\"_useShortDateFormat\");\r\n var lastDateText;\r\n var firstDateText;\r\n if (isDifferentYears) {\r\n firstDateText = _date2.default.format(firstDate, getCaptionFormat(true));\r\n lastDateText = _date2.default.format(lastDate, getCaptionFormat(true))\r\n } else {\r\n firstDateText = _date2.default.format(firstDate, isDifferentMonthDates ? getDateMonthFormat(useShortFormat) : \"d\");\r\n lastDateText = _date2.default.format(lastDate, getCaptionFormat(useShortFormat))\r\n }\r\n return firstDateText + \"-\" + lastDateText\r\n};\r\nvar getMonthCaption = function(date) {\r\n var firstDate = new Date(_date.default.getFirstMonthDate(date));\r\n var lastDate = new Date(_date.default.getLastMonthDate(firstDate));\r\n var text;\r\n if (this.option(\"intervalCount\") > 1) {\r\n lastDate = new Date(firstDate);\r\n lastDate.setMonth(firstDate.getMonth() + this.option(\"intervalCount\") - 1);\r\n lastDate = new Date(_date.default.getLastMonthDate(lastDate));\r\n var isSameYear = firstDate.getYear() === lastDate.getYear();\r\n var lastDateText = getMonthYearFormat(lastDate);\r\n var firstDateText = isSameYear ? _date2.default.getMonthNames(\"abbreviated\")[firstDate.getMonth()] : getMonthYearFormat(firstDate);\r\n text = firstDateText + \"-\" + lastDateText\r\n } else {\r\n text = _date2.default.format(date, \"monthandyear\")\r\n }\r\n return {\r\n text: text,\r\n startDate: firstDate,\r\n endDate: lastDate\r\n }\r\n};\r\nvar dateGetter = function(date, offset) {\r\n return new Date(date[this.setter](date[this.getter]() + offset))\r\n};\r\nvar getConfig = function(step) {\r\n var agendaDuration;\r\n switch (step) {\r\n case \"day\":\r\n return {\r\n duration: 1 * this.option(\"intervalCount\"), setter: \"setDate\", getter: \"getDate\", getDate: dateGetter, getCaption: function(date) {\r\n var format = getCaptionFormat(false, this.option(\"intervalCount\"), this._getConfig().duration);\r\n return {\r\n text: _date2.default.format(date, format),\r\n startDate: date,\r\n endDate: date\r\n }\r\n }\r\n };\r\n case \"week\":\r\n return {\r\n duration: 7 * this.option(\"intervalCount\"), setter: \"setDate\", getter: \"getDate\", getDate: dateGetter, getCaption: getWeekCaption\r\n };\r\n case \"workWeek\":\r\n return {\r\n duration: 7 * this.option(\"intervalCount\"), setter: \"setDate\", getter: \"getDate\", getDate: dateGetter, getCaption: function(date) {\r\n return getWeekCaption.call(this, date, 4, true)\r\n }\r\n };\r\n case \"month\":\r\n return {\r\n duration: 1 * this.option(\"intervalCount\"), setter: \"setMonth\", getter: \"getMonth\", getDate: function(date, offset) {\r\n var currentDate = date.getDate();\r\n date.setDate(1);\r\n date = dateGetter.call(this, date, offset);\r\n var lastDate = _date.default.getLastMonthDay(date);\r\n date.setDate(currentDate < lastDate ? currentDate : lastDate);\r\n return date\r\n }, getCaption: getMonthCaption\r\n };\r\n case \"agenda\":\r\n agendaDuration = this.invoke(\"getAgendaDuration\");\r\n agendaDuration = (0, _type.isNumeric)(agendaDuration) && agendaDuration > 0 ? agendaDuration : 7;\r\n return {\r\n duration: agendaDuration, setter: \"setDate\", getter: \"getDate\", getDate: dateGetter, getCaption: function(date) {\r\n var format = getCaptionFormat(this.option(\"_useShortDateFormat\"));\r\n var firstDate = new Date(date);\r\n var lastDate = new Date(date);\r\n var text;\r\n if (agendaDuration > 1) {\r\n lastDate.setDate(lastDate.getDate() + agendaDuration - 1);\r\n text = formatCaptionByMonths.call(this, lastDate, date)\r\n } else {\r\n text = _date2.default.format(date, format)\r\n }\r\n return {\r\n text: text,\r\n startDate: firstDate,\r\n endDate: lastDate\r\n }\r\n }\r\n }\r\n }\r\n};\r\nvar SchedulerNavigator = _ui2.default.inherit({\r\n _getDefaultOptions: function() {\r\n return (0, _extend.extend)(this.callBase(), {\r\n date: new Date,\r\n displayedDate: void 0,\r\n step: \"day\",\r\n intervalCount: 1,\r\n min: void 0,\r\n max: void 0,\r\n firstDayOfWeek: void 0,\r\n _useShortDateFormat: false,\r\n todayDate: function() {\r\n return new Date\r\n }\r\n })\r\n },\r\n _defaultOptionsRules: function() {\r\n return this.callBase().concat([{\r\n device: function() {\r\n return !_devices.default.real().generic || _devices.default.isSimulator()\r\n },\r\n options: {\r\n _useShortDateFormat: true\r\n }\r\n }])\r\n },\r\n _optionChanged: function(args) {\r\n switch (args.name) {\r\n case \"step\":\r\n case \"date\":\r\n case \"intervalCount\":\r\n case \"displayedDate\":\r\n this._updateButtonsState();\r\n this._renderCaption();\r\n this._setCalendarOption(\"value\", this.option(\"date\"));\r\n break;\r\n case \"min\":\r\n case \"max\":\r\n this._updateButtonsState();\r\n this._setCalendarOption(args.name, args.value);\r\n break;\r\n case \"firstDayOfWeek\":\r\n this._setCalendarOption(args.name, args.value);\r\n break;\r\n case \"customizeDateNavigatorText\":\r\n this._renderCaption();\r\n break;\r\n case \"tabIndex\":\r\n case \"focusStateEnabled\":\r\n this._next.option(args.name, args.value);\r\n this._caption.option(args.name, args.value);\r\n this._prev.option(args.name, args.value);\r\n this._setCalendarOption(args.name, args.value);\r\n this.callBase(args);\r\n break;\r\n case \"_useShortDateFormat\":\r\n break;\r\n default:\r\n this.callBase(args)\r\n }\r\n },\r\n _init: function() {\r\n this.callBase();\r\n this.$element().addClass(ELEMENT_CLASS);\r\n this._initButtons()\r\n },\r\n _initButtons: function() {\r\n var $next = (0, _renderer.default)(\"
\").addClass(NEXT_BUTTON_CLASS);\r\n this._next = this._createComponent($next, _button.default, {\r\n icon: \"chevronnext\",\r\n onClick: this._updateCurrentDate.bind(this, 1),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n integrationOptions: {}\r\n });\r\n var $caption = (0, _renderer.default)(\"
\").addClass(CAPTION_BUTTON_CLASS);\r\n this._caption = this._createComponent($caption, _button.default, {\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n integrationOptions: {}\r\n });\r\n var $prev = (0, _renderer.default)(\"
\").addClass(PREVIOUS_BUTTON_CLASS);\r\n this._prev = this._createComponent($prev, _button.default, {\r\n icon: \"chevronprev\",\r\n onClick: this._updateCurrentDate.bind(this, -1),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n tabIndex: this.option(\"tabIndex\"),\r\n integrationOptions: {}\r\n });\r\n this.setAria(\"label\", \"Next period\", $next);\r\n this.setAria(\"label\", \"Previous period\", $prev);\r\n this._updateButtonsState();\r\n this.$element().append($prev, $caption, $next)\r\n },\r\n _updateButtonsState: function() {\r\n var min = this.option(\"min\");\r\n var max = this.option(\"max\");\r\n var caption = this._getConfig().getCaption.call(this, this.option(\"displayedDate\") || this.option(\"date\"));\r\n min = min ? _date.default.trimTime(min) : min;\r\n max = max ? _date.default.trimTime(max) : max;\r\n max && max.setHours(23, 59, 59);\r\n this._prev.option(\"disabled\", min && !isNaN(min.getTime()) && this._getNextDate(-1, caption.endDate) < min);\r\n this._next.option(\"disabled\", max && !isNaN(max.getTime()) && this._getNextDate(1, caption.startDate) > max)\r\n },\r\n _updateCurrentDate: function(direction) {\r\n var date = this._getNextDate(direction);\r\n _date.default.normalizeDate(date, this.option(\"min\"), this.option(\"max\"));\r\n this.notifyObserver(\"currentDateUpdated\", date)\r\n },\r\n _getNextDate: function(direction) {\r\n var initialDate = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\r\n var stepConfig = this._getConfig();\r\n var offset = stepConfig.duration * direction;\r\n var date = stepConfig.getDate(new Date(initialDate || this.option(\"date\")), offset);\r\n return date\r\n },\r\n _renderFocusTarget: _common.noop,\r\n _initMarkup: function() {\r\n this.callBase();\r\n this._renderCaption()\r\n },\r\n _render: function() {\r\n this.callBase();\r\n this._renderPopover();\r\n this._renderCaptionKeys()\r\n },\r\n _isMobileLayout: function() {\r\n return !_devices.default.current().generic\r\n },\r\n _renderPopover: function() {\r\n var _this = this;\r\n var overlayType = this._isMobileLayout() ? _popup.default : _popover.default;\r\n var popoverContainer = (0, _renderer.default)(\"
\").addClass(CALENDAR_POPOVER_CLASS);\r\n this._popover = this._createComponent(popoverContainer, overlayType, {\r\n contentTemplate: function() {\r\n return _this._createPopupContent()\r\n },\r\n defaultOptionsRules: [{\r\n device: function() {\r\n return !_devices.default.current().generic\r\n },\r\n options: {\r\n fullScreen: true,\r\n showCloseButton: false,\r\n toolbarItems: [{\r\n shortcut: \"cancel\"\r\n }]\r\n }\r\n }, {\r\n device: function() {\r\n return _devices.default.current().generic\r\n },\r\n options: {\r\n target: this._caption.$element()\r\n }\r\n }]\r\n });\r\n this._popover.$element().appendTo(this.$element())\r\n },\r\n _createScrollable: function(content) {\r\n var result = this._createComponent((0, _renderer.default)(\"
\"), _ui3.default, {\r\n direction: \"vertical\"\r\n });\r\n result.$content().append(content);\r\n return result\r\n },\r\n _createPopupContent: function() {\r\n var result = (0, _renderer.default)(\"
\").addClass(CALENDAR_CLASS);\r\n this._calendar = this._createComponent(result, _calendar.default, this._calendarOptions());\r\n if (this._isMobileLayout()) {\r\n var scrollable = this._createScrollable(result);\r\n return scrollable.$element()\r\n }\r\n return result\r\n },\r\n _calendarOptions: function() {\r\n return {\r\n min: this.option(\"min\"),\r\n max: this.option(\"max\"),\r\n firstDayOfWeek: this.option(\"firstDayOfWeek\"),\r\n value: this.option(\"date\"),\r\n _todayDate: this.option(\"todayDate\"),\r\n focusStateEnabled: this.option(\"focusStateEnabled\"),\r\n onValueChanged: function(e) {\r\n if (!this.option(\"visible\")) {\r\n return\r\n }\r\n this.notifyObserver(\"currentDateUpdated\", e.value);\r\n this._popover.hide()\r\n }.bind(this),\r\n hasFocus: function() {\r\n return true\r\n },\r\n tabIndex: null\r\n }\r\n },\r\n _renderCaption: function() {\r\n var _this2 = this;\r\n var date = this.option(\"displayedDate\") || this.option(\"date\");\r\n var captionConfig = this._getConfig().getCaption.call(this, date);\r\n var customizationFunction = this.option(\"customizeDateNavigatorText\");\r\n var caption = (0, _type.isFunction)(customizationFunction) ? customizationFunction(captionConfig) : captionConfig.text;\r\n this._caption.option({\r\n text: caption,\r\n onKeyboardHandled: function(opts) {\r\n _this2.option(\"focusStateEnabled\") && !_this2.option(\"disabled\") && _this2._calendar._keyboardHandler(opts)\r\n },\r\n onClick: function() {\r\n return _this2._popover.toggle()\r\n }\r\n })\r\n },\r\n _renderCaptionKeys: function() {\r\n if (!this.option(\"focusStateEnabled\") || this.option(\"disabled\")) {\r\n return\r\n }\r\n var that = this;\r\n var executeHandler = function() {\r\n if (that._popover.$content().is(\":hidden\")) {\r\n that._popover.show()\r\n } else {\r\n return true\r\n }\r\n };\r\n var tabHandler = function() {\r\n that._popover.hide()\r\n };\r\n this._caption.registerKeyHandler(\"enter\", executeHandler);\r\n this._caption.registerKeyHandler(\"space\", executeHandler);\r\n this._caption.registerKeyHandler(\"tab\", tabHandler)\r\n },\r\n _setCalendarOption: function(name, value) {\r\n if (this._calendar) {\r\n this._calendar.option(name, value)\r\n }\r\n },\r\n _getConfig: function() {\r\n var step = this.option(\"step\");\r\n var config = getConfig.call(this, step);\r\n if (!config) {\r\n throw _ui.default.Error(\"E1033\", step)\r\n }\r\n return config\r\n }\r\n}).include(_uiScheduler.default);\r\n(0, _component_registrator.default)(\"dxSchedulerNavigator\", SchedulerNavigator);\r\nvar _default = SchedulerNavigator;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.resource_manager.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _object = require(\"../../core/utils/object\");\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _query = _interopRequireDefault(require(\"../../data/query\"));\r\nvar _data = require(\"../../core/utils/data\");\r\nvar _data_source = require(\"../../data/data_source/data_source\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _utils = require(\"../../data/data_source/utils\");\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar getValueExpr = function(resource) {\r\n return resource.valueExpr || \"id\"\r\n};\r\nvar getDisplayExpr = function(resource) {\r\n return resource.displayExpr || \"text\"\r\n};\r\nvar ResourceManager = function() {\r\n function ResourceManager(resources) {\r\n this._resourceLoader = {};\r\n this.setResources(resources)\r\n }\r\n var _proto = ResourceManager.prototype;\r\n _proto._createWrappedDataSource = function(dataSource) {\r\n if (dataSource instanceof _data_source.DataSource) {\r\n return dataSource\r\n }\r\n var result = {\r\n store: (0, _utils.normalizeDataSourceOptions)(dataSource).store,\r\n pageSize: 0\r\n };\r\n if (!Array.isArray(dataSource)) {\r\n result.filter = dataSource.filter\r\n }\r\n return new _data_source.DataSource(result)\r\n };\r\n _proto._mapResourceData = function(resource, data) {\r\n var valueGetter = (0, _data.compileGetter)(getValueExpr(resource));\r\n var displayGetter = (0, _data.compileGetter)(getDisplayExpr(resource));\r\n return (0, _iterator.map)(data, function(item) {\r\n var result = {\r\n id: valueGetter(item),\r\n text: displayGetter(item)\r\n };\r\n if (item.color) {\r\n result.color = item.color\r\n }\r\n return result\r\n })\r\n };\r\n _proto._isMultipleResource = function(resourceField) {\r\n var result = false;\r\n (0, _iterator.each)(this.getResources(), function(_, resource) {\r\n var field = this.getField(resource);\r\n if (field === resourceField) {\r\n result = resource.allowMultiple;\r\n return false\r\n }\r\n }.bind(this));\r\n return result\r\n };\r\n _proto.getDataAccessors = function(field, type) {\r\n var result = null;\r\n (0, _iterator.each)(this._dataAccessors[type], function(accessorName, accessors) {\r\n if (field === accessorName) {\r\n result = accessors;\r\n return false\r\n }\r\n });\r\n return result\r\n };\r\n _proto.getField = function(resource) {\r\n return resource.fieldExpr || resource.field\r\n };\r\n _proto.setResources = function(resources) {\r\n this._resources = resources;\r\n this._dataAccessors = {\r\n getter: {},\r\n setter: {}\r\n };\r\n this._resourceFields = (0, _iterator.map)(resources || [], function(resource) {\r\n var field = this.getField(resource);\r\n this._dataAccessors.getter[field] = (0, _data.compileGetter)(field);\r\n this._dataAccessors.setter[field] = (0, _data.compileSetter)(field);\r\n return field\r\n }.bind(this))\r\n };\r\n _proto.getResources = function() {\r\n return this._resources || []\r\n };\r\n _proto.getResourcesData = function() {\r\n return this._resourcesData || []\r\n };\r\n _proto.getEditors = function() {\r\n var result = [];\r\n var that = this;\r\n (0, _iterator.each)(this.getResources(), function(i, resource) {\r\n var field = that.getField(resource);\r\n var currentResourceItems = that._getResourceDataByField(field);\r\n result.push({\r\n editorOptions: {\r\n dataSource: currentResourceItems.length ? currentResourceItems : that._createWrappedDataSource(resource.dataSource),\r\n displayExpr: getDisplayExpr(resource),\r\n valueExpr: getValueExpr(resource)\r\n },\r\n dataField: field,\r\n editorType: resource.allowMultiple ? \"dxTagBox\" : \"dxSelectBox\",\r\n label: {\r\n text: resource.label || field\r\n }\r\n })\r\n });\r\n return result\r\n };\r\n _proto.getResourceDataByValue = function(field, value) {\r\n var that = this;\r\n var result = new _deferred.Deferred;\r\n (0, _iterator.each)(this.getResources(), function(_, resource) {\r\n var resourceField = that.getField(resource);\r\n if (resourceField === field) {\r\n var dataSource = that._createWrappedDataSource(resource.dataSource);\r\n var valueExpr = getValueExpr(resource);\r\n if (!that._resourceLoader[field]) {\r\n that._resourceLoader[field] = dataSource.load()\r\n }\r\n that._resourceLoader[field].done(function(data) {\r\n var filteredData = (0, _query.default)(data).filter(valueExpr, value).toArray();\r\n delete that._resourceLoader[field];\r\n result.resolve(filteredData[0])\r\n }).fail(function() {\r\n delete that._resourceLoader[field];\r\n result.reject()\r\n });\r\n return false\r\n }\r\n });\r\n return result.promise()\r\n };\r\n _proto.setResourcesToItem = function(itemData, resources) {\r\n var resourcesSetter = this._dataAccessors.setter;\r\n for (var name in resources) {\r\n if (Object.prototype.hasOwnProperty.call(resources, name)) {\r\n var resourceData = resources[name];\r\n resourcesSetter[name](itemData, this._isMultipleResource(name) ? (0, _array.wrapToArray)(resourceData) : resourceData)\r\n }\r\n }\r\n };\r\n _proto.getResourcesFromItem = function(itemData, wrapOnlyMultipleResources) {\r\n var _this = this;\r\n var result = null;\r\n if (!(0, _type.isDefined)(wrapOnlyMultipleResources)) {\r\n wrapOnlyMultipleResources = false\r\n }\r\n this._resourceFields.forEach(function(field) {\r\n (0, _iterator.each)(itemData, function(fieldName, fieldValue) {\r\n var tempObject = {};\r\n tempObject[fieldName] = fieldValue;\r\n var resourceData = _this.getDataAccessors(field, \"getter\")(tempObject);\r\n if ((0, _type.isDefined)(resourceData)) {\r\n if (!result) {\r\n result = {}\r\n }\r\n if (1 === resourceData.length) {\r\n resourceData = resourceData[0]\r\n }\r\n if (!wrapOnlyMultipleResources || wrapOnlyMultipleResources && _this._isMultipleResource(field)) {\r\n _this.getDataAccessors(field, \"setter\")(tempObject, (0, _array.wrapToArray)(resourceData))\r\n } else {\r\n _this.getDataAccessors(field, \"setter\")(tempObject, resourceData)\r\n }(0, _extend.extend)(result, tempObject);\r\n return true\r\n }\r\n })\r\n });\r\n return result\r\n };\r\n _proto.loadResources = function(groups) {\r\n var result = new _deferred.Deferred;\r\n var that = this;\r\n var deferreds = [];\r\n (0, _iterator.each)(this.getResourcesByFields(groups), function(i, resource) {\r\n var deferred = new _deferred.Deferred;\r\n var field = that.getField(resource);\r\n deferreds.push(deferred);\r\n that._createWrappedDataSource(resource.dataSource).load().done(function(data) {\r\n deferred.resolve({\r\n name: field,\r\n items: that._mapResourceData(resource, data),\r\n data: data\r\n })\r\n }).fail(function() {\r\n deferred.reject()\r\n })\r\n });\r\n if (!deferreds.length) {\r\n that._resourcesData = [];\r\n return result.resolve([])\r\n }\r\n _deferred.when.apply(null, deferreds).done(function() {\r\n var data = Array.prototype.slice.call(arguments);\r\n var mapFunction = function(obj) {\r\n return {\r\n name: obj.name,\r\n items: obj.items,\r\n data: obj.data\r\n }\r\n };\r\n that._resourcesData = data;\r\n result.resolve(data.map(mapFunction))\r\n }).fail(function() {\r\n result.reject()\r\n });\r\n return result.promise()\r\n };\r\n _proto.getResourcesByFields = function(fields) {\r\n return (0, _common.grep)(this.getResources(), function(resource) {\r\n var field = this.getField(resource);\r\n return (0, _array.inArray)(field, fields) > -1\r\n }.bind(this))\r\n };\r\n _proto.getResourceByField = function(field) {\r\n return this.getResourcesByFields([field])[0] || {}\r\n };\r\n _proto.getResourceColor = function(field, value) {\r\n var valueExpr = this.getResourceByField(field).valueExpr || \"id\";\r\n var valueGetter = (0, _data.compileGetter)(valueExpr);\r\n var colorExpr = this.getResourceByField(field).colorExpr || \"color\";\r\n var colorGetter = (0, _data.compileGetter)(colorExpr);\r\n var result = new _deferred.Deferred;\r\n var resourceData = this._getResourceDataByField(field);\r\n var resourceDataLength = resourceData.length;\r\n var color;\r\n if (resourceDataLength) {\r\n for (var i = 0; i < resourceDataLength; i++) {\r\n if (valueGetter(resourceData[i]) === value) {\r\n color = colorGetter(resourceData[i]);\r\n break\r\n }\r\n }\r\n result.resolve(color)\r\n } else {\r\n this.getResourceDataByValue(field, value).done(function(resourceData) {\r\n if (resourceData) {\r\n color = colorGetter(resourceData)\r\n }\r\n result.resolve(color)\r\n }).fail(function() {\r\n result.reject()\r\n })\r\n }\r\n return result.promise()\r\n };\r\n _proto.getResourceForPainting = function(groups) {\r\n var resources = this.getResources();\r\n var result;\r\n (0, _iterator.each)(resources, function(index, resource) {\r\n if (resource.useColorAsDefault) {\r\n result = resource;\r\n return false\r\n }\r\n });\r\n if (!result) {\r\n if (Array.isArray(groups) && groups.length) {\r\n resources = this.getResourcesByFields(groups)\r\n }\r\n result = resources[resources.length - 1]\r\n }\r\n return result\r\n };\r\n _proto.createResourcesTree = function(groups) {\r\n var leafIndex = 0;\r\n var groupIndex = groupIndex || 0;\r\n\r\n function make(group, groupIndex, result, parent) {\r\n result = result || [];\r\n for (var i = 0; i < group.items.length; i++) {\r\n var currentGroupItem = group.items[i];\r\n var resultItem = {\r\n name: group.name,\r\n value: currentGroupItem.id,\r\n title: currentGroupItem.text,\r\n data: group.data && group.data[i],\r\n children: [],\r\n parent: parent ? parent : null\r\n };\r\n result.push(resultItem);\r\n var nextGroupIndex = groupIndex + 1;\r\n if (groups[nextGroupIndex]) {\r\n make.call(this, groups[nextGroupIndex], nextGroupIndex, resultItem.children, resultItem)\r\n }\r\n if (!resultItem.children.length) {\r\n resultItem.leafIndex = leafIndex;\r\n leafIndex++\r\n }\r\n }\r\n return result\r\n }\r\n return make.call(this, groups[0], 0)\r\n };\r\n _proto._hasGroupItem = function(appointmentResources, groupName, itemValue) {\r\n var group = this.getDataAccessors(groupName, \"getter\")(appointmentResources);\r\n if (group) {\r\n if ((0, _array.inArray)(itemValue, group) > -1) {\r\n return true\r\n }\r\n }\r\n return false\r\n };\r\n _proto._getResourceDataByField = function(fieldName) {\r\n var loadedResources = this.getResourcesData();\r\n var currentResourceData = [];\r\n for (var i = 0, resourceCount = loadedResources.length; i < resourceCount; i++) {\r\n if (loadedResources[i].name === fieldName) {\r\n currentResourceData = loadedResources[i].data;\r\n break\r\n }\r\n }\r\n return currentResourceData\r\n };\r\n _proto.getResourceTreeLeaves = function(tree, appointmentResources, result) {\r\n result = result || [];\r\n for (var i = 0; i < tree.length; i++) {\r\n if (!this._hasGroupItem(appointmentResources, tree[i].name, tree[i].value)) {\r\n continue\r\n }\r\n if ((0, _type.isDefined)(tree[i].leafIndex)) {\r\n result.push(tree[i].leafIndex)\r\n }\r\n if (tree[i].children) {\r\n this.getResourceTreeLeaves(tree[i].children, appointmentResources, result)\r\n }\r\n }\r\n return result\r\n };\r\n _proto.groupAppointmentsByResources = function(appointments, resources) {\r\n var tree = this.createResourcesTree(resources);\r\n var result = {};\r\n (0, _iterator.each)(appointments, function(_, appointment) {\r\n var appointmentResources = this.getResourcesFromItem(appointment);\r\n var treeLeaves = this.getResourceTreeLeaves(tree, appointmentResources);\r\n for (var i = 0; i < treeLeaves.length; i++) {\r\n if (!result[treeLeaves[i]]) {\r\n result[treeLeaves[i]] = []\r\n }\r\n result[treeLeaves[i]].push((0, _object.deepExtendArraySafe)({}, appointment, true))\r\n }\r\n }.bind(this));\r\n return result\r\n };\r\n _proto.reduceResourcesTree = function(tree, existingAppointments, _result) {\r\n _result = _result ? _result.children : [];\r\n var that = this;\r\n tree.forEach(function(node, index) {\r\n var ok = false;\r\n var resourceName = node.name;\r\n var resourceValue = node.value;\r\n var resourceTitle = node.title;\r\n var resourceData = node.data;\r\n var resourceGetter = that.getDataAccessors(resourceName, \"getter\");\r\n existingAppointments.forEach(function(appointment) {\r\n if (!ok) {\r\n var resourceFromAppointment = resourceGetter(appointment);\r\n if (Array.isArray(resourceFromAppointment)) {\r\n if (resourceFromAppointment.indexOf(resourceValue) > -1) {\r\n _result.push({\r\n name: resourceName,\r\n value: resourceValue,\r\n title: resourceTitle,\r\n data: resourceData,\r\n children: []\r\n });\r\n ok = true\r\n }\r\n } else {\r\n if (resourceFromAppointment === resourceValue) {\r\n _result.push({\r\n name: resourceName,\r\n value: resourceValue,\r\n title: resourceTitle,\r\n data: resourceData,\r\n children: []\r\n });\r\n ok = true\r\n }\r\n }\r\n }\r\n });\r\n if (ok && node.children && node.children.length) {\r\n that.reduceResourcesTree(node.children, existingAppointments, _result[index])\r\n }\r\n });\r\n return _result\r\n };\r\n _proto.getResourcesDataByGroups = function(groups) {\r\n var _this2 = this;\r\n var resourcesData = this.getResourcesData();\r\n if (!groups) {\r\n return resourcesData\r\n }\r\n var fieldNames = Object.getOwnPropertyNames(groups);\r\n var resourceData = resourcesData.filter(function(item) {\r\n return fieldNames.indexOf(item.name) !== -1\r\n });\r\n var currentResourcesData = [];\r\n resourceData.forEach(function(data) {\r\n return currentResourcesData.push((0, _extend.extend)({}, data))\r\n });\r\n (0, _iterator.each)(groups, function(_, value) {\r\n currentResourcesData.forEach(function(resourceData) {\r\n var items = resourceData.items,\r\n data = resourceData.data,\r\n name = resourceData.name;\r\n var resource = _this2.getResourceByField(name);\r\n var valueExpr = getValueExpr(resource);\r\n var currentItems = items.filter(function(item) {\r\n return item.id === value\r\n });\r\n var currentData = data.filter(function(item) {\r\n return item[valueExpr] === value\r\n });\r\n resourceData.items = currentItems;\r\n resourceData.data = currentData\r\n })\r\n });\r\n return currentResourcesData\r\n };\r\n return ResourceManager\r\n}();\r\nexports.default = ResourceManager;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.subscribes.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar _renderer = _interopRequireDefault(require(\"../../core/renderer\"));\r\nvar _array = require(\"../../core/utils/array\");\r\nvar _type = require(\"../../core/utils/type\");\r\nvar _date = _interopRequireDefault(require(\"../../core/utils/date\"));\r\nvar _iterator = require(\"../../core/utils/iterator\");\r\nvar _ui = _interopRequireDefault(require(\"../widget/ui.errors\"));\r\nvar _translator = require(\"../../animation/translator\");\r\nvar _common = require(\"../../core/utils/common\");\r\nvar _extend = require(\"../../core/utils/extend\");\r\nvar _deferred = require(\"../../core/utils/deferred\");\r\nvar _date2 = _interopRequireDefault(require(\"../../localization/date\"));\r\nvar _utils = _interopRequireDefault(require(\"./utils.timeZone\"));\r\nvar _constants = require(\"./constants\");\r\nvar _utils2 = _interopRequireDefault(require(\"./utils\"));\r\n\r\nfunction _interopRequireDefault(obj) {\r\n return obj && obj.__esModule ? obj : {\r\n \"default\": obj\r\n }\r\n}\r\nvar HOURS_IN_DAY = 24;\r\nvar toMs = _date.default.dateToMilliseconds;\r\nvar HOUR_MS = toMs(\"hour\");\r\nvar subscribes = {\r\n getTimeZoneCalculator: function() {\r\n return this.timeZoneCalculator\r\n },\r\n isCurrentViewAgenda: function() {\r\n return \"agenda\" === this.option(\"currentView\")\r\n },\r\n currentViewUpdated: function(currentView) {\r\n this.option(\"currentView\", currentView)\r\n },\r\n currentDateUpdated: function(date) {\r\n this.option(\"currentDate\", date)\r\n },\r\n getOption: function(name) {\r\n return this.option(name)\r\n },\r\n isVirtualScrolling: function() {\r\n return this.isVirtualScrolling()\r\n },\r\n setCellDataCacheAlias: function(appointment, geometry) {\r\n this._workSpace.setCellDataCacheAlias(appointment, geometry)\r\n },\r\n createAppointmentSettings: function(appointment) {\r\n return this._getAppointmentSettingsGenerator().create(appointment)\r\n },\r\n isGroupedByDate: function() {\r\n return this.getWorkSpace().isGroupedByDate()\r\n },\r\n showAppointmentTooltip: function(options) {\r\n var targetedAppointment = this.getTargetedAppointment(options.data, options.target);\r\n this.showAppointmentTooltip(options.data, options.target, targetedAppointment)\r\n },\r\n hideAppointmentTooltip: function() {\r\n this.hideAppointmentTooltip()\r\n },\r\n showAddAppointmentPopup: function(cellData, cellGroups) {\r\n var appointmentAdapter = this.createAppointmentAdapter({});\r\n appointmentAdapter.allDay = cellData.allDay;\r\n appointmentAdapter.startDate = this.timeZoneCalculator.createDate(cellData.startDate, {\r\n path: \"fromGrid\"\r\n });\r\n appointmentAdapter.endDate = this.timeZoneCalculator.createDate(cellData.endDate, {\r\n path: \"fromGrid\"\r\n });\r\n var resultAppointment = (0, _extend.extend)(appointmentAdapter.source(), cellGroups);\r\n this.showAppointmentPopup(resultAppointment, true)\r\n },\r\n showEditAppointmentPopup: function(options) {\r\n var targetedData = this.getTargetedAppointment(options.data, options.target);\r\n this.showAppointmentPopup(options.data, false, targetedData)\r\n },\r\n updateAppointmentAfterResize: function(options) {\r\n var info = _utils2.default.dataAccessors.getAppointmentInfo(options.$appointment);\r\n var exceptionDate = info.sourceAppointment.exceptionDate;\r\n this._checkRecurringAppointment(options.target, options.data, exceptionDate, function() {\r\n this._updateAppointment(options.target, options.data, function() {\r\n this._appointments.moveAppointmentBack()\r\n })\r\n }.bind(this))\r\n },\r\n getUpdatedData: function(rawAppointment) {\r\n return this._getUpdatedData(rawAppointment)\r\n },\r\n updateAppointmentAfterDrag: function(_ref) {\r\n var event = _ref.event,\r\n element = _ref.element,\r\n rawAppointment = _ref.rawAppointment,\r\n coordinates = _ref.coordinates;\r\n var info = _utils2.default.dataAccessors.getAppointmentInfo(element);\r\n var appointment = this.createAppointmentAdapter(rawAppointment);\r\n var targetedAppointment = this.createAppointmentAdapter((0, _extend.extend)({}, rawAppointment, this._getUpdatedData(rawAppointment)));\r\n var targetedRawAppointment = targetedAppointment.source();\r\n var newCellIndex = this._workSpace.getDroppableCellIndex();\r\n var oldCellIndex = this._workSpace.getCellIndexByCoordinates(coordinates);\r\n var becomeAllDay = targetedAppointment.allDay;\r\n var wasAllDay = appointment.allDay;\r\n var movedBetweenAllDayAndSimple = this._workSpace.supportAllDayRow() && (wasAllDay && !becomeAllDay || !wasAllDay && becomeAllDay);\r\n if (newCellIndex !== oldCellIndex || movedBetweenAllDayAndSimple) {\r\n this._checkRecurringAppointment(rawAppointment, targetedRawAppointment, info.sourceAppointment.exceptionDate, function() {\r\n this._updateAppointment(rawAppointment, targetedRawAppointment, function() {\r\n this._appointments.moveAppointmentBack(event)\r\n }, event)\r\n }.bind(this), void 0, void 0, event)\r\n } else {\r\n this._appointments.moveAppointmentBack(event)\r\n }\r\n },\r\n onDeleteButtonPress: function(options) {\r\n var targetedData = this.getTargetedAppointment(options.data, (0, _renderer.default)(options.target));\r\n this.checkAndDeleteAppointment(options.data, targetedData);\r\n this.hideAppointmentTooltip()\r\n },\r\n getAppointmentColor: function(options) {\r\n var resourcesManager = this._resourcesManager;\r\n var resourceForPainting = resourcesManager.getResourceForPainting(this._getCurrentViewOption(\"groups\"));\r\n var response = (new _deferred.Deferred).resolve().promise();\r\n if (resourceForPainting) {\r\n var field = resourcesManager.getField(resourceForPainting);\r\n var groupIndex = options.groupIndex;\r\n var groups = this._workSpace._getCellGroups(groupIndex);\r\n var resourceValues = (0, _array.wrapToArray)(resourcesManager.getDataAccessors(field, \"getter\")(options.itemData));\r\n var groupId = resourceValues.length ? resourceValues[0] : void 0;\r\n for (var i = 0; i < groups.length; i++) {\r\n if (groups[i].name === field) {\r\n groupId = groups[i].id;\r\n break\r\n }\r\n }\r\n response = resourcesManager.getResourceColor(field, groupId)\r\n }\r\n return response\r\n },\r\n getHeaderHeight: function() {\r\n return this._header._$element && parseInt(this._header._$element.outerHeight(), 10)\r\n },\r\n getResourcesFromItem: function(itemData) {\r\n return this._resourcesManager.getResourcesFromItem(itemData)\r\n },\r\n getBoundOffset: function() {\r\n return {\r\n top: -this.getWorkSpaceAllDayHeight()\r\n }\r\n },\r\n appointmentTakesSeveralDays: function(appointment) {\r\n return this._appointmentModel.appointmentTakesSeveralDays(appointment)\r\n },\r\n getTextAndFormatDate: function(appointmentRaw, targetedAppointmentRaw, format) {\r\n var appointmentAdapter = this.createAppointmentAdapter(appointmentRaw);\r\n var targetedAdapter = this.createAppointmentAdapter(targetedAppointmentRaw || appointmentRaw);\r\n var startDate = this.timeZoneCalculator.createDate(targetedAdapter.startDate, {\r\n path: \"toGrid\"\r\n });\r\n var endDate = this.timeZoneCalculator.createDate(targetedAdapter.endDate, {\r\n path: \"toGrid\"\r\n });\r\n var formatType = format || this.fire(\"_getTypeFormat\", startDate, endDate, targetedAdapter.allDay);\r\n return {\r\n text: targetedAdapter.text || appointmentAdapter.text,\r\n formatDate: this.fire(\"_formatDates\", startDate, endDate, formatType)\r\n }\r\n },\r\n _getTypeFormat: function(startDate, endDate, isAllDay) {\r\n if (isAllDay) {\r\n return \"DATE\"\r\n }\r\n if (\"month\" !== this.option(\"currentView\") && _date.default.sameDate(startDate, endDate)) {\r\n return \"TIME\"\r\n }\r\n return \"DATETIME\"\r\n },\r\n _createAppointmentTitle: function(data) {\r\n if ((0, _type.isPlainObject)(data)) {\r\n return data.text\r\n }\r\n return String(data)\r\n },\r\n _formatDates: function(startDate, endDate, formatType) {\r\n var dateFormat = \"monthandday\";\r\n var timeFormat = \"shorttime\";\r\n var isSameDate = startDate.getDate() === endDate.getDate();\r\n switch (formatType) {\r\n case \"DATETIME\":\r\n return [_date2.default.format(startDate, dateFormat), \" \", _date2.default.format(startDate, timeFormat), \" - \", isSameDate ? \"\" : _date2.default.format(endDate, dateFormat) + \" \", _date2.default.format(endDate, timeFormat)].join(\"\");\r\n case \"TIME\":\r\n return \"\".concat(_date2.default.format(startDate, timeFormat), \" - \").concat(_date2.default.format(endDate, timeFormat));\r\n case \"DATE\":\r\n return \"\".concat(_date2.default.format(startDate, dateFormat)).concat(isSameDate ? \"\" : \" - \" + _date2.default.format(endDate, dateFormat))\r\n }\r\n },\r\n getResizableAppointmentArea: function(options) {\r\n var allDay = options.allDay;\r\n var groups = this._getCurrentViewOption(\"groups\");\r\n if (groups && groups.length) {\r\n if (allDay || this.getLayoutManager().getRenderingStrategyInstance()._needHorizontalGroupBounds()) {\r\n var horizontalGroupBounds = this._workSpace.getGroupBounds(options.coordinates);\r\n return {\r\n left: horizontalGroupBounds.left,\r\n right: horizontalGroupBounds.right,\r\n top: 0,\r\n bottom: 0\r\n }\r\n }\r\n if (this.getLayoutManager().getRenderingStrategyInstance()._needVerticalGroupBounds(allDay) && this._workSpace._isVerticalGroupedWorkSpace()) {\r\n var verticalGroupBounds = this._workSpace.getGroupBounds(options.coordinates);\r\n return {\r\n left: 0,\r\n right: 0,\r\n top: verticalGroupBounds.top,\r\n bottom: verticalGroupBounds.bottom\r\n }\r\n }\r\n }\r\n },\r\n needRecalculateResizableArea: function() {\r\n return this.getWorkSpace().needRecalculateResizableArea()\r\n },\r\n getAppointmentGeometry: function(settings) {\r\n return this.getLayoutManager().getRenderingStrategyInstance().getAppointmentGeometry(settings)\r\n },\r\n isAllDay: function(appointmentData) {\r\n return this.getLayoutManager().getRenderingStrategyInstance().isAllDay(appointmentData)\r\n },\r\n getDeltaTime: function(e, initialSize, itemData) {\r\n return this.getLayoutManager().getRenderingStrategyInstance().getDeltaTime(e, initialSize, itemData)\r\n },\r\n getDropDownAppointmentWidth: function(isAllDay) {\r\n return this.getLayoutManager().getRenderingStrategyInstance().getDropDownAppointmentWidth(this._getViewCountConfig().intervalCount, isAllDay)\r\n },\r\n getDropDownAppointmentHeight: function() {\r\n return this.getLayoutManager().getRenderingStrategyInstance().getDropDownAppointmentHeight()\r\n },\r\n getCellWidth: function() {\r\n return this.getWorkSpace().getCellWidth()\r\n },\r\n getCellHeight: function() {\r\n return this.getWorkSpace().getCellHeight()\r\n },\r\n getResizableStep: function() {\r\n var workSpace = this.getWorkSpace();\r\n var cellWidth = workSpace.getCellWidth();\r\n if (workSpace.isGroupedByDate()) {\r\n return workSpace._getGroupCount() * cellWidth\r\n }\r\n return cellWidth\r\n },\r\n getRenderingStrategy: function() {\r\n return this._getAppointmentsRenderingStrategy()\r\n },\r\n getMaxAppointmentCountPerCellByType: function(isAllDay) {\r\n return this.getRenderingStrategyInstance()._getMaxAppointmentCountPerCellByType(isAllDay)\r\n },\r\n needCorrectAppointmentDates: function() {\r\n return this.getRenderingStrategyInstance().needCorrectAppointmentDates()\r\n },\r\n getRenderingStrategyDirection: function() {\r\n return this.getRenderingStrategyInstance().getDirection()\r\n },\r\n getWorkSpaceDateTableOffset: function() {\r\n return this.getWorkSpaceDateTableOffset()\r\n },\r\n getFullWeekAppointmentWidth: function(options) {\r\n var groupIndex = options.groupIndex;\r\n return this._workSpace.getGroupWidth(groupIndex)\r\n },\r\n getMaxAppointmentWidth: function(options) {\r\n var workSpace = this._workSpace;\r\n return workSpace.getCellCountToLastViewDate(options.date) * workSpace.getCellWidth()\r\n },\r\n updateAppointmentStartDate: function(options) {\r\n var appointment = options.appointment;\r\n var firstViewDate = this._workSpace.getStartViewDate();\r\n var startDate = new Date(options.startDate);\r\n var startDayHour = this._getCurrentViewOption(\"startDayHour\");\r\n var updatedStartDate;\r\n if (this.appointmentTakesAllDay(appointment)) {\r\n updatedStartDate = _date.default.normalizeDate(startDate, firstViewDate)\r\n } else {\r\n if (startDate < firstViewDate) {\r\n startDate = firstViewDate\r\n }\r\n updatedStartDate = _date.default.normalizeDate(options.startDate, new Date(startDate))\r\n }\r\n return _date.default.roundDateByStartDayHour(updatedStartDate, startDayHour)\r\n },\r\n updateAppointmentEndDate: function(options) {\r\n var endDate = options.endDate;\r\n var endDayHour = this._getCurrentViewOption(\"endDayHour\");\r\n var startDayHour = this._getCurrentViewOption(\"startDayHour\");\r\n var updatedEndDate = endDate;\r\n if (endDate.getHours() >= endDayHour) {\r\n updatedEndDate.setHours(endDayHour, 0, 0, 0)\r\n } else {\r\n if (!options.isSameDate && startDayHour > 0 && 60 * endDate.getHours() + endDate.getMinutes() < 60 * startDayHour) {\r\n updatedEndDate = new Date(updatedEndDate.getTime() - toMs(\"day\"));\r\n updatedEndDate.setHours(endDayHour, 0, 0, 0)\r\n }\r\n }\r\n return updatedEndDate\r\n },\r\n renderCompactAppointments: function(options) {\r\n this._compactAppointmentsHelper.render(options)\r\n },\r\n clearCompactAppointments: function() {\r\n this._compactAppointmentsHelper.clear()\r\n },\r\n supportCompactDropDownAppointments: function() {\r\n return this._workSpace._supportCompactDropDownAppointments()\r\n },\r\n isApplyCompactAppointmentOffset: function() {\r\n return this._workSpace._isApplyCompactAppointmentOffset()\r\n },\r\n getGroupCount: function() {\r\n return this._workSpace._getGroupCount()\r\n },\r\n mapAppointmentFields: function(config) {\r\n var targetedData = this.getTargetedAppointment(config.itemData, config.itemElement);\r\n return {\r\n appointmentData: config.itemData,\r\n appointmentElement: config.itemElement,\r\n targetedAppointmentData: targetedData\r\n }\r\n },\r\n getOffsetByAllDayPanel: function(groupIndex) {\r\n return this._workSpace._getOffsetByAllDayPanel(groupIndex)\r\n },\r\n getGroupTop: function(groupIndex) {\r\n return this._workSpace._getGroupTop(groupIndex)\r\n },\r\n updateResizableArea: function() {\r\n var $allResizableElements = this.$element().find(\".dx-scheduler-appointment.dx-resizable\");\r\n var horizontalResizables = (0, _common.grep)($allResizableElements, function(el) {\r\n var $el = (0, _renderer.default)(el);\r\n var resizableInst = $el.dxResizable(\"instance\");\r\n var area = resizableInst.option(\"area\");\r\n return (0, _array.inArray)(resizableInst.option(\"handles\"), [\"right left\", \"left right\"]) > -1 && (0, _type.isPlainObject)(area)\r\n });\r\n (0, _iterator.each)(horizontalResizables, function(_, el) {\r\n var $el = (0, _renderer.default)(el);\r\n var position = (0, _translator.locate)($el);\r\n var appointmentData = this._appointments._getItemData($el);\r\n var area = this._appointments._calculateResizableArea({\r\n left: position.left\r\n }, appointmentData);\r\n $el.dxResizable(\"instance\").option(\"area\", area)\r\n }.bind(this))\r\n },\r\n getField: function(field, obj) {\r\n if (!(0, _type.isDefined)(this._dataAccessors.getter[field])) {\r\n return\r\n }\r\n return this._dataAccessors.getter[field](obj)\r\n },\r\n setField: function(field, obj, value) {\r\n if (!(0, _type.isDefined)(this._dataAccessors.setter[field])) {\r\n return\r\n }\r\n var splitExprStr = this.option(field + \"Expr\").split(\".\");\r\n var rootField = splitExprStr[0];\r\n if (void 0 === obj[rootField] && splitExprStr.length > 1) {\r\n var emptyChain = function(arr) {\r\n var result = {};\r\n var tmp = result;\r\n var arrLength = arr.length - 1;\r\n for (var i = 1; i < arrLength; i++) {\r\n tmp = tmp[arr[i]] = {}\r\n }\r\n return result\r\n }(splitExprStr);\r\n obj[rootField] = emptyChain\r\n }\r\n this._dataAccessors.setter[field](obj, value);\r\n return obj\r\n },\r\n renderAppointments: function() {\r\n this._renderAppointments()\r\n },\r\n prerenderFilter: function() {\r\n var dateRange = this.getWorkSpace().getDateRange();\r\n var resources = this._resourcesManager.getResourcesData();\r\n var startDayHour = this._getCurrentViewOption(\"startDayHour\");\r\n var endDayHour = this._getCurrentViewOption(\"endDayHour\");\r\n var allDay;\r\n if (!this.option(\"showAllDayPanel\") && this._workSpace.supportAllDayRow()) {\r\n allDay = false\r\n }\r\n return this._appointmentModel.filterLoadedAppointments({\r\n startDayHour: startDayHour,\r\n endDayHour: endDayHour,\r\n viewStartDayHour: startDayHour,\r\n viewEndDayHour: endDayHour,\r\n min: dateRange[0],\r\n max: dateRange[1],\r\n resources: resources,\r\n allDay: allDay,\r\n firstDayOfWeek: this.getFirstDayOfWeek(),\r\n recurrenceException: this._getRecurrenceException.bind(this)\r\n }, this.timeZoneCalculator)\r\n },\r\n prerenderFilterVirtual: function() {\r\n var _this = this;\r\n var workspace = this.getWorkSpace();\r\n var resourcesManager = this._resourcesManager;\r\n var isAllDaySupported = this.option(\"showAllDayPanel\") || !this._workSpace.supportAllDayRow();\r\n var viewDataProvider = workspace.viewDataProvider;\r\n var groupedData = viewDataProvider.viewData.groupedData;\r\n var groupedDataToRender = groupedData.filter(function(_ref2) {\r\n var dateTable = _ref2.dateTable;\r\n return dateTable.length > 0\r\n });\r\n var isVerticalGrouping = workspace._isVerticalGroupedWorkSpace();\r\n var endViewDate = workspace.getEndViewDateByEndDayHour();\r\n var filterOptions = [];\r\n groupedDataToRender.forEach(function(_ref3) {\r\n var groupIndex = _ref3.groupIndex,\r\n allDayPanel = _ref3.allDayPanel;\r\n var startDate = viewDataProvider.getGroupStartDate(groupIndex);\r\n var endDate = new Date(Math.min(viewDataProvider.getGroupEndDate(groupIndex), endViewDate));\r\n var startDayHour = startDate.getHours();\r\n var endDayHour = (startDayHour + (endDate - startDate) / HOUR_MS) % HOURS_IN_DAY;\r\n var allDay = false !== isAllDaySupported && (null === allDayPanel || void 0 === allDayPanel ? void 0 : allDayPanel.length) > 0;\r\n var groups = viewDataProvider.getCellsGroup(groupIndex);\r\n var groupResources = isVerticalGrouping ? resourcesManager.getResourcesDataByGroups(groups) : resourcesManager.getResourcesData();\r\n filterOptions.push({\r\n isVirtualScrolling: true,\r\n startDayHour: startDayHour,\r\n endDayHour: endDayHour,\r\n viewStartDayHour: _this._getCurrentViewOption(\"startDayHour\"),\r\n viewEndDayHour: _this._getCurrentViewOption(\"endDayHour\"),\r\n min: startDate,\r\n max: endDate,\r\n resources: groupResources,\r\n allDay: allDay,\r\n firstDayOfWeek: _this.getFirstDayOfWeek(),\r\n recurrenceException: _this._getRecurrenceException.bind(_this)\r\n })\r\n });\r\n var result = this._appointmentModel.filterLoadedVirtualAppointments(filterOptions, this.timeZoneCalculator, workspace._getGroupCount());\r\n return result\r\n },\r\n dayHasAppointment: function(day, appointment, trimTime) {\r\n return this.dayHasAppointment(day, appointment, trimTime)\r\n },\r\n createResourcesTree: function() {\r\n return this._resourcesManager.createResourcesTree(this._loadedResources)\r\n },\r\n getResourceTreeLeaves: function(tree, appointmentResources) {\r\n return this._resourcesManager.getResourceTreeLeaves(tree, appointmentResources)\r\n },\r\n createReducedResourcesTree: function() {\r\n var tree = this._resourcesManager.createResourcesTree(this._loadedResources);\r\n return this._resourcesManager.reduceResourcesTree(tree, this.getFilteredItems())\r\n },\r\n groupAppointmentsByResources: function(appointments) {\r\n var result = {\r\n 0: appointments\r\n };\r\n var groups = this._getCurrentViewOption(\"groups\");\r\n if (groups && groups.length && this._resourcesManager.getResourcesData().length) {\r\n result = this._resourcesManager.groupAppointmentsByResources(appointments, this._loadedResources)\r\n }\r\n var totalResourceCount = 0;\r\n (0, _iterator.each)(this._loadedResources, function(i, resource) {\r\n if (!i) {\r\n totalResourceCount = resource.items.length\r\n } else {\r\n totalResourceCount *= resource.items.length\r\n }\r\n });\r\n for (var j = 0; j < totalResourceCount; j++) {\r\n var index = j.toString();\r\n if (result[index]) {\r\n continue\r\n }\r\n result[index] = []\r\n }\r\n return result\r\n },\r\n getAgendaRows: function(options) {\r\n var renderingStrategy = this._layoutManager.getRenderingStrategyInstance();\r\n var calculateRows = renderingStrategy.calculateRows.bind(renderingStrategy);\r\n var d = new _deferred.Deferred;\r\n\r\n function rowsCalculated(appointments) {\r\n var result = calculateRows(appointments, options.agendaDuration, options.currentDate);\r\n this._dataSourceLoadedCallback.remove(rowsCalculated);\r\n d.resolve(result)\r\n }\r\n this._dataSourceLoadedCallback.add(rowsCalculated);\r\n return d.promise()\r\n },\r\n getAgendaVerticalStepHeight: function() {\r\n return this.getWorkSpace().getAgendaVerticalStepHeight()\r\n },\r\n getAgendaDuration: function() {\r\n return this._getCurrentViewOption(\"agendaDuration\")\r\n },\r\n getStartViewDate: function() {\r\n return this.getStartViewDate()\r\n },\r\n getEndViewDate: function() {\r\n return this.getEndViewDate()\r\n },\r\n getMaxAppointmentsPerCell: function() {\r\n return this.getMaxAppointmentsPerCell()\r\n },\r\n forceMaxAppointmentPerCell: function() {\r\n return this.forceMaxAppointmentPerCell()\r\n },\r\n onAgendaReady: function(rows) {\r\n var $appts = this.getAppointmentsInstance()._itemElements();\r\n var total = 0;\r\n var applyClass = function(_, count) {\r\n var index = count + total - 1;\r\n $appts.eq(index).addClass(_constants.AGENDA_LAST_IN_DATE_APPOINTMENT_CLASS);\r\n total += count\r\n };\r\n for (var i = 0; i < rows.length; i++) {\r\n (0, _iterator.each)(rows[i], applyClass)\r\n }\r\n },\r\n getTimezone: function() {\r\n return this._getTimezoneOffsetByOption()\r\n },\r\n getTargetedAppointmentData: function(appointment, element) {\r\n return this.getTargetedAppointment(appointment, element)\r\n },\r\n getAppointmentDurationInMs: function(options) {\r\n var startDate = options.startDate;\r\n var endDate = options.endDate;\r\n var allDay = options.allDay;\r\n var appointmentDuration = endDate.getTime() - startDate.getTime();\r\n var dayDuration = toMs(\"day\");\r\n var visibleDayDuration = this._workSpace.getVisibleDayDuration();\r\n var result = 0;\r\n if (allDay) {\r\n var ceilQuantityOfDays = Math.ceil(appointmentDuration / dayDuration);\r\n result = ceilQuantityOfDays * visibleDayDuration\r\n } else {\r\n var isDifferentDates = !_utils.default.isSameAppointmentDates(startDate, endDate);\r\n var floorQuantityOfDays = Math.floor(appointmentDuration / dayDuration);\r\n var tailDuration;\r\n if (isDifferentDates) {\r\n var startDateEndHour = new Date(new Date(startDate).setHours(this.option(\"endDayHour\"), 0, 0));\r\n var hiddenDayDuration = dayDuration - visibleDayDuration - (startDate.getTime() > startDateEndHour.getTime() ? startDate.getTime() - startDateEndHour.getTime() : 0);\r\n tailDuration = appointmentDuration - (floorQuantityOfDays ? floorQuantityOfDays * dayDuration : hiddenDayDuration);\r\n var startDayTime = this.option(\"startDayHour\") * toMs(\"hour\");\r\n var endPartDuration = endDate - _date.default.trimTime(endDate);\r\n if (endPartDuration < startDayTime) {\r\n if (floorQuantityOfDays) {\r\n tailDuration -= hiddenDayDuration\r\n }\r\n tailDuration += startDayTime - endPartDuration\r\n }\r\n } else {\r\n tailDuration = appointmentDuration % dayDuration\r\n }\r\n if (tailDuration > visibleDayDuration) {\r\n tailDuration = visibleDayDuration\r\n }\r\n result = floorQuantityOfDays * visibleDayDuration + tailDuration || toMs(\"minute\")\r\n }\r\n return result\r\n },\r\n replaceWrongEndDate: function(appointment, startDate, endDate) {\r\n this._appointmentModel.replaceWrongEndDate(appointment, startDate, endDate)\r\n },\r\n calculateAppointmentEndDate: function(isAllDay, startDate) {\r\n return this._appointmentModel._calculateAppointmentEndDate(isAllDay, startDate)\r\n },\r\n getEndDayHour: function() {\r\n return this._workSpace.option(\"endDayHour\") || this.option(\"endDayHour\")\r\n },\r\n getStartDayHour: function() {\r\n return this._workSpace.option(\"startDayHour\") || this.option(\"startDayHour\")\r\n },\r\n isAdaptive: function() {\r\n return this.option(\"adaptivityEnabled\")\r\n },\r\n validateDayHours: function() {\r\n var endDayHour = this._getCurrentViewOption(\"endDayHour\");\r\n var startDayHour = this._getCurrentViewOption(\"startDayHour\");\r\n if (startDayHour >= endDayHour) {\r\n throw _ui.default.Error(\"E1058\")\r\n }\r\n },\r\n removeDroppableCellClass: function() {\r\n this._workSpace.removeDroppableCellClass()\r\n }\r\n};\r\nvar _default = subscribes;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n","/**\r\n * DevExtreme (ui/scheduler/ui.scheduler.publisher_mixin.js)\r\n * Version: 20.2.11\r\n * Build date: Wed Apr 27 2022\r\n *\r\n * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED\r\n * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/\r\n */\r\n\"use strict\";\r\nexports.default = void 0;\r\nvar publisherMixin = {\r\n notifyObserver: function(subject, args) {\r\n var observer = this.option(\"observer\");\r\n if (observer) {\r\n observer.fire(subject, args)\r\n }\r\n },\r\n invoke: function() {\r\n var observer = this.option(\"observer\");\r\n if (observer) {\r\n return observer.fire.apply(observer, arguments)\r\n }\r\n }\r\n};\r\nvar _default = publisherMixin;\r\nexports.default = _default;\r\nmodule.exports = exports.default;\r\n"],"sourceRoot":""}