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:
parent
35ee1aee5c
commit
8adfa64e7a
4 changed files with 17 additions and 12 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
4
types/FilterSet.d.ts
vendored
4
types/FilterSet.d.ts
vendored
|
|
@ -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[]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue