From 299a33e29d3551f40d597163287957dbbf4aabdd Mon Sep 17 00:00:00 2001 From: Dmitriy Semenov Date: Thu, 11 Apr 2024 17:53:31 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B7=D0=B0=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B5=20(#102)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pnp.cjs | 46 ++++++++++++++++++ ...romise-npm-3.1.9-9aea081a63-ea6c38c8d4.zip | Bin 0 -> 3154 bytes ...romise-npm-3.1.2-3c185da0c7-29bac4524c.zip | Bin 0 -> 9069 bytes ...ounce-npm-10.0.0-04f7df41a1-b296fedba9.zip | Bin 0 -> 37383 bytes package.json | 3 ++ src/features/filter/FilterSpecialization.tsx | 6 ++- src/pages/search/api/useGetAllPositions.tsx | 2 +- src/pages/search/ui/SearchPage.desktop.tsx | 5 +- src/pages/search/ui/SearchPage.tsx | 5 +- src/shared/api/types/projects.ts | 4 +- src/shared/api/types/storage.ts | 6 +-- src/shared/lib/const.ts | 3 ++ src/shared/ui/SearchSelect/SearchSelect.tsx | 39 +++++++++------ yarn.lock | 26 ++++++++++ 14 files changed, 122 insertions(+), 23 deletions(-) create mode 100644 .yarn/cache/@types-debounce-promise-npm-3.1.9-9aea081a63-ea6c38c8d4.zip create mode 100644 .yarn/cache/debounce-promise-npm-3.1.2-3c185da0c7-29bac4524c.zip create mode 100644 .yarn/cache/use-debounce-npm-10.0.0-04f7df41a1-b296fedba9.zip create mode 100644 src/shared/lib/const.ts diff --git a/.pnp.cjs b/.pnp.cjs index 8456376d..1fce15b8 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -49,6 +49,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@testing-library/jest-dom", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:6.1.2"],\ ["@testing-library/react", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:14.0.0"],\ ["@testing-library/user-event", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:14.4.3"],\ + ["@types/debounce-promise", "npm:3.1.9"],\ ["@types/jest", "npm:29.5.4"],\ ["@types/lodash", "npm:4.14.200"],\ ["@types/node", "npm:20.5.7"],\ @@ -64,6 +65,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["commitlint", "npm:17.7.1"],\ ["concurrently", "npm:8.2.1"],\ ["date-fns", "npm:2.30.0"],\ + ["debounce-promise", "npm:3.1.2"],\ ["dotenv", "npm:16.3.1"],\ ["eslint", "npm:8.48.0"],\ ["eslint-config-prettier", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:9.0.0"],\ @@ -95,6 +97,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["react-router-dom", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:6.15.0"],\ ["release-it", "npm:16.1.5"],\ ["typescript", "patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=5da071"],\ + ["use-debounce", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:10.0.0"],\ ["uuid", "npm:9.0.1"],\ ["vite", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:4.4.9"],\ ["vite-bundle-visualizer", "npm:0.10.0"],\ @@ -7139,6 +7142,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["@types/debounce-promise", [\ + ["npm:3.1.9", {\ + "packageLocation": "./.yarn/cache/@types-debounce-promise-npm-3.1.9-9aea081a63-ea6c38c8d4.zip/node_modules/@types/debounce-promise/",\ + "packageDependencies": [\ + ["@types/debounce-promise", "npm:3.1.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@types/debug", [\ ["npm:4.1.8", {\ "packageLocation": "./.yarn/cache/@types-debug-npm-4.1.8-a04e2ca136-a9a9bb40a1.zip/node_modules/@types/debug/",\ @@ -9671,6 +9683,15 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["debounce-promise", [\ + ["npm:3.1.2", {\ + "packageLocation": "./.yarn/cache/debounce-promise-npm-3.1.2-3c185da0c7-29bac4524c.zip/node_modules/debounce-promise/",\ + "packageDependencies": [\ + ["debounce-promise", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["debug", [\ ["npm:3.2.7", {\ "packageLocation": "./.yarn/cache/debug-npm-3.2.7-754e818c7a-b3d8c59407.zip/node_modules/debug/",\ @@ -16088,6 +16109,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@testing-library/jest-dom", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:6.1.2"],\ ["@testing-library/react", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:14.0.0"],\ ["@testing-library/user-event", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:14.4.3"],\ + ["@types/debounce-promise", "npm:3.1.9"],\ ["@types/jest", "npm:29.5.4"],\ ["@types/lodash", "npm:4.14.200"],\ ["@types/node", "npm:20.5.7"],\ @@ -16103,6 +16125,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["commitlint", "npm:17.7.1"],\ ["concurrently", "npm:8.2.1"],\ ["date-fns", "npm:2.30.0"],\ + ["debounce-promise", "npm:3.1.2"],\ ["dotenv", "npm:16.3.1"],\ ["eslint", "npm:8.48.0"],\ ["eslint-config-prettier", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:9.0.0"],\ @@ -16134,6 +16157,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["react-router-dom", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:6.15.0"],\ ["release-it", "npm:16.1.5"],\ ["typescript", "patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=5da071"],\ + ["use-debounce", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:10.0.0"],\ ["uuid", "npm:9.0.1"],\ ["vite", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:4.4.9"],\ ["vite-bundle-visualizer", "npm:0.10.0"],\ @@ -17709,6 +17733,28 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD"\ }]\ ]],\ + ["use-debounce", [\ + ["npm:10.0.0", {\ + "packageLocation": "./.yarn/cache/use-debounce-npm-10.0.0-04f7df41a1-b296fedba9.zip/node_modules/use-debounce/",\ + "packageDependencies": [\ + ["use-debounce", "npm:10.0.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:10.0.0", {\ + "packageLocation": "./.yarn/__virtual__/use-debounce-virtual-6ee902d8e7/0/cache/use-debounce-npm-10.0.0-04f7df41a1-b296fedba9.zip/node_modules/use-debounce/",\ + "packageDependencies": [\ + ["use-debounce", "virtual:1c437dc0bcbbbbb8e13ce8545c57ffe2159f1e83486bc58aea069eb9730fc148eb58a88a9843f21c194c41eb6c191104836828c12c5751cdded24f62d33f0a43#npm:10.0.0"],\ + ["@types/react", "npm:18.2.21"],\ + ["react", "npm:18.2.0"]\ + ],\ + "packagePeers": [\ + "@types/react",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["use-isomorphic-layout-effect", [\ ["npm:1.1.2", {\ "packageLocation": "./.yarn/cache/use-isomorphic-layout-effect-npm-1.1.2-65facd0a4b-a6532f7fc9.zip/node_modules/use-isomorphic-layout-effect/",\ diff --git a/.yarn/cache/@types-debounce-promise-npm-3.1.9-9aea081a63-ea6c38c8d4.zip b/.yarn/cache/@types-debounce-promise-npm-3.1.9-9aea081a63-ea6c38c8d4.zip new file mode 100644 index 0000000000000000000000000000000000000000..cbca540a918d82f399cb035551da7310b9d2ed78 GIT binary patch literal 3154 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�=)aI5a1rnOZ#2Hw&<>uYOsJd7M!L;y4m!ZRkx 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 { const { isOpen, onOpen, onClose } = useDisclosure(); const [searchText, setSearchText] = useState(''); + const [debounceText] = useDebounce(searchText, TIME.DEBOUNCE); const { data: specGroup } = useGetSpecsGroups(); const { data: specs } = useGetSpecs({ - query_text: searchText, + query: debounceText, }); const deleteSpecFilter = (id: string) => { diff --git a/src/pages/search/api/useGetAllPositions.tsx b/src/pages/search/api/useGetAllPositions.tsx index f265ae04..2a4e0c9c 100644 --- a/src/pages/search/api/useGetAllPositions.tsx +++ b/src/pages/search/api/useGetAllPositions.tsx @@ -23,7 +23,7 @@ export const useGetAllPositions = ({ specs, skills, date, searchText }: Search) specialization_ids: specs, skill_ids: skills?.map((skill) => skill.value), project_startline_ge: date, - project_query_text: searchText, + query: searchText, project_status: ['preparation', 'in_work'], }), getNextPageParam: (lastPage) => diff --git a/src/pages/search/ui/SearchPage.desktop.tsx b/src/pages/search/ui/SearchPage.desktop.tsx index c834fa9f..99eb5bcf 100644 --- a/src/pages/search/ui/SearchPage.desktop.tsx +++ b/src/pages/search/ui/SearchPage.desktop.tsx @@ -3,6 +3,7 @@ import { Flex, SimpleGrid, Skeleton, Box } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; import React, { useRef, useState } from 'react'; import { Link, generatePath } from 'react-router-dom'; +import { useDebounce } from 'use-debounce'; import { ProjectCard } from '~/widgets/project-card'; @@ -14,6 +15,7 @@ import { useFilterStore } from '~/entities/project'; import { useGetSpecs } from '~/entities/storage'; import { useApi, useAuth, useInfinityScroll } from '~/shared/hooks'; +import { TIME } from '~/shared/lib/const'; import { PATHS } from '~/shared/lib/router'; import { STag } from '~/shared/ui/STag'; @@ -25,6 +27,7 @@ export const SearchPageDesktop = () => { const targetRef = useRef(null); const [searchText, setSearchText] = useState(''); + const [debounceText] = useDebounce(searchText, TIME.DEBOUNCE); const { filter } = useFilterStore(); @@ -38,7 +41,7 @@ export const SearchPageDesktop = () => { date: filter.date, skills: filter.skills, specs: filter.specs, - searchText, + searchText: debounceText, }); const { data: allSpecs } = useGetSpecs(); diff --git a/src/pages/search/ui/SearchPage.tsx b/src/pages/search/ui/SearchPage.tsx index 3f27f8f1..cd36f291 100644 --- a/src/pages/search/ui/SearchPage.tsx +++ b/src/pages/search/ui/SearchPage.tsx @@ -11,6 +11,7 @@ import { import { useQuery } from '@tanstack/react-query'; import React, { useRef, useState } from 'react'; import { Link, generatePath } from 'react-router-dom'; +import { useDebounce } from 'use-debounce'; import { ProjectCard } from '~/widgets/project-card'; @@ -23,6 +24,7 @@ import { useGetSpecs } from '~/entities/storage'; import { Avatar, NotAuthAvatar } from '~/entities/user'; import { useApi, useAuth, useInfinityScroll, useLayoutRefs } from '~/shared/hooks'; +import { TIME } from '~/shared/lib/const'; import { PATHS } from '~/shared/lib/router'; import { STag } from '~/shared/ui/STag'; @@ -35,6 +37,7 @@ export const SearchPage = () => { const layout = useLayoutRefs(); const [searchText, setSearchText] = useState(''); + const [debounceText] = useDebounce(searchText, TIME.DEBOUNCE); const { filter } = useFilterStore(); @@ -48,7 +51,7 @@ export const SearchPage = () => { date: filter.date, skills: filter.skills, specs: filter.specs, - searchText, + searchText: debounceText, }); const { data: allSpecs } = useGetSpecs(); diff --git a/src/shared/api/types/projects.ts b/src/shared/api/types/projects.ts index 99f9f2b3..b7eb036d 100644 --- a/src/shared/api/types/projects.ts +++ b/src/shared/api/types/projects.ts @@ -547,7 +547,7 @@ export interface operations { specialization_ids?: unknown; skill_ids?: unknown; joined_user_id?: unknown; - project_query_text?: unknown; + query?: unknown; project_startline_ge?: unknown; project_startline_le?: unknown; project_deadline_ge?: unknown; @@ -720,7 +720,7 @@ export interface operations { page?: number; /** @description Number of items per page */ per_page?: number; - query_text?: unknown; + query?: unknown; owner_id?: unknown; user_id?: unknown; startline_ge?: unknown; diff --git a/src/shared/api/types/storage.ts b/src/shared/api/types/storage.ts index 5c354744..69e92d2a 100644 --- a/src/shared/api/types/storage.ts +++ b/src/shared/api/types/storage.ts @@ -172,7 +172,7 @@ export interface operations { page?: number; /** @description Number of items per page */ per_page?: number; - query_text?: unknown; + query?: unknown; id?: unknown; exclude_id?: unknown; }; @@ -200,7 +200,7 @@ export interface operations { page?: number; /** @description Number of items per page */ per_page?: number; - query_text?: unknown; + query?: unknown; group_id?: unknown; id?: unknown; exclude_id?: unknown; @@ -229,7 +229,7 @@ export interface operations { page?: number; /** @description Number of items per page */ per_page?: number; - query_text?: unknown; + query?: unknown; }; }; requestBody?: { diff --git a/src/shared/lib/const.ts b/src/shared/lib/const.ts new file mode 100644 index 00000000..cacef341 --- /dev/null +++ b/src/shared/lib/const.ts @@ -0,0 +1,3 @@ +export const TIME = { + DEBOUNCE: 1000, +}; diff --git a/src/shared/ui/SearchSelect/SearchSelect.tsx b/src/shared/ui/SearchSelect/SearchSelect.tsx index 9e0b54f0..371b2dd5 100644 --- a/src/shared/ui/SearchSelect/SearchSelect.tsx +++ b/src/shared/ui/SearchSelect/SearchSelect.tsx @@ -2,15 +2,17 @@ import { SmallCloseIcon } from '@chakra-ui/icons'; import { Flex, IconButton, Tag, TagLabel, useToast } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; import { - AsyncSelect, - chakraComponents, + type OptionsOrGroups, type GroupBase, type LoadingIndicatorProps, } from 'chakra-react-select'; -import { useEffect, useState } from 'react'; +import { AsyncSelect, chakraComponents } from 'chakra-react-select'; +import debounce from 'debounce-promise'; +import { useCallback, useEffect, useState } from 'react'; import type { GetSkillsParameters } from '~/shared/api/model'; import { useApi } from '~/shared/hooks'; +import { TIME } from '~/shared/lib/const'; import type { SelectOptions } from '~/shared/types'; const asyncComponents = { @@ -40,10 +42,9 @@ export const SearchSelect = ({ selectedItems, setSelectedItems }: SearchSelectPr const toast = useToast(); const { storageApi } = useApi(); const [unSelectedItems, setUnSelectedItems] = useState([]); - const [searchValue, setSearchValue] = useState(''); - const params: GetSkillsParameters = { - query_text: searchValue, + let params: GetSkillsParameters = { + // query: searchValue, exclude_id: selectedItems.map((item) => item.value), per_page: 10, }; @@ -86,6 +87,21 @@ export const SearchSelect = ({ selectedItems, setSelectedItems }: SearchSelectPr } }; + const getOptions = debounce( + async ( + value: string, + callback: ( + options: OptionsOrGroups>, + ) => void, + ) => { + params = { ...params, query: value }; + await refetch().then((response) => { + callback(response.data ?? []); + }); + }, + TIME.DEBOUNCE, + ); + return ( <> > @@ -97,14 +113,9 @@ export const SearchSelect = ({ selectedItems, setSelectedItems }: SearchSelectPr components={asyncComponents} defaultOptions={unSelectedItems} value={null} - loadOptions={(inputValue, callback) => { - setSearchValue(inputValue); - requestAnimationFrame(() => { - refetch().then((response) => { - callback(response.data ?? []); - }); - }); - }} + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-expect-error + loadOptions={getOptions} onChange={(item) => { if (item) { setSelectedItems([...selectedItems, item]); diff --git a/yarn.lock b/yarn.lock index c7e91a0a..b06c703d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4205,6 +4205,13 @@ __metadata: languageName: node linkType: hard +"@types/debounce-promise@npm:^3.1.9": + version: 3.1.9 + resolution: "@types/debounce-promise@npm:3.1.9" + checksum: ea6c38c8d4b6006aea25fb9891281b0ea908aab7ae32755e85dfda1ae78331dab1884da7143aa4ca5166741884bc9f7665391072ddce800b5d2c1f44d4a11b9d + languageName: node + linkType: hard + "@types/debug@npm:^4.1.7": version: 4.1.8 resolution: "@types/debug@npm:4.1.8" @@ -6265,6 +6272,13 @@ __metadata: languageName: node linkType: hard +"debounce-promise@npm:^3.1.2": + version: 3.1.2 + resolution: "debounce-promise@npm:3.1.2" + checksum: 29bac4524c423cc852319d7455363909ea3d933a3b9e3eb1149d963cffc34c475fe37219d0bafc61af566500b5d663cba579bbad7ee4023bef06f8394ed900ad + languageName: node + linkType: hard + "debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -11781,6 +11795,7 @@ __metadata: "@testing-library/jest-dom": ^6.1.2 "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.4.3 + "@types/debounce-promise": ^3.1.9 "@types/jest": ^29.5.4 "@types/lodash": ^4.14.200 "@types/node": ^20.5.7 @@ -11796,6 +11811,7 @@ __metadata: commitlint: ^17.7.1 concurrently: ^8.2.1 date-fns: ^2.30.0 + debounce-promise: ^3.1.2 dotenv: ^16.3.1 eslint: ^8.48.0 eslint-config-prettier: ^9.0.0 @@ -11827,6 +11843,7 @@ __metadata: react-router-dom: ^6.15.0 release-it: ^16.1.5 typescript: ^5.1.6 + use-debounce: ^10.0.0 uuid: ^9.0.1 vite: ^4.4.9 vite-bundle-visualizer: ^0.10.0 @@ -13199,6 +13216,15 @@ __metadata: languageName: node linkType: hard +"use-debounce@npm:^10.0.0": + version: 10.0.0 + resolution: "use-debounce@npm:10.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: b296fedba916ca721eeb7117f29a13c252966d03411abccc5e5894ed4de0f32b9cb6f6b150555b8b4cb9b0acf53b84022ad4cd43b89253389e9cd13779eebca7 + languageName: node + linkType: hard + "use-isomorphic-layout-effect@npm:^1.1.2": version: 1.1.2 resolution: "use-isomorphic-layout-effect@npm:1.1.2"