From 44fe1f88c397b624aac73b5b680e2ad988a7b898 Mon Sep 17 00:00:00 2001 From: Nastya Vasenina Date: Mon, 19 Feb 2024 00:51:03 +0300 Subject: [PATCH 01/31] feat: add useDebounce --- hooks/use-debounce/.npmignore | 1 + hooks/use-debounce/README.md | 9 ++++ hooks/use-debounce/package.json | 33 ++++++++++++ hooks/use-debounce/src/index.ts | 2 + .../use-debounce/src/useDebounce.stories.css | 10 ++++ .../use-debounce/src/useDebounce.stories.mdx | 7 +++ .../use-debounce/src/useDebounce.stories.tsx | 34 +++++++++++++ hooks/use-debounce/src/useDebounce.tests.tsx | 51 +++++++++++++++++++ hooks/use-debounce/src/useDebounce.ts | 21 ++++++++ hooks/use-debounce/tsconfig.json | 12 +++++ hooks/use-window-size/package.json | 2 +- package-lock.json | 11 ++++ 12 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 hooks/use-debounce/.npmignore create mode 100644 hooks/use-debounce/README.md create mode 100644 hooks/use-debounce/package.json create mode 100644 hooks/use-debounce/src/index.ts create mode 100644 hooks/use-debounce/src/useDebounce.stories.css create mode 100644 hooks/use-debounce/src/useDebounce.stories.mdx create mode 100644 hooks/use-debounce/src/useDebounce.stories.tsx create mode 100644 hooks/use-debounce/src/useDebounce.tests.tsx create mode 100644 hooks/use-debounce/src/useDebounce.ts create mode 100644 hooks/use-debounce/tsconfig.json diff --git a/hooks/use-debounce/.npmignore b/hooks/use-debounce/.npmignore new file mode 100644 index 00000000..85de9cf9 --- /dev/null +++ b/hooks/use-debounce/.npmignore @@ -0,0 +1 @@ +src diff --git a/hooks/use-debounce/README.md b/hooks/use-debounce/README.md new file mode 100644 index 00000000..c81625af --- /dev/null +++ b/hooks/use-debounce/README.md @@ -0,0 +1,9 @@ +# `@byndyusoft-ui/use-debounce` +--- +> A React hook that uses for delaying the execution of functions or state updates until a specified time period has passed without any further changes + +### Installation + +``` +npm i @byndyusoft-ui/use-debounce +``` diff --git a/hooks/use-debounce/package.json b/hooks/use-debounce/package.json new file mode 100644 index 00000000..b8d940e7 --- /dev/null +++ b/hooks/use-debounce/package.json @@ -0,0 +1,33 @@ +{ + "name": "@byndyusoft-ui/use-debounce", + "version": "0.0.0", + "description": "Byndyusoft UI React Hook", + "keywords": [ + "byndyusoft", + "byndyusoft-ui", + "react", + "hook", + "debounce" + ], + "author": "Anastasia Vasenina ", + "homepage": "https://github.com/Byndyusoft/ui/tree/master/hooks/use-debounce#readme", + "license": "Apache-2.0", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "repository": { + "type": "git", + "url": "git+https://github.com/Byndyusoft/ui.git" + }, + "scripts": { + "build": "tsc", + "clean": "rimraf dist", + "lint": "eslint src --config ../../eslint.config.js", + "test": "jest --config ../../jest.config.js" + }, + "bugs": { + "url": "https://github.com/Byndyusoft/ui/issues" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/hooks/use-debounce/src/index.ts b/hooks/use-debounce/src/index.ts new file mode 100644 index 00000000..565acd73 --- /dev/null +++ b/hooks/use-debounce/src/index.ts @@ -0,0 +1,2 @@ +import useDebounce from './useDebounce'; +export default useDebounce; diff --git a/hooks/use-debounce/src/useDebounce.stories.css b/hooks/use-debounce/src/useDebounce.stories.css new file mode 100644 index 00000000..c70c2fae --- /dev/null +++ b/hooks/use-debounce/src/useDebounce.stories.css @@ -0,0 +1,10 @@ +.container { + display: flex; + flex-direction: column; + gap: 8px; +} + +input{ + max-height: 40px; + width: 100px; +} \ No newline at end of file diff --git a/hooks/use-debounce/src/useDebounce.stories.mdx b/hooks/use-debounce/src/useDebounce.stories.mdx new file mode 100644 index 00000000..cf910280 --- /dev/null +++ b/hooks/use-debounce/src/useDebounce.stories.mdx @@ -0,0 +1,7 @@ +import { Meta } from '@storybook/addon-docs'; +import Readme from '../README.md'; +import { Markdown } from '@storybook/blocks'; + + + +{Readme} diff --git a/hooks/use-debounce/src/useDebounce.stories.tsx b/hooks/use-debounce/src/useDebounce.stories.tsx new file mode 100644 index 00000000..ddf45897 --- /dev/null +++ b/hooks/use-debounce/src/useDebounce.stories.tsx @@ -0,0 +1,34 @@ +import React, { useState } from 'react'; +import useDebounce from './useDebounce'; +import './useDebounce.stories.css'; +import type { Meta, StoryObj } from '@storybook/react'; + +type Story = StoryObj; + +const Template = () => { + const [value, setValue] = useState(''); + const [debouncedValue, isReady] = useDebounce(value, 2000); + const isReadyText = 'true'; + const isNotReadyText = 'false'; + + return ( +
+ + Debounced value: {debouncedValue} + + Debounced value is ready: {isReady ? isReadyText : isNotReadyText} + setValue(e.target.value)} /> +
+ ); +}; + +export const HookStory: Story = { + decorators: [() =>