Skip to content

Commit

Permalink
Merge branch 'dev' into fix-wrong-chain
Browse files Browse the repository at this point in the history
  • Loading branch information
Corantin committed Jul 11, 2023
2 parents 599f943 + a7e1855 commit cbc386e
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 77 deletions.
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,10 @@ yarn-error.log*

.vercel

.yarn
.yarn/
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
2 changes: 1 addition & 1 deletion packages/hardhat/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.2",
"@tenderly/hardhat-tenderly": "1.0.10",
"@typechain/ethers-v5": "^5.0.0",
"chalk": "^4.1.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/react-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,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"
},
Expand Down
47 changes: 19 additions & 28 deletions packages/react-app/src/components/filter.tsx
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -9,6 +9,7 @@ import { QuestPlayStatus } from 'src/enums/quest-play-status.enum';
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

Expand All @@ -30,6 +31,8 @@ const FilterWrapperStyled = styled.div<{
padding: 0 ${GUpx(2)};
column-gap: ${GUpx(4)};
${({ isSmallResolution }) =>
isSmallResolution
? css`
Expand Down Expand Up @@ -73,6 +76,11 @@ const ButtonLineStyled = styled.div<{ isSmallResolution: boolean }>`
}
`;

const SearchTextInputWrapperStyled = styled.div<{ wide: boolean }>`
flex-grow: 1;
${({ wide }) => wide && 'width: 100%;'}
`;

// #endregion

type Props = {
Expand Down Expand Up @@ -101,36 +109,19 @@ export function Filter({ compact }: Props) {
<>
{(isFilterShown || !isSmallResolution) && (
<FilterWrapperStyled colDisplay={isSmallResolution} isSmallResolution={isSmallResolution}>
<FieldInput
className="flex-grow"
label={!compact ? 'Title' : ''}
wide={isSmallResolution}
id="filterTitle"
>
<SearchInput
id="filterTitle"
placeholder="Search by title"
value={filter.title}
onChange={(title: string) => setFilter({ ...filter, title })}
wide
compact={compact}
/>
</FieldInput>
<FieldInput
className="flex-grow"
label={!compact ? 'Description' : ''}
wide={isSmallResolution}
id="filterDescription"
>
<SearchInput
id="filterDescription"
placeholder="Search by description"
value={filter.description}
onChange={(description: string) => setFilter({ ...filter, description })}
<SearchTextInputWrapperStyled wide={isSmallResolution}>
<TextFieldInput
id="filterSearch"
label={!compact ? 'Search' : ''}
wide
placeHolder="Search by title, description, or address"
value={filter.search}
onChange={(e: any) => 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
/>
</FieldInput>
</SearchTextInputWrapperStyled>
<DateFieldInput
id="minExpireTime"
value={filter.minExpireTime}
Expand Down
11 changes: 9 additions & 2 deletions packages/react-app/src/components/views/quest-list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@ export default function QuestList() {
}
}, [transaction?.status, transaction?.type]);

const searchWords = useMemo(

Check warning on line 134 in packages/react-app/src/components/views/quest-list.tsx

View workflow job for this annotation

GitHub Actions / Lint

'searchWords' is assigned a value but never used
() => filter.search.split(/[&|]/gm).map((x) => x.trim()),
[filter.search],
);

const fetchQuestUntilNew = (newQuestAddress: string) => {
setTimeout(async () => {
const newQuest = await QuestService.fetchQuest(newQuestAddress);
Expand All @@ -141,8 +146,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]);
Expand Down
4 changes: 1 addition & 3 deletions packages/react-app/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,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,
Expand Down
3 changes: 1 addition & 2 deletions packages/react-app/src/models/filter.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { QuestPlayStatus } from 'src/enums/quest-play-status.enum';
import { TokenAmountModel } from './token-amount.model';

export type FilterModel = {
title: string;
description: string;
search: string;
minExpireTime?: Date | null;
bounty?: TokenAmountModel;
status: QuestStatus;
Expand Down
54 changes: 37 additions & 17 deletions packages/react-app/src/queries/quests.query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,40 +34,55 @@ 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
`
}
$walletAddress: 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
# Test
${
payload.walletAddress !== undefined && payload.playStatus === QuestPlayStatus.Played
? 'questPlayers_contains:[$walletAddress]'
: ''
}
${payload.playStatus === QuestPlayStatus.Unplayed ? 'questPlayers_not:null' : ''}
${payload.blackList !== undefined ? 'questAddress_not_in: $blackList' : ''}
${payload.whiteList !== undefined ? 'questAddress_in: $whiteList' : ''}
}
${
payload.search
? ''
: `
orderBy: creationTimestamp
orderDirection: desc
`
}
subgraphError: allow
) {
id
Expand Down Expand Up @@ -129,11 +144,12 @@ const QuestEntitiesLight = (payload: any) => gql`
}
`;

export const fetchQuestEntity = (questAddress: string) => {
export const fetchQuestEntity = 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 (
Expand Down Expand Up @@ -170,16 +186,20 @@ export const fetchQuestEntities = async (
first: count,
expireTimeLower: Math.round(expireTimeLowerMs / 1000),
expireTimeUpper: Math.round(expireTimeUpperMs / 1000),
title: filter.title,
description: filter.description,
walletAddress: walletAddress?.toLowerCase(),
playStatus,
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 = () => {
Expand Down
30 changes: 8 additions & 22 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4938,10 +4938,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.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"
Expand Down Expand Up @@ -24051,10 +24051,10 @@ [email protected]:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==

[email protected]:
version "7.3.7"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
[email protected], 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"

Expand All @@ -24063,20 +24063,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"
Expand Down

0 comments on commit cbc386e

Please sign in to comment.