Skip to content

Instantly share code, notes, and snippets.

View samselikoff's full-sized avatar

Sam Selikoff samselikoff

View GitHub Profile
import { motion } from "framer-motion";
import { FormEvent, useState } from "react";
import { createGlobalState } from "react-hooks-global-state";
const { useGlobalState } = createGlobalState({
enabled: false,
delay: 1000,
});
@samselikoff
samselikoff / use-state.code-snippets
Last active July 31, 2023 16:19
A VSCode snippet that lets you type `ush` to define some new React state.
{
"Use state": {
"scope": "javascriptreact,typescriptreact",
"prefix": "ush",
"body": [
"let [${1}, set${1/(.*)/${1:/capitalize}/}] = useState($2);",
],
"description": "useState()"
}
}
@samselikoff
samselikoff / 1-PictureForm.js
Last active June 8, 2023 02:04
Diff of the PictureForm component from "Let's build a feature – Cropped Image Uploads!" https://youtu.be/W5__zfYrtt8
import Button from "@/components/Button";
import ImageCropper, {
getCroppedImage,
getDataURLFromFile,
} from "@/components/ImageCropper";
import Modal from "@/components/Modal";
import useCurrentUser from "@/hooks/use-current-user";
import useMutation from "@/hooks/use-mutation";
import { UserIcon } from "@heroicons/react/outline";
import { gql } from "graphql-request";
@samselikoff
samselikoff / range.code-snippets
Last active May 29, 2023 16:28
VSCode snippet for creating a loop of n numbers in JSX! https://twitter.com/samselikoff/status/1611406980639244301
{
"Range of numbers": {
"scope": "javascriptreact,typescriptreact",
"prefix": "range",
"body": [
"{[...Array($1).keys()].map((i) => (",
" <$2 key={i}>",
" $3",
" </$2>",
"))}",
@samselikoff
samselikoff / future-proof.md
Last active April 21, 2023 17:14
Future-proofing your Ember 1.x code

This post is also on my blog, since Gist doesn't support @ notifications.


Components are taking center stage in Ember 2.0. Here are some things you can do today to make the transition as smooth as possible:

  • Use Ember CLI
  • In general, replace views + controllers with components
  • Only use controllers at the top-level for receiving data from the route, and use Ember.Controller instead of Ember.ArrayController or Ember.ObjectController
  • Fetch data in your route, and set it as normal properties on your top-level controller. Export an Ember.Controller, otherwise a proxy will be generated. You can use Ember.RSVP.hash to simulate setting normal props on your controller.
@samselikoff
samselikoff / controllers.application.js
Last active March 12, 2023 05:07
Mirage Boilerplate
import Ember from 'ember';
export default Ember.Controller.extend({
});
@samselikoff
samselikoff / controllers.application.js
Last active February 5, 2023 21:27
Mirage 0.3 - One to Many
import Ember from 'ember';
export default Ember.Controller.extend({
db: Ember.computed('refreshDb', function() {
let dump = window.server.schema.db.dump();
return JSON.stringify(dump, null, 2);
}),
@samselikoff
samselikoff / valtio-use-auth.js
Created March 4, 2022 13:10
Zustand auth store vs Valtio auth store
import firebaseProvider from "@/lib/auth-providers/firebase";
import testProvider from "@/lib/auth-providers/test";
import { proxy, useSnapshot } from "valtio";
import { gql } from "graphql-request";
import request from "@/lib/request";
let isServer = typeof window === "undefined";
let isTest = !isServer && window.Cypress;
let mocksEnabled = process.env.NEXT_PUBLIC_ENABLE_MOCKS;
@samselikoff
samselikoff / tailwind.config.js
Created April 16, 2021 15:57
Firefox plugin for Tailwind CSS. Add styles that target Firefox browser only.
const plugin = require("tailwindcss/plugin");
module.exports = {
mode: "jit",
purge: {
content: ["./src/**/*.{js,ts,jsx,tsx,mdx,vue}"],
},
theme: { extend: {} },
variants: {},
plugins: [
@samselikoff
samselikoff / controllers.application.js
Last active July 5, 2022 04:01
Ember Animated boilerplate
import Ember from 'ember';
import fade from 'ember-animated/transitions/fade';
export default Ember.Controller.extend({
fade
});