Skip to content

Instantly share code, notes, and snippets.

View amsterdamharu's full-sized avatar

Harm Meijer amsterdamharu

  • Amsterdam Netherlands
View GitHub Profile
@amsterdamharu
amsterdamharu / time_data.ts
Created August 8, 2023 11:39
Times when hour and minute hands are 90 degrees
function pad(num: number) {
return `0000${num}`.slice(-2)
}
function time(hour: number) {
return new Date(
`Tue Aug 08 2023 ${pad(hour)}:00:00 GMT+0200 (Central European Summer Time)`
)
}
const times = [
@amsterdamharu
amsterdamharu / redux.js
Last active October 3, 2022 12:53
Simple implementation of Redux
const createSelectObservable = (() => {
let state;
let pReducer = (state, action) => state;
const subscribers = new Map();
const addSubscriber = (selector) => {
subscribers.set(selector, selector);
//return unsubscribe function
return () => subscribers.delete(selector);
};
const dispatch = (action) => {
@amsterdamharu
amsterdamharu / resolveLastCreated
Created May 6, 2021 20:47
Resolve last created promise
const REPLACED = 'REPLACED';
const last = (fn) => {
const current = { value: {} };
return (...args) => {
const now = {};
current.value = now;
return Promise.resolve(args)
.then((args) => fn(...args))
.then((resolve) =>
current.value === now
@amsterdamharu
amsterdamharu / useReducer with middleware.js
Last active March 17, 2021 19:12
useReducer with middleware
import React from 'react';
import ReactDOM from 'react-dom';
//for Stack overflow snippet that doesn't allow imports
const { useRef, useState } = React;
const compose = (...fns) =>
fns.reduce((result, fn) => (...args) =>
fn(result(...args))
);
const mw = () => (next) => (action) => next(action);
@amsterdamharu
amsterdamharu / partial application.js
Last active March 17, 2021 19:12
partial application
//using partially applied functions (closures) are used for sorting to
// demonstrate how to prevent duplicate implementation and writing
// imperative code. Most of your code should express "what it does"
// not "how it does it"
const data1 = [
{ id: 1, name: 'a', items: [1, 2, 3] },
{ id: 2, name: 'a', items: [1, 2] },
{ id: 3, name: 'b', items: [4, 5] },
{ id: 4, name: 'b', items: [4, 5, 6, 7] },
];
@amsterdamharu
amsterdamharu / group action function.js
Last active March 17, 2021 19:12
group action and function result
//group promise returning function
const createGroup = (cache) => (
fn,
getKey = (...x) => JSON.stringify(x)
) => (...args) => {
const key = getKey(args);
let result = cache.get(key);
if (result) {
return result;
}
@amsterdamharu
amsterdamharu / unnest react containers.js
Last active March 17, 2021 19:13
unnest react containers
import React from 'react';
import ReactDOM from 'react-dom';
const useContainer = (props, container) => {
return container(props);
};
const Counter = ({ counter, up }) => {
const r = React.useRef(0);
r.current++;
return (
@amsterdamharu
amsterdamharu / connect react context.js
Last active March 17, 2021 19:14
connect react context
import React from 'react';
import ReactDOM from 'react-dom';
import * as Reselect from 'reselect';
const {
useMemo,
useState,
useContext,
useRef,
useCallback,
@amsterdamharu
amsterdamharu / stack overflow react redux snippet
Last active March 21, 2021 21:44
stack overflow react redux snippet
<!-- begin snippet: js hide: false console: true babel: true -->
<!-- language: lang-js -->
import * as React from 'react';
import ReactDOM from 'react-dom';
import * as Redux from 'redux';
import * as ReactRedux from 'react-redux';
import * as Reselect from 'reselect';
import * as immer from 'immer';
import React from 'react';
export const NOT_REQUESTED = {
requested: false,
loading: false,
};
const AVAILABLE = {
requested: true,
loading: false,
};
const isResult = (value) =>