Skip to content

Instantly share code, notes, and snippets.

/* eslint camelcase: 0 */
import React from 'react';
import compose from 'recompose/compose';
import lifecycle from 'recompose/lifecycle';
import {
getCountryNameByCode,
getCountryCodeByName,
validCountry,
} from 'utils';
@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 / 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 / logic.js
Last active September 13, 2022 00:58
LoginForm/logic.js with async/await
import React from 'react';
import withState from 'recompose/withState';
import withHandlers from 'recompose/withHandlers';
import compose from 'recompose/compose';
import getContext from 'recompose/getContext';
const withConfig = getContext({ config: React.PropTypes.object });
const withEmailState = withState('email', 'setEmail', '');
const withPasswordState = withState('password', 'setPassword', '');
const withFetchState = withState('fetching', 'setFetching', false);
@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
[...Array(101)].map((_, i) => {
const divBy = num => i % num === 0;
const w = word => `${i}...${word}`;
const output =
divBy(5) && divBy(7) && w`fizzbuzz` ||
divBy(5) && w`fizz` ||
divBy(7) && w`buzz` ||
w``;
output && console.log(output);
})
@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 / 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 / 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_asyncify.js
Last active October 10, 2017 18:46
blog_asyncify
const asyncify = (generatorFn) => {
const myIterator = generatorFn();
// recursive function that continue to feed itself
// yielded Promises until there are none left
const runNext = ({ value, done }) => {
if (done) return;
value.then(() => runNext(myIterator.next()))
}
runNext(myIterator.next())
}