Skip to content

Instantly share code, notes, and snippets.

View r3dm1ke's full-sized avatar
🎯
Before software can be reusable it first has to be usable.

Michael Krasnov r3dm1ke

🎯
Before software can be reusable it first has to be usable.
View GitHub Profile
@r3dm1ke
r3dm1ke / applyMiddleware.ts
Created January 26, 2020 15:36
applyMiddleware from Redux (simplified)
import compose from './compose'
import { Middleware, MiddlewareAPI } from './types/middleware'
import { AnyAction } from './types/actions'
import { StoreEnhancer, StoreCreator, Dispatch } from './types/store'
import { Reducer } from './types/reducers'
export default function applyMiddleware(
...middlewares: Middleware[]
): StoreEnhancer<any> {
return (createStore: StoreCreator) => <S, A extends AnyAction>(
@r3dm1ke
r3dm1ke / createStore.ts
Created January 22, 2020 17:11
createStore from Redux (simplified)
import $$observable from './utils/symbol-observable'
import {
Store,
PreloadedState,
StoreEnhancer,
Dispatch,
Observer,
ExtendState
} from './types/store'
@r3dm1ke
r3dm1ke / index.ts
Created January 21, 2020 16:35
Redux - index.ts
// functions
import createStore from './createStore'
import combineReducers from './combineReducers'
import bindActionCreators from './bindActionCreators'
import applyMiddleware from './applyMiddleware'
import compose from './compose'
import warning from './utils/warning'
import __DO_NOT_USE__ActionTypes from './utils/actionTypes'
// types
@r3dm1ke
r3dm1ke / Backdrop.d.ts
Created January 19, 2020 17:51
Generating comments from other comments
export interface BackdropProps
extends StandardProps<
React.HTMLAttributes<HTMLDivElement> & Partial<FadeProps>,
BackdropClassKey
> {
/**
* If `true`, the backdrop is invisible.
* It can be used when rendering a popover or a custom select component.
*/
invisible?: boolean;
@r3dm1ke
r3dm1ke / Icon.js
Created January 19, 2020 17:38
Icon component propTypes from material-ui library
Icon.propTypes = {
/**
* The name of the icon font ligature.
*/
children: PropTypes.node,
/**
* Override or extend the styles applied to the component.
* See [CSS API](#css) below for more details.
*/
classes: PropTypes.object.isRequired,
@r3dm1ke
r3dm1ke / with-comments.js
Created January 19, 2020 17:21
Difference between bad commented code and good non-commented code
/*
Function to get matching pages by tags using a certain threshold (75)
@param tags list of tags
@param pages list of pages
@returns list of related pages
*/
function related_pages(tags, pages) {
// stores related pages
const result = [];
@r3dm1ke
r3dm1ke / package.json
Created January 15, 2020 18:26
Redux package.json
{
"name": "redux",
"version": "4.0.4",
"description": "Predictable state container for JavaScript apps",
"license": "MIT",
"homepage": "http://redux.js.org",
"repository": "github:reduxjs/redux",
"bugs": "https://github.com/reduxjs/redux/issues",
"authors": [
"Dan Abramov <dan.abramov@me.com> (https://github.com/gaearon)",
@r3dm1ke
r3dm1ke / common-symbols.js
Created January 14, 2020 19:01
Common symbols in ES6
// Iteration symbols
Symbol.iterator
Symbol.asyncIterator
// RegEx symbols
Symbol.match
Symbol.matchAll
Symbol.replace
Symbol.search
Symbol.split
@r3dm1ke
r3dm1ke / symbol-lookup.js
Last active January 31, 2020 17:35
A simplified version of Symbol.for() function
Symbol.prototype.for = (key) => {
// Safely getting the global registry
const symbolRegistry = window.symbolRegistry || {};
// Checking if this symbol exists
if (symbolRegisty.hasOwnProperty(key)) {
return symbolRegistry[key];
}
// It does not, creating a new one
@r3dm1ke
r3dm1ke / global-symbols.js
Created January 14, 2020 18:25
Using global symbol registry in ES6
const sym1 = Symbol.for('some-key'); // Symbol is created in global registry
// Elsewhere in project:
const sym2 = Symbol.for('some-key'); // Symbol is retrieved from global registry
// They are the same symbol:
console.log(sym1 === sym2); // true
// You can even access the key property:
console.log(Symbol.keyFor(sym1)); // some-key