From a97bb0fd6bc32bce5115c22a17bdf6d2c4755c7c Mon Sep 17 00:00:00 2001 From: Filipe Pomar Date: Sun, 3 Jul 2022 18:06:44 +0200 Subject: [PATCH] New 1.0.8 version Revised eslint rules Simplified internal npm commands Reworked code to allow for more malleability when it comes to usage of this lib with new usePromiseState function to allow even better promise management Split codebase and tests into smaller files with less responsibility each --- .eslintrc.json | 21 +-- README.md | 31 ++-- package-lock.json | 178 ++++++++++---------- package.json | 15 +- src/Promise.test.tsx | 379 ++++++++++++++++++++++--------------------- src/Promise.ts | 104 ++++++++---- src/Unhook.test.tsx | 69 ++++++++ src/Unhook.ts | 32 ++++ src/Utils.test.ts | 41 +++++ test/index.ts | 3 + 10 files changed, 529 insertions(+), 344 deletions(-) create mode 100644 src/Unhook.test.tsx create mode 100644 src/Unhook.ts create mode 100644 src/Utils.test.ts create mode 100644 test/index.ts diff --git a/.eslintrc.json b/.eslintrc.json index 8f11820..4b56199 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -15,23 +15,20 @@ }, "plugins": ["react", "@typescript-eslint"], "rules": { + "no-shadow": "off", + "@typescript-eslint/no-shadow": "error", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": ["error"], + "import/extensions": "off", "import/no-extraneous-dependencies": ["error", { "devDependencies": ["**/*.test.tsx", "test/**"] }], "import/no-unresolved": "off", + "import/prefer-default-export": "off", "indent": ["error", 4], + "react/jsx-indent": ["error", 4], "max-len": ["error", 180], - "no-console": "warn", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": ["error"], "object-curly-newline": ["error", { "ObjectPattern": { "multiline": true }, "ExportDeclaration": { "multiline": true } }], + "prefer-promise-reject-errors": "off", "react/function-component-definition": "off", - "react/jsx-filename-extension": ["error", { "extensions": [".tsx"] }], - "react/jsx-indent": ["error", 4], - "react/prop-types": "off", - "react/require-default-props": "off", - "react/no-unused-prop-types": "off", - "import/extensions": "off", - "no-shadow": "off", - "@typescript-eslint/no-shadow": "error", - "import/prefer-default-export": "off" + "react/jsx-filename-extension": ["error", { "extensions": [".tsx"] }] } } diff --git a/README.md b/README.md index 35ab791..70fa20c 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,32 @@ # react-sync-promise -A small react helper snippet to handle promises as a react synchronous hook with mininmal amount of re-renders +A simple react helper snippet to handle promises as a react synchronous hook with mininmal amount of re-renders ## Usage ```tsx -import React, { FC } from 'react'; -import { usePromise, isPending, isRejected, isResolved, ifUnresolved, ifNotRejected } from 'react-sync-promise'; +import React, { FC, useMemo } from 'react'; +import { usePromise, isPending, isRejected, isResolved, ifUnresolved, ifNotRejected, usePromiseState } from 'react-sync-promise'; export const PrequelsSurprise: FC = () => { - const syncPromise = usePromise(Promise.resolve('Execute order 66')); + const memoizedPromise = useMemo(() => Promise.resolve('Execute order 66'), []); + + const syncPromise = usePromise(memoizedPromise); + const [secondSyncPromise, setSecondSyncPromise] = usePromiseState(memoizedPromise); return ( - + <> +

+ {`JSON: ${JSON.stringify(secondSyncPromise)}`} +