Skip to content

Instantly share code, notes, and snippets.

View aofleejay's full-sized avatar
🐢
Keep going

aofleejay

🐢
Keep going
View GitHub Profile
@aofleejay
aofleejay / index.js
Created February 17, 2018 15:12
Config store with redux-persist
import { createStore } from 'redux'
import { persistStore, persistReducer } from 'redux-persist'
import storage from 'redux-persist/lib/storage'
import rootReducer from '../reducers'
const persistConfig = {
key: 'root',
storage,
}
@aofleejay
aofleejay / index.js
Created February 17, 2018 15:09
Config redux store with local storage
import { createStore } from 'redux'
import rootReducer from '../reducers'
import { loadState, saveState } from '../lib/localStorage'
const persistStore = loadState()
const store = createStore(rootReducer, persistStore)
store.subscribe(() => {
saveState(store.getState())
})
@aofleejay
aofleejay / localStorage.js
Created February 17, 2018 15:06
localStorage module
const loadState = () => {
try {
const serializedState = localStorage.getItem('store')
if (serializedState === null) {
return undefined
} else {
return JSON.parse(serializedState)
}
} catch (error) {
return undefined
@aofleejay
aofleejay / integration.test.js
Created October 11, 2017 13:09
GraphQL integration test
import { expect } from 'chai'
import supertest from 'supertest'
import server from '../../src/server'
describe('Test query', () => {
it('has correct getCharacters query', (done) => {
const request = supertest.agent(server)
const query = {
query: `
query {
@aofleejay
aofleejay / resolver.test.js
Last active May 30, 2018 16:01
Test query resolve function
import { expect } from 'chai'
import rootSchema from '../../src/schemas/rootSchema'
describe('Test resolvers', () => {
it('has correct getCharacters query', (done) => {
const charactersQuery = rootSchema.getTypeMap().Query.getFields().getCharacters
const expected = [
{ id: '1', name: 'John Snow', gender: { name: 'Male' }}
]
@aofleejay
aofleejay / schema.test.js
Last active May 30, 2018 15:57
Test Character type
import { GraphQLString, GraphQLNonNull } from 'graphql'
import { expect } from 'chai'
import rootSchema from '../../src/schemas/rootSchema'
describe('Test schema', () => {
it('has correct character schema', () => {
const characterSchema = rootSchema.getTypeMap().Character.getFields()
expect(characterSchema).to.have.property('name')
expect(characterSchema.name.type).to.deep.equals(GraphQLString)
@aofleejay
aofleejay / service-worker.js
Created October 11, 2017 11:07
Clear old cache
self.addEventListener('activate', event => {
const cacheWhitelist = [CACHE_KEY]
event.waitUntil(
caches.keys().then(keyList => {
return Promise.all(keyList.map(function(key) {
if (cacheWhitelist.indexOf(key) === -1) {
return caches.delete(key)
}
}))
@aofleejay
aofleejay / service-worker.js
Created October 11, 2017 09:51
Handle network request to use cache storage
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(cacheResp => {
return cacheResp || fetch(event.request).then(response => {
return caches.open(CACHE_KEY).then(cache => {
cache.put(event.request, response.clone())
return response
})
})
})
@aofleejay
aofleejay / service-worker.js
Created October 11, 2017 09:40
Cache assets in install event
const VERSION = '1'
const CACHE_KEY = `cache-v${VERSION}`
const assetsToCache = [
'/',
'/assets/css/app.css',
'/assets/js/app.js',
'/assets/images/icons/icon-16x16.png',
'/assets/images/icons/icon-24x24.png',
'/assets/images/icons/icon-36x36.png',
'/assets/images/icons/icon-64x64.png',
@aofleejay
aofleejay / app.js
Created October 11, 2017 09:22
Register a Service Worker
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register("/service-worker.js").then(register => {
console.log('Register succeeded in scope : ', register.scope)
})
})
}