Skip to content

Instantly share code, notes, and snippets.

@tvler
tvler / onwheneva.js
Last active May 11, 2016 01:51
A way to call a JavaScript function on DOMContentLoaded or after, no rush. Great for non-essential async code.
var test = () => {
console.log('fired on DOMContentLoaded or after');
}
window.onwheneva = test;
document.readyState !== 'loading' ? onwheneva() :
document.addEventListener('DOMContentLoaded', onwheneva);
@tvler
tvler / setStateArraySplice.js
Last active December 10, 2017 08:57
A setState function to immutably splice an array property
// Thanks to https://vincent.billey.me/pure-javascript-immutable-array
import React, { Component } from 'react';
const setStateArraySplice = (
stateKey,
arrayStart,
arrayDeleteCount,
...items
) => ({
@tvler
tvler / FormDataToURLSearchParams.js
Created January 14, 2018 00:20
FormData into URLSearchParams one-liner
new URLSearchParams([...new FormData(ev.target)])
@tvler
tvler / imessage-pics.sh
Created March 22, 2018 14:55
(MacOS) Open all iMessage attachments in Preview
open -a Preview ~/Library/Messages/Attachments
@tvler
tvler / getCircularArrayIndex.js
Created April 16, 2018 23:22
Get circular array index
const getCircularArrayIndex = (i, { length }) =>
(i % length + length) % length;
const testArray = new Array(5);
for (let i = -30; i < 31; i++) {
console.log(i, getCircularArrayIndex(i, testArray))
}
@tvler
tvler / Atom⇧⌘F
Last active May 25, 2018 20:05
Atom ⇧⌘F helpers
Exclude file types
!*.snap, !*.test.jsx, !*.test.js
@tvler
tvler / cartesianProduct.js
Created February 19, 2019 17:49
Get the cartesian product of multiple sets
// Thanks to eddmann.com/posts/cartesian-product-in-javascript
const cartesianProduct = (...sets) =>
sets.reduce((sets, set) => sets.flatMap(x => set.map(y => [...x, y])), [[]]);
cartesianProduct(
['a', 'b', 'c'],
['x', 'y', 'z'],
);
@tvler
tvler / areUnsortedArraysEqual.js
Last active April 18, 2019 15:58
A variadic function to see if any number of unsorted arrays all have the same values
const areUnsortedArraysEqual = (...arrs) => {
const everyEqual = ([first, ...arr], isEqual) =>
arr.every(item => isEqual(first, item));
return (
everyEqual(arrs, (first, arr) => arr.length === first.length) &&
everyEqual(
arrs.map(arr =>
arr.reduce(
(map, item) => map.set(item, (map.get(item) || 0) + 1),
@tvler
tvler / DeepRequiredNonNullable.ts
Last active January 22, 2020 19:52
Recursively remove all undefined and null types from data structures of arbitrary-depth
type DeepRequiredNonNullable<T> = T extends null | undefined
? never
: (T extends (infer ElementType)[]
? DeepRequiredNonNullable<ElementType>[]
: (T extends Record<string | number, any>
? { [key in keyof T]-?: DeepRequiredNonNullable<T[key]> }
: T));
// Number test
type BadPrimitive = number | null | undefined | string;
@tvler
tvler / useNewKey.jsx
Last active April 2, 2020 19:59
React hook that returns a new key when its passed in value goes from false to true
// React hook that returns a new key
// when its passed in value goes from false to true.
// Use this for resetting a child component, firing events, etc!
const useNewKey = bool => {
const [key, setKey] = useState(bool ? 0 : 1);
const newKey = Boolean(bool) === Boolean(key % 2) ? key + 1 : key;
useEffect(() => {
setKey(newKey);