Update selected days to UTC before submit

This commit is contained in:
Matias Bordese 2022-11-21 14:59:59 -03:00
parent e52af4858c
commit db41acceff
2 changed files with 26 additions and 2 deletions

View file

@ -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<RotationFormProps> = 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,
}),
[

View file

@ -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,