Skip to content

Instantly share code, notes, and snippets.

View srph's full-sized avatar
🛠️
Building @Stride-Labs Frontend

Kier Borromeo srph

🛠️
Building @Stride-Labs Frontend
View GitHub Profile
@srph
srph / readme.md
Last active May 7, 2019 06:55
React Hook: useFormState
const form = useFormState({ 
  email: '',
  password: ''
})

// returns form.setEmail, form.email, form.setPassword, and form.password
<input value={form.email} onChange={form.setEmail} />
@srph
srph / RouterNavLink.tsx
Created December 2, 2018 06:17
React Router DOM: NavLink activeClassName proxy component
@srph
srph / interceptor-validation-errors.ts
Last active November 25, 2018 08:04
axios: Open up a toast when a validation error occurs
import instance from './instance'
import { toast } from '@app/components/Toast'
import { AxiosRequestConfig, AxiosError } from 'axios';
interface IAxiosInterceptorValidationConfig extends AxiosRequestConfig {
appValidationError?: string | boolean
}
interface IAxiosInterceptorValidationError extends AxiosError {
config: IAxiosInterceptorValidationConfig
@srph
srph / index.ts
Created November 24, 2018 11:11
TS: Check if an array contains the provided subset
function subsetIncludes(array: any[], value: any): boolean {
return Boolean(
array.find(arrayValue => isSubset(arrayValue, value))
)
}
@srph
srph / RouterRoute.tsx
Created November 16, 2018 15:01
React Router v4: Passthrough props Route
import * as React from 'react'
import { Route } from 'react-router-dom'
import { RouteProps } from 'react-router'
interface IRouterRouteProps extends RouteProps {
component: any
}
class RouterRoute extends React.Component<IRouterRouteProps> {
render() {
@srph
srph / Switch.tsx
Created November 16, 2018 14:58
React Router v4: Passthrough props for Switch
import * as React from 'react'
import { Switch } from 'react-router-dom'
interface IRouterSwitch {
children: any
}
class RouterSwitch extends React.Component<IRouterSwitch, {}> {
render() {
const {children, ...rest} = this.props
@srph
srph / index.ts
Last active November 18, 2018 22:17
JS: Generate avatar initials from name
export default function(organizationName: string) {
const [f, l]: string[] = organizationName.split(' ')
return [f.charAt(0).toUpperCase(), (l || '').charAt(0).toUpperCase()].join('')
}
@srph
srph / RouterPermission.tsx
Created November 16, 2018 08:55
Reach Router: Advanced permissions proof of concept
import * as React from 'react'
import { Subscribe as UnstatedSubscribe } from 'unstated'
import { AuthContainer } from '@app/containers'
import { TAuthContainerUserData } from '@app/containers/AuthContainer'
import { Redirect } from '@reach/router'
import authOnly from './permission-auth-only'
import guestOnly from './permission-auth-only'
interface IPermissionFunction {
guard: (user: TAuthContainerUserData) => boolean
@srph
srph / index.js
Created October 31, 2018 06:51
Codility: Find the smallest natural number
function solution(A) {
var natural = Array.from(new Array(10000)).map((_, i) => i + 1)
return natural.sort((a, b) => a - b).find((n) => !A.includes(n))
}
console.log(solution([1,2,5]))
@srph
srph / index.js
Created October 16, 2018 05:11
JS: Array-like data structure to array
function obj2arr(obj) {
var arr = []
function flatten (subobj, isRoot) {
var result = {}
Object.keys(subobj).forEach(key => {
if (typeof subobj[key] === 'object') {
flatten(subobj[key], false)
} else {
result[key] = subobj[key]