{"_id":"@alwaystudios/as-react-hooks","_rev":"4-217225f9dbab13d8fa9a2b07e72762b8","name":"@alwaystudios/as-react-hooks","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.1":{"name":"@alwaystudios/as-react-hooks","version":"1.0.1","repository":{"type":"git","url":"git+ssh://git@github.com/alwaystudios/as-react-hooks.git"},"author":{"name":"Gary Alway","email":"garyalway@gmail.com"},"license":"MIT","engines":{"node":">=14"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"scripts":{"test":"jest --maxWorkers=4 src --coverage","lint":"yarn eslint . --ext .js,.jsx,.ts,.tsx","format":"prettier --write 'src/**/*.{js,ts,tsx,json,css,md}'","build":"rollup -c","clean":"sh cleanup.sh","typecheck":"tsc --noEmit"},"husky":{"hooks":{"pre-commit":"yarn lint && yarn format && yarn test","pre-push":"yarn build && yarn test"}},"dependencies":{"@alwaystudios/as-utils":"^1.0.16","ramda":"^0.27.1","react":"^17.0.2","universal-cookie":"^4.0.4"},"devDependencies":{"@testing-library/react":"^11.2.7","@testing-library/react-hooks":"^7.0.0","@types/jest":"^26.0.23","@types/ramda":"^0.27.40","@types/react":"^17.0.8","@types/universal-cookie":"^3.0.0","@typescript-eslint/eslint-plugin":"^4.25.0","@typescript-eslint/parser":"^4.25.0","eslint":"^7.27.0","eslint-plugin-deprecation":"^1.2.1","eslint-plugin-functional":"^3.2.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jest":"^24.3.6","eslint-plugin-react":"^7.24.0","husky":"4.3.0","jest":"^27.0.3","prettier":"^2.3.0","react-dom":"^17.0.2","react-test-renderer":"^17.0.2","rollup":"^2.50.4","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.1","typescript":"^4.3.2"},"gitHead":"d9a84ed097255e2b197851d0c6aa55edcd461a6d","description":"React hooks","bugs":{"url":"https://github.com/alwaystudios/as-react-hooks/issues"},"homepage":"https://github.com/alwaystudios/as-react-hooks#readme","_id":"@alwaystudios/as-react-hooks@1.0.1","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-6kDtqktH7jahsJ/RbA329FcKh/PW/PS3dkAt7gmcO6ZiIjk0vujRMogRjfgK6C+dNZGtzh+CwZJnAOr0/YZ5rA==","shasum":"c51417315b2d5e6ae6ad1a8905ab859dff9f165e","tarball":"https://registry.npmjs.org/@alwaystudios/as-react-hooks/-/as-react-hooks-1.0.1.tgz","fileCount":21,"unpackedSize":29402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgs18fCRA9TVsSAnZWagAA7eYP/0E6YdXS0tAQqiYYY5SH\nIYgwm95YpBlHakjQgtIdBDEhec38YgVriJTGgpELmZTHh+QYMc86HHZiW+ow\nNN3oUlaDpuiTaOFGYbSRwHkojZFGiKXPNWXWbiivv7ba1Vj4h1zWFz7JiDtx\n6wRwFitvHiocpi3Wn5h5TMoAYwNTWM4tuq2c8334JFlhPdAtraiv9fwX9cCv\nTIj54F0YtZ8ZFj91A/N19ANkL2IvP4DW5717gpfk/yDJZWmksfCZTOtT90p7\nUBhBYR0izu/f4RB9uM1TKA1PJ4B+zZeK8mRwn6DebgHm9rV0KXmRaeL3kTeJ\ntcZbu0TD/YG2MdDmAkiD4x9JxckflIzO6azLYtQprR/kBtnTEU7bVzhxv0oV\npcXH7mW5kBBPHGvKNxOmhySBInEYZfzBJC1PsTs+zXkCipc1TNkulSfNHGp3\nbsiG+6vz3PlFSZcDPoueyJQckYxWTi2LAf9Ko0cFbFyLbHTDda0lL5sl4B/X\nR8JYlQKZA7XVqsXh22TWMYmyF5MYxAzfvaJzuUO6xtSfkPeyXwn6GFAf05cd\nopBmL0sXEbsWyDR2zlIEmqUmIyaGeHWxPJnlyi9pYRtn48hR8eDjkYKRhsEI\nglNz3++/B4ZX5c9RAO2OmsFTVI+Xu7xnhuPsDHR8XaBNaK8DTIwQ912NX3hX\n+FJ3\r\n=Eiyx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF5zb+qFdmMLntxECHgYEnPj6uVoYp91ObTebkCTcXYDAiAbYvdn5mpufC2oQvvO/6oRfjmcNpqPYlUGv6h2GfrJ4A=="}]},"_npmUser":{"name":"alwaystudios","email":"alwaystudios@gmail.com"},"directories":{},"maintainers":[{"name":"alwaystudios","email":"alwaystudios@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/as-react-hooks_1.0.1_1622368031442_0.04623337467096045"},"_hasShrinkwrap":false},"1.0.2":{"name":"@alwaystudios/as-react-hooks","version":"1.0.2","repository":{"type":"git","url":"git+ssh://git@github.com/alwaystudios/as-react-hooks.git"},"author":{"name":"Gary Alway","email":"garyalway@gmail.com"},"license":"MIT","engines":{"node":">=14"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"scripts":{"test":"jest --maxWorkers=4 src --coverage","lint":"yarn eslint . --ext .js,.jsx,.ts,.tsx","format":"prettier --write 'src/**/*.{js,ts,tsx,json,css,md}'","build":"rollup -c","clean":"sh cleanup.sh","typecheck":"tsc --noEmit"},"husky":{"hooks":{"pre-commit":"yarn lint && yarn format && yarn test","pre-push":"yarn build && yarn test"}},"dependencies":{"@alwaystudios/as-utils":"^1.0.16","ramda":"^0.27.1","react":"^17.0.2","universal-cookie":"^4.0.4"},"devDependencies":{"@testing-library/react":"^11.2.7","@testing-library/react-hooks":"^7.0.0","@types/jest":"^26.0.23","@types/ramda":"^0.27.40","@types/react":"^17.0.8","@types/universal-cookie":"^3.0.0","@typescript-eslint/eslint-plugin":"^4.25.0","@typescript-eslint/parser":"^4.25.0","eslint":"^7.27.0","eslint-plugin-deprecation":"^1.2.1","eslint-plugin-functional":"^3.2.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jest":"^24.3.6","eslint-plugin-react":"^7.24.0","husky":"4.3.0","jest":"^27.0.3","prettier":"^2.3.0","react-dom":"^17.0.2","react-test-renderer":"^17.0.2","rollup":"^2.50.4","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.1","typescript":"^4.3.2"},"gitHead":"efbf8a51b04afc8ec7ae9180100e9717bb49355d","description":"React hooks","bugs":{"url":"https://github.com/alwaystudios/as-react-hooks/issues"},"homepage":"https://github.com/alwaystudios/as-react-hooks#readme","_id":"@alwaystudios/as-react-hooks@1.0.2","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-hjtOo/LoWV2+wnu9paSR2W0IDrEGDeN+rddhDmEGqYVA0YvkDF6V1H3FpN+wfrd/+aC/6kRACaPNBTRC2ugrOA==","shasum":"47642babd6c1fb3f8582360c6adb1a62db34ebcc","tarball":"https://registry.npmjs.org/@alwaystudios/as-react-hooks/-/as-react-hooks-1.0.2.tgz","fileCount":22,"unpackedSize":30720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguWFnCRA9TVsSAnZWagAAfLEP/1OTl9XOqm4i+w1x3KoJ\nrZ8KWIOCe6dXdB47K07BJ9Y9d+CPKUgYZzuWC2D9eC9/YmrgC8iaqGG4rOIK\nqfkPc7EF8tIPbxlj/TqJmosKxLZXvXwgZV+fccQWwxXxH8kMA5hAODFgV6en\njQzLDEXUaqNAm/ijOd3DIurUsKtlzLcPEGOAHvT89wR+Mv+w9YKp4AdWrFv3\nM98YFaaHeanor2fz6sHe6TtcMLy8Zg1/ujho+G1ABF04/nUDGUSoSbsgvSpx\ns8qJWXyoTiuaKZdYyZbTDgds4hNewjfJ/iPNMsB3wdiHcFjkaYnzC43S0G4U\nKmleT1UVfHrfL7tjLinRrSGnspUwdXwe3LeFWmPyJ+crzkT52frDOmgCQTXu\nQF23bJkHzQlS6z+C2vv8rfCtz1e5qR8YEzkuOS/3SGzHPq5BjXxY119Hf+kN\nS3PUFEF+VVnxUcbtEXthB4/2lN7FhGIPdd09M9XOc8V8LnFUsGo34sPn+YIv\nBrdCmfNLYZsqFjkpIhmGzvYdzGRJbd33PQOjYYeYBFcKVOIqlQVsdUfD3bEV\nK7regswVbolGzbbfekIxo6IVtdcuOdVjdGEf6GwZGw312ebv3jVmVdSkwdsu\nHovGaLOnhBQFeL/UF5YYawBg4ACG82bGfSoK+PyfshPUbstoocsACIne3Nl+\nTZku\r\n=sOG/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAMnGFFkmcDTyCLfJ+oL0847DJROQYKWDnXkbbmnplqDAiEAii8cs52ExBGtRRnpTxQIs396gPk4RE3MPAHi8XLJghA="}]},"_npmUser":{"name":"alwaystudios","email":"alwaystudios@gmail.com"},"directories":{},"maintainers":[{"name":"alwaystudios","email":"alwaystudios@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/as-react-hooks_1.0.2_1622761831177_0.5828994909773781"},"_hasShrinkwrap":false},"1.0.3":{"name":"@alwaystudios/as-react-hooks","version":"1.0.3","repository":{"type":"git","url":"git+ssh://git@github.com/alwaystudios/as-react-hooks.git"},"author":{"name":"Gary Alway","email":"garyalway@gmail.com"},"license":"MIT","engines":{"node":">=14"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"scripts":{"test":"jest --maxWorkers=4 src --coverage","lint":"yarn eslint . --ext .js,.jsx,.ts,.tsx","format":"prettier --write 'src/**/*.{js,ts,tsx,json,css,md}'","build":"rollup -c","clean":"sh cleanup.sh","typecheck":"tsc --noEmit"},"husky":{"hooks":{"pre-commit":"yarn lint && yarn format && yarn test","pre-push":"yarn build && yarn test"}},"dependencies":{"@alwaystudios/as-utils":"^1.0.16","ramda":"^0.27.1","react":"^17.0.2","universal-cookie":"^4.0.4"},"devDependencies":{"@testing-library/react":"^11.2.7","@testing-library/react-hooks":"^7.0.0","@types/jest":"^26.0.23","@types/ramda":"^0.27.40","@types/react":"^17.0.8","@types/universal-cookie":"^3.0.0","@typescript-eslint/eslint-plugin":"^4.25.0","@typescript-eslint/parser":"^4.25.0","eslint":"^7.27.0","eslint-plugin-deprecation":"^1.2.1","eslint-plugin-functional":"^3.2.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jest":"^24.3.6","eslint-plugin-react":"^7.24.0","husky":"4.3.0","jest":"^27.0.3","prettier":"^2.3.0","react-dom":"^17.0.2","react-test-renderer":"^17.0.2","rollup":"^2.50.4","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.1","typescript":"^4.3.2"},"gitHead":"8196bd00beba891774a8277264dd99302f9969da","description":"React hooks","bugs":{"url":"https://github.com/alwaystudios/as-react-hooks/issues"},"homepage":"https://github.com/alwaystudios/as-react-hooks#readme","_id":"@alwaystudios/as-react-hooks@1.0.3","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-/KB+hatz7oiSPQiYzJzHUs2yhn3N3AC/nEaNFlmbVd35xaCuz3Q08iFFKUBKxdyzQph8Hgoauywbh9qa91o63A==","shasum":"bfbd0ce4df570b20e8389bd34e5bb4e19b65242a","tarball":"https://registry.npmjs.org/@alwaystudios/as-react-hooks/-/as-react-hooks-1.0.3.tgz","fileCount":24,"unpackedSize":33305,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2K6jCRA9TVsSAnZWagAANhsP/jw9sQVCKFjFnBEtvcDS\nGilCLNyOzcLb8QY7XlDVWDwiXnvXHI9znyQhiNOw9F2hLJDqFdL6qcHJ8Jfi\nU8OGyxjrNTeSiJd5TcIK6rCYg5opyMh/1uQ0GwHqV1eERyxviwyd3uFrUOlX\n/xs/NAvMN/l3AT0JFQP2e5A6C7608J63yg/03mMdRjUVRtoe4MEcLWEk7Hnr\n/qdTzIiLD9OuvASnz/DrtpX2FH5ouzC61WYtU2rNDyStsfkAiroMMiKW+4WI\nTgpS54f+23GCR7kuO9Akvkn4p4uQDB51tVjAsHNjxd1IPgCi+VdzUKnfVCWW\n60zbGXapHlf2plqFNTWznuuGsMeICkQ3URstmOLy6iX/lUxSSwcMm1okFyiM\nPCd0H1LzFtld7NdA/3dbsZVA8dydo83i93KzlLea/7HF6a5sIdXd/vQVIRIh\n2K6ObV/wO5MHVoU7KegdxZBhMvORz/G73lyNU6yt5/7jHxqQHrVfm4b+JfSd\n4u5hUBnoXuiyhxytVZTN/3m8Ir+mevYwtwJQ6zzYghIQrwiYJ82i/ib7uZ6o\na9K3QBw7joZGWB3RfSR5OSQWgNla/hUaoPF80z9gaeysfiOReklTHJZmeYBQ\nq1qnD++is0RIrE276MLXvrhSpoJs2ul3247BXQ0ayhHnIAH6CGg55Z7zj5XO\nmJns\r\n=mBsJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClYmXP66fBJF6jdvBz3pLmvhTcidnWrShvcgOVjhezNQIhAMNyGzjvV3R3WHzeZAGjmbju5KfY2Z5Vt5Rohf/cseDt"}]},"_npmUser":{"name":"alwaystudios","email":"alwaystudios@gmail.com"},"directories":{},"maintainers":[{"name":"alwaystudios","email":"alwaystudios@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/as-react-hooks_1.0.3_1641590435298_0.8408391193888518"},"_hasShrinkwrap":false},"1.0.4":{"name":"@alwaystudios/as-react-hooks","version":"1.0.4","repository":{"type":"git","url":"git+ssh://git@github.com/alwaystudios/as-react-hooks.git"},"author":{"name":"Gary Alway","email":"garyalway@gmail.com"},"license":"MIT","engines":{"node":">=14"},"main":"dist/index.cjs.js","module":"dist/index.esm.js","types":"dist/index.d.ts","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"scripts":{"test":"jest --maxWorkers=4 src --coverage","lint":"yarn eslint . --ext .js,.jsx,.ts,.tsx","format":"prettier --write 'src/**/*.{js,ts,tsx,json,css,md}'","build":"rollup -c","clean":"sh cleanup.sh","typecheck":"tsc --noEmit"},"husky":{"hooks":{"pre-commit":"yarn lint && yarn format && yarn test","pre-push":"yarn build && yarn test"}},"dependencies":{"@alwaystudios/as-utils":"^1.0.16","ramda":"^0.27.1","react":"^17.0.2","universal-cookie":"^4.0.4"},"devDependencies":{"@testing-library/react":"^11.2.7","@testing-library/react-hooks":"^7.0.0","@types/jest":"^26.0.23","@types/ramda":"^0.27.40","@types/react":"^17.0.8","@types/universal-cookie":"^3.0.0","@typescript-eslint/eslint-plugin":"^4.25.0","@typescript-eslint/parser":"^4.25.0","eslint":"^7.27.0","eslint-plugin-deprecation":"^1.2.1","eslint-plugin-functional":"^3.2.1","eslint-plugin-import":"^2.23.4","eslint-plugin-jest":"^24.3.6","eslint-plugin-react":"^7.24.0","husky":"4.3.0","jest":"^27.0.3","prettier":"^2.3.0","react-dom":"^17.0.2","react-test-renderer":"^17.0.2","rollup":"^2.50.4","rollup-plugin-typescript2":"^0.30.0","ts-jest":"^27.0.1","typescript":"^4.3.2"},"gitHead":"81dc053ffa8b63dac5b8dd2c0464607045a3ddbc","description":"React hooks","bugs":{"url":"https://github.com/alwaystudios/as-react-hooks/issues"},"homepage":"https://github.com/alwaystudios/as-react-hooks#readme","_id":"@alwaystudios/as-react-hooks@1.0.4","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-2SUUom/8g5JVca4y1CjYtig+9PsAhEufYjQUTNcRHGNQJQTJCJcleef8TZWaQ4CruW3i6PyK0bor7j5aNoIG5Q==","shasum":"902647b3d0ba5949674ada99673ed3a22bf0519f","tarball":"https://registry.npmjs.org/@alwaystudios/as-react-hooks/-/as-react-hooks-1.0.4.tgz","fileCount":29,"unpackedSize":41750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh20p/CRA9TVsSAnZWagAA0yUQAJyxWli31sGg9dyLODsk\nqeqJRr6IT5EGZxpjVQFYfX/5cbLue02zlgw63X/M+EQ7Rr3lInyueOlxAz46\nPWQaxdnwICpnoYXHTDHgennTn7nHZnIIptQjKxTSaBQWcrPab2lK9l0lO5Yi\nzFGkkrjs34+EKeMqLFPtIpWNRJrkY2VFJf/WcXcFw9g2hcfBgHxkuHWZEEi6\nw9qr1EwDdXFfgAwmfjwSpouJzmIeYNDsHuBa6tpgHE27GzZHk2X1KWVNCDuM\nQuTM2l5HaP6jHwFBZgYodKzU/8JkjKeaghh8gcr5/KSxbgKulPYCg+xaISGU\nCS09CABCviNGYZqcfRUVJuMKfISdLnBLHjr5EpbxreyTcMhrxsWWg3B5fNwO\nTg5a9SYatyKf4Auy6qvnis3UKNF0rJSjIfnP7iH0YJpt7JgrTJ6RSmHguFWG\nV2RAyabyzJX8pflZmzwJ9HHpW7YHLVM/7mKY+DJQgGOEKGeT0Q64aXWTaat7\n8MxVk0PiTvJY/LJodh3YCbVPN3mF47QAKjBkM9kTwu3EI9+I0JeoRSmtqAgs\nng5jt3j+pAOoGk20PcQBwuzVRAu+9cNgO3tqiytexzoIRBT2gLjQYWrgAg5t\nCO5UB1T0dWeVIi17zTDCu002V2ufFQnzUpwdFUgIO00pGC5yuMjWj2TbZn4d\n1FUn\r\n=9PlB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEmPuK8f/J7ftXFX4q+CYkYXFfbtcMZCS6hZcjJbzD/5AiB2t10+M+fruRgNvm3SLUZdYB+7oN9Se87BgNGaseBUDg=="}]},"_npmUser":{"name":"alwaystudios","email":"alwaystudios@gmail.com"},"directories":{},"maintainers":[{"name":"alwaystudios","email":"alwaystudios@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/as-react-hooks_1.0.4_1641761407511_0.7353963831217869"},"_hasShrinkwrap":false}},"time":{"created":"2021-05-30T09:47:11.394Z","1.0.1":"2021-05-30T09:47:11.571Z","modified":"2022-04-04T13:42:06.407Z","1.0.2":"2021-06-03T23:10:31.286Z","1.0.3":"2022-01-07T21:20:35.551Z","1.0.4":"2022-01-09T20:50:07.658Z"},"maintainers":[{"name":"alwaystudios","email":"alwaystudios@gmail.com"}],"description":"React hooks","homepage":"https://github.com/alwaystudios/as-react-hooks#readme","repository":{"type":"git","url":"git+ssh://git@github.com/alwaystudios/as-react-hooks.git"},"author":{"name":"Gary Alway","email":"garyalway@gmail.com"},"bugs":{"url":"https://github.com/alwaystudios/as-react-hooks/issues"},"license":"MIT","readme":"# as-react-hooks\n\nReact hooks\n\n## useInterval\n\nExecutes a callback with a continuous delay\n\n```\n    useInterval(getTwitterFeedUpdates, 1000)\n```\n\n## useLocalStorage\n\nHook that supports server side rendering when using local storage\n\n```\n    const storage = useLocalStorage()\n```\n\n## useWindow\n\nHook that supports server side rendering when using the Window object\n\n```\n    const _window = useWindow()\n```\n\n## useCookie\n\n```\n    setCookie('cookie-name', 'some value')\n    getCookie('cookie-name')\n    deleteCookie('cookie-name')\n```\n\n## useAsync\n\nResolves an async function\n\n```\n  const { state, callback } = useAsync(async () => {\n    await promiseTimeout(2000);\n    return \"test\";\n  });\n\n  useEffect(() => {\n    if (!state.called) {\n      callback();\n    }\n  }, [callback, state]);\n```\n\n## useEffectAsync\n\nuseEffect for asyn functions\n\n```\n  useEffectAsync(async () => {\n    await promiseTimeout(2000);\n    return \"test\";\n  }, []);\n```\n\n## useThrottledRequests\n\nAsync request parallel execution engine with throttling\n\n```\n  const { throttleActions, throttleProgress } = useThrottleRequests(10) // max parallelisation = 10\n  const sampleApiCall = async () => {\n    try {\n      const response = await fetch(...)\n      const response = await response.json()\n\n      throttleActions.requestSucceededWithData(response)\n    } catch (error) {\n      throttleActions.requestFailedWithError(error)\n    }\n  }\n\n  const { state, callback } = useAsync(async() => {\n      const requestsToMake = [sampleApiCall, /** some other api calls **/]\n      await throttleActions.queueRequests(requestsToMake);\n  });\n\n  ...\n\n  <button onClick={callback}>Fire</button>\n  {JSON.stringify(state)}\n  {throttleProgress.loading && <div>Loading</div>}\n  {throttleProgress.values.length > 0 && (\n    <div>\n      {throttleProgress.values.length} requests completed successfully\n    </div>\n  )}\n  {throttleProgress.errors.length > 0 && (\n    <div>{throttleProgress.errors.length} requests errored</div>\n  )}\n```\n\n## useShoppingCart\n\nMyProductType must have an id of type number or string\n\n```\n  const myProduct = {\n    id: 1,\n    name: 'Apples'\n  }\n\n  const { items, updateCart, removeProduct, clearItems } = <MyProductType>useShoppingCart()\n\n  updateCart(myProduct, 2)\n  updateCart(myProduct, -1) // 1 apple now in cart\n  removeProduct(myProduct) // cart empty\n```\n\n## useStringFilter\n\nQuery over a data set\n\n```\n  const data = [\n    { id: 1, name: 'one' },\n    { id: 2, name: 'two' },\n    { id: 13, name: 'thirteen' },\n  ]\n\n  const {\n    queryString,\n    filteredItems,\n    setFilter,\n  } = useStringFilter(data, ['id', 'name'])\n\n  setFilter('1')\n  console.log(filteredItems)\n```\n\n## useOutsideClick\n\nResponds to click events outside of a component\n\n```\n  export const MyComponent = () => {\n    const [toggle, setToggle] = useState(false)\n    const ref = useRef<HTMLDivElement>(null)\n\n    useOutsideClick(ref, () => {\n      setToggle(!toggle);\n    })\n\n    return (\n      <div ref={ref}>{toggle ? <div>toggle ON</div> : <div>toggle OFF</div>}</div>\n    )\n  }\n\n```\n\n## useSteps\n\nRun through a series of sequential steps\n\n```\n  export const MyComponent = () => {\n    const { step, incrementStep, decrementStep } = useSteps(3)\n\n    ...\n  }\n\n```\n\n## useTimeout\n\nRuns a callback after specified timeout. Provides `clear` and `reset` functionality\n\n```\n  export const MyComponent = () => {\n    const [count, setCount] = useState(10)\n    const { clear, reset } = useTimeout(() => setCount(0), 1000)\n\n    return (\n      <div>\n        <div>{count}</div>\n        <button onClick={() => setCount(c => c + 1)}>Increment</button>\n        <button onClick={clear}>Clear timeout</button>\n        <button onClick={reset}>Reset timeout</button>\n      </div>\n    )\n  }\n\n```\n\n## useToggle\n\nToggle state\n\n```\n  export const MyComponent = () => {\n    const [value, toggle] = useToggle(true)\n\n    ...\n  }\n\n```\n\n## useRenderCount\n\nDetermines how many times a component is rendered\n\n```\n  export const MyComponent = () => {\n    const count = useRenderCount()\n\n    ...\n  }\n\n```\n\n## useDebug\n\nDebugger hook outputs to console:\n\n```\n  {\n    changedProps: Object\n    renderCount: number\n    lastRendered: timestamp\n    timeSinceLastRender: timestamp\n  }\n```\n\n```\n  export const MyComponent = (props) => {\n    useDebug('MyComponent', props)\n\n    ...\n  }\n\n```\n\n## useDebounce\n\nDebounce hook runs a callback after a delay but resets that timeout if a dependency changes.\nIn this example the alert will not occur if the button is clicked continuously within a 1s time frame.\n\n```\n  export const MyComponent = () => {\n    const [count, setCount] = useState(10)\n    useDebounce(() => alert(count), 1000, [count])\n\n    return (\n      <div>\n        <div>{count}</div>\n        <button onClick={() => setCount(c => c + 1)}>Increment</button>\n      </div>\n    )\n  }\n\n```\n\n## useUpdateEffect\n\nRun a callback when dependencies change (do not run on first render)\n\n```\n  export const MyComponent = () => {\n    const [count, setCount] = useState(10)\n    useUpdateEffect(() => alert(count), [count])\n\n    return (\n      <div>\n        <div>{count}</div>\n        <button onClick={() => setCount(c => c + 1)}>Increment</button>\n      </div>\n    )\n  }\n```\n\n## useArray\n\nCommon array manipulation functions\n\n```\n  export const MyComponent = () => {\n    const { array, set, push, remove, filter, update, clear } = useArray([1, 2, 3, 4, 5])\n\n    return (\n      <div>\n        <div>{array.join(', ')}</div>\n        <button onClick={() => set([1, 2])}>Set</button>\n        <button onClick={() => push(7)}>Push</button>\n        <button onClick={() => remove(1)}>Remove</button>\n        <button onClick={() => filter(n => n < 3)}>Filter</button>\n        <button onClick={() => update(1, 9)}>Update</button>\n        <button onClick={() => clear}>Clear</button>\n      </div>\n    )\n  }\n```\n","readmeFilename":"README.md"}