83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import { formatValue } from 'publicodes'
|
|
|
|
export function capitalise0(name: undefined): undefined
|
|
export function capitalise0(name: string): string
|
|
export function capitalise0(name?: string) {
|
|
return name && name[0].toUpperCase() + name.slice(1)
|
|
}
|
|
|
|
export const debounce = <F extends (...args: any[]) => void>(
|
|
waitFor: number,
|
|
fn: F
|
|
) => {
|
|
let timeoutId: ReturnType<typeof setTimeout>
|
|
return (...args: any[]) => {
|
|
clearTimeout(timeoutId)
|
|
timeoutId = setTimeout(() => fn(...args), waitFor)
|
|
}
|
|
}
|
|
|
|
export const fetcher = (url: RequestInfo) => fetch(url).then((r) => r.json())
|
|
|
|
export function inIframe(): boolean {
|
|
try {
|
|
return window.self !== window.top
|
|
} catch (e) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
export function softCatch<ArgType, ReturnType>(
|
|
fn: (arg: ArgType) => ReturnType
|
|
): (arg: ArgType) => ReturnType | null {
|
|
return function (...args) {
|
|
try {
|
|
return fn(...args)
|
|
} catch (e) {
|
|
// eslint-disable-next-line no-console
|
|
console.warn(e)
|
|
return null
|
|
}
|
|
}
|
|
}
|
|
|
|
export function getSessionStorage() {
|
|
// In some browsers like Brave, even just reading the variable sessionStorage
|
|
// is throwing an error in the iframe, so we can't do things if sessionStorage !== undefined
|
|
// and we need to wrap it in a try { } catch { } logic
|
|
try {
|
|
return window.sessionStorage
|
|
} catch (e) {
|
|
return undefined
|
|
}
|
|
}
|
|
|
|
export const currencyFormat = (language: string) => ({
|
|
isCurrencyPrefixed: !!formatValue(12, { language, displayedUnit: '€' }).match(
|
|
/^€/
|
|
),
|
|
thousandSeparator: formatValue(1000, { language }).charAt(1),
|
|
decimalSeparator: formatValue(0.1, { language }).charAt(1),
|
|
})
|
|
|
|
export function hash(str: string): number {
|
|
let hash = 0
|
|
let chr
|
|
for (let i = 0; i < str.length; i++) {
|
|
chr = str.charCodeAt(i)
|
|
hash = (hash << 5) - hash + chr
|
|
hash |= 0 // Convert to 32bit integer
|
|
}
|
|
return hash
|
|
}
|
|
|
|
export function omit<T, K extends keyof T>(obj: T, key: K): Omit<T, K> {
|
|
const returnObject = { ...obj }
|
|
delete returnObject[key]
|
|
return returnObject
|
|
}
|
|
|
|
export function isIterable<T>(obj: unknown): obj is Iterable<T> {
|
|
return Symbol.iterator in Object(obj)
|
|
}
|