Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 4x 11x 4x 10x 10x 10x 4x 2x 2x 2x 8x 13x 4x 8x 6x 12x 6x | import { pickBy, isNull, isNaN } from 'lodash'; import { EMAIL_ONCALL_SCHEDULE_USER, EMAIL_USER } from './constants'; /** * Returns `true` for non-empty string, otherwise returns `false` * @param {String} name * * @returns {Boolean} */ export const isNameFieldValid = (name) => { return Boolean(name?.length); }; /** * Returns an array of booleans - validation state for each rule * @param {Array} rules * * @returns {Array} */ export const getRulesValidationState = (rules) => { return rules.map(({ elapsedTimeMinutes, oncallScheduleIid, username, action }) => { const minutes = parseInt(elapsedTimeMinutes, 10); return { isTimeValid: minutes >= 0 && minutes <= 1440, isScheduleValid: action === EMAIL_ONCALL_SCHEDULE_USER ? Boolean(oncallScheduleIid) : true, isUserValid: action === EMAIL_USER ? Boolean(username) : true, }; }); }; /** * Serializes a rule by converting elapsed minutes to seconds * @param {Object} rule * * @returns {Object} rule */ export const serializeRule = ({ elapsedTimeMinutes, ...ruleParams }) => { const params = { ...ruleParams }; delete params.action; return { ...params, elapsedTimeSeconds: elapsedTimeMinutes * 60, }; }; /** * Parses a policy by converting elapsed seconds to minutes * @param {Object} policy * * @returns {Object} policy */ export const parsePolicy = (policy) => ({ ...policy, rules: policy.rules.map(({ elapsedTimeSeconds, ...ruleParams }) => ({ ...ruleParams, elapsedTimeMinutes: elapsedTimeSeconds / 60, })), }); /** * Parses a rule for the UI form usage or doe BE params serializing * @param {Array} of transformed rules from BE * * @returns {Array} of rules */ export const getRules = (rules) => { return rules.map( ({ status, elapsedTimeMinutes, oncallScheduleIid, oncallSchedule, user, username }) => { const actionBasedProps = pickBy( { username: username ?? user?.username, oncallScheduleIid: parseInt(oncallScheduleIid ?? oncallSchedule?.iid, 10), }, (prop) => !(isNull(prop) || isNaN(prop)), ); return { status, elapsedTimeMinutes, ...actionBasedProps, }; }, ); }; |