Skip to content

Instantly share code, notes, and snippets.

View mohsen1's full-sized avatar

Mohsen Azimi mohsen1

View GitHub Profile
function foo(a) {
console.log(a.b)
}
foo({})
function power2(a) {
return a * a;
}
power2('string')
/**
* Create an input element
*/
function createInput(type: 'text', value: string): HTMLInputElement;
function createInput(type: 'checkbox', value: boolean): HTMLInputElement;
function createInput(type, value) {
// code
}
const input = createInput('checkbox', 'false')
/**
* Create an input element
* @param {string} type
* @param {string|boolean} value
* @return {HTMLInputElement}
*/
function createInput(type, value) {
const el = document.createElement('input');
el.type = type;
if (type === 'checkbox') {
@mohsen1
mohsen1 / HydratableStore.tsx
Created July 31, 2017 21:20
How to hydrate stores in the server with MobX
import * as React from 'react';
import { computed } from 'mobx';
import { inject, observer, Provider } from 'mobx-react';
import { fromPromise } from 'mobx-utils';
import {StaticRouter} from 'react-router-dom';
import { Request, Response } from 'express';
import * as ReactDOM from 'react-dom/server';
interface Item {
weight: number;
import * as React from 'react';
import { RouteComponentProps } from 'react-router-dom';
interface LoadableProps<T> {
loader: (props: RouteComponentProps<T>) => (() => Promise<React.ComponentType<T>> | React.ComponentType<T>);
loading: React.ComponentType<T>;
}
export function Loadable<T>(loadableProps: LoadableProps<T>) {
return class LoadableComponent extends React.Component<RouteComponentProps<T>, { ResultComponent: React.ComponentType<T> }> {
declare module 'mobx-remotedev' {
/**
* Connect MobX Remote Dev
*
* @param store observable or class to be monitored. In case you want to change its values
* (to time travel or cancel actions), you should export its result as in the example
* above (so we can extend the class).
* @param config Configuration
*
* @return store
@mohsen1
mohsen1 / mobx-router.ts
Created September 26, 2016 01:20
MobX Router idea
import {merge} from 'lodash';
import {autorun} from 'mobx';
// TODO: find a good polyfill for this
declare const URLSearchParams;
const routeMatcher = require("route-matcher").routeMatcher;
const createBrowserHistory = require('history/createBrowserHistory').default;
/*
* A store have to implement these two getters to be routable
@mohsen1
mohsen1 / keybindings.json.yaml
Last active November 4, 2018 19:23
Sublime Text key bindings for Visual Studio Code
[
{
"key": "shift+cmd+d",
"command": "editor.action.copyLinesDownAction"
},
{
"key": "cmd+l",
"command": "expandLineSelection"
},