@grafana/ui
Version:
Grafana Components Library
1 lines • 5.66 kB
Source Map (JSON)
{"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":"AAEA,MAAM,KAAQ,GAAA,uCAAA;AAED,MAAA,4BAAA,GAA+B,CAAC,MAAsD,KAAA;AACjG,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,iBAAkB,CAAA,MAAA,CAAO,IAAI,CAAA;AAAA,IACnC,EAAA,EAAI,iBAAkB,CAAA,MAAA,CAAO,EAAE;AAAA,GACjC;AACF;AAEa,MAAA,4BAAA,GAA+B,CAAC,KAAyC,KAAA;AACpF,EAAM,MAAA,IAAA,GAAO,uBAAwB,CAAA,KAAA,CAAM,IAAI,CAAA;AAC/C,EAAM,MAAA,EAAA,GAAK,uBAAwB,CAAA,KAAA,CAAM,EAAE,CAAA;AAE3C,EAAO,OAAA,EAAE,MAAM,EAAI,EAAA,OAAA,EAAS,GAAG,IAAI,CAAA,IAAA,EAAO,EAAE,CAAG,CAAA,EAAA;AACjD;AAOO,MAAM,eAAe,CAAC,QAAA,EAAkB,GAAM,GAAA,IAAA,CAAK,KAA2B,KAAA;AACnF,EAAI,IAAA,CAAC,gBAAiB,CAAA,QAAQ,CAAG,EAAA;AAC/B,IAAO,OAAA;AAAA,MACL,OAAS,EAAA,KAAA;AAAA,MACT,YAAc,EAAA;AAAA,KAChB;AAAA;AAGF,EAAM,MAAA,OAAA,GAAU,kBAAkB,QAAQ,CAAA;AAE1C,EAAA,IAAI,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,GAAA,GAAM,GAAI,CAAG,EAAA;AACnC,IAAO,OAAA;AAAA,MACL,OAAS,EAAA,KAAA;AAAA,MACT,YAAc,EAAA;AAAA,KAChB;AAAA;AAGF,EAAO,OAAA,EAAE,SAAS,IAAK,EAAA;AACzB;AAEa,MAAA,gBAAA,GAAmB,CAAC,MAA4B,KAAA;AAC3D,EAAO,OAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAC1B;AAEA,MAAM,iBAAA,GAAoB,CAAC,QAA6B,KAAA;AACtD,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,IAAA,CAAK,QAAQ,CAAA;AAEjC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAM,CAAA,MAAA,KAAW,CAAG,EAAA;AAChC,IAAO,OAAA,CAAA;AAAA;AAGT,EAAA,MAAM,GAAG,IAAM,EAAA,KAAA,EAAO,IAAI,CAAI,GAAA,KAAA;AAC9B,EAAM,MAAA,MAAA,GAAS,QAAS,CAAA,KAAA,EAAO,EAAE,CAAA;AAEjC,EAAI,IAAA,KAAA,CAAM,MAAM,CAAG,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA;AAGT,EAAM,MAAA,OAAA,GAAU,MAAS,GAAA,KAAA,CAAM,IAAI,CAAA;AACnC,EAAO,OAAA,IAAA,KAAS,GAAM,GAAA,OAAA,GAAU,CAAK,CAAA,GAAA,OAAA;AACvC,CAAA;AAEA,MAAM,KAAgC,GAAA;AAAA,EACpC,CAAG,EAAA,MAAA;AAAA,EACH,CAAG,EAAA,KAAA;AAAA,EACH,CAAG,EAAA,IAAA;AAAA,EACH,CAAG,EAAA,EAAA;AAAA,EACH,CAAG,EAAA;AACL,CAAA;AAEA,MAAM,uBAAA,GAA0B,CAAC,OAA4B,KAAA;AAC3D,EAAA,IAAI,YAAY,CAAG,EAAA;AACjB,IAAO,OAAA,KAAA;AAAA;AAGT,EAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,GAAA,CAAI,OAAO,CAAA;AACxC,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAO,OAAA,CAAA,IAAA,EAAO,cAAe,CAAA,eAAe,CAAC,CAAA,CAAA;AAAA;AAG/C,EAAO,OAAA,CAAA,IAAA,EAAO,cAAe,CAAA,eAAe,CAAC,CAAA,CAAA;AAC/C,CAAA;AAQA,SAAS,eAAe,OAAyB,EAAA;AAC/C,EAAA,MAAMA,MAAQ,GAAA;AAAA,IACZ,EAAE,IAAM,EAAA,GAAA,EAAK,OAAO,CAAI,GAAA,EAAA,GAAK,KAAK,EAAG,EAAA;AAAA,IACrC,EAAE,IAAM,EAAA,GAAA,EAAK,KAAO,EAAA,EAAA,GAAK,KAAK,EAAG,EAAA;AAAA,IACjC,EAAE,IAAA,EAAM,GAAK,EAAA,KAAA,EAAO,KAAK,EAAG,EAAA;AAAA,IAC5B,EAAE,IAAA,EAAM,GAAK,EAAA,KAAA,EAAO,EAAG,EAAA;AAAA,IACvB,EAAE,IAAA,EAAM,GAAK,EAAA,KAAA,EAAO,CAAE;AAAA,GACxB;AAEA,EAAA,KAAA,MAAW,EAAE,IAAA,EAAM,KAAM,EAAA,IAAKA,MAAO,EAAA;AACnC,IAAI,IAAA,OAAA,GAAU,UAAU,CAAG,EAAA;AACzB,MAAA,MAAM,WAAW,OAAU,GAAA,KAAA;AAC3B,MAAO,OAAA,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA;AAC3B;AAIF,EAAA,MAAM,gBAAmBA,GAAAA,MAAAA,CAAMA,MAAM,CAAA,MAAA,GAAS,CAAC,CAAA;AAC/C,EAAA,OAAO,CAAG,EAAA,OAAO,CAAG,EAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAC3C;;;;"}