Skip to content

Instantly share code, notes, and snippets.

View taion's full-sized avatar
👹
Kappa

Jimmy Jia taion

👹
Kappa
View GitHub Profile
@taion
taion / server.js
Last active March 11, 2024 10:20
GraphQL subscription server with Socket.IO, backed by Redis Pub/Sub
const redisClient = redis.createClient(REDIS_URL);
const listeners = Object.create(null);
function addListener(channel, listener) {
if (!listeners[channel]) {
listeners[channel] = [];
redisClient.subscribe(channel);
}
listeners[channel].push(listener);
import isEqual from 'lodash/isEqual';
import { useContext, useEffect, useRef } from 'react';
import { ReactRelayContext, requestSubscription } from 'react-relay';
import {
GraphQLSubscriptionConfig,
GraphQLTaggedNode,
OperationType,
} from 'relay-runtime';
import useCommittedRef from '@restart/hooks/useCommittedRef';
import usePrevious from '@restart/hooks/usePrevious';
@taion
taion / foo.entrypoint.js
Last active August 14, 2020 14:52
Router strawman
// You can imagine some shorthand for generating this given a component and
// a Relay query.
import React from 'react';
import getFoo from './getFoo';
import lazyComponent from './lazyComponent';
export default function fooEntrypoint({ fooId }) {
const Component = lazyComponent(import('Foo'));
@taion
taion / Route.js
Created August 14, 2019 01:53
Found Relay <Route>
import HttpError from 'found/lib/HttpError';
import BaseRoute from 'found/lib/Route';
import React from 'react';
import LoadingIndicator from '@bfly/ui/lib/LoadingIndicator';
function defaultGetDataFrom({ location }) {
return location.action === 'POP' ? 'STORE_OR_NETWORK' : 'STORE_THEN_NETWORK';
}
export function createRender({ prerender, render, renderFetched }) {
@taion
taion / registry.js
Last active May 7, 2019 21:48
Relay type registry
import decamelize from 'decamelize';
import { fromGlobalId } from 'graphql-relay';
import pluralize from 'pluralize';
import getItem from '../api/getItem';
const types = {};
const endpoints = {};
const getItemOverrides = {};
import io from 'socket.io-client';
import RelayNetworkLayer from '@taion/relay-network-layer';
const MAX_SUBSCRIPTIONS = 200;
const EMPTY_SUBSCRIPTION = {
dispose() {},
};
/**
@taion
taion / Pipfile
Last active November 1, 2017 21:25
Token exchange
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
flask = "*"
@taion
taion / async-props-style.js
Last active January 24, 2017 17:14
React Router data fetching
// Define your components like:
class MyComponent extends React.Component {
static fetchData = (params) => {
// return an action here.
};
/* ... */
}
function fetchComponentData(component, store, params) {
import Relay from 'react-relay';
export default function runQuery(
queryNode,
args,
environment,
forceFetch = false,
) {
const query = Relay.createQuery(queryNode, args);
@taion
taion / makeRequired.js
Created August 21, 2016 20:01
GraphQL CRUD partial updates
/* @flow */
import { GraphQLNonNull } from 'graphql';
export default function makeRequired(partial?: boolean) {
if (partial) {
return (type: mixed) => type;
}
return (type: mixed) => new GraphQLNonNull(type);