Skip to content

Instantly share code, notes, and snippets.

View mkozhukharenko's full-sized avatar

Nikolay mkozhukharenko

View GitHub Profile
@mkozhukharenko
mkozhukharenko / validatorjs-example.js
Last active January 28, 2021 18:27
Example of validatorjs usage
import Validator from 'validatorjs'
var data = {
name: 'John',
email: 'not-valid-email'
};
var rules = {
name: 'required',
email: 'required|email'
};
var validation = new Validator(data, rules);
@mkozhukharenko
mkozhukharenko / api.js
Created January 14, 2018 14:20
Axios with refresh handlig
import axios from 'axios';
import { IUser } from '../types/index';
let isRefreshing = false;
let refreshSubscribers: any = [];
export const API_VERSION = 'v1';
export const BACKEND_API_URL = process.env.NODE_ENV === 'development'
? '//127.0.0.1:3000'
: process.env.REACT_APP_BACKEND_API_URL || `${window.location.protocol}//${window.location.hostname}`;
@mkozhukharenko
mkozhukharenko / progress.story.tsx
Created January 2, 2018 10:01
Progress rc wrapper
import * as React from 'react'
import { storiesOf } from '@storybook/react'
import Progress from './progress'
storiesOf('Progress', module)
.add('Simple', () => (
<div>
<div style={{width: 250}}>
<Progress percent={20} type="line"/>
</div>
@mkozhukharenko
mkozhukharenko / wait-for.ts
Created September 11, 2017 14:48
Run function only when the condition is met
interface IWaitForArgs {
test: () => boolean // run function only if test() returns true
interval: number
count: number // should be 0, required
maxAttempts: number // max number of attempts
run: () => any // function to run
}
function waitFor({test, interval, count, maxAttempts, run}: IWaitForArgs) {
// try to run function only maxAttempts times
@mkozhukharenko
mkozhukharenko / bing-api.js
Created July 26, 2017 18:50
Bing API search javascript
let request = async (query: string): Promise<any[]> => {
const myHeaders = new Headers()
myHeaders.append('Ocp-Apim-Subscription-Key', 'b5deb0d4be5a4dcaaa478f7b343baa3d')
const params = {
q: query,
safeSearch: 'Strict',
license: 'Public'
}
const urlParams = new URLSearchParams((Object as any).entries(params)) // entries works in Chrome
const url = 'https://api.cognitive.microsoft.com/bing/v5.0/images/search?' + urlParams.toString()
let compose = (middlewares) => {
return function () {
return dispatch(0)
function dispatch(i) {
let fn = middlewares[i]
if (!fn) {
return
}
fn(function next() {
return dispatch(i + 1)
@mkozhukharenko
mkozhukharenko / express-auth-promises2.js
Last active April 11, 2017 12:36
Expressks auth with promise .js
app.post('/', function (req, res, next) {
var body = req.body;
if (!body.name || !body.email || !body.password) {
return res.status(400).send("Missing username or email or password")
};
// case #1- if user was registered (socials platform) before -> just add a password;
User.findOneAndUpdate({
email: body.email
}, {
$set: { password: body.password }
@mkozhukharenko
mkozhukharenko / basic-express.js
Created April 8, 2017 18:58
Real compose function implementation (composing middlewares)
var app = {
middlewares: [],
use(fn) {
this.middlewares.push(fn)
},
compose(middleware) {
return function (next) {
return dispatch(0)
function dispatch(i) {
let fn = middleware[i]
import {action, toJS} from 'mobx'
import Validator from 'validatorjs';
class FormStore {
getFlattenedValues = (valueKey = 'value') => {
let data = {};
let form = toJS(this.form).fields;
Object.keys(form).map(key => {
data[key] = form[key][valueKey]
});
@mkozhukharenko
mkozhukharenko / form-input.componen.jsx
Last active March 15, 2017 11:48
Form input component
import React, { PropTypes } from 'react';
import classNames from 'classnames'
let getFormInputClasses = ({valid, error}) => classNames('form-input', {
'form-input--error': !!error,
})
let FormInput = (props) => (
<span className={getFormInputClasses(props)}>
<input {...props}