From 2fbe22d689de50e41b3b94b0970fb1f237063fa7 Mon Sep 17 00:00:00 2001 From: rahulramesha Date: Mon, 11 Nov 2024 19:02:47 +0530 Subject: [PATCH] add get position based on Date --- web/ce/store/timeline/base-timeline.store.ts | 16 +++++++++++++- .../components/gantt-chart/views/helpers.ts | 22 ++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/web/ce/store/timeline/base-timeline.store.ts b/web/ce/store/timeline/base-timeline.store.ts index c563297d8d..d0287e6bdb 100644 --- a/web/ce/store/timeline/base-timeline.store.ts +++ b/web/ce/store/timeline/base-timeline.store.ts @@ -5,7 +5,11 @@ import { computedFn } from "mobx-utils"; // components import { ChartDataType, IBlockUpdateDependencyData, IGanttBlock, TGanttViews } from "@/components/gantt-chart"; import { currentViewDataWithView } from "@/components/gantt-chart/data"; -import { getDateFromPositionOnGantt, getItemPositionWidth } from "@/components/gantt-chart/views/helpers"; +import { + getDateFromPositionOnGantt, + getItemPositionWidth, + getPositionFromDate, +} from "@/components/gantt-chart/views/helpers"; // helpers import { renderFormattedPayloadDate } from "@/helpers/date-time.helper"; // store @@ -47,6 +51,7 @@ export interface IBaseTimelineStore { initGantt: () => void; getDateFromPositionOnGantt: (position: number, offsetDays: number) => Date | undefined; + getPositionFromDateOnGantt: (date: string | Date, offSetWidth: number) => number | undefined; } export class BaseTimeLineStore implements IBaseTimelineStore { @@ -227,6 +232,15 @@ export class BaseTimeLineStore implements IBaseTimelineStore { return Math.round(position / this.currentViewData.data.dayWidth); }; + /** + * returns position of the date on chart + */ + getPositionFromDateOnGantt = computedFn((date: string | Date, offSetWidth: number) => { + if (!this.currentViewData) return; + + return getPositionFromDate(this.currentViewData, date, offSetWidth); + }); + /** * returns the date at which the position corresponds to on the timeline chart */ diff --git a/web/core/components/gantt-chart/views/helpers.ts b/web/core/components/gantt-chart/views/helpers.ts index 02a897d839..6068c3c13d 100644 --- a/web/core/components/gantt-chart/views/helpers.ts +++ b/web/core/components/gantt-chart/views/helpers.ts @@ -1,8 +1,5 @@ import { addDaysToDate, findTotalDaysInRange, getDate } from "@/helpers/date-time.helper"; import { ChartDataType, IGanttBlock } from "../types"; -import { IMonthBlock, IMonthView, monthView } from "./month-view"; -import { quarterView } from "./quarter-view"; -import { IWeekBlock, weekView } from "./week-view"; /** * Generates Date by using Day, month and Year @@ -113,3 +110,22 @@ export const getItemPositionWidth = (chartData: ChartDataType, itemData: IGanttB return { marginLeft: scrollPosition, width: scrollWidth }; }; + +export const getPositionFromDate = (chartData: ChartDataType, date: string | Date, offsetWidth: number) => { + const currDate = getDate(date); + + const { startDate: chartStartDate } = chartData.data; + + if (!currDate || !chartStartDate) return; + + chartStartDate.setHours(0, 0, 0, 0); + currDate.setHours(0, 0, 0, 0); + + // get number of days from chart start date to block's start date + const positionDaysDifference = Math.round(findTotalDaysInRange(chartStartDate, currDate, false) ?? 0); + + if (!positionDaysDifference) return; + + // get scroll position from the number of days and width of each day + return positionDaysDifference * chartData.data.dayWidth + offsetWidth; +};