diff --git a/apps/web/api/ius/query.ts b/apps/web/api/ius/query.ts index b4f7282..c834455 100644 --- a/apps/web/api/ius/query.ts +++ b/apps/web/api/ius/query.ts @@ -1,11 +1,12 @@ import type * as t from './types'; import { urls } from '@/config/urls'; +import type { makeCreateUrl } from '@/utils/url'; import type { WretchError } from 'wretch'; import wretch from 'wretch'; const api = wretch(urls.URL_UIS).errorType('json'); -type CreateUrl = (path: string) => string; +type CreateUrl = ReturnType; export async function getData(createUrl: CreateUrl) { const url = createUrl(''); diff --git a/apps/web/app/ius/[slug]/conditions/page.tsx b/apps/web/app/ius/[slug]/conditions/page.tsx index f5498ff..90edb77 100644 --- a/apps/web/app/ius/[slug]/conditions/page.tsx +++ b/apps/web/app/ius/[slug]/conditions/page.tsx @@ -3,12 +3,13 @@ import * as apiIUS from '@/api/ius/query'; import { Conditions } from '@/components/Conditions'; import type { PageProps } from '@/types/page'; import { withError } from '@/utils/error'; -import { makeCreateUrl } from '@/utils/url'; +import { getPageUrlParams, makeCreateUrl } from '@/utils/url'; import type { Metadata } from 'next'; import { Background } from 'ui'; -export async function generateMetadata({ params, searchParams }: PageProps): Promise { - const createUrl = makeCreateUrl(`/${params.slug}`, searchParams); +export async function generateMetadata(pageProps: PageProps): Promise { + const pageUrlParams = getPageUrlParams(pageProps); + const createUrl = makeCreateUrl(pageUrlParams); const { title } = await apiIUS.getConfig(createUrl); const text = `Условия: ${title} | Эволюция`; @@ -22,10 +23,11 @@ export async function generateMetadata({ params, searchParams }: PageProps): Pro }; } -export default async function Page({ params, searchParams }: PageProps) { +export default async function Page(pageProps: PageProps) { return withError({ render: async () => { - const createUrl = makeCreateUrl(`/${params.slug}`, searchParams); + const pageUrlParams = getPageUrlParams(pageProps); + const createUrl = makeCreateUrl(pageUrlParams); const conditions = await apiIUS.getConditions(createUrl); return ( diff --git a/apps/web/app/ius/[slug]/page.tsx b/apps/web/app/ius/[slug]/page.tsx index f17cbd9..ef7b992 100644 --- a/apps/web/app/ius/[slug]/page.tsx +++ b/apps/web/app/ius/[slug]/page.tsx @@ -2,12 +2,13 @@ import * as apiIUS from '@/api/ius/query'; import * as Form from '@/components/Form'; import type { PageProps } from '@/types/page'; import { withError } from '@/utils/error'; -import { makeCreateUrl } from '@/utils/url'; +import { getPageUrlParams, makeCreateUrl } from '@/utils/url'; import type { Metadata } from 'next'; import { Background, Divider } from 'ui'; -export async function generateMetadata({ params, searchParams }: PageProps): Promise { - const createUrl = makeCreateUrl(`/${params.slug}`, searchParams); +export async function generateMetadata(pageProps: PageProps): Promise { + const pageUrlParams = getPageUrlParams(pageProps); + const createUrl = makeCreateUrl(pageUrlParams); const { title } = await apiIUS.getConfig(createUrl); const text = `${title} | Эволюция`; @@ -21,21 +22,22 @@ export async function generateMetadata({ params, searchParams }: PageProps): Pro }; } -export default async function Page({ params, searchParams }: PageProps) { +export default async function Page(pageProps: PageProps) { return withError({ render: async () => { - const createUrl = makeCreateUrl(`/${params.slug}`, searchParams); + const pageUrlParams = getPageUrlParams(pageProps); + const createUrl = makeCreateUrl(pageUrlParams); return Promise.all([ apiIUS.getData(createUrl), apiIUS.getMetaData(createUrl), apiIUS.getConfig(createUrl), ]).then(([data, metaData, { title }]) => { - const props = { data, metaData, title }; + const props = { data, metaData }; return ( - + diff --git a/apps/web/components/Form/Header.tsx b/apps/web/components/Form/Header.tsx index 107f3a7..a3ff3a5 100644 --- a/apps/web/components/Form/Header.tsx +++ b/apps/web/components/Form/Header.tsx @@ -3,7 +3,7 @@ import type { Props } from './types'; import Link from 'next/link'; import { Heading } from 'ui'; -export function Header({ title, url }: Props & { readonly url: string }) { +export function Header({ title, url }: Props & { readonly title: string; readonly url: string }) { return (
{title} diff --git a/apps/web/components/Form/types.ts b/apps/web/components/Form/types.ts index 9f13076..9587826 100644 --- a/apps/web/components/Form/types.ts +++ b/apps/web/components/Form/types.ts @@ -3,5 +3,4 @@ import type { ResponseGetData, ResponseMetaData } from '@/api/ius/types'; export type Props = { readonly data: ResponseGetData; readonly metaData: ResponseMetaData; - readonly title: string; }; diff --git a/apps/web/utils/url.ts b/apps/web/utils/url.ts index cf7aaa6..0a08669 100644 --- a/apps/web/utils/url.ts +++ b/apps/web/utils/url.ts @@ -1,8 +1,12 @@ import type { PageProps } from '@/types/page'; -export function makeCreateUrl(path: string, searchParams?: PageProps['searchParams']) { +export function getPageUrlParams({ params, searchParams }: PageProps) { + return { path: `/${params.slug}`, urlSearchParams: new URLSearchParams(searchParams) }; +} + +export function makeCreateUrl({ path, urlSearchParams }: ReturnType) { return function (route: string) { - if (searchParams) return `${path}${route}?${new URLSearchParams(searchParams)}`; + if (urlSearchParams) return `${path}${route}?${urlSearchParams}`; return path + route; };