Skip to content

Commit c7a86aa

Browse files
authored
Merge pull request #9 from hellsgor/feat/document-title
Feat / Add document title updating
2 parents 7506011 + 827cf0d commit c7a86aa

File tree

12 files changed

+46
-6
lines changed

12 files changed

+46
-6
lines changed

src/pages/genre/ui/genre-page/GenrePage.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,32 @@ import s from './GenrePage.module.scss';
33
import { useParams } from 'react-router';
44

55
import { getRuGenreName } from '@/entities/genre';
6-
import { capitalizeFirstLetter, useMediaQuery } from '@/shared/lib';
6+
import {
7+
capitalizeFirstLetter,
8+
useDocumentTitle,
9+
useMediaQuery,
10+
} from '@/shared/lib';
711
import { BackTitleBar, Section } from '@/shared/ui';
812
import { GenreMoviesList } from '../genre-movies-list/GenreMoviesList';
913

1014
export function GenrePage() {
1115
const mq = useMediaQuery('md');
1216
const { genre } = useParams();
1317

18+
const normalizedGenre = genre
19+
? capitalizeFirstLetter(getRuGenreName(genre))
20+
: '';
21+
22+
useDocumentTitle(normalizedGenre);
23+
1424
return (
1525
<Section
1626
indents={[mq ? '24px' : '32px', mq ? '40px' : '160px']}
1727
className={s.genrePage}
1828
>
1929
<div className={s.genrePage__wrapper}>
2030
<BackTitleBar>
21-
<h1>{genre ? capitalizeFirstLetter(getRuGenreName(genre)) : ''}</h1>
31+
<h1>{normalizedGenre}</h1>
2232
</BackTitleBar>
2333
<GenreMoviesList />
2434
</div>

src/pages/genres/ui/genres-page/GenresPage.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import s from './GenresPage.module.scss';
22

33
import { Loader, PageError, Section } from '@/shared/ui';
44
import { GenreCard, useGetGenresQuery } from '@/entities/genre';
5-
import { useMediaQuery } from '@/shared/lib';
5+
import { useDocumentTitle, useMediaQuery } from '@/shared/lib';
66

77
export function GenresPage() {
88
const mq = useMediaQuery('md');
99
const { data, isLoading, isError } = useGetGenresQuery();
1010

11+
useDocumentTitle('Жанры');
12+
1113
return (
1214
<Section
1315
indents={[mq ? '24px' : '32px', mq ? '40px' : '160px']}

src/pages/main/ui/main-page/MainPage.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import { Top10Movies } from '@/widgets/top10-movies';
22
import { RandomMovie } from '../random-movie/RandomMovie';
3+
import { useDocumentTitle } from '@/shared/lib';
34

45
export function MainPage() {
6+
useDocumentTitle();
7+
58
return (
69
<>
710
<RandomMovie />

src/pages/movie/ui/movie-page/MoviePage.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { movieApi, MovieInfo, useGetByIdQuery } from '@/entities/movie';
2-
import { useAppSelector, useMediaQuery } from '@/shared/lib';
2+
import { useAppSelector, useDocumentTitle, useMediaQuery } from '@/shared/lib';
33
import { Loader, PageError, Section } from '@/shared/ui';
44
import { useMovieSlug } from '../../lib/hooks/useMovieSlug';
55
import { MovieDetail } from '@/widgets/movie-detail';
@@ -26,6 +26,8 @@ export function MoviePage() {
2626
const finalIsFetching = !randomMovieFromCache && isFetching;
2727
const finalIsError = !randomMovieFromCache && isError;
2828

29+
useDocumentTitle(finalMovie?.title);
30+
2931
return (
3032
<Section
3133
indents={['0', !mq ? '120px' : '32px']}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import { useDocumentTitle } from '@/shared/lib';
12
import { PageError } from '@/shared/ui';
23

34
export function NoMatchPage() {
5+
useDocumentTitle('Oooops!');
46
return <PageError errorCode="e001" backdropText="404" />;
57
}

src/shared/config/constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
export const MIN_INPUT_LENGTH = 2;
22
export const MIN_PASSWORD_LENGTH = 8;
3+
4+
export const APP_TITLE = 'Маруся App';

src/shared/config/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ export { ENV_CONFIG } from './env';
22
export { ERRORS } from './errors';
33
export { BREAKPOINTS } from './breakpoints';
44
export { REGEXP } from './regexp';
5-
export { MIN_INPUT_LENGTH, MIN_PASSWORD_LENGTH } from './constants';
5+
export { MIN_INPUT_LENGTH, MIN_PASSWORD_LENGTH, APP_TITLE } from './constants';
66
export { SWIPER_NORMALIZE } from './swiper-normalize';

src/shared/lib/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export { useMergeRefs } from './useMergeRefs';
88
export { useClickOutside } from './useClickOutside';
99
export { useIsScrolled } from './useIsScrolled';
1010
export { useBodyScrollLock } from './useBodyScrollLock';
11+
export { useDocumentTitle } from './useDocumentTitle.ts';
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { APP_TITLE } from '@/shared/config';
2+
import { useEffect } from 'react';
3+
4+
export function useDocumentTitle(title?: string) {
5+
useEffect(() => {
6+
document.title = title ? `${title} | ${APP_TITLE}` : APP_TITLE;
7+
8+
return () => {
9+
document.title = APP_TITLE;
10+
};
11+
}, [title]);
12+
}

src/shared/lib/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export {
88
useClickOutside,
99
useIsScrolled,
1010
useBodyScrollLock,
11+
useDocumentTitle,
1112
} from './hooks';
1213
export {
1314
capitalizeFirstLetter,

0 commit comments

Comments
 (0)