From 3f73d81ea6bbe0cd4c7ceed58ba72b3cb3dce709 Mon Sep 17 00:00:00 2001 From: Corantin Date: Sat, 13 May 2023 20:21:57 -0400 Subject: [PATCH 1/4] WIP --- packages/react-app/src/components/filter.tsx | 47 +++++++---------- .../src/components/views/quest-list.tsx | 11 +++- packages/react-app/src/constants.ts | 4 +- packages/react-app/src/models/filter.model.ts | 3 +- .../react-app/src/queries/quests.query.ts | 51 ++++++++++++++----- 5 files changed, 67 insertions(+), 49 deletions(-) diff --git a/packages/react-app/src/components/filter.tsx b/packages/react-app/src/components/filter.tsx index 8773e3e2..b4a91320 100644 --- a/packages/react-app/src/components/filter.tsx +++ b/packages/react-app/src/components/filter.tsx @@ -1,4 +1,4 @@ -import { Button, SearchInput, DropDown, useTheme, useViewport } from '@1hive/1hive-ui'; +import { Button, DropDown, useTheme, useViewport } from '@1hive/1hive-ui'; import { useEffect, useState, useMemo } from 'react'; import { useFilterContext } from 'src/contexts/filter.context'; import { QuestStatus } from 'src/enums/quest-status.enum'; @@ -8,6 +8,7 @@ import styled, { css } from 'styled-components'; import { DEFAULT_FILTER } from '../constants'; import DateFieldInput from './field-input/date-field-input'; import { FieldInput } from './field-input/field-input'; +import TextFieldInput from './field-input/text-field-input'; // #region StyledComponents @@ -29,6 +30,8 @@ const FilterWrapperStyled = styled.div<{ padding: 0 ${GUpx(2)}; + column-gap: ${GUpx(4)}; + ${({ isSmallResolution }) => isSmallResolution ? css` @@ -72,6 +75,11 @@ const ButtonLineStyled = styled.div<{ isSmallResolution: boolean }>` } `; +const SearchTextInputWrapperStyled = styled.div<{ wide: boolean }>` + flex-grow: 1; + ${({ wide }) => wide && 'width: 100%;'} +`; + // #endregion type Props = { @@ -96,36 +104,19 @@ export function Filter({ compact }: Props) { <> {(isFilterShown || !isSmallResolution) && ( - - setFilter({ ...filter, title })} - wide - compact={compact} - /> - - - setFilter({ ...filter, description })} + + setFilter({ ...filter, search: e.currentTarget.value })} compact={compact} + tooltip="Search accross title, description, and address and return in rank order. There is support for & (AND) and | (OR) operators." + isEdit /> - + filter.search.split(/[&|]/gm).map((x) => x.trim()), + [filter.search], + ); + const fetchQuestUntilNew = (newQuestAddress: string) => { setTimeout(async () => { const newQuest = await QuestService.fetchQuest(newQuestAddress); @@ -139,8 +144,10 @@ export default function QuestList() { setNewQuestLoading(false); if ( (filter.status === QuestStatus.All || filter.status === QuestStatus.Active) && - (!filter.title || filter.title.includes(newQuest.title!)) && - (!filter.description || filter.description.includes(newQuest.description!)) && + (!filter.search || + newQuest.title!.includes(filter.search) || + newQuest.description!.includes(filter.search) || + newQuest.address!.includes(filter.search)) && (!filter.minExpireTime || filter.minExpireTime <= newQuest.expireTime) ) { setQuests([newQuest, ...quests]); diff --git a/packages/react-app/src/constants.ts b/packages/react-app/src/constants.ts index 8faa09c0..4b94d16f 100644 --- a/packages/react-app/src/constants.ts +++ b/packages/react-app/src/constants.ts @@ -26,9 +26,7 @@ export const EXPECTED_CHAIN_ID = env('FORCE_CHAIN_ID') ? [+env('FORCE_CHAIN_ID') export const DEFAULT_PAGE = Pages.List; export const DEFAULT_FILTER = Object.freeze({ - address: '', - title: '', - description: '', + search: '', minExpireTime: null, bounty: undefined, status: QuestStatus.Active, diff --git a/packages/react-app/src/models/filter.model.ts b/packages/react-app/src/models/filter.model.ts index 51124a0f..3ff85277 100644 --- a/packages/react-app/src/models/filter.model.ts +++ b/packages/react-app/src/models/filter.model.ts @@ -2,8 +2,7 @@ import { QuestStatus } from 'src/enums/quest-status.enum'; import { TokenAmountModel } from './token-amount.model'; export type FilterModel = { - title: string; - description: string; + search: string; minExpireTime?: Date | null; bounty?: TokenAmountModel; status: QuestStatus; diff --git a/packages/react-app/src/queries/quests.query.ts b/packages/react-app/src/queries/quests.query.ts index 42e1fbaf..b2dc5c4a 100644 --- a/packages/react-app/src/queries/quests.query.ts +++ b/packages/react-app/src/queries/quests.query.ts @@ -32,30 +32,48 @@ const QuestEntityQuery = gql` `; const QuestEntitiesQuery = (payload: any) => gql` - query questEntities( + query ${payload.search ? 'questSearch' : 'questEntities'}( $first: Int $skip: Int $expireTimeLower: Int $expireTimeUpper: Int - $address: String - $title: String - $description: String + ${ + payload.search + ? ` + $search: String + ` + : ` + $title: String + $description: String + ` + } $blackList: [String] $whiteList: [String] ) { - questEntities( + ${payload.search ? 'questSearch' : 'questEntities'} ( first: $first - skip: $skip + skip: $skip, + ${ + payload.search + ? ` + text: $search + ` + : '' + } where: { questExpireTimeSec_gte: $expireTimeLower questExpireTimeSec_lte: $expireTimeUpper - questTitle_contains_nocase: $title - questDescription_contains_nocase: $description ${payload.blackList !== undefined ? 'questAddress_not_in: $blackList' : ''} ${payload.whiteList !== undefined ? 'questAddress_in: $whiteList' : ''} } + ${ + payload.search + ? '' + : ` orderBy: creationTimestamp orderDirection: desc + ` + } subgraphError: allow ) { id @@ -116,11 +134,12 @@ const QuestEntitiesLight = (payload: any) => gql` } `; -export const fetchQuestEnity = (questAddress: string) => { +export const fetchQuestEnity = async (questAddress: string) => { const { questsSubgraph } = getNetwork(); - return request(questsSubgraph, QuestEntityQuery, { + const res = await request(questsSubgraph, QuestEntityQuery, { ID: questAddress.toLowerCase(), // Subgraph address are stored lowercase - }).then((res) => res.questEntity); + }); + return res.questEntity; }; export const fetchQuestEntities = async ( @@ -154,15 +173,19 @@ export const fetchQuestEntities = async ( first: count, expireTimeLower: Math.round(expireTimeLowerMs / 1000), expireTimeUpper: Math.round(expireTimeUpperMs / 1000), - title: filter.title, - description: filter.description, + search: filter.search + ? filter.search + .split(/[&|]/gm) + .map((segment) => `'${segment}'`) + .join('') + : undefined, blackList: blackList !== undefined ? blackList.toLowerCase().split(',') : undefined, whiteList: whiteList && whiteList !== '*' ? whiteList.toLowerCase().split(',') : undefined, }; const res = await request(questsSubgraph, QuestEntitiesQuery(payload), payload); - return res.questEntities; + return res.questEntities ?? res.questSearch; }; export const fetchQuestRewardTokens = () => { From 124d59ac6d96339b2df341cf2ef3aa318ac49f9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jun 2023 18:24:30 +0000 Subject: [PATCH 2/4] Bump @openzeppelin/contracts from 4.7.3 to 4.9.1 Bumps [@openzeppelin/contracts](https://github.com/OpenZeppelin/openzeppelin-contracts) from 4.7.3 to 4.9.1. - [Release notes](https://github.com/OpenZeppelin/openzeppelin-contracts/releases) - [Changelog](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.1/CHANGELOG.md) - [Commits](https://github.com/OpenZeppelin/openzeppelin-contracts/compare/v4.7.3...v4.9.1) --- updated-dependencies: - dependency-name: "@openzeppelin/contracts" dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- packages/hardhat/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/hardhat/package.json b/packages/hardhat/package.json index 918dde1b..2d255f73 100644 --- a/packages/hardhat/package.json +++ b/packages/hardhat/package.json @@ -33,7 +33,7 @@ "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.0", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/contracts": "^4.7.3", + "@openzeppelin/contracts": "^4.9.1", "@tenderly/hardhat-tenderly": "1.0.10", "@typechain/ethers-v5": "^5.0.0", "chalk": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index 60c8e3d9..26a9e11e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4754,10 +4754,10 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@openzeppelin/contracts@^4.7.3": - version "4.7.3" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" - integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== +"@openzeppelin/contracts@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.1.tgz#afa804d2c68398704b0175acc94d91a54f203645" + integrity sha512-aLDTLu/If1qYIFW5g4ZibuQaUsFGWQPBq1mZKp/txaebUnGHDmmiBhRLY1tDNedN0m+fJtKZ1zAODS9Yk+V6uA== "@parcel/fs@^1.11.0": version "1.11.0" From 849e221e0c70c226990f00a04217c401ba043ee3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jun 2023 02:27:56 +0000 Subject: [PATCH 3/4] Bump semver from 7.3.8 to 7.5.2 Bumps [semver](https://github.com/npm/node-semver) from 7.3.8 to 7.5.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.3.8...v7.5.2) --- updated-dependencies: - dependency-name: semver dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- packages/react-app/package.json | 2 +- yarn.lock | 66 +++++++++++---------------------- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/packages/react-app/package.json b/packages/react-app/package.json index ffc7c545..720d2190 100644 --- a/packages/react-app/package.json +++ b/packages/react-app/package.json @@ -120,7 +120,7 @@ "rimraf": "^2.6.2", "sass": "^1.39.0", "sass-loader": "^11.0.1", - "semver": "^7.3.8", + "semver": "^7.5.2", "svgo": "^1.3.2", "ts-jest": "^27.1.4" }, diff --git a/yarn.lock b/yarn.lock index 60c8e3d9..c285e6b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5806,11 +5806,11 @@ ts-toolbelt "^6.15.1" "@types/react-dom@^17.0.2": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.19.tgz#36feef3aa35d045cacd5ed60fe0eef5272f19492" - integrity sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ== + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.2.tgz#35654cf6c49ae162d5bc90843d5437dc38008d43" + integrity sha512-Icd9KEgdnFfJs39KyRyr0jQ7EKhq8U6CcHRMGAS45fp5qgUvxL3ujUCfWFttUK2UErqZNj97t9gsVPNAqcwoCg== dependencies: - "@types/react" "^17" + "@types/react" "*" "@types/react-router-dom@^5.3.1": version "5.3.1" @@ -5829,28 +5829,18 @@ "@types/history" "*" "@types/react" "*" -"@types/react@*", "@types/react@^17": - version "17.0.44" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.44.tgz#c3714bd34dd551ab20b8015d9d0dbec812a51ec7" - integrity sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g== +"@types/react@*", "@types/react@^17.0.2": + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8" + integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/react@^15.0.0 || ^16.0.0": - version "16.14.35" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.35.tgz#9d3cf047d85aca8006c4776693124a5be90ee429" - integrity sha512-NUEiwmSS1XXtmBcsm1NyRRPYjoZF2YTE89/5QiLt5mlGffYK9FQqOKuOLuXNrjPQV04oQgaZG+Yq02ZfHoFyyg== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^17.0.2": - version "17.0.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab" - integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw== + version "16.14.43" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.43.tgz#bc6e7a0e99826809591d38ddf1193955de32c446" + integrity sha512-7zdjv7jvoLLQg1tTvpQsm+hyNUMT2mPlNV1+d0I8fbGhkJl82spopMyBlu4wb1dviZAxpGdk5eHu/muacknnfw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -5864,9 +5854,9 @@ "@types/node" "*" "@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/secp256k1@^4.0.1": version "4.0.3" @@ -23877,10 +23867,10 @@ semver@7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@7.x: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.2: + version "7.5.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" + integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== dependencies: lru-cache "^6.0.0" @@ -23889,20 +23879,6 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== - dependencies: - lru-cache "^6.0.0" - semver@~5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" @@ -24955,9 +24931,9 @@ style-to-object@^0.4.0: inline-style-parser "0.1.1" styled-components@^5.2.1: - version "5.3.6" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1" - integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg== + version "5.3.11" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.11.tgz#9fda7bf1108e39bf3f3e612fcc18170dedcd57a8" + integrity sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/traverse" "^7.4.5" From d14ab146d4b9257eb371ac92e12f906d6160a4ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jun 2023 20:19:00 +0000 Subject: [PATCH 4/4] Bump @openzeppelin/contracts from 4.9.1 to 4.9.2 Bumps [@openzeppelin/contracts](https://github.com/OpenZeppelin/openzeppelin-contracts) from 4.9.1 to 4.9.2. - [Release notes](https://github.com/OpenZeppelin/openzeppelin-contracts/releases) - [Changelog](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/CHANGELOG.md) - [Commits](https://github.com/OpenZeppelin/openzeppelin-contracts/compare/v4.9.1...v4.9.2) --- updated-dependencies: - dependency-name: "@openzeppelin/contracts" dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- packages/hardhat/package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/hardhat/package.json b/packages/hardhat/package.json index 2d255f73..d5fa78b0 100644 --- a/packages/hardhat/package.json +++ b/packages/hardhat/package.json @@ -33,7 +33,7 @@ "@nomiclabs/hardhat-etherscan": "^3.1.0", "@nomiclabs/hardhat-waffle": "^2.0.0", "@nomiclabs/hardhat-web3": "^2.0.0", - "@openzeppelin/contracts": "^4.9.1", + "@openzeppelin/contracts": "^4.9.2", "@tenderly/hardhat-tenderly": "1.0.10", "@typechain/ethers-v5": "^5.0.0", "chalk": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index 79a0fc8d..e7180142 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4754,10 +4754,10 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@openzeppelin/contracts@^4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.1.tgz#afa804d2c68398704b0175acc94d91a54f203645" - integrity sha512-aLDTLu/If1qYIFW5g4ZibuQaUsFGWQPBq1mZKp/txaebUnGHDmmiBhRLY1tDNedN0m+fJtKZ1zAODS9Yk+V6uA== +"@openzeppelin/contracts@^4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.2.tgz#1cb2d5e4d3360141a17dbc45094a8cad6aac16c1" + integrity sha512-mO+y6JaqXjWeMh9glYVzVu8HYPGknAAnWyxTRhGeckOruyXQMNnlcW6w/Dx9ftLeIQk6N+ZJFuVmTwF7lEIFrg== "@parcel/fs@^1.11.0": version "1.11.0"