Skip to content

Instantly share code, notes, and snippets.

View jgcmarins's full-sized avatar

João Marins jgcmarins

View GitHub Profile
import rules from "../rbac-rules";
const check = (rules, role, action, data) => {
const permissions = rules[role];
if (!permissions) {
// role is not present in the rules
return false;
}
const staticPermissions = permissions.static;
@jgcmarins
jgcmarins / FeatureFlag.tsx
Created May 6, 2020 14:36 — forked from sibelius/FeatureFlag.tsx
Basic Feature Flag implementation using React.Context
import React, { useContext, useCallback } from 'react';
export const FeatureFlagContext = React.createContext<string[]>([]);
export const useFeatureFlag = () => {
const features = useContext<string[]>(FeatureFlagContext);
const hasFeature = useCallback(
(feature: string) => {
return features.includes(feature);
@jgcmarins
jgcmarins / webpack.config.js
Created April 28, 2020 13:20 — forked from sibelius/webpack.config.js
run node files using webpack
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const cwd = process.cwd();
export const outputPath = path.join(cwd, '.webpack');
export const outputFilename = 'bundle.js';
export default {
@jgcmarins
jgcmarins / outputExample
Created March 31, 2020 16:40 — forked from sibelius/outputExample
traceResolver higher order function to wrap your GraphQL Resolvers
{
version: 1,
startTime: '2020-03-31T15:25:05.747Z',
endTime: '2020-03-31T15:25:05.747Z',
duration: 3130,
execution: {
resolvers: [
{
path: [ 'posts', 'analytics', 'quantity' ],
parentType: 'User',
@jgcmarins
jgcmarins / setupSubscription.tsx
Created March 17, 2020 13:45 — forked from sibelius/setupSubscription.tsx
basic setupSubscription for Relay Environment
import { SubscribeFunction, Observable } from 'relay-runtime';
import { SubscriptionClient } from 'subscriptions-transport-ws';
import config from '../config';
import { getToken } from '../components/auth/security';
export const setupSubscription: SubscribeFunction = (request, variables) => {
const query = request.text;
const authorization = getToken();
@jgcmarins
jgcmarins / App.js
Created March 17, 2020 13:07 — forked from BorisTB/App.js
Demo of helper hooks for automatic refetch on sort/pagination change
const App = React.memo(
({
node: {
items: { totalCount, ...items }
},
relay
}) => {
const [fulltext, setFulltext] = useState('')
const fulltextDebounced = useDebounce(fulltext, 300)
const [{ sort, order }, updateSort] = useSort({ sort: 'name', order: 'asc' })
@jgcmarins
jgcmarins / usePreloadRoute.tsx
Created March 17, 2020 12:57 — forked from sibelius/usePreloadRoute.tsx
usePreloadRoute to preload code or data based on events
import { useCallback } from 'react';
import { matchRoutes, MatchedRoute, RouteConfig } from 'react-router-config';
const prepareMatches = <Params extends { [K in keyof Params]?: string }>(matches: Array<MatchedRoute<Params>>) => {
return matches.map(match => {
const { route, match: matchData } = match;
const prepared = route.prepare ? route.prepare(matchData.params) : {};
const Component = route.component.get();
if (Component == null) {
route.component.load(); // eagerly load
@jgcmarins
jgcmarins / createLoader.tsx
Created March 17, 2020 12:51 — forked from sibelius/createLoader.tsx
createLoader used on react europe relay workshop
// eslint-disable-next-line
import { mongooseLoader } from '@entria/graphql-mongoose-loader';
import DataLoader from 'dataloader';
import { ConnectionArguments } from 'graphql-relay';
import { Model, Types } from 'mongoose';
import { buildMongoConditionsFromFilters } from '@entria/graphql-mongo-helpers';
import { validateContextUser } from './validateContextUser';
import { withConnectionCursor } from './withConnectionCursor';
@jgcmarins
jgcmarins / useInternetReachable.js
Created March 4, 2020 12:04 — forked from julioxavierr/useInternetReachable.js
Alternative hook to check if the internet is reachable with @react-native-community/netinfo that does not return false on the initial results
import { useState, useEffect } from 'react';
import NetInfo from '@react-native-community/netinfo';
const useInternetReachable = () => {
const [isReachable, setIsReachable] = useState(false);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
const unsubscribe = NetInfo.addEventListener(({ isInternetReachable }) => {
if (typeof isInternetReachable !== 'boolean') return;
@jgcmarins
jgcmarins / useAuth.js
Created March 3, 2020 10:54 — forked from gsasouza/useAuth.js
Relay hook to handle authenticantion
import { ROOT_ID } from 'relay-runtime';
import { useRelayEnvironment } from 'react-relay/hooks';
import { useLocation, useHistory } from 'react-router-dom';
import { commitLocalUpdate } from 'react-relay'
import { useMutation } from 'relay-hooks/lib';
import { AuthUserMutation } from 'mutations/AuthUserMutation';
export const TOKEN_KEY = 'KEY';