Skip to content

Instantly share code, notes, and snippets.

View trevorblades's full-sized avatar
🌵
#AlwaysLearning

Trevor Blades trevorblades

🌵
#AlwaysLearning
View GitHub Profile
@trevorblades
trevorblades / block-actions.js
Created October 31, 2019 22:29
Apollo mutation update option
import PropTypes from 'prop-types';
import React, {Fragment, useRef, useState} from 'react';
import gql from 'graphql-tag';
import useClickAway from 'react-use/lib/useClickAway';
import {
Box,
Button,
Dialog,
DialogActions,
DialogContent,
@trevorblades
trevorblades / pack-browser-grid.js
Created October 31, 2019 22:13
Pagination with Apollo
import PackCard from './pack-card';
import PropTypes from 'prop-types';
import React, {useEffect} from 'react';
import {Grid} from '@material-ui/core';
import {useWindowScroll, useWindowSize} from 'react-use';
export default function PackBrowserGrid(props) {
const {y} = useWindowScroll();
const {height} = useWindowSize();
import gql from 'graphql-tag';
export const PROJECT_FRAGMENT = gql`
fragment ProjectFragment on Project {
id
name
updatedAt
}
`;
@trevorblades
trevorblades / play-bar.js
Created October 10, 2019 03:05
Playback play bar component
import PropTypes from 'prop-types';
import RateButton from './rate-button';
import React, {useRef, useState} from 'react';
import Waveform from './waveform';
import useHoverDirty from 'react-use/lib/useHoverDirty';
import {
Box,
IconButton,
MuiThemeProvider,
Tooltip,
@trevorblades
trevorblades / events.js
Created October 8, 2019 04:20
Event handling with hooks
useEffect(() => {
document.addEventListener('keydown', handleKeyDown);
return () => {
document.removeEventListener('keydown', handleKeyDown);
};
}, []);
function handleKeyDown(event) {
console.log(event);
}
@trevorblades
trevorblades / demo-gatsby-config.js
Created August 26, 2019 23:09
Sourcing from a theme consumer
module.exports = {
plugins: [
{
resolve: 'gatsby-theme-esports',
options: {
root: __dirname
}
}
]
};
function spellingBeeSolutions(wordList, puzzles) {
return puzzles.map(puzzle => {
const puzzleLetters = puzzle.split('');
return wordList.reduce((acc, word) => {
const letters = word.split('');
const match = letters.every(
letter => puzzleLetters.includes(letter)
);
import React, {Component} from 'react';
import styles from './Navbar.module.css';
import {Link, NavLink} from 'react-router-dom';
function isLoggedIn() {
const cookies = document.cookie
.split(';')
.filter(item => item.trim().startsWith('logedIn='));
return cookies.length > 0;
}
@trevorblades
trevorblades / ProductsList.js
Created July 19, 2019 18:18
Apollo render props vs. hooks (basic example)
function ProductsList() {
const {loading, error, data} = useQuery(LIST_PRODUCTS);
if (loading) return 'Loading...';
if (error) return error.message;
return (
<ul>
{data.products.map(product => (
<li key={product.id}>{product.name}</li>
))}
</ul>
@trevorblades
trevorblades / index.js
Created June 27, 2019 22:40
gatsby-remark-transform-typescript
const visit = require('unist-util-visit');
const babel = require('@babel/core');
const ts = ['ts', 'tsx', 'typescript'];
const babelOptions = {
presets: [
[
'@babel/typescript',
{
allExtensions: true,