diff --git a/packages/devextreme/js/__internal/scheduler/a11y_status/a11y_status_text.ts b/packages/devextreme/js/__internal/scheduler/a11y_status/a11y_status_text.ts index a6a2e090ed18..13c8c0094478 100644 --- a/packages/devextreme/js/__internal/scheduler/a11y_status/a11y_status_text.ts +++ b/packages/devextreme/js/__internal/scheduler/a11y_status/a11y_status_text.ts @@ -18,6 +18,7 @@ const viewTypeLocalization: Record = { workWeek: 'dxScheduler-switcherWorkWeek', timelineDay: 'dxScheduler-switcherTimelineDay', timelineMonth: 'dxScheduler-switcherTimelineMonth', + timelineYear: 'dxScheduler-switcherTimelineYear', timelineWeek: 'dxScheduler-switcherTimelineWeek', timelineWorkWeek: 'dxScheduler-switcherTimelineWorkWeek', }; @@ -54,7 +55,7 @@ export const getA11yStatusText = ( const viewType = view?.type; const viewName = view?.name; const viewTypeLabel = localizeName(viewName, viewType); - const isMonth = viewType === 'month' || viewType === 'timelineMonth'; + const isMonth = viewType === 'month' || viewType === 'timelineMonth' || viewType === 'timelineYear'; const startDateText = isMonth ? localizeMonth(startDate) : localizeDate(startDate); const endDateText = isMonth ? localizeMonth(endDate) : localizeDate(endDate); const intervalText = startDateText === endDateText diff --git a/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts index 0c4768c18827..aa8f23c4e491 100644 --- a/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts +++ b/packages/devextreme/js/__internal/scheduler/appointments/resizing/get_delta_time.ts @@ -50,6 +50,8 @@ export const getDeltaTime = ( switch (true) { case ['timelineMonth', 'month'].includes(viewType) || Boolean(isAllDayPanel): return getAllDayDeltaWidth(args, initialSize, resizableStep) * toMs('day'); + case ['timelineYear'].includes(viewType): + return toMs('week'); case viewType === 'agenda': return 0; case VERTICAL_VIEW_TYPES.includes(viewType) && !isAllDayPanel: diff --git a/packages/devextreme/js/__internal/scheduler/header/m_header.ts b/packages/devextreme/js/__internal/scheduler/header/m_header.ts index 049eb0e857f2..d736ad9ea63a 100644 --- a/packages/devextreme/js/__internal/scheduler/header/m_header.ts +++ b/packages/devextreme/js/__internal/scheduler/header/m_header.ts @@ -48,7 +48,8 @@ export class SchedulerHeader extends Widget { _calendar: any; get captionText() { - return this._getCaption().text; + return 'ABOBA'; + // return this._getCaption().text; } getIntervalOptions(date: Date): IntervalOptions { diff --git a/packages/devextreme/js/__internal/scheduler/header/m_utils.ts b/packages/devextreme/js/__internal/scheduler/header/m_utils.ts index 7c8770d56997..44e2c6ba97db 100644 --- a/packages/devextreme/js/__internal/scheduler/header/m_utils.ts +++ b/packages/devextreme/js/__internal/scheduler/header/m_utils.ts @@ -88,6 +88,8 @@ const getIntervalStartDate = (options: IntervalOptions) => { return getWorkWeekStart(firstWeekDay); case 'agenda': return new Date(date); + case 'year': + break; } }; @@ -133,6 +135,8 @@ const getPeriodEndDate = (currentPeriodStartDate: Date, step: Step, agendaDurati case 'month': date = nextMonth(currentPeriodStartDate); break; + case 'year': + break; case 'workWeek': date = getDateAfterWorkWeek(currentPeriodStartDate); break; @@ -323,6 +327,7 @@ const STEP_MAP: Record = { timelineWeek: 'week', timelineWorkWeek: 'workWeek', timelineMonth: 'month', + timelineYear: 'year', agenda: 'agenda', } as const; diff --git a/packages/devextreme/js/__internal/scheduler/header/types.ts b/packages/devextreme/js/__internal/scheduler/header/types.ts index 98c2ca07eab7..42939a457e84 100644 --- a/packages/devextreme/js/__internal/scheduler/header/types.ts +++ b/packages/devextreme/js/__internal/scheduler/header/types.ts @@ -18,7 +18,7 @@ export interface HeaderOptions { customizeDateNavigatorText: SafeSchedulerOptions['customizeDateNavigatorText']; } -export type Step = 'day' | 'week' | 'workWeek' | 'month' | 'agenda'; +export type Step = 'day' | 'week' | 'workWeek' | 'month' | 'agenda' | 'year'; export interface IntervalOptions { date: Date; diff --git a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts index d4bba916e5ae..66cde5a1465f 100644 --- a/packages/devextreme/js/__internal/scheduler/m_scheduler.ts +++ b/packages/devextreme/js/__internal/scheduler/m_scheduler.ts @@ -85,6 +85,7 @@ import SchedulerTimelineDay from './workspaces/m_timeline_day'; import SchedulerTimelineMonth from './workspaces/m_timeline_month'; import SchedulerTimelineWeek from './workspaces/m_timeline_week'; import SchedulerTimelineWorkWeek from './workspaces/m_timeline_work_week'; +import SchedulerTimelineYear from './workspaces/m_timeline_year'; import SchedulerWorkSpaceDay from './workspaces/m_work_space_day'; import SchedulerWorkSpaceMonth from './workspaces/m_work_space_month'; import SchedulerWorkSpaceWeek from './workspaces/m_work_space_week'; @@ -135,6 +136,10 @@ const VIEWS_CONFIG = { workSpace: SchedulerTimelineMonth, renderingStrategy: 'horizontalMonthLine', }, + timelineYear: { + workSpace: SchedulerTimelineYear, + renderingStrategy: 'horizontalMonthLine', + }, agenda: { workSpace: SchedulerAgenda, renderingStrategy: 'agenda', diff --git a/packages/devextreme/js/__internal/scheduler/m_subscribes.ts b/packages/devextreme/js/__internal/scheduler/m_subscribes.ts index 5499536f3102..e4f8ac0fea59 100644 --- a/packages/devextreme/js/__internal/scheduler/m_subscribes.ts +++ b/packages/devextreme/js/__internal/scheduler/m_subscribes.ts @@ -197,7 +197,7 @@ const subscribes = { }, needCorrectAppointmentDates() { - return !['month', 'timelineMonth'].includes(this.currentView.type); + return !['month', 'timelineMonth', 'timelineYear'].includes(this.currentView.type); }, getRenderingStrategyDirection() { diff --git a/packages/devextreme/js/__internal/scheduler/r1/utils/base.ts b/packages/devextreme/js/__internal/scheduler/r1/utils/base.ts index 2487bac3a6d9..5aef26416876 100644 --- a/packages/devextreme/js/__internal/scheduler/r1/utils/base.ts +++ b/packages/devextreme/js/__internal/scheduler/r1/utils/base.ts @@ -214,6 +214,7 @@ const TIMELINE_VIEWS = [ VIEWS.TIMELINE_WEEK, VIEWS.TIMELINE_WORK_WEEK, VIEWS.TIMELINE_MONTH, + VIEWS.TIMELINE_YEAR, ]; export const isTimelineView = ( viewType?: ViewType, @@ -221,7 +222,9 @@ export const isTimelineView = ( export const isDateAndTimeView = ( viewType: ViewType, -): boolean => viewType !== VIEWS.TIMELINE_MONTH && viewType !== VIEWS.MONTH; +): boolean => ![ + VIEWS.MONTH, VIEWS.TIMELINE_MONTH, VIEWS.TIMELINE_YEAR, +].includes(viewType); export const isHorizontalView = (viewType: ViewType): boolean => { switch (viewType) { @@ -229,6 +232,7 @@ export const isHorizontalView = (viewType: ViewType): boolean => { case VIEWS.TIMELINE_WEEK: case VIEWS.TIMELINE_WORK_WEEK: case VIEWS.TIMELINE_MONTH: + case VIEWS.TIMELINE_YEAR: case VIEWS.MONTH: return true; default: @@ -294,6 +298,9 @@ export const getCellDuration = ( case 'timelineMonth': return dateUtils.dateToMilliseconds('day'); + case 'timelineYear': + return dateUtils.dateToMilliseconds('week'); + default: return 3600000 * hoursInterval; } diff --git a/packages/devextreme/js/__internal/scheduler/types.ts b/packages/devextreme/js/__internal/scheduler/types.ts index 5326f622e1d6..90040edd0611 100644 --- a/packages/devextreme/js/__internal/scheduler/types.ts +++ b/packages/devextreme/js/__internal/scheduler/types.ts @@ -6,7 +6,7 @@ import type { AppointmentViewModelPlain } from './view_model/types'; export type Direction = 'vertical' | 'horizontal'; export type GroupOrientation = 'vertical' | 'horizontal'; -export type ViewType = 'agenda' | 'day' | 'month' | 'timelineDay' | 'timelineMonth' | 'timelineWeek' | 'timelineWorkWeek' | 'week' | 'workWeek'; +export type ViewType = 'agenda' | 'day' | 'month' | 'timelineDay' | 'timelineMonth' | 'timelineYear' | 'timelineWeek' | 'timelineWorkWeek' | 'week' | 'workWeek'; export type AllDayPanelModeType = 'all' | 'allDay' | 'hidden'; export type RenderStrategyName = 'horizontal' | 'horizontalMonth' | 'horizontalMonthLine' | 'vertical' | 'week' | 'agenda'; export type FilterItemType = Record | string | number; diff --git a/packages/devextreme/js/__internal/scheduler/utils/options/constants_view.ts b/packages/devextreme/js/__internal/scheduler/utils/options/constants_view.ts index d01f374237bd..c6a12a25b39f 100644 --- a/packages/devextreme/js/__internal/scheduler/utils/options/constants_view.ts +++ b/packages/devextreme/js/__internal/scheduler/utils/options/constants_view.ts @@ -9,6 +9,7 @@ export const VIEWS: Record = { TIMELINE_WEEK: 'timelineWeek', TIMELINE_WORK_WEEK: 'timelineWorkWeek', TIMELINE_MONTH: 'timelineMonth', + TIMELINE_YEAR: 'timelineYear', AGENDA: 'agenda', }; export const VIEW_TYPES: ViewType[] = Object.values(VIEWS); @@ -36,6 +37,7 @@ export const DEFAULT_VIEW_OPTIONS: Record, View> & { timelineWeek: getView('timelineWeek', 'vertical'), timelineWorkWeek: getView('timelineWorkWeek', 'vertical', WEEKENDS), timelineMonth: getView('timelineMonth', 'vertical'), + timelineYear: getView('timelineYear', 'vertical'), agenda: { agendaDuration: 7, intervalCount: 1, diff --git a/packages/devextreme/js/__internal/scheduler/utils/options/types.ts b/packages/devextreme/js/__internal/scheduler/utils/options/types.ts index f74a3670a0d3..ba2ab7e45113 100644 --- a/packages/devextreme/js/__internal/scheduler/utils/options/types.ts +++ b/packages/devextreme/js/__internal/scheduler/utils/options/types.ts @@ -11,6 +11,7 @@ export type View = ViewObject & Required> & { skippedDays: number[]; }; + export type AgendaView = ViewObject & Required { if (endDayHour < startDayHour) { return []; @@ -36,7 +37,7 @@ export const splitIntervalByDay = ({ }); } - time.setUTCDate(time.getUTCDate() + 1); + time.setUTCDate(time.getUTCDate() + cellInterval); } return result; diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_group_size.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_group_size.ts index 0312d45552b9..ece156abf449 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_group_size.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_group_size.ts @@ -25,6 +25,7 @@ export const getGroupSize = ({ }: Options): RealSize => { switch (viewType) { case 'month': + case 'timelineYear': case 'timelineMonth': { const intervalDaysCount = cells.filter((cell) => cell.rowIndex === 0).length; return { diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_month_intervals.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_month_intervals.ts index 8a4b1390e575..e30f2784f24c 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_month_intervals.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_month_intervals.ts @@ -30,7 +30,7 @@ const cropIntervalsByDayHours = ( export const getMonthIntervals = ( { - startDayHour, endDayHour, skippedDays, ...dateInterval + startDayHour, endDayHour, skippedDays, cellInterval, ...dateInterval }: CompareOptions, viewOffset: number, isTimeline: boolean, @@ -45,6 +45,7 @@ export const getMonthIntervals = ( startDayHour, endDayHour, skippedDays, + cellInterval, }); const shiftedCells = shiftIntervals(cells, viewOffset); diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_one_day_cell_intervals.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_one_day_cell_intervals.ts index 9b8146dda0d7..5e5dad05dbbc 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_one_day_cell_intervals.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_one_day_cell_intervals.ts @@ -6,6 +6,7 @@ interface Options { startDayHour: number; endDayHour: number; skippedDays: number[]; + cellInterval?: number; } export const getOneDayCellIntervals = ({ @@ -13,9 +14,10 @@ export const getOneDayCellIntervals = ({ startDayHour, endDayHour, skippedDays, + cellInterval = 1, }: Options): CellInterval[] => intervals.reduce((result, interval, rowIndex) => { const cells = splitIntervalByDay({ - ...interval, startDayHour, endDayHour, skippedDays, + ...interval, startDayHour, endDayHour, skippedDays, cellInterval, }); let columnIndex = 0; diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_view_model_options.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_view_model_options.ts index c5656557dcd0..b4c86bf47487 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_view_model_options.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/get_view_model_options.ts @@ -18,6 +18,7 @@ const configByView: Record, { timelineWeek: { isTimelineView: true, isMonthView: false, viewOrientation: 'horizontal' }, timelineWorkWeek: { isTimelineView: true, isMonthView: false, viewOrientation: 'horizontal' }, timelineMonth: { isTimelineView: true, isMonthView: true, viewOrientation: 'horizontal' }, + timelineYear: { isTimelineView: true, isMonthView: false, viewOrientation: 'horizontal' }, }; export interface ViewModelOptions { diff --git a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/option_manager.ts b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/option_manager.ts index b830eae445bb..e21497d98c20 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/option_manager.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/generate_view_model/options/option_manager.ts @@ -22,8 +22,13 @@ const getLayoutIntervals = ( viewOffset: number, isTimeline: boolean, isMonthView: boolean, + isYearView: boolean, panelName: PanelName, ): LayoutIntervals => { + if (isYearView) { + return getMonthIntervals({ ...compareOptions, cellInterval: 7 }, viewOffset, true); + } + switch (true) { case isMonthView: return getMonthIntervals(compareOptions, viewOffset, isTimeline); @@ -106,6 +111,7 @@ export class OptionManager { viewOffset, isTimelineView || panelName === 'allDayPanel', isMonthView, + this.schedulerStore.option('currentView') === 'timelineYear', panelName, ); diff --git a/packages/devextreme/js/__internal/scheduler/view_model/types.ts b/packages/devextreme/js/__internal/scheduler/view_model/types.ts index 892cb06dc850..e010aca40828 100644 --- a/packages/devextreme/js/__internal/scheduler/view_model/types.ts +++ b/packages/devextreme/js/__internal/scheduler/view_model/types.ts @@ -30,6 +30,7 @@ export interface CompareOptions { min: number; max: number; skippedDays: number[]; + cellInterval?: number; } export interface LayoutIntervals { diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/m_timeline_year.ts b/packages/devextreme/js/__internal/scheduler/workspaces/m_timeline_year.ts new file mode 100644 index 000000000000..6efb74125243 --- /dev/null +++ b/packages/devextreme/js/__internal/scheduler/workspaces/m_timeline_year.ts @@ -0,0 +1,69 @@ +import registerComponent from '@js/core/component_registrator'; +import dateUtils from '@js/core/utils/date'; +// NOTE: Renovation component import. +import { HeaderPanelComponent } from '@ts/scheduler/r1/components/index'; +import { formatWeekdayAndDay, monthUtils } from '@ts/scheduler/r1/utils/index'; + +import { VIEWS } from '../utils/options/constants_view'; +import SchedulerTimeline from './m_timeline'; + +const TIMELINE_CLASS = 'dx-scheduler-timeline-month'; + +class SchedulerTimelineYear extends SchedulerTimeline { + get type() { return VIEWS.TIMELINE_YEAR; } + + readonly viewDirection = 'horizontal'; + + get renovatedHeaderPanelComponent() { return HeaderPanelComponent; } + + _renderView() { + super._renderView(); + + this._updateScrollable(); + } + + _getElementClass() { + return TIMELINE_CLASS; + } + + _getDateHeaderTemplate() { + return this.option('dateCellTemplate'); + } + + _calculateDurationInCells(timeDiff) { + return timeDiff / this.getCellDuration(); + } + + isIndicatorVisible() { + return true; + } + + _getFormat() { + return (date: Date) => { + // return index of the week + date and month + const firstDayOfYear = new Date(date.getFullYear(), 0, 1); + const daysOffset = firstDayOfYear.getDay(); + const dayOfYear = Math.ceil((date.getTime() - firstDayOfYear.getTime()) / dateUtils.dateToMilliseconds('day')) + 1; + const weekNumber = Math.ceil((dayOfYear + daysOffset - 1) / 7); + + const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + return `W${weekNumber} ${date.getDate()}/${months[date.getMonth()]}`; + }; + } + + generateRenderOptions() { + const options = super.generateRenderOptions(true); + return { + ...options, + getDateForHeaderText: (_, date) => date, + }; + } + + keepOriginalHours() { + return true; + } +} + +registerComponent('dxSchedulerTimelineYear', SchedulerTimelineYear as any); + +export default SchedulerTimelineYear; diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_timeline_year.ts b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_timeline_year.ts new file mode 100644 index 000000000000..08cb1fb13600 --- /dev/null +++ b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/m_view_data_generator_timeline_year.ts @@ -0,0 +1,47 @@ +import dateUtils from '@js/core/utils/date'; +import { setOptionHour, timelineMonthUtils } from '@ts/scheduler/r1/utils/index'; + +import timezoneUtils from '../../m_utils_time_zone'; +import { ViewDataGenerator } from './m_view_data_generator'; + +const toMs = dateUtils.dateToMilliseconds; + +export class ViewDataGeneratorTimelineYear extends ViewDataGenerator { + calculateEndDate(startDate, interval, endDayHour) { + return setOptionHour(startDate, endDayHour); + } + + getInterval(): number { + return toMs('week'); + } + + _calculateStartViewDate(options: any) { + const date = new Date(options.currentDate.getFullYear(), 0, 1, 0, 0, 0, 0); + + return date; + } + + getCellCount(options) { + const year = options.currentDate.getFullYear(); + const firstDayOfYear = new Date(year, 0, 1); + const lastDayOfYear = new Date(year, 11, 31); + const firstDayOfYearWeekday = firstDayOfYear.getDay() || 7; // Make Sunday (0) the 7th day + const daysInYear = (lastDayOfYear.getTime() - firstDayOfYear.getTime()) / toMs('day') + 1; + const totalDaysWithOffset = daysInYear + (firstDayOfYearWeekday - 1); + const weeksInYear = Math.ceil(totalDaysWithOffset / 7); + + return weeksInYear; + } + + setHiddenInterval() { + this.hiddenInterval = 0; + } + + protected getCellEndDate(cellStartDate: Date, options: any): Date { + const daysToAdd = 7; + const cellEndDate = new Date(cellStartDate); + cellEndDate.setDate(cellStartDate.getDate() + daysToAdd); + + return timezoneUtils.addOffsetsWithoutDST(cellEndDate, 0); + } +} diff --git a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/utils/view_provider_utils.ts b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/utils/view_provider_utils.ts index 0fa21be40834..02629805bbd2 100644 --- a/packages/devextreme/js/__internal/scheduler/workspaces/view_model/utils/view_provider_utils.ts +++ b/packages/devextreme/js/__internal/scheduler/workspaces/view_model/utils/view_provider_utils.ts @@ -4,6 +4,7 @@ import { ViewDataGenerator } from '../m_view_data_generator'; import { ViewDataGeneratorDay } from '../m_view_data_generator_day'; import { ViewDataGeneratorMonth } from '../m_view_data_generator_month'; import { ViewDataGeneratorTimelineMonth } from '../m_view_data_generator_timeline_month'; +import { ViewDataGeneratorTimelineYear } from '../m_view_data_generator_timeline_year'; import { ViewDataGeneratorWeek } from '../m_view_data_generator_week'; import { ViewDataGeneratorWorkWeek } from '../m_view_data_generator_work_week'; @@ -13,6 +14,8 @@ export const getViewDataGeneratorByViewType = (viewType: ViewType): ViewDataGene return new ViewDataGeneratorMonth(viewType); case VIEWS.TIMELINE_MONTH: return new ViewDataGeneratorTimelineMonth(viewType); + case VIEWS.TIMELINE_YEAR: + return new ViewDataGeneratorTimelineYear(viewType); case VIEWS.DAY: case VIEWS.TIMELINE_DAY: return new ViewDataGeneratorDay(viewType); diff --git a/packages/devextreme/js/localization/messages/en.json b/packages/devextreme/js/localization/messages/en.json index 7ba245909f55..5adee698ade8 100644 --- a/packages/devextreme/js/localization/messages/en.json +++ b/packages/devextreme/js/localization/messages/en.json @@ -329,6 +329,7 @@ "dxScheduler-switcherTimelineWeek": "Timeline Week", "dxScheduler-switcherTimelineWorkWeek": "Timeline Work Week", "dxScheduler-switcherTimelineMonth": "Timeline Month", + "dxScheduler-switcherTimelineYear": "Timeline Year", "dxScheduler-recurrenceRepeatOnDate": "on date", "dxScheduler-recurrenceRepeatCount": "occurrence(s)", diff --git a/packages/devextreme/js/ui/scheduler.d.ts b/packages/devextreme/js/ui/scheduler.d.ts index 4920cd3953ed..06220d1d13fa 100644 --- a/packages/devextreme/js/ui/scheduler.d.ts +++ b/packages/devextreme/js/ui/scheduler.d.ts @@ -94,7 +94,7 @@ export type AppointmentFormProperties = FormProperties & { iconsShowMode?: AppointmentFormIconsShowMode; }; /** @public */ -export type ViewType = 'agenda' | 'day' | 'month' | 'timelineDay' | 'timelineMonth' | 'timelineWeek' | 'timelineWorkWeek' | 'week' | 'workWeek'; +export type ViewType = 'agenda' | 'day' | 'month' | 'timelineDay' | 'timelineMonth' | 'timelineYear' | 'timelineWeek' | 'timelineWorkWeek' | 'week' | 'workWeek'; /** @public */ export type SchedulerPredefinedToolbarItem = 'today' | 'dateNavigator' | 'viewSwitcher'; /** @public */ @@ -1024,7 +1024,7 @@ export interface dxSchedulerOptions extends WidgetOptions { * @default ['day', 'week'] * @public */ - views?: Array<'day' | 'week' | 'workWeek' | 'month' | 'timelineDay' | 'timelineWeek' | 'timelineWorkWeek' | 'timelineMonth' | 'agenda' | { + views?: Array<'day' | 'week' | 'workWeek' | 'month' | 'timelineDay' | 'timelineWeek' | 'timelineWorkWeek' | 'timelineMonth' | 'timelineYear' | 'agenda' | { /** * @docid * @default 7