nimbus-gui/src/utilities.ts

61 lines
1.7 KiB
TypeScript
Raw Normal View History

/**
* Asserts that a case in a switch statement is unreachable.
*
* @example
* // Exhaustively checks `user.role` type ("admin" | "user") and will not compile
* // if a new role is added without adding a case to the switch statement.
* switch (user.role) {
* case "admin":
* break;
* case "user":
* break;
* default:
* assertUnreachable(user.role);
* }
*/
2023-09-16 03:24:51 +00:00
import { DateRange } from 'react-day-picker'
export function assertUnreachable(value: never): never {
throw new Error(`Unreachable case: ${value}`)
}
2023-08-16 11:22:22 +00:00
export const convertSecondsToTimerFormat = (seconds: number) => {
const minutes = Math.floor(seconds / 60)
const remainingSeconds = seconds % 60
return `${String(minutes).padStart(2, '0')}:${String(remainingSeconds).padStart(2, '0')}`
}
2023-09-21 06:53:54 +00:00
export const formatNumbersWithComa = (n: number): string => {
2023-09-26 10:14:44 +00:00
const parts = n.toString().split('.')
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
return parts.join('.')
}
2023-09-16 03:24:51 +00:00
export const getMonthIndicesFromRange = (range: DateRange) => {
if (!range.from || !range.to) return [0, 11]
return [range.from.getMonth(), range.to.getMonth()]
}
export const getFormattedValidatorAddress = (address: string) => {
// zQ3asdf9d4Gs0 -> zQ3...9d4Gs0
const start = address.slice(0, 3)
const end = address.slice(-6)
return `${start}...${end}`
}
export const getFormattedWalletAddress = (address: string) => {
// 0xb9dasdfc35 -> 0xb9d...c35
return `${address.slice(0, 5)}...${address.slice(-3)}`
}
2023-10-11 18:43:25 +00:00
export const formatToFixed4 = (value: string) => {
const decimalPart = value.split('.')[1]
2023-10-11 18:43:25 +00:00
const decimalLength = decimalPart ? decimalPart.length : 0
if (decimalLength > 4) {
return Number(value).toFixed(4)
2023-10-11 18:43:25 +00:00
}
return value
2023-10-11 18:43:25 +00:00
}