public static CONVERTER()

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;
    }