in src/timeLine.ts [128:227]
public static CONVERTER(
timelineData: ITimelineData,
timelineProperties: ITimelineProperties,
timelineGranularityData: GranularityData,
dataView: powerbiVisualsApi.DataView,
initialized: boolean,
timelineSettings: Settings,
viewport: powerbiVisualsApi.IViewport,
previousCalendar: Calendar,
): Calendar {
if (this.isDataViewValid(dataView)) {
return null;
}
let calendar: Calendar;
let startDate: Date;
let endDate: Date;
if (!initialized) {
timelineData.cursorDataPoints = [{
cursorIndex: 0,
selectionIndex: Timeline.DefaultSelectionStartIndex,
x: Timeline.DefaultCursorDatapointX,
y: Timeline.DefaultCursorDatapointY,
},
{
cursorIndex: 1,
selectionIndex: Timeline.DefaultSelectionStartIndex,
x: Timeline.DefaultCursorDatapointX,
y: Timeline.DefaultCursorDatapointY,
}];
}
const isCalendarChanged: boolean = previousCalendar
&& previousCalendar.isChanged(timelineSettings.calendar, timelineSettings.weekDay, timelineSettings.weeksDetermintaionStandards);
if (timelineData && timelineData.currentGranularity) {
startDate = Utils.GET_START_SELECTION_DATE(timelineData);
endDate = Utils.GET_END_SELECTION_DATE(timelineData);
}
if (!initialized || isCalendarChanged) {
calendar = new CalendarFactory().create(timelineSettings.weeksDetermintaionStandards, timelineSettings.calendar, timelineSettings.weekDay);
timelineData.currentGranularity = timelineGranularityData.getGranularity(
timelineSettings.granularity.granularity);
} else {
calendar = previousCalendar;
}
if (!initialized) {
timelineData.selectionStartIndex = 0;
timelineData.selectionEndIndex = timelineData.currentGranularity.getDatePeriods().length - 1;
}
const category: powerbiVisualsApi.DataViewCategoryColumn = dataView.categorical.categories[0];
timelineData.filterColumnTarget = extractFilterColumnTarget(category);
if (category.source.type.numeric) {
(<any>(timelineData.filterColumnTarget)).ref = "Date";
}
if (isCalendarChanged && startDate && endDate) {
Utils.UNSEPARATE_SELECTION(timelineData.currentGranularity.getDatePeriods());
Utils.SEPARATE_SELECTION(timelineData, startDate, endDate);
}
const timelineElements: ITimelineDatePeriod[] = timelineData.currentGranularity.getDatePeriods();
timelineData.timelineDataPoints = [];
for (const currentTimePeriod of timelineElements) {
const datapoint: ITimelineDataPoint = {
datePeriod: currentTimePeriod,
index: currentTimePeriod.index,
};
timelineData.timelineDataPoints.push(datapoint);
}
const countFullCells: number = timelineData.currentGranularity
.getDatePeriods()
.filter((datePeriod: ITimelineDatePeriod) => {
return datePeriod.index % 1 === 0;
})
.length;
Timeline.setMeasures(
timelineSettings.labels,
timelineData.currentGranularity.getType(),
countFullCells,
viewport,
timelineProperties,
Timeline.TimelineMargins,
);
Timeline.updateCursors(timelineData);
return calendar;
}