Skip to content

Instantly share code, notes, and snippets.

View wobsoriano's full-sized avatar
🏠
Working from home

Robert Soriano wobsoriano

🏠
Working from home
View GitHub Profile
@wobsoriano
wobsoriano / query-key-factory.ts
Created July 14, 2021 08:54
react-query Query Key Factory
export const todoKeys = {
all: ['todos'] as const,
lists: () => [...todoKeys.all, 'list'] as const,
list: (filters: string) => [...todoKeys.lists(), { filters }] as const,
details: () => [...todoKeys.all, 'detail'] as const,
detail: (id: number) => [...todoKeys.details(), id] as const,
}
@wobsoriano
wobsoriano / useCreateMessage.ts
Last active July 14, 2021 06:46
React Query useMutation and TypeScript
import { InfiniteData, useMutation, useQueryClient } from 'react-query';
import { ExtendPayload } from '../globals';
import { useAuthStore } from '../store';
import { MessageListItem, MessageListResponse } from './useMessageList';
import { httpClient, stringifyQuery } from './utils';
interface CreateMessageBody {
to: string;
message: string;
@wobsoriano
wobsoriano / store.ts
Last active July 6, 2021 18:51
Solid + Zustand for global state
import { onCleanup } from 'solid-js'
import { createStore, reconcile, Store } from 'solid-js/store'
import create, { SetState, State, StoreApi } from 'zustand/vanilla'
interface CounterStore {
count: number
increment: () => void
decrement: () => void
}
@wobsoriano
wobsoriano / ThemeProvider.tsx
Created July 5, 2021 09:11
Solid Theme Provider for Tailwind/Windi
import { createContext, createEffect, createSignal, useContext } from 'solid-js'
const themeName = 'theme'
const html = document.querySelector('html')
function getInitialTheme() {
const isDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
const storageTheme = localStorage.getItem(themeName)
if (storageTheme) return storageTheme
@wobsoriano
wobsoriano / theme.ts
Last active July 4, 2021 04:31
Svelte Theme Store
import { writable } from 'svelte/store'
const html = document.querySelector('html')
const storedTheme = localStorage.getItem('theme')
function isSystemThemeDark() {
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
}
function createThemeStore() {
@wobsoriano
wobsoriano / App.vue
Last active June 25, 2021 17:14
A Vue 3 hook to cancel promises when a component is unmounted
<template>
<button @click="ping">Ping</button>
</template>
<script setup>
import useUnmountSignal from './useUnmountSignal';
const unmountSignal = useUnmountSignal();
const ping = () => {
@wobsoriano
wobsoriano / App.vue
Last active February 5, 2025 08:47
Axios cancel token as Vue hook
<template>
<button @click="ping">Ping</button>
</template>
<script setup>
import useCancelToken from './useCancelToken';
import axios from 'axios'
const cancelToken = useCancelToken();
@wobsoriano
wobsoriano / App.jsx
Created December 1, 2020 11:50
Get localStorage value from Webview
import { View } from 'react-native';
import { WebView } from 'react-native-webview';
const INJECTED_JAVASCRIPT = `(function() {
const tokenLocalStorage = window.localStorage.getItem('token');
window.ReactNativeWebView.postMessage(tokenLocalStorage);
})();`;
export default function App() {
const onMessage = (payload) => {
@wobsoriano
wobsoriano / useRedditPosts.js
Last active November 30, 2020 02:17
Fetching Reddit posts with useSWRInfinite
import { useSWRInfinite } from 'swr';
const fetcher = (url) => fetch(url).then((res) => res.json());
const baseUrl = 'https://www.reddit.com';
export const useRedditPosts = (subreddit, sort = 'hot') => {
if (!subreddit) {
throw new Error('Subreddit is required');
}
@wobsoriano
wobsoriano / pokemon.json
Created November 18, 2020 13:36 — forked from jherr/pokemon.json
Pokemon list
[{
"id": 1,
"name": {
"english": "Bulbasaur",
"japanese": "フシギダネ",
"chinese": "妙蛙种子",
"french": "Bulbizarre"
},
"type": [
"Grass",