Skip to content

Instantly share code, notes, and snippets.

View frankiesardo's full-sized avatar

Francesco Sardo frankiesardo

View GitHub Profile
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = "postgres"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
@frankiesardo
frankiesardo / deps.edn
Last active February 23, 2021 11:38 — forked from athos/deps.edn
Try `clojure -Sdeps '{:deps {hello-clojure {:git/url "https://gist.github.com/athos/b68b15b08efedffaf14d8c020b125202" :sha "1c9a05106171f97f9b8e8ac8f58c7bd8dbe021f9"}}}' -m hello-clojure` on your terminal
{:paths ["."]
:deps {clansi {:mvn/version "1.0.0"}}}
@frankiesardo
frankiesardo / firebase.rules
Created December 23, 2020 10:18
Medium blog post
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /rooms/{roomId} {
allow get
allow create: if
request.resource.data.keys().hasOnly(['hostId', 'timestamp']) &&
request.resource.data.hostId == request.auth.uid &&
request.resource.data.timestamp == request.time
@frankiesardo
frankiesardo / useReconciler.cljs
Last active December 23, 2020 10:18
Medium blog post
(defn useReconciler [reconciler effect-handler initial-state]
(let [[state&effects set-state] (react/useState {:state initial-state})
[state effects] ((juxt get dissoc) state&effects :state)
dispatch (uix/callback
(fn [action] (set-state (fn [{:keys [state]}] (merge {:state state} (reconciler state action)))))
[reconciler])]
(uix/effect!
(fn []
(when-not (empty? effects)
(doseq [effect effects :let [[type payload] effect]]
@frankiesardo
frankiesardo / index.test.js
Created September 19, 2020 08:11
Evenly interleave two arrays
Array.prototype.chunk = function (groupsize) {
var sets = [];
var chunks = this.length / groupsize;
for (var i = 0, j = 0; i < chunks; i++, j += groupsize) {
sets[i] = this.slice(j, j + groupsize);
}
return sets;
};
var interleave = (a1, a2) => {
@frankiesardo
frankiesardo / App.js
Created July 28, 2020 12:32
Memory game
import React from 'react';
import './App.css';
const actionType = {
SHOW: "show",
HIDE: "hide"
}
function reducer(state, action) {
@frankiesardo
frankiesardo / ColocatingEffectsAndReducers.js
Last active July 28, 2020 21:22
Colocating effects and reducers
// This is an example on how to use the library
import React from 'react';
// This is the hook
function useReducerWithEffects(reducer, handlers, initialState) {
const [{ state, ...effects }, setState] = React.useState({ state: initialState })
const dispatch = React.useCallback(action => setState(({ state }) => ({ state, ...reducer(state, action) })), [reducer])
React.useEffect(function () {
@frankiesardo
frankiesardo / reducer-context.core.cljs
Created March 30, 2020 10:41
reducer-context.core
(ns reducer-context.core
(:require ["react" :as react :rename {createElement $}]
["react-dom" :as dom]
[goog.object :as obj]))
(extend-type object
ILookup
(-lookup
([o k] (obj/get o (name k)))
([o k not-found] (obj/get o (name k) not-found))))
(ns react.wrapper
#?(:cljs (:require ["react" :as react]
[goog.object :as obj])))
#?(:cljs
(defn component [display-name render]
(let [f (fn [props] (apply render (obj/get props "value")))
m (react/memo f #(= (obj/get %1 "value") (obj/get %2 "value")))]
(obj/set f "displayName" display-name)
(ns example.app
(:require
["expo" :as ex]
["react-native" :as rn]
["react" :as react :rename {createElement $}]
[shadow.expo :as expo]))
(defn useEffectiveReducer [reducer handlers initial-state]
(let [[state set-state] (react/useState initial-state)
[queue update-queue] (react/useReducer (fn [state action] (action state)) [])