Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import type { MyEventsGuestItemDto, MyEventsHostItemDto, MyEventsListControllerList200, PaginationMetaDto } from '@/api/generated/models'
|
|
import { getMyEvents } from '@/api/generated/my-events/my-events'
|
|
import { unwrapApiPayload } from '@/helpers/listResponse'
|
|
|
|
export const MY_EVENTS_PAGE_SIZE = 20
|
|
|
|
export type MyEventsRole = 'guest' | 'host'
|
|
export type MyEventsGuestStatus = 'upcoming' | 'held' | 'cancelled'
|
|
export type MyEventsHostStatus = 'pending_review' | 'published' | 'rejected'
|
|
export type MyEventsStatus = MyEventsGuestStatus | MyEventsHostStatus
|
|
export type MyEventsGuestItem = MyEventsGuestItemDto
|
|
export type MyEventsHostItem = MyEventsHostItemDto
|
|
|
|
export interface MyEventsPage<TItem> {
|
|
role: MyEventsRole
|
|
status: MyEventsStatus
|
|
canHost: boolean
|
|
availableRoles: MyEventsRole[]
|
|
items: TItem[]
|
|
response: PaginationMetaDto
|
|
}
|
|
|
|
const myEventsApi = getMyEvents()
|
|
|
|
/** Fetches one server-filtered lifecycle page for the My Events screen. */
|
|
export const fetchMyEventsPage = async <TItem extends MyEventsGuestItem | MyEventsHostItem>({
|
|
role,
|
|
status,
|
|
page,
|
|
pageSize = MY_EVENTS_PAGE_SIZE,
|
|
signal,
|
|
}: {
|
|
role: MyEventsRole
|
|
status: MyEventsStatus
|
|
page: number
|
|
pageSize?: number
|
|
signal?: AbortSignal
|
|
}): Promise<MyEventsPage<TItem>> => {
|
|
const response = await myEventsApi.myEventsListControllerList({ role, status, page, pageSize }, { signal })
|
|
const payload = unwrapApiPayload<MyEventsListControllerList200>(response.data)
|
|
|
|
return payload as MyEventsPage<TItem>
|
|
}
|