hensei-web/utils/serverSideUtils.tsx
Justin Edmund 4a38168593
Collection fixes (#416)
This fixes some issues that cropped up in the last PR

---------

Co-authored-by: Justin Edmund <383021+jedmund@users.noreply.github.com>
2024-04-22 23:57:49 -07:00

81 lines
2.2 KiB
TypeScript

import { getCookie } from 'cookies-next'
import { NextApiRequest, NextApiResponse } from 'next'
import api from './api'
import extractFilters from './extractFilters'
import { FilterObject } from '~types'
import { permissiveFilterset } from './defaultFilters'
// Parse advanced filters from cookies
export function parseAdvancedFilters(
req: NextApiRequest,
res: NextApiResponse
) {
const filtersCookie = getCookie('filters', { req, res })
return filtersCookie ? JSON.parse(filtersCookie as string) : undefined
}
// Fetch raid groups and create filter object
export async function fetchRaidGroupsAndFilters(query: {
[index: string]: string
}) {
const raidGroups = await api.raidGroups().then((response) => response.data)
const filters = extractFilters(query, raidGroups)
return { raidGroups, filters }
}
export async function fetchRaidGroups() {
return await api.raidGroups().then((response) => response.data)
}
// Fetch initial set of parties
export async function fetchParties(
filters: FilterObject,
convertedFilters: ConvertedFilters | undefined
) {
const params = { params: { ...filters, ...convertedFilters } }
const response = await api.endpoints.parties.getAll(params)
return {
teams: response.data.results,
pagination: {
count: response.data.meta.count,
totalPages: response.data.meta.total_pages,
perPage: response.data.meta.per_page,
},
}
}
export async function fetchUserProfile(
username: string,
filters: FilterObject
) {
const params = { params: { ...filters, ...permissiveFilterset } }
const response = await api.endpoints.users.getOne({
id: username,
params,
})
return {
user: response.data.profile,
teams: response.data.profile.parties,
pagination: {
count: response.data.meta.count,
totalPages: response.data.meta.total_pages,
perPage: response.data.meta.per_page,
},
}
}
export async function fetchSaved(filters: FilterObject) {
const params = { params: { ...filters, ...permissiveFilterset } }
const response = await api.savedTeams(params)
return {
teams: response.data.results,
pagination: {
count: response.data.meta.count,
totalPages: response.data.meta.total_pages,
perPage: response.data.meta.per_page,
},
}
}