UNPKG

@grafana/ui

Version:
1 lines 5.7 kB
{"version":3,"file":"utils.mjs","sources":["../../../../../src/components/DateTimePickers/RelativeTimeRangePicker/utils.ts"],"sourcesContent":["import { RelativeTimeRange, TimeOption } from '@grafana/data';\n\nconst regex = /^now$|^now(\\-|\\+)(\\d{1,10})([wdhms])$/;\n\nexport const mapOptionToRelativeTimeRange = (option: TimeOption): RelativeTimeRange | undefined => {\n return {\n from: relativeToSeconds(option.from),\n to: relativeToSeconds(option.to),\n };\n};\n\nexport const mapRelativeTimeRangeToOption = (range: RelativeTimeRange): TimeOption => {\n const from = secondsToRelativeFormat(range.from);\n const to = secondsToRelativeFormat(range.to);\n\n return { from, to, display: `${from} to ${to}` };\n};\n\nexport type RangeValidation = {\n isValid: boolean;\n errorMessage?: string;\n};\n\nexport const isRangeValid = (relative: string, now = Date.now()): RangeValidation => {\n if (!isRelativeFormat(relative)) {\n return {\n isValid: false,\n errorMessage: 'Value not in relative time format.',\n };\n }\n\n const seconds = relativeToSeconds(relative);\n\n if (seconds > Math.ceil(now / 1000)) {\n return {\n isValid: false,\n errorMessage: 'Can not enter value prior to January 1, 1970.',\n };\n }\n\n return { isValid: true };\n};\n\nexport const isRelativeFormat = (format: string): boolean => {\n return regex.test(format);\n};\n\nconst relativeToSeconds = (relative: string): number => {\n const match = regex.exec(relative);\n\n if (!match || match.length !== 4) {\n return 0;\n }\n\n const [, sign, value, unit] = match;\n const parsed = parseInt(value, 10);\n\n if (isNaN(parsed)) {\n return 0;\n }\n\n const seconds = parsed * units[unit];\n return sign === '+' ? seconds * -1 : seconds;\n};\n\nconst units: Record<string, number> = {\n w: 604800,\n d: 86400,\n h: 3600,\n m: 60,\n s: 1,\n};\n\nconst secondsToRelativeFormat = (seconds: number): string => {\n if (seconds === 0) {\n return 'now';\n }\n\n const absoluteSeconds = Math.abs(seconds);\n if (seconds < 0) {\n return `now+${formatDuration(absoluteSeconds)}`;\n }\n\n return `now-${formatDuration(absoluteSeconds)}`;\n};\n\n/**\n * Formats the given duration in seconds into a human-readable string representation.\n *\n * @param seconds - The duration in seconds.\n * @returns The formatted duration string.\n */\nfunction formatDuration(seconds: number): string {\n const units = [\n { unit: 'w', value: 7 * 24 * 60 * 60 },\n { unit: 'd', value: 24 * 60 * 60 },\n { unit: 'h', value: 60 * 60 },\n { unit: 'm', value: 60 },\n { unit: 's', value: 1 },\n ];\n\n for (const { unit, value } of units) {\n if (seconds % value === 0) {\n const quotient = seconds / value;\n return `${quotient}${unit}`;\n }\n }\n\n // If no perfect division, use the least significant unit\n const leastSignificant = units[units.length - 1];\n return `${seconds}${leastSignificant.unit}`;\n}\n"],"names":["units"],"mappings":"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"}