From db41acceffdb71fe02c1863c75d50090270a4896 Mon Sep 17 00:00:00 2001 From: Matias Bordese Date: Mon, 21 Nov 2022 14:59:59 -0300 Subject: [PATCH] Update selected days to UTC before submit --- .../containers/RotationForm/RotationForm.tsx | 4 ++-- .../src/pages/schedule/Schedule.helpers.ts | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/grafana-plugin/src/containers/RotationForm/RotationForm.tsx b/grafana-plugin/src/containers/RotationForm/RotationForm.tsx index 352af9f9..42c31696 100644 --- a/grafana-plugin/src/containers/RotationForm/RotationForm.tsx +++ b/grafana-plugin/src/containers/RotationForm/RotationForm.tsx @@ -17,7 +17,7 @@ import { Schedule, Shift } from 'models/schedule/schedule.types'; import { getTzOffsetString } from 'models/timezone/timezone.helpers'; import { Timezone } from 'models/timezone/timezone.types'; import { User } from 'models/user/user.types'; -import { getDateTime, getStartOfWeek, getUTCString } from 'pages/schedule/Schedule.helpers'; +import { getDateTime, getStartOfWeek, getUTCByDay, getUTCString } from 'pages/schedule/Schedule.helpers'; import { SelectOption } from 'state/types'; import { useStore } from 'state/useStore'; import { getCoords, waitForElement } from 'utils/DOM'; @@ -154,7 +154,7 @@ const RotationForm: FC = observer((props) => { rolling_users: userGroups, interval: repeatEveryValue, frequency: repeatEveryPeriod, - by_day: repeatEveryPeriod === 0 || repeatEveryPeriod === 1 ? selectedDays : null, + by_day: repeatEveryPeriod === 0 || repeatEveryPeriod === 1 ? getUTCByDay(selectedDays, shiftStart) : null, priority_level: shiftId === 'new' ? layerPriority : shift?.priority_level, }), [ diff --git a/grafana-plugin/src/pages/schedule/Schedule.helpers.ts b/grafana-plugin/src/pages/schedule/Schedule.helpers.ts index 0b54681d..ba8ceb47 100644 --- a/grafana-plugin/src/pages/schedule/Schedule.helpers.ts +++ b/grafana-plugin/src/pages/schedule/Schedule.helpers.ts @@ -18,6 +18,30 @@ export const getDateTime = (date: string) => { return dayjs(date); }; +export const getUTCByDay = (by_day: string[], moment: dayjs.Dayjs) => { + let UTCDays = []; + // FIXME: do this in a proper way + let byDayOptions = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU']; + if (by_day.length > 0 && moment.day() !== moment.utc().day()) { + // when converting to UTC, shift starts on a different day, + // so we need to update the by_day list + // depending on the UTC side, move one day before or after + let offset = moment.utcOffset(); + by_day.forEach((element) => { + let index = byDayOptions.indexOf(element); + if (offset < 0) { + // move one day after + UTCDays.push(byDayOptions[(index + 1) % 7]); + } else { + // move one day before + UTCDays.push(byDayOptions[(((index - 1) % 7) + 7) % 7]); + } + }); + return UTCDays; + } + return by_day; +}; + export const getColorSchemeMappingForUsers = ( store: RootStore, scheduleId: string,