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
This commit is contained in:
Justin Edmund 2023-08-21 19:57:41 -07:00
parent 35ee1aee5c
commit 8adfa64e7a
4 changed files with 17 additions and 12 deletions

View file

@ -54,15 +54,13 @@ const MentionTypeahead = ({
? (getCookie('NEXT_LOCALE') as string) ? (getCookie('NEXT_LOCALE') as string)
: 'en' : 'en'
console.log(inclusions)
const [isLoading, setIsLoading] = useState(false) const [isLoading, setIsLoading] = useState(false)
const [options, setOptions] = useState<Option[]>([]) const [options, setOptions] = useState<Option[]>([])
async function handleSearch(query: string) { async function handleSearch(query: string) {
setIsLoading(true) setIsLoading(true)
const exclude = [...inclusions, ...exclusions] const exclude = transformIntoString([...inclusions, ...exclusions])
const response = await api.searchAll(query, exclude, locale) const response = await api.searchAll(query, exclude, locale)
const results = response.data.results const results = response.data.results
@ -71,7 +69,7 @@ const MentionTypeahead = ({
setOptions(mapResults(results)) setOptions(mapResults(results))
} }
function transform(object: RawSearchResponse) { function transformIntoMentionItem(object: RawSearchResponse) {
const result: MentionItem = { const result: MentionItem = {
name: { name: {
en: object.name_en, en: object.name_en,
@ -84,10 +82,14 @@ const MentionTypeahead = ({
return result return result
} }
function transformIntoString(list: MentionItem[]) {
return list.map((item) => item.granblue_id)
}
function mapResults(results: RawSearchResponse[]) { function mapResults(results: RawSearchResponse[]) {
return results return results
.map((rawObject: RawSearchResponse) => { .map((rawObject: RawSearchResponse) => {
const object = transform(rawObject) const object = transformIntoMentionItem(rawObject)
return { return {
granblue_id: object.granblue_id, granblue_id: object.granblue_id,
element: object.element, element: object.element,

View file

@ -95,6 +95,8 @@ const FilterModal = (props: Props) => {
useEffect(() => { useEffect(() => {
setFilterSet(props.filterSet) setFilterSet(props.filterSet)
setInclusions(props.filterSet.includes || [])
setExclusions(props.filterSet.excludes || [])
}, [props.filterSet]) }, [props.filterSet])
useEffect(() => { useEffect(() => {
@ -135,13 +137,13 @@ const FilterModal = (props: Props) => {
if (maxButtonsCount) filters.button_count = maxButtonsCount if (maxButtonsCount) filters.button_count = maxButtonsCount
if (maxTurnsCount) filters.turn_count = maxTurnsCount if (maxTurnsCount) filters.turn_count = maxTurnsCount
if (inclusions.length > 0) filters.includes = inclusions
if (exclusions.length > 0) filters.excludes = exclusions
if (props.persistFilters) { if (props.persistFilters) {
setCookie('filters', filters, { path: '/' }) setCookie('filters', filters, { path: '/' })
} }
if (inclusions.length > 0) filters.includes = inclusions
if (exclusions.length > 0) filters.excludes = exclusions
props.sendAdvancedFilters(filters) props.sendAdvancedFilters(filters)
openChange() openChange()
} }

View file

@ -16,6 +16,7 @@ import { appState } from '~utils/appState'
import { defaultFilterset } from '~utils/defaultFilters' import { defaultFilterset } from '~utils/defaultFilters'
import { elements, allElement } from '~data/elements' import { elements, allElement } from '~data/elements'
import { emptyPaginationObject } from '~utils/emptyStates' import { emptyPaginationObject } from '~utils/emptyStates'
import { convertAdvancedFilters } from '~utils/convertAdvancedFilters'
import ErrorSection from '~components/ErrorSection' import ErrorSection from '~components/ErrorSection'
import GridRep from '~components/GridRep' import GridRep from '~components/GridRep'
@ -157,7 +158,7 @@ const TeamsRoute: React.FC<Props> = ({
raid: raid === 'all' ? undefined : raid, raid: raid === 'all' ? undefined : raid,
recency: recency !== -1 ? recency : undefined, recency: recency !== -1 ? recency : undefined,
page: currentPage, page: currentPage,
...advancedFilters, ...convertAdvancedFilters(advancedFilters),
} }
Object.keys(filters).forEach( Object.keys(filters).forEach(
@ -393,7 +394,7 @@ export const getServerSideProps = async ({ req, res, locale, query }: { req: Nex
// Create filter object // Create filter object
const filters: FilterObject = extractFilters(query, raidGroups) const filters: FilterObject = extractFilters(query, raidGroups)
const params = { const params = {
params: { ...filters, ...advancedFilters }, params: { ...filters, ...convertAdvancedFilters(advancedFilters) },
} }
// Set up empty variables // Set up empty variables

View file

@ -13,6 +13,6 @@ interface FilterSet {
name_quality?: boolean name_quality?: boolean
user_quality?: boolean user_quality?: boolean
original?: boolean original?: boolean
includes?: string includes?: MentionItem[]
excludes?: string excludes?: MentionItem[]
} }