From 8adfa64e7a3c71b4182f4181b06c5600b93cc259 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Mon, 21 Aug 2023 19:57:41 -0700 Subject: [PATCH] Finish implementing include/exclude This commit adds functionality that stores inclusions/exclusions as MentionItems and converts them back and forth into a list of strings as necessary --- components/common/MentionTypeahead/index.tsx | 12 +++++++----- components/filters/FilterModal/index.tsx | 8 +++++--- pages/teams.tsx | 5 +++-- types/FilterSet.d.ts | 4 ++-- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/components/common/MentionTypeahead/index.tsx b/components/common/MentionTypeahead/index.tsx index ba948814..424f69f8 100644 --- a/components/common/MentionTypeahead/index.tsx +++ b/components/common/MentionTypeahead/index.tsx @@ -54,15 +54,13 @@ const MentionTypeahead = ({ ? (getCookie('NEXT_LOCALE') as string) : 'en' - console.log(inclusions) - const [isLoading, setIsLoading] = useState(false) const [options, setOptions] = useState([]) async function handleSearch(query: string) { setIsLoading(true) - const exclude = [...inclusions, ...exclusions] + const exclude = transformIntoString([...inclusions, ...exclusions]) const response = await api.searchAll(query, exclude, locale) const results = response.data.results @@ -71,7 +69,7 @@ const MentionTypeahead = ({ setOptions(mapResults(results)) } - function transform(object: RawSearchResponse) { + function transformIntoMentionItem(object: RawSearchResponse) { const result: MentionItem = { name: { en: object.name_en, @@ -84,10 +82,14 @@ const MentionTypeahead = ({ return result } + function transformIntoString(list: MentionItem[]) { + return list.map((item) => item.granblue_id) + } + function mapResults(results: RawSearchResponse[]) { return results .map((rawObject: RawSearchResponse) => { - const object = transform(rawObject) + const object = transformIntoMentionItem(rawObject) return { granblue_id: object.granblue_id, element: object.element, diff --git a/components/filters/FilterModal/index.tsx b/components/filters/FilterModal/index.tsx index 7e2e21de..1ca28cd6 100644 --- a/components/filters/FilterModal/index.tsx +++ b/components/filters/FilterModal/index.tsx @@ -95,6 +95,8 @@ const FilterModal = (props: Props) => { useEffect(() => { setFilterSet(props.filterSet) + setInclusions(props.filterSet.includes || []) + setExclusions(props.filterSet.excludes || []) }, [props.filterSet]) useEffect(() => { @@ -135,13 +137,13 @@ const FilterModal = (props: Props) => { if (maxButtonsCount) filters.button_count = maxButtonsCount if (maxTurnsCount) filters.turn_count = maxTurnsCount + if (inclusions.length > 0) filters.includes = inclusions + if (exclusions.length > 0) filters.excludes = exclusions + if (props.persistFilters) { setCookie('filters', filters, { path: '/' }) } - if (inclusions.length > 0) filters.includes = inclusions - if (exclusions.length > 0) filters.excludes = exclusions - props.sendAdvancedFilters(filters) openChange() } diff --git a/pages/teams.tsx b/pages/teams.tsx index cd21d70a..e6392606 100644 --- a/pages/teams.tsx +++ b/pages/teams.tsx @@ -16,6 +16,7 @@ import { appState } from '~utils/appState' import { defaultFilterset } from '~utils/defaultFilters' import { elements, allElement } from '~data/elements' import { emptyPaginationObject } from '~utils/emptyStates' +import { convertAdvancedFilters } from '~utils/convertAdvancedFilters' import ErrorSection from '~components/ErrorSection' import GridRep from '~components/GridRep' @@ -157,7 +158,7 @@ const TeamsRoute: React.FC = ({ raid: raid === 'all' ? undefined : raid, recency: recency !== -1 ? recency : undefined, page: currentPage, - ...advancedFilters, + ...convertAdvancedFilters(advancedFilters), } Object.keys(filters).forEach( @@ -393,7 +394,7 @@ export const getServerSideProps = async ({ req, res, locale, query }: { req: Nex // Create filter object const filters: FilterObject = extractFilters(query, raidGroups) const params = { - params: { ...filters, ...advancedFilters }, + params: { ...filters, ...convertAdvancedFilters(advancedFilters) }, } // Set up empty variables diff --git a/types/FilterSet.d.ts b/types/FilterSet.d.ts index a677d7f2..98bd1b02 100644 --- a/types/FilterSet.d.ts +++ b/types/FilterSet.d.ts @@ -13,6 +13,6 @@ interface FilterSet { name_quality?: boolean user_quality?: boolean original?: boolean - includes?: string - excludes?: string + includes?: MentionItem[] + excludes?: MentionItem[] }