2023-09-29 12:48:58 +00:00
|
|
|
import { hideModal, MODALS, showModal } from '../stores/ui'
|
2023-03-04 17:26:28 +00:00
|
|
|
import { Component, createEffect, createMemo } from 'solid-js'
|
2023-02-17 09:21:02 +00:00
|
|
|
import { ROUTES, useRouter } from '../stores/router'
|
|
|
|
import { Dynamic } from 'solid-js/web'
|
|
|
|
|
|
|
|
import type { PageProps, RootSearchParams } from '../pages/types'
|
|
|
|
import { HomePage } from '../pages/index.page'
|
|
|
|
import { AllTopicsPage } from '../pages/allTopics.page'
|
|
|
|
import { TopicPage } from '../pages/topic.page'
|
|
|
|
import { AllAuthorsPage } from '../pages/allAuthors.page'
|
|
|
|
import { AuthorPage } from '../pages/author.page'
|
|
|
|
import { FeedPage } from '../pages/feed.page'
|
|
|
|
import { ArticlePage } from '../pages/article.page'
|
|
|
|
import { SearchPage } from '../pages/search.page'
|
|
|
|
import { FourOuFourPage } from '../pages/fourOuFour.page'
|
|
|
|
import { DiscussionRulesPage } from '../pages/about/discussionRules.page'
|
|
|
|
import { DogmaPage } from '../pages/about/dogma.page'
|
|
|
|
import { GuidePage } from '../pages/about/guide.page'
|
|
|
|
import { HelpPage } from '../pages/about/help.page'
|
|
|
|
import { ManifestPage } from '../pages/about/manifest.page'
|
|
|
|
import { PartnersPage } from '../pages/about/partners.page'
|
|
|
|
import { PrinciplesPage } from '../pages/about/principles.page'
|
|
|
|
import { ProjectsPage } from '../pages/about/projects.page'
|
|
|
|
import { TermsOfUsePage } from '../pages/about/termsOfUse.page'
|
|
|
|
import { ThanksPage } from '../pages/about/thanks.page'
|
|
|
|
import { CreatePage } from '../pages/create.page'
|
2023-04-11 13:57:48 +00:00
|
|
|
import { EditPage } from '../pages/edit.page'
|
2023-02-17 09:21:02 +00:00
|
|
|
import { ConnectPage } from '../pages/connect.page'
|
|
|
|
import { InboxPage } from '../pages/inbox.page'
|
2023-10-10 15:38:02 +00:00
|
|
|
import { ExpoPage } from '../pages/expo/expo.page'
|
2023-02-17 09:21:02 +00:00
|
|
|
import { SessionProvider } from '../context/session'
|
|
|
|
import { ProfileSettingsPage } from '../pages/profile/profileSettings.page'
|
|
|
|
import { ProfileSecurityPage } from '../pages/profile/profileSecurity.page'
|
|
|
|
import { ProfileSubscriptionsPage } from '../pages/profile/profileSubscriptions.page'
|
2023-05-01 18:32:32 +00:00
|
|
|
import { DraftsPage } from '../pages/drafts.page'
|
2023-02-17 09:21:02 +00:00
|
|
|
import { SnackbarProvider } from '../context/snackbar'
|
|
|
|
import { LocalizeProvider } from '../context/localize'
|
2023-07-31 21:24:41 +00:00
|
|
|
import { ConfirmProvider } from '../context/confirm'
|
2023-04-26 02:37:29 +00:00
|
|
|
import { EditorProvider } from '../context/editor'
|
2023-10-14 11:39:24 +00:00
|
|
|
import { NotificationsProvider } from '../context/notifications'
|
2023-11-14 10:45:44 +00:00
|
|
|
import { Meta, MetaProvider } from '@solidjs/meta'
|
2023-02-17 09:21:02 +00:00
|
|
|
|
|
|
|
// TODO: lazy load
|
|
|
|
// const SomePage = lazy(() => import('./Pages/SomePage'))
|
|
|
|
|
|
|
|
const pagesMap: Record<keyof typeof ROUTES, Component<PageProps>> = {
|
2023-09-16 06:26:19 +00:00
|
|
|
author: AuthorPage,
|
|
|
|
authorComments: AuthorPage,
|
|
|
|
authorAbout: AuthorPage,
|
2023-02-17 09:21:02 +00:00
|
|
|
inbox: InboxPage,
|
2023-10-10 15:38:02 +00:00
|
|
|
expo: ExpoPage,
|
|
|
|
expoLayout: ExpoPage,
|
2023-02-17 09:21:02 +00:00
|
|
|
connect: ConnectPage,
|
|
|
|
create: CreatePage,
|
2023-04-11 13:57:48 +00:00
|
|
|
edit: EditPage,
|
|
|
|
editSettings: EditPage,
|
2023-05-01 18:32:32 +00:00
|
|
|
drafts: DraftsPage,
|
2023-02-17 09:21:02 +00:00
|
|
|
home: HomePage,
|
|
|
|
topics: AllTopicsPage,
|
|
|
|
topic: TopicPage,
|
|
|
|
authors: AllAuthorsPage,
|
|
|
|
feed: FeedPage,
|
2023-07-07 16:53:01 +00:00
|
|
|
feedMy: FeedPage,
|
|
|
|
feedNotifications: FeedPage,
|
|
|
|
feedBookmarks: FeedPage,
|
|
|
|
feedCollaborations: FeedPage,
|
|
|
|
feedDiscussions: FeedPage,
|
2023-02-17 09:21:02 +00:00
|
|
|
article: ArticlePage,
|
|
|
|
search: SearchPage,
|
|
|
|
discussionRules: DiscussionRulesPage,
|
|
|
|
dogma: DogmaPage,
|
|
|
|
guide: GuidePage,
|
|
|
|
help: HelpPage,
|
|
|
|
manifest: ManifestPage,
|
|
|
|
projects: ProjectsPage,
|
|
|
|
partners: PartnersPage,
|
|
|
|
principles: PrinciplesPage,
|
|
|
|
termsOfUse: TermsOfUsePage,
|
|
|
|
thanks: ThanksPage,
|
|
|
|
profileSettings: ProfileSettingsPage,
|
|
|
|
profileSecurity: ProfileSecurityPage,
|
2023-07-31 20:19:08 +00:00
|
|
|
profileSubscriptions: ProfileSubscriptionsPage,
|
|
|
|
fourOuFour: FourOuFourPage
|
2023-02-17 09:21:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export const App = (props: PageProps) => {
|
|
|
|
const { page, searchParams } = useRouter<RootSearchParams>()
|
2023-03-04 17:26:28 +00:00
|
|
|
|
2023-02-17 09:21:02 +00:00
|
|
|
createEffect(() => {
|
2023-09-29 12:48:58 +00:00
|
|
|
if (!searchParams().modal) {
|
|
|
|
hideModal()
|
|
|
|
}
|
|
|
|
|
2023-02-17 09:21:02 +00:00
|
|
|
const modal = MODALS[searchParams().modal]
|
|
|
|
if (modal) {
|
|
|
|
showModal(modal)
|
|
|
|
}
|
|
|
|
})
|
2023-03-04 17:26:28 +00:00
|
|
|
|
2023-02-17 09:21:02 +00:00
|
|
|
const pageComponent = createMemo(() => {
|
|
|
|
const result = pagesMap[page()?.route || 'home']
|
|
|
|
|
|
|
|
if (!result || page()?.path === '/404') {
|
|
|
|
return FourOuFourPage
|
|
|
|
}
|
|
|
|
|
|
|
|
return result
|
|
|
|
})
|
|
|
|
|
|
|
|
return (
|
2023-11-14 10:45:44 +00:00
|
|
|
<MetaProvider>
|
|
|
|
<Meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
<LocalizeProvider>
|
|
|
|
<SnackbarProvider>
|
|
|
|
<ConfirmProvider>
|
|
|
|
<SessionProvider>
|
|
|
|
<NotificationsProvider>
|
|
|
|
<EditorProvider>
|
|
|
|
<Dynamic component={pageComponent()} {...props} />
|
|
|
|
</EditorProvider>
|
|
|
|
</NotificationsProvider>
|
|
|
|
</SessionProvider>
|
|
|
|
</ConfirmProvider>
|
|
|
|
</SnackbarProvider>
|
|
|
|
</LocalizeProvider>
|
|
|
|
</MetaProvider>
|
2023-02-17 09:21:02 +00:00
|
|
|
)
|
|
|
|
}
|