diff --git a/src/pages/about/termsOfUse.page.tsx b/src/pages/about/termsOfUse.page.tsx
index 22dda7f5..35af29cf 100644
--- a/src/pages/about/termsOfUse.page.tsx
+++ b/src/pages/about/termsOfUse.page.tsx
@@ -2,7 +2,7 @@ import { createSignal, Show } from 'solid-js'
import { PageLayout } from '../../components/_shared/PageLayout'
import { Icon } from '../../components/_shared/Icon'
import { useLocalize } from '../../context/localize'
-import { Meta, Title } from '@solidjs/meta'
+import { Meta } from '@solidjs/meta'
export const TermsOfUsePage = () => {
const { t } = useLocalize()
@@ -12,10 +12,9 @@ export const TermsOfUsePage = () => {
const title = t('Terms of use')
return (
-
- {title}
+
-
+
diff --git a/src/pages/about/thanks.page.tsx b/src/pages/about/thanks.page.tsx
index 0569fbe5..9be94907 100644
--- a/src/pages/about/thanks.page.tsx
+++ b/src/pages/about/thanks.page.tsx
@@ -1,4 +1,4 @@
-import { Meta, Title } from '@solidjs/meta'
+import { Meta } from '@solidjs/meta'
import { PageLayout } from '../../components/_shared/PageLayout'
import { useLocalize } from '../../context/localize'
@@ -6,10 +6,9 @@ export const ThanksPage = () => {
const { t } = useLocalize()
const title = t('Thank you')
return (
-
- {title}
+
-
+
diff --git a/src/pages/allAuthors.page.server.ts b/src/pages/allAuthors.page.server.ts
index 66d2c3a6..3973435c 100644
--- a/src/pages/allAuthors.page.server.ts
+++ b/src/pages/allAuthors.page.server.ts
@@ -5,7 +5,7 @@ import type { PageProps } from './types'
export const onBeforeRender = async (_pageContext: PageContext) => {
const allAuthors = await apiClient.getAllAuthors()
- const pageProps: PageProps = { allAuthors }
+ const pageProps: PageProps = { allAuthors, seo: { title: '' } }
return {
pageContext: {
diff --git a/src/pages/allAuthors.page.tsx b/src/pages/allAuthors.page.tsx
index 83825fc6..82c9f4bf 100644
--- a/src/pages/allAuthors.page.tsx
+++ b/src/pages/allAuthors.page.tsx
@@ -4,7 +4,7 @@ import type { PageProps } from './types'
import { createSignal, onMount, Show } from 'solid-js'
import { loadAllAuthors } from '../stores/zine/authors'
import { Loading } from '../components/_shared/Loading'
-import { Title } from '@solidjs/meta'
+
import { useLocalize } from '../context/localize'
export const AllAuthorsPage = (props: PageProps) => {
@@ -22,8 +22,7 @@ export const AllAuthorsPage = (props: PageProps) => {
})
return (
-
- {t('Authors')}
+
}>
diff --git a/src/pages/allTopics.page.server.ts b/src/pages/allTopics.page.server.ts
index 9a7d52e0..9ddb09f3 100644
--- a/src/pages/allTopics.page.server.ts
+++ b/src/pages/allTopics.page.server.ts
@@ -5,7 +5,7 @@ import type { PageProps } from './types'
export const onBeforeRender = async (_pageContext: PageContext) => {
const allTopics = await apiClient.getAllTopics()
- const pageProps: PageProps = { allTopics }
+ const pageProps: PageProps = { allTopics, seo: { title: '' } }
return {
pageContext: {
diff --git a/src/pages/allTopics.page.tsx b/src/pages/allTopics.page.tsx
index 271c950c..3f908645 100644
--- a/src/pages/allTopics.page.tsx
+++ b/src/pages/allTopics.page.tsx
@@ -4,8 +4,11 @@ import type { PageProps } from './types'
import { createSignal, onMount, Show } from 'solid-js'
import { loadAllTopics } from '../stores/zine/topics'
import { Loading } from '../components/_shared/Loading'
+import { useLocalize } from '../context/localize'
export const AllTopicsPage = (props: PageProps) => {
+ const { t } = useLocalize()
+
const [isLoaded, setIsLoaded] = createSignal(Boolean(props.allTopics))
onMount(async () => {
@@ -18,7 +21,7 @@ export const AllTopicsPage = (props: PageProps) => {
})
return (
-
+
}>
diff --git a/src/pages/article.page.server.ts b/src/pages/article.page.server.ts
index 2889c1ee..d95451e3 100644
--- a/src/pages/article.page.server.ts
+++ b/src/pages/article.page.server.ts
@@ -11,7 +11,7 @@ export const onBeforeRender = async (pageContext: PageContext) => {
throw render(404, '/404')
}
- const pageProps: PageProps = { article }
+ const pageProps: PageProps = { article, seo: { title: article.title } }
return {
pageContext: {
diff --git a/src/pages/article.page.tsx b/src/pages/article.page.tsx
index f96cc748..775836d0 100644
--- a/src/pages/article.page.tsx
+++ b/src/pages/article.page.tsx
@@ -23,9 +23,7 @@ export const ArticlePage = (props: PageProps) => {
const article = createMemo(() => articleEntities()[slug()])
onMount(async () => {
- const articleValue = articleEntities()[slug()]
-
- if (!articleValue || !articleValue.body) {
+ if (!article() || !article().body) {
const loadShoutPromise = loadShout(slug())
setPageLoadManagerPromise(loadShoutPromise)
await loadShoutPromise
@@ -48,6 +46,7 @@ export const ArticlePage = (props: PageProps) => {
return (
{
})
const author = await apiClient.getAuthor({ slug })
- const pageProps: PageProps = { author, authorShouts }
+ const pageProps: PageProps = { author, authorShouts, seo: { title: author.name } }
return {
pageContext: {
diff --git a/src/pages/author.page.tsx b/src/pages/author.page.tsx
index 778396d5..0930922e 100644
--- a/src/pages/author.page.tsx
+++ b/src/pages/author.page.tsx
@@ -54,7 +54,7 @@ export const AuthorPage = (props: PageProps) => {
const usePrerenderedData = props.author?.slug === slug()
return (
-
+
}>
{
setState('loading')
// eslint-disable-next-line unicorn/prefer-spread
- const postData = Array.from(formRef.current.elements).reduce((acc, element) => {
- const formField = element as unknown as { name: string; value: string }
- if (formField.name) {
- acc[formField.name] = formField.value
- }
+ const postData = Array.from(formRef.current.elements).reduce(
+ (acc, element) => {
+ const formField = element as unknown as { name: string; value: string }
+ if (formField.name) {
+ acc[formField.name] = formField.value
+ }
- return acc
- }, {} as Record)
+ return acc
+ },
+ {} as Record
+ )
const requestOptions = {
method: 'POST',
@@ -41,8 +44,9 @@ export const ConnectPage = () => {
})
}
+ // TODO: l10n
return (
-
+
diff --git a/src/pages/create.page.tsx b/src/pages/create.page.tsx
index e1eb7a95..5593099c 100644
--- a/src/pages/create.page.tsx
+++ b/src/pages/create.page.tsx
@@ -19,8 +19,9 @@ const handleCreate = async (layout: LayoutType) => {
export const CreatePage = () => {
const { t } = useLocalize()
+
return (
-
+
{t('Choose a post type')}
diff --git a/src/pages/drafts.page.tsx b/src/pages/drafts.page.tsx
index 3fa99be4..06073e69 100644
--- a/src/pages/drafts.page.tsx
+++ b/src/pages/drafts.page.tsx
@@ -1,5 +1,5 @@
import { PageLayout } from '../components/_shared/PageLayout'
-import { Title } from '@solidjs/meta'
+
import { useLocalize } from '../context/localize'
import { DraftsView } from '../components/Views/DraftsView'
@@ -7,8 +7,7 @@ export const DraftsPage = () => {
const { t } = useLocalize()
return (
-
- {t('Drafts')}
+
)
diff --git a/src/pages/edit.page.tsx b/src/pages/edit.page.tsx
index d33f2719..b561aa83 100644
--- a/src/pages/edit.page.tsx
+++ b/src/pages/edit.page.tsx
@@ -5,11 +5,14 @@ import { Shout } from '../graphql/types.gen'
import { useRouter } from '../stores/router'
import { apiClient } from '../utils/apiClient'
import { AuthGuard } from '../components/AuthGuard'
+import { LayoutType } from './types'
+import { useLocalize } from '../context/localize'
const Edit = lazy(() => import('../components/Views/Edit'))
export const EditPage = () => {
const { page } = useRouter()
+ const { t } = useLocalize()
const shoutId = createMemo(() => Number((page().params as Record<'shoutId', string>).shoutId))
@@ -20,8 +23,32 @@ export const EditPage = () => {
setShout(loadedShout)
})
+ const title = createMemo(() => {
+ if (!shout()) {
+ return t('Create post')
+ }
+
+ switch (shout().layout as LayoutType) {
+ case 'music': {
+ return t('Publish Album')
+ }
+ case 'image': {
+ return t('Create gallery')
+ }
+ case 'video': {
+ return t('Create video')
+ }
+ case 'literature': {
+ return t('New literary work')
+ }
+ default: {
+ return t('Write an article')
+ }
+ }
+ })
+
return (
-
+
}>
diff --git a/src/pages/expo/expo.page.server.ts b/src/pages/expo/expo.page.server.ts
index 0d360c5a..dd3e6cba 100644
--- a/src/pages/expo/expo.page.server.ts
+++ b/src/pages/expo/expo.page.server.ts
@@ -8,7 +8,7 @@ export const onBeforeRender = async (_pageContext: PageContext) => {
filters: { excludeLayout: 'article' },
limit: PRERENDERED_ARTICLES_COUNT
})
- const pageProps: PageProps = { expoShouts }
+ const pageProps: PageProps = { expoShouts, seo: { title: '' } }
return {
pageContext: {
pageProps
diff --git a/src/pages/expo/expo.page.tsx b/src/pages/expo/expo.page.tsx
index 8e972885..16d5c33b 100644
--- a/src/pages/expo/expo.page.tsx
+++ b/src/pages/expo/expo.page.tsx
@@ -6,12 +6,12 @@ import { useLocalize } from '../../context/localize'
import { createMemo } from 'solid-js'
import { LayoutType } from '../types'
import { useRouter } from '../../stores/router'
-import { Title } from '@solidjs/meta'
export const ExpoPage = (props: PageProps) => {
const { t } = useLocalize()
- const { page: getPage } = useRouter()
- const getLayout = createMemo(() => getPage().params['layout'] as LayoutType)
+ const { page } = useRouter()
+ const getLayout = createMemo(() => page().params['layout'] as LayoutType)
+
const title = createMemo(() => {
switch (getLayout()) {
case 'music': {
@@ -33,8 +33,7 @@ export const ExpoPage = (props: PageProps) => {
})
return (
-
- {title()}
+
diff --git a/src/pages/expo/expoLayout.page.server.ts b/src/pages/expo/expoLayout.page.server.ts
index fda7fab1..febb4d75 100644
--- a/src/pages/expo/expoLayout.page.server.ts
+++ b/src/pages/expo/expoLayout.page.server.ts
@@ -10,7 +10,7 @@ export const onBeforeRender = async (pageContext: PageContext) => {
limit: PRERENDERED_ARTICLES_COUNT
})
- const pageProps: PageProps = { expoShouts }
+ const pageProps: PageProps = { expoShouts, seo: { title: '' } }
return {
pageContext: {
diff --git a/src/pages/feed.page.tsx b/src/pages/feed.page.tsx
index 8acb88d0..c5d4912d 100644
--- a/src/pages/feed.page.tsx
+++ b/src/pages/feed.page.tsx
@@ -6,6 +6,7 @@ import { ReactionsProvider } from '../context/reactions'
import { useRouter } from '../stores/router'
import { AuthGuard } from '../components/AuthGuard'
import { LoadShoutsOptions } from '../graphql/types.gen'
+import { useLocalize } from '../context/localize'
const handleFeedLoadShouts = (options: LoadShoutsOptions) => {
return loadShouts({
@@ -19,6 +20,8 @@ const handleMyFeedLoadShouts = (options: LoadShoutsOptions) => {
}
export const FeedPage = () => {
+ const { t } = useLocalize()
+
onCleanup(() => resetSortedArticles())
const { page } = useRouter()
@@ -34,7 +37,7 @@ export const FeedPage = () => {
)
return (
-
+
}>
diff --git a/src/pages/fourOuFour.page.tsx b/src/pages/fourOuFour.page.tsx
index 83f9ca0a..32e4ee32 100644
--- a/src/pages/fourOuFour.page.tsx
+++ b/src/pages/fourOuFour.page.tsx
@@ -1,9 +1,12 @@
import { FourOuFourView } from '../components/Views/FourOuFour'
import { PageLayout } from '../components/_shared/PageLayout'
+import { useLocalize } from '../context/localize'
export const FourOuFourPage = () => {
+ const { t } = useLocalize()
+
return (
-
+
)
diff --git a/src/pages/inbox.page.tsx b/src/pages/inbox.page.tsx
index a583fb6b..4b701288 100644
--- a/src/pages/inbox.page.tsx
+++ b/src/pages/inbox.page.tsx
@@ -2,10 +2,13 @@ import { PageLayout } from '../components/_shared/PageLayout'
import { InboxView } from '../components/Views/Inbox'
import { InboxProvider } from '../context/inbox'
import { ShowOnlyOnClient } from '../components/_shared/ShowOnlyOnClient'
+import { useLocalize } from '../context/localize'
export const InboxPage = () => {
+ const { t } = useLocalize()
+
return (
-
+
diff --git a/src/pages/index.page.server.ts b/src/pages/index.page.server.ts
index c26f65eb..c6fec57b 100644
--- a/src/pages/index.page.server.ts
+++ b/src/pages/index.page.server.ts
@@ -9,7 +9,7 @@ export const onBeforeRender = async (_pageContext: PageContext) => {
limit: PRERENDERED_ARTICLES_COUNT
})
- const pageProps: PageProps = { homeShouts }
+ const pageProps: PageProps = { homeShouts, seo: { title: '' } }
return {
pageContext: {
diff --git a/src/pages/index.page.tsx b/src/pages/index.page.tsx
index c086cb46..17c5c252 100644
--- a/src/pages/index.page.tsx
+++ b/src/pages/index.page.tsx
@@ -1,5 +1,5 @@
import { createSignal, onCleanup, onMount, Show } from 'solid-js'
-import { Title } from '@solidjs/meta'
+
import { HomeView, PRERENDERED_ARTICLES_COUNT, RANDOM_TOPICS_COUNT } from '../components/Views/Home'
import { PageLayout } from '../components/_shared/PageLayout'
import type { PageProps } from './types'
@@ -29,9 +29,8 @@ export const HomePage = (props: PageProps) => {
onCleanup(() => resetSortedArticles())
return (
-
+
- {t('Discours')}
}>
diff --git a/src/pages/profile/profileSecurity.page.tsx b/src/pages/profile/profileSecurity.page.tsx
index ac821fd8..bd0c7ad2 100644
--- a/src/pages/profile/profileSecurity.page.tsx
+++ b/src/pages/profile/profileSecurity.page.tsx
@@ -4,10 +4,13 @@ import { Icon } from '../../components/_shared/Icon'
import { clsx } from 'clsx'
import { ProfileSettingsNavigation } from '../../components/Nav/ProfileSettingsNavigation'
import { AuthGuard } from '../../components/AuthGuard'
+import { useLocalize } from '../../context/localize'
export const ProfileSecurityPage = () => {
+ const { t } = useLocalize()
+
return (
-
+
diff --git a/src/pages/profile/profileSettings.page.tsx b/src/pages/profile/profileSettings.page.tsx
index 484307d5..91aedec0 100644
--- a/src/pages/profile/profileSettings.page.tsx
+++ b/src/pages/profile/profileSettings.page.tsx
@@ -21,7 +21,6 @@ import { SocialNetworkInput } from '../../components/_shared/SocialNetworkInput'
import { profileSocialLinks } from '../../utils/profileSocialLinks'
import { Icon } from '../../components/_shared/Icon'
import { Popover } from '../../components/_shared/Popover'
-import { Image } from '../../components/_shared/Image'
import { Loading } from '../../components/_shared/Loading'
import { getImageUrl } from '../../utils/getImageUrl'
@@ -123,7 +122,7 @@ export const ProfileSettingsPage = () => {
})
return (
-
+
diff --git a/src/pages/profile/profileSubscriptions.page.tsx b/src/pages/profile/profileSubscriptions.page.tsx
index 28f9f5ba..71af19e1 100644
--- a/src/pages/profile/profileSubscriptions.page.tsx
+++ b/src/pages/profile/profileSubscriptions.page.tsx
@@ -1,10 +1,13 @@
import { PageLayout } from '../../components/_shared/PageLayout'
import { AuthGuard } from '../../components/AuthGuard'
import { ProfileSubscriptions } from '../../components/Views/ProfileSubscriptions'
+import { useLocalize } from '../../context/localize'
export const ProfileSubscriptionsPage = () => {
+ const { t } = useLocalize()
+
return (
-
+
diff --git a/src/pages/search.page.server.ts b/src/pages/search.page.server.ts
index d0f55084..0b899089 100644
--- a/src/pages/search.page.server.ts
+++ b/src/pages/search.page.server.ts
@@ -7,7 +7,7 @@ export const onBeforeRender = async (pageContext: PageContext) => {
const searchResults = await apiClient.getShouts({ filters: { title: q, body: q }, limit: 50 })
- const pageProps: PageProps = { searchResults }
+ const pageProps: PageProps = { searchResults, seo: { title: '' } }
return {
pageContext: {
diff --git a/src/pages/search.page.tsx b/src/pages/search.page.tsx
index a416caf5..66190130 100644
--- a/src/pages/search.page.tsx
+++ b/src/pages/search.page.tsx
@@ -6,21 +6,16 @@ import { useRouter } from '../stores/router'
import { loadShouts, resetSortedArticles } from '../stores/zine/articles'
import { Loading } from '../components/_shared/Loading'
import { ReactionsProvider } from '../context/reactions'
+import { useLocalize } from '../context/localize'
export const SearchPage = (props: PageProps) => {
const [isLoaded, setIsLoaded] = createSignal(Boolean(props.searchResults))
- const q = createMemo(() => {
- const { page: getPage } = useRouter()
+ const { t } = useLocalize()
- const page = getPage()
+ const { page } = useRouter()
- if (page.route !== 'search') {
- throw new Error('ts guard')
- }
-
- return page.params.q
- })
+ const q = createMemo(() => page().params['q'] as string)
onMount(async () => {
if (isLoaded()) {
@@ -34,7 +29,7 @@ export const SearchPage = (props: PageProps) => {
onCleanup(() => resetSortedArticles())
return (
-
+
}>
diff --git a/src/pages/topic.page.server.ts b/src/pages/topic.page.server.ts
index 9be60aa7..8b49c822 100644
--- a/src/pages/topic.page.server.ts
+++ b/src/pages/topic.page.server.ts
@@ -7,7 +7,7 @@ export const onBeforeRender = async (pageContext: PageContext) => {
const topic = await apiClient.getTopic({ slug })
- const pageProps: PageProps = { topic }
+ const pageProps: PageProps = { topic, seo: { title: topic.title } }
return {
pageContext: {
diff --git a/src/pages/topic.page.tsx b/src/pages/topic.page.tsx
index 8988a719..db6888f7 100644
--- a/src/pages/topic.page.tsx
+++ b/src/pages/topic.page.tsx
@@ -51,7 +51,7 @@ export const TopicPage = (props: PageProps) => {
const usePrerenderedData = props.topic?.slug === slug()
return (
-
+
}>
(
-
-
-
- ),
- content
- )
+ hydrate(() => , content)
layoutReady = true
}
}
diff --git a/src/renderer/_default.page.server.tsx b/src/renderer/_default.page.server.tsx
index fccf4d9c..a847feae 100644
--- a/src/renderer/_default.page.server.tsx
+++ b/src/renderer/_default.page.server.tsx
@@ -3,7 +3,6 @@ import { escapeInject, dangerouslySkipEscape } from 'vike/server'
import { App } from '../components/App'
import { initRouter } from '../stores/router'
import type { PageContext } from './types'
-import { MetaProvider } from '@solidjs/meta'
import i18next from 'i18next'
import ru from '../../public/locales/ru/translation.json'
import en from '../../public/locales/en/translation.json'
@@ -12,8 +11,6 @@ import ICU from 'i18next-icu'
export const passToClient = ['pageProps', 'lng', 'documentProps', 'is404']
-const metaTags = []
-
const getLng = (pageContext: PageContext): Language => {
const { urlParsed, cookies } = pageContext
@@ -57,11 +54,7 @@ export const render = async (pageContext: PageContext) => {
pageContext.lng = lng
- const rootContent = renderToString(() => (
-
-
-
- ))
+ const rootContent = renderToString(() => )
return escapeInject`
diff --git a/src/stores/router.ts b/src/stores/router.ts
index 01755a1e..0d98a392 100644
--- a/src/stores/router.ts
+++ b/src/stores/router.ts
@@ -112,14 +112,15 @@ const handleClientRouteLinkClick = async (event) => {
searchParamsStore.open(params)
}
- if (!url.hash) {
- window.scrollTo({
- top: 0,
- left: 0
- })
+ if (url.hash) {
+ scrollToHash(url.hash)
return
}
- scrollToHash(url.hash)
+
+ window.scrollTo({
+ top: 0,
+ left: 0
+ })
}
export const initRouter = (pathname: string, search?: Record) => {