Skip to content

Instantly share code, notes, and snippets.

@silesky
silesky / git-squash
Created September 6, 2022 17:35
easy git squash script
#!/bin/bash
# Author: Joel Nothman
usage() {
echo Usage: $0 '[-m <commit msg>] <base>'
exit 1
}
unset base
unset message
@silesky
silesky / react-loader-pattern-for-intermediate-state.js
Last active September 13, 2022 00:59
Loader pattern for intermediate state
import React from "react";
import Todo from "./Todo";
import useTodosLoading from "./useTodosLoading";
import React from "react";
const Loader = ({ isLoading, errorMessage, children }) => {
if (errorMessage) return <Error errrorMessage={errorMessage} />;
if (isLoading) return <Loading />;
return children;
};
@silesky
silesky / io-ts-example-with-promises.ts
Created October 6, 2020 19:27
io-ts with promises
import * as t from 'io-ts';
import { PathReporter } from 'io-ts/lib/PathReporter';
import * as tPromise from 'io-ts-promise';
// [io-ts][https://github.com/gcanti/io-ts](https://github.com/gcanti/io-ts)
// [Take control of unexpected data at runtime with TypeScript](https://blog.logrocket.com/using-typescript-to-stop-unexpected-data-from-breaking-your-app/)
const fetchProduct = () => {
return Promise.resolve({
id: '123',
@silesky
silesky / GoogleMap.js
Last active September 13, 2022 01:00
React custom Google Maps component
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { iconYouAreHere, iconPin } from 'icons';
import styles from './styles.css';
const loadScript = src => {
const ref = global.document.getElementsByTagName('script')[0];
const script = global.document.createElement('script');
script.src = src;
@silesky
silesky / multipleFilters.js
Created January 12, 2018 18:04
multipleFilters
/**
* Use multiple filters on an array of object
* @param {Object[]} arr - the array to filter
* example:
* [
* {fruit: 'apple', count: 1, id: 123},
* {fruit: 'pear', count: 4, id: 234},
* {fruit: 'orange', count: 4, id: 456}
* ]
* @param {Object.<Array>} filters - an object with the filter criteria as the property names
@silesky
silesky / blog_fake_asyncify.js
Last active October 10, 2017 18:37
blog_fake_asyncify
const timer = asyncify(() => {
promiseTimeout(1000) // pseudo-code
promiseTimeout(2000)
promiseTimeout(3000)
})
@silesky
silesky / blog_async_setT2.js
Last active October 27, 2017 17:22
blog_async_setT2
setTimeout(() => console.log('hi'), 1000)
setTimeout(() => console.log('hi'), 2000)
setTimeout(() => console.log('hi'), 3000)
@silesky
silesky / blog_async_promisetimeout.js
Last active October 10, 2017 18:42
blog_async_promisetimeout
const timer = asyncify(function* () {
yield promiseTimeout(1000)
yield promiseTimeout(2000)
yield promiseTimeout(3000)
})
@silesky
silesky / blog_async_final.js
Last active October 10, 2017 18:29
blog_async_final
const timer = async() => {
await promiseTimeout(1000)
await promiseTimeout(2000)
await promiseTimeout(3000)
}
@silesky
silesky / blog_fetch.js
Created October 10, 2017 17:57
blog_fetch
const data = fetch(‘http://foo.com/api/') // gets skipped
console.log(data) //... [[PromiseValue]]: undefined}