├── src ├── hocs │ ├── Readme.md │ └── with-audio-player │ │ ├── with-audio-player.tsx │ │ └── with-audio-player.test.tsx ├── types │ ├── auth-data.ts │ ├── user-data.ts │ ├── state.ts │ └── question.ts ├── setupTests.ts ├── browser-history.ts ├── pages │ ├── loading-screen │ │ ├── loading-screen.tsx │ │ └── loading-screen.test.tsx │ ├── error-screen │ │ ├── error-screen.tsx │ │ └── error-screen.test.tsx │ ├── not-found-screen │ │ ├── not-found-screen.test.tsx │ │ └── not-found-screen.tsx │ ├── game-over-screen │ │ ├── game-over-screen.tsx │ │ └── game-over-screen.test.tsx │ ├── welcome-screen │ │ └── welcome-screen.tsx │ ├── genre-question-screen │ │ └── genre-question-screen.tsx │ ├── auth-screen │ │ ├── auth-screen.test.tsx │ │ └── auth-screen.tsx │ ├── win-screen │ │ └── win-screen.tsx │ ├── game-screen │ │ └── game-screen.tsx │ └── artist-question-screen │ │ └── artist-question-screen.tsx ├── store │ ├── action.ts │ ├── game-process │ │ ├── selectors.ts │ │ ├── game-process.selectors.test.ts │ │ ├── game-process.ts │ │ └── game-process.test.ts │ ├── user-process │ │ ├── selectors.ts │ │ ├── user-process.ts │ │ ├── user-process.selctors.test.ts │ │ └── user.process.test.ts │ ├── root-reducer.ts │ ├── index.ts │ ├── game-data │ │ ├── selectors.ts │ │ ├── game-data.ts │ │ ├── game-data.selectors.test.ts │ │ └── game-data.test.ts │ ├── middlewares │ │ ├── redirect.ts │ │ └── redirect.test.ts │ ├── api-actions.ts │ └── api-actions.test.ts ├── hooks │ ├── index.ts │ ├── use-element-listener.ts │ ├── use-user-answers.ts │ └── use-user-answer.test.ts ├── components │ ├── logo │ │ ├── logo.tsx │ │ └── logo.test.tsx │ ├── mistakes │ │ ├── mistakes.tsx │ │ └── mistakes.test.tsx │ ├── private-route │ │ ├── private-route.tsx │ │ └── private-route.test.tsx │ ├── history-route │ │ └── history-route.tsx │ ├── genre-question-item │ │ ├── genre-question-item.tsx │ │ └── genre-question-item.test.tsx │ ├── audio-player │ │ ├── audio-player.test.tsx │ │ └── audio-player.tsx │ ├── genre-question-list │ │ └── genre-question-list.tsx │ └── app │ │ ├── app.tsx │ │ └── app.test.tsx ├── services │ ├── token.ts │ └── api.ts ├── const.ts ├── index.tsx ├── game.ts ├── utils │ ├── mocks.ts │ └── mock-component.tsx └── game.test.ts ├── markup ├── favicon.ico ├── img │ ├── pickup.png │ ├── sprite.png │ ├── vinyl.png │ ├── icon-cc.png │ ├── melody-logo.png │ ├── placeholder.jpg │ ├── icon-note-active.png │ ├── icon-note-wrong.png │ ├── icon-note-correct.png │ ├── icon-note-inactive.png │ ├── melody-logo-ginger.png │ ├── player-background.png │ ├── right-arrow.svg │ ├── icon-cross.svg │ └── logo-htmla.svg ├── fonts │ ├── FiraSans-Bold.woff2 │ ├── FiraSans-Medium.woff2 │ ├── FiraSans-Regular.woff2 │ └── FiraSans-Regular-latin.woff2 ├── index.html ├── fail-tries.html ├── welcome.html ├── result-success.html ├── main.html ├── login.html ├── question-artist.html ├── question-genre.html └── css │ ├── main.min.css │ └── main.css ├── public ├── img │ ├── pickup.png │ ├── sprite.png │ ├── vinyl.png │ ├── icon-cc.png │ ├── melody-logo.png │ ├── placeholder.jpg │ ├── icon-note-active.png │ ├── icon-note-wrong.png │ ├── icon-note-correct.png │ ├── icon-note-inactive.png │ ├── melody-logo-ginger.png │ ├── player-background.png │ ├── right-arrow.svg │ ├── icon-cross.svg │ └── logo-htmla.svg ├── fonts │ ├── FiraSans-Bold.woff2 │ ├── FiraSans-Medium.woff2 │ ├── FiraSans-Regular.woff2 │ └── FiraSans-Regular-latin.woff2 └── css │ ├── main.min.css │ └── main.css ├── .gitattributes ├── tsconfig.node.json ├── .gitignore ├── vite.config.ts ├── .editorconfig ├── .github └── workflows │ └── check.yml ├── .eslintrc.cjs ├── tsconfig.json ├── index.html ├── package.json └── Readme.md /src/hocs/Readme.md: -------------------------------------------------------------------------------- 1 | # hocs 2 | 3 | В данной директории можно размещать high order component. 4 | -------------------------------------------------------------------------------- /markup/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/favicon.ico -------------------------------------------------------------------------------- /src/types/auth-data.ts: -------------------------------------------------------------------------------- 1 | export type AuthData = { 2 | login: string; 3 | password: string; 4 | }; 5 | -------------------------------------------------------------------------------- /markup/img/pickup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/pickup.png -------------------------------------------------------------------------------- /markup/img/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/sprite.png -------------------------------------------------------------------------------- /markup/img/vinyl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/vinyl.png -------------------------------------------------------------------------------- /public/img/pickup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/pickup.png -------------------------------------------------------------------------------- /public/img/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/sprite.png -------------------------------------------------------------------------------- /public/img/vinyl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/vinyl.png -------------------------------------------------------------------------------- /markup/img/icon-cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/icon-cc.png -------------------------------------------------------------------------------- /public/img/icon-cc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/icon-cc.png -------------------------------------------------------------------------------- /markup/img/melody-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/melody-logo.png -------------------------------------------------------------------------------- /markup/img/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/placeholder.jpg -------------------------------------------------------------------------------- /public/img/melody-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/melody-logo.png -------------------------------------------------------------------------------- /public/img/placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/placeholder.jpg -------------------------------------------------------------------------------- /src/types/user-data.ts: -------------------------------------------------------------------------------- 1 | export type UserData = { 2 | id: number; 3 | email: string; 4 | token: string; 5 | }; 6 | -------------------------------------------------------------------------------- /markup/img/icon-note-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/icon-note-active.png -------------------------------------------------------------------------------- /markup/img/icon-note-wrong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/icon-note-wrong.png -------------------------------------------------------------------------------- /public/img/icon-note-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/icon-note-active.png -------------------------------------------------------------------------------- /public/img/icon-note-wrong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/icon-note-wrong.png -------------------------------------------------------------------------------- /markup/fonts/FiraSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/fonts/FiraSans-Bold.woff2 -------------------------------------------------------------------------------- /markup/fonts/FiraSans-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/fonts/FiraSans-Medium.woff2 -------------------------------------------------------------------------------- /markup/img/icon-note-correct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/icon-note-correct.png -------------------------------------------------------------------------------- /markup/img/icon-note-inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/icon-note-inactive.png -------------------------------------------------------------------------------- /markup/img/melody-logo-ginger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/melody-logo-ginger.png -------------------------------------------------------------------------------- /markup/img/player-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/img/player-background.png -------------------------------------------------------------------------------- /public/fonts/FiraSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/fonts/FiraSans-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/FiraSans-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/fonts/FiraSans-Medium.woff2 -------------------------------------------------------------------------------- /public/img/icon-note-correct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/icon-note-correct.png -------------------------------------------------------------------------------- /public/img/icon-note-inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/icon-note-inactive.png -------------------------------------------------------------------------------- /public/img/melody-logo-ginger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/melody-logo-ginger.png -------------------------------------------------------------------------------- /public/img/player-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/img/player-background.png -------------------------------------------------------------------------------- /markup/fonts/FiraSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/fonts/FiraSans-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/FiraSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/fonts/FiraSans-Regular.woff2 -------------------------------------------------------------------------------- /markup/fonts/FiraSans-Regular-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/markup/fonts/FiraSans-Regular-latin.woff2 -------------------------------------------------------------------------------- /public/fonts/FiraSans-Regular-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/htmlacademy/guess-melody-demo/HEAD/public/fonts/FiraSans-Regular-latin.woff2 -------------------------------------------------------------------------------- /src/setupTests.ts: -------------------------------------------------------------------------------- 1 | import matchers from '@testing-library/jest-dom/matchers'; 2 | import { expect } from 'vitest'; 3 | 4 | expect.extend(matchers); 5 | -------------------------------------------------------------------------------- /src/browser-history.ts: -------------------------------------------------------------------------------- 1 | import {createBrowserHistory} from 'history'; 2 | 3 | const browserHistory = createBrowserHistory(); 4 | 5 | export default browserHistory; 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text eol=lf 2 | 3 | *.png binary 4 | *.jpg binary 5 | *.jpeg binary 6 | *.webp binary 7 | *.woff binary 8 | *.woff2 binary 9 | *.ttf binary 10 | -------------------------------------------------------------------------------- /src/pages/loading-screen/loading-screen.tsx: -------------------------------------------------------------------------------- 1 | function LoadingScreen(): JSX.Element { 2 | return ( 3 |
Loading ...
4 | ); 5 | } 6 | 7 | export default LoadingScreen; 8 | -------------------------------------------------------------------------------- /src/store/action.ts: -------------------------------------------------------------------------------- 1 | import {createAction} from '@reduxjs/toolkit'; 2 | import {AppRoute} from '../const'; 3 | 4 | export const redirectToRoute = createAction
8 |
9 | );
10 | }
11 |
12 | export default Logo;
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /dist
13 |
14 | # misc
15 | Thumbs.db
16 | .DS_Store
17 | .env
18 | *.log*
19 |
20 | npm-debug.log*
21 | yarn-debug.log*
22 | yarn-error.log*
23 |
24 | # editors
25 | .idea
26 | *.sublime*
27 | .vscode
28 |
--------------------------------------------------------------------------------
/src/pages/loading-screen/loading-screen.test.tsx:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import LoadingScreen from './loading-screen';
3 |
4 | describe('Component: Loading screen', () => {
5 | it('should render correct', () => {
6 | const expectedText = /Loading/i;
7 |
8 | render(Не удалось загрузить вопросы
10 | 19 | > 20 | ); 21 | } 22 | 23 | export default ErrorScreen; 24 | -------------------------------------------------------------------------------- /src/pages/not-found-screen/not-found-screen.test.tsx: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import NotFoundScreen from './not-found-screen'; 3 | import { withHistory } from '../../utils/mock-component'; 4 | 5 | describe('Component: NotFoundScreen', () => { 6 | it('should render correctly', () => { 7 | const expectedHeaderText = '404. Page not found'; 8 | const expectedLinkText = 'Вернуться на главную'; 9 | 10 | render(withHistory(
18 | У вас закончились все попытки. Ничего, повезёт в следующий раз!
21 | 31 |
22 | Правила просты:
36 |Удачи!
41 |
У вас закончились все попытки. Ничего, повезёт в следующий раз!
26 | 27 |
Правила просты:
27 |Удачи!
32 |
Вы ответили правильно на 6 вопросов и совершили 2 ошибки
29 | 30 |
37 | Вы ответили правильно на {correctlyQuestionsCount} вопросов и совершили {mistakes} ошибки
40 | 50 |
Правила просты:
28 |Удачи!
33 |
Хотите узнать свой результат? Представтесь!
26 | 38 | 39 |
33 | Хотите узнать свой результат? Представьтесь!
36 | 66 | 73 |
27 |
28 |
29 |
32 |
33 |
27 |
28 |
29 |
33 |
34 |