Skip to content

Instantly share code, notes, and snippets.

@wesleybliss
wesleybliss / format_currency.js
Created December 17, 2020 15:12
Format currency #js
export const formatCurrency = (number, currency) => {
const options = {
minimumFractionDigits: 2,
currencyDisplay: 'narrowSymbol',
currencySign: 'accounting',
}
if (currency) {
options.style = 'currency'
options.currency = currency
}
@wesleybliss
wesleybliss / get_locale.js
Created December 17, 2020 15:11
Get locale #js
export const getLocale = () => {
const locale = (navigator.languages && navigator.languages.length)
? navigator.languages[0]
: navigator.language
return locale || 'en-US'
}
@wesleybliss
wesleybliss / snippet.js
Created December 17, 2020 15:11
Snippet ellipsis #js
export const snippet = (val, len = 5) =>
(val && val.length > (len * 2))
? val.substring(0, len) + '...' + val.substring(val.length - len)
: val
@wesleybliss
wesleybliss / is_primitive.js
Created December 17, 2020 15:11
Check if isPrimitive #js
export const isPrimitive = val => {
const type = typeof val
if (Array.isArray(val)) return false
if (type === 'object') return val === null
return type !== 'function'
}
@wesleybliss
wesleybliss / debounce.js
Created December 17, 2020 15:10
Debounce #js
export function debounce(func, wait, immediate) {
let timeout
return function (...args) {
clearTimeout(timeout)
timeout = setTimeout(() => {
timeout = null
if (!immediate) func.apply(this, args)
}, wait)
if (immediate && !timeout) func.apply(this, [...args])
}
@wesleybliss
wesleybliss / copy_to_clipboard.js
Created December 17, 2020 15:10
Copy to clipboard #js
export const copyToClipboard = async (text) => {
if (!navigator.clipboard)
// Clipboard API not available
throw new Error('Your browser doesn\'t allow clipboard access')
try {
await navigator.clipboard.writeText(text)
} catch (e) {
log.error('Failed to copy', e)
@wesleybliss
wesleybliss / omit.js
Created December 17, 2020 15:09
Omit #js
export const omit = (obj, fn) => Object.keys(obj)
.filter(it => fn(obj[it]))
.reduce((acc, it) => ({ ...acc, [it]: obj[it] }), {})
@wesleybliss
wesleybliss / is_numeric.js
Created December 17, 2020 15:04
isNumeric #js
export const isNumeric = n =>
!(isNaN(n)) && (typeof n !== 'object') &&
(n != Number.POSITIVE_INFINITY) && (n != Number.NEGATIVE_INFINITY)
@wesleybliss
wesleybliss / select_text.js
Created December 17, 2020 15:01
Select text #js
export const selectText = el => {
if (!window.getSelection || !document.createRange) return
const sel = window.getSelection()
if (sel.toString() == '')
window.setTimeout(() => {
const range = document.createRange()
range.selectNodeContents(el)
sel.removeAllRanges()
sel.addRange(range)
}, 1)
@wesleybliss
wesleybliss / simple_observer.kt
Created March 4, 2020 16:42
Simple Kotlin Observer Pattern
interface Observer<T> {
fun onChange(newValue: T?)
}
class Observable<T>(initialValue: T? = null) {
// List ov observers watching this value for changes
private val observers = mutableListOf<Observer<T>>()
// The real value of this observer