62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import { AppState } from 'reducers';
|
|
import moment from 'moment';
|
|
import 'moment-timezone';
|
|
import { ICurrentScheduleTimestamp } from '.';
|
|
import BN from 'bn.js';
|
|
import { EAC_SCHEDULING_CONFIG } from 'libs/scheduling';
|
|
|
|
const isWindowStartValid = (transactionFields: AppState['schedule'], latestBlock: string) => {
|
|
const { windowStart } = transactionFields;
|
|
|
|
return Boolean(windowStart && windowStart.value && windowStart.value > parseInt(latestBlock, 10));
|
|
};
|
|
|
|
const isScheduleTimestampValid = (transactionFields: AppState['schedule']) => {
|
|
const { scheduleTimestamp, scheduleTimezone } = transactionFields;
|
|
const selectedDate = dateTimeToTimezone(scheduleTimestamp, scheduleTimezone.value);
|
|
return Boolean(selectedDate >= minFromNow(EAC_SCHEDULING_CONFIG.ALLOW_SCHEDULING_MIN_AFTER_NOW));
|
|
};
|
|
|
|
const dateTimeToTimezone = (
|
|
scheduleTimestamp: ICurrentScheduleTimestamp,
|
|
timezone: string
|
|
): Date => {
|
|
return moment.tz(scheduleTimestamp.raw, timezone).toDate();
|
|
};
|
|
|
|
const dateTimeToUnixTimestamp = (dateTime: Date): number => {
|
|
return moment(dateTime).unix();
|
|
};
|
|
|
|
const minFromNow = (minutes: number): Date => {
|
|
return moment()
|
|
.add(minutes, 'm')
|
|
.toDate();
|
|
};
|
|
|
|
const windowSizeBlockToMin = (numberInput: BN | null, scheduleType: string | null) => {
|
|
if (numberInput && scheduleType && scheduleType === 'time') {
|
|
return numberInput.mul(new BN(60));
|
|
}
|
|
return numberInput;
|
|
};
|
|
|
|
const calculateWindowStart = (
|
|
scheduleType: string | null,
|
|
scheduleTimestamp: ICurrentScheduleTimestamp,
|
|
scheduleTimezone: string,
|
|
blockWindowStart: number | null
|
|
): number =>
|
|
(scheduleType === 'time'
|
|
? dateTimeToUnixTimestamp(dateTimeToTimezone(scheduleTimestamp, scheduleTimezone))
|
|
: blockWindowStart) || 0;
|
|
|
|
export {
|
|
isWindowStartValid,
|
|
isScheduleTimestampValid,
|
|
dateTimeToTimezone,
|
|
windowSizeBlockToMin,
|
|
calculateWindowStart,
|
|
minFromNow
|
|
};
|