UNPKG

react-tidy

Version:

A collection of atomic, independent, typed, tested and documented React custom hooks

1 lines 9.44 kB
{"mappings":"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","sources":["src/index.ts","src/useStorage/index.ts","src/useStorage/useStorage.ts","src/utils/index.ts","src/utils/isFunction.ts","src/utils/isInBrowser.ts","src/useStorage/defaultStorage.ts","src/useStorage/createMemoryStorage.ts","src/useIsMounted/useIsMounted.ts","src/useRefresh/useRefresh.ts","src/useInstance/useInstance.ts","src/useInstance/makeProxy.ts","src/usePrevious/usePrevious.ts"],"sourcesContent":["export * from './useStorage'\nexport * from './useRefresh/useRefresh'\nexport * from './useInstance/useInstance'\nexport * from './usePrevious/usePrevious'\nexport * from './useIsMounted/useIsMounted'\n","export * from './useStorage'\nexport * from './defaultStorage'\nexport * from './createMemoryStorage'\n","import React from 'react'\nimport {isFunction, isInBrowser} from '../utils'\nimport {getDefaultStorage} from './defaultStorage'\nimport {createMemoryStorage} from './createMemoryStorage'\nimport {useIsMounted} from '../useIsMounted/useIsMounted'\n\ntype Value<T> = T | null | ((x: T | null) => T | null)\n\nexport function useStorage<T>(key: string, defaultValue: T | null = null, getStorage = getDefaultStorage()) {\n const isMounted = useIsMounted()\n const storage = React.useMemo<Storage>(() => {\n if (!isInBrowser()) return createMemoryStorage()\n if (isFunction(getStorage)) return (getStorage as any)()\n return getStorage\n }, [getStorage])\n const initialValue = React.useMemo(() => {\n const storedString = storage.getItem(key)\n return storedString === null ? defaultValue : JSON.parse(storedString)\n }, [storage, key, defaultValue])\n\n const [value, setValue] = React.useState<T | null>(initialValue)\n\n React.useEffect(() => {\n storage.setItem(key, JSON.stringify(initialValue))\n }, [key, initialValue])\n\n const setItem = React.useCallback(\n (newValue: Value<T>) => {\n if (isFunction(newValue)) {\n newValue = (newValue as any)(value)\n }\n if (newValue === null) {\n storage.removeItem(key)\n } else {\n storage.setItem(key, JSON.stringify(newValue))\n }\n if (isMounted()) {\n setValue(newValue)\n }\n },\n [storage, key, value]\n )\n\n return [value, setItem] as [T | null, typeof setItem]\n}\n","export * from './isFunction'\nexport * from './isInBrowser'\n","export function isFunction<T>(x: T): T extends Function ? true : false\nexport function isFunction(x: any) {\n return !!x && {}.toString.call(x) === '[object Function]'\n}\n","export function isInBrowser() {\n return typeof window === 'object' && typeof document === 'object'\n}\n","import {isInBrowser} from '../utils'\nimport {createMemoryStorage} from './createMemoryStorage'\n\ntype LazyStorage = Storage | (() => Storage)\n\nlet defaultStorage: LazyStorage\nif (isInBrowser()) {\n defaultStorage = window.localStorage\n} else {\n defaultStorage = createMemoryStorage()\n}\n\nexport function getDefaultStorage() {\n return defaultStorage\n}\nexport function setDefaultStorage(storage: LazyStorage) {\n defaultStorage = storage\n}\n","export const createMemoryStorage = (): Storage => {\n return new MemoryStorage()\n}\n\nclass MemoryStorage implements Storage {\n protected memory: {[key: string]: string} = {}\n\n public get length() {\n return Object.keys(this.memory).length\n }\n\n public getItem(key: string) {\n return this.memory[key] || null\n }\n\n public setItem(key: string, value: string) {\n this.memory[key] = value\n }\n\n public removeItem(key: string) {\n delete this.memory[key]\n }\n\n public key(index: number) {\n const keys = Object.keys(this.memory)\n return keys[index] || null\n }\n\n public clear() {\n this.memory = {}\n }\n}\n","import React from 'react'\n\nexport function useIsMounted() {\n const ref = React.useRef(true)\n React.useEffect(() => {\n return () => {\n ref.current = false\n }\n }, [])\n return React.useCallback(() => ref.current, [])\n}\n","import React from 'react'\nimport {useIsMounted} from '../useIsMounted/useIsMounted'\n\nexport function useRefresh() {\n const [, setVersion] = React.useState(0)\n const isMounted = useIsMounted()\n return () => {\n if (isMounted()) {\n setVersion((x) => x + 1)\n }\n }\n}\n","import React from 'react'\nimport {makeProxy} from './makeProxy'\nimport {useRefresh} from '../useRefresh/useRefresh'\n\ntype ClassType<T, Args extends any[]> = {\n new (...args: Args): T\n}\n\nexport function useInstance<T, Args extends any[]>(Class: ClassType<T, Args>, ...args: Args) {\n const refresh = useRefresh()\n const instance = React.useMemo<T>(() => makeProxy(new Class(...args), refresh), args)\n React.useEffect(() => {\n const currentInstance = instance as any\n return () => currentInstance.cleanup && currentInstance.cleanup()\n }, args)\n return instance\n}\n","const proxySymbol = Symbol()\n\nexport function makeProxy<T>(target: T, notify: () => void): T {\n if ((target as any)[proxySymbol] === true) {\n return target\n }\n return new Proxy(target, {\n get: makeTrap('get', notify),\n defineProperty: makeTrap('defineProperty', notify),\n deleteProperty: makeTrap('deleteProperty', notify),\n })\n}\n\nfunction makeTrap(trap: keyof typeof Reflect, notify: () => void) {\n return (...args: any[]) => {\n if (trap === 'get' && args[1] === proxySymbol) {\n return true\n }\n const original = Reflect[trap] as any\n let result = original(...args)\n if (trap === 'get' && typeof result === 'object' && result !== null) {\n result = makeProxy(result, notify)\n }\n if (trap !== 'get') {\n notify()\n }\n return result\n }\n}\n","import React from 'react'\n\nexport function usePrevious<T>(value: T, count = 1) {\n const [history, setHistory] = React.useState<T[]>([])\n React.useEffect(() => {\n if (history.length > count) {\n history.pop()\n }\n setHistory([value, ...history])\n }, [value])\n return history.slice(1)\n}\n"],"names":[],"version":3,"file":"react-tidy.mjs.map"}