/* * Copyright (c) 2023-2024 AccelByte Inc. All Rights Reserved * This is licensed software from AccelByte Inc, for limitations * and restrictions contact your company contract manager. */ import { SupportCTA } from '@accelbyte/widgets-v2/packages/od-support/components/SupportCTA/SupportCTA' import { ArticleDetailPage } from '@accelbyte/widgets-v2/packages/od-support/pages/Article/ArticleDetailPage' import { ArticlesPage } from '@accelbyte/widgets-v2/packages/od-support/pages/Article/ArticlesPage' import { SupportPage } from '@accelbyte/widgets-v2/packages/od-support/pages/SupportPage/SupportPage' import { supportPublicArticleBySlugFetcher, supportPublicArticlesFetcher, supportPublicTopicBySlugFetcher, supportPublicTopicsFetcher } from '@accelbyte/widgets-v2/widgets/support' import { AppWrapper } from '../AppWrapper' import { sdk } from '../appConfig' import React from 'react' import { Outlet, RouteObject, json, useLoaderData } from 'react-router' const INITIAL_SUPPORT_OFFSET = '0' const INITIAL_SUPPORT_LIMIT = '20' export const SupportRoute: RouteObject = { path: '/support', Component: () => { return ( ) }, children: [ { path: '/support', loader: async () => { const initialData = await supportPublicTopicsFetcher({ sdk, queryParams: { status: 'VISIBLE', limit: INITIAL_SUPPORT_LIMIT, offset: INITIAL_SUPPORT_OFFSET } }) return json(initialData) }, Component: () => { const initialData = useLoaderData() as Awaited> return null} /> } }, { path: '/support/topic/:slug', loader: async ({ params }) => { const slug = params.slug ?? '' const topic = await supportPublicTopicBySlugFetcher({ sdk, slug }) const [topics, articles] = await Promise.all([ await supportPublicTopicsFetcher({ sdk, queryParams: { status: 'VISIBLE' } }), await supportPublicArticlesFetcher({ sdk, queryParams: { topicId: topic.id } }) ]) return json({ topic, topics, articles }) }, Component: () => { const { articles, topic, topics } = useLoaderData() as any return ( null} onLoadmoreTopic={() => null} /> ) } }, { path: '/support/article/:slug', loader: async ({ params }) => { const slug = params.slug ?? '' const [article, topics] = await Promise.all([ await supportPublicArticleBySlugFetcher({ sdk, queryParams: { slug } }), await supportPublicTopicsFetcher({ sdk, queryParams: { status: 'VISIBLE' } }) ]) return json({ article, topics }) }, Component: () => { const { article, topics } = useLoaderData() as any return null} /> } } ] }