router
This commit is contained in:
parent
330e4c0d74
commit
53428c5415
6
@types/assets/index.d.ts
vendored
6
@types/assets/index.d.ts
vendored
@ -2,3 +2,9 @@ declare module '*.png' {
|
||||
const path: string;
|
||||
export default path;
|
||||
}
|
||||
|
||||
declare module '*.svg' {
|
||||
const path: string;
|
||||
export default path;
|
||||
}
|
||||
|
||||
|
2531
package-lock.json
generated
2531
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -14,8 +14,12 @@
|
||||
"dependencies": {
|
||||
"fork-ts-checker-webpack-plugin": "^9.1.0",
|
||||
"handlebars-loader": "^1.7.3",
|
||||
"install": "^0.13.0",
|
||||
"npm": "^11.4.0",
|
||||
"react": "^19.1.0",
|
||||
"react-dom": "^19.1.0",
|
||||
"react-hook-form": "^7.56.4",
|
||||
"react-router": "^7.6.0",
|
||||
"webpack": "^5.98.0",
|
||||
"webpack-cli": "^6.0.1"
|
||||
},
|
||||
|
19
src/app.tsx
Normal file
19
src/app.tsx
Normal file
@ -0,0 +1,19 @@
|
||||
import React from 'react';
|
||||
import { BrowserRouter, Routes, Route } from 'react-router';
|
||||
import HomePage from './pages/home';
|
||||
import CreatePage from './pages/create';
|
||||
import { routes } from './routes';
|
||||
|
||||
|
||||
const App = () => {
|
||||
return (
|
||||
<BrowserRouter>
|
||||
<Routes>
|
||||
<Route path={routes.home} element={<HomePage />} />
|
||||
<Route path={routes.create} element={<CreatePage />} />
|
||||
</Routes>
|
||||
</BrowserRouter>
|
||||
);
|
||||
};
|
||||
|
||||
export default App;
|
@ -1 +0,0 @@
|
||||
console.log('hello world');
|
@ -2,11 +2,13 @@ import { createRoot } from 'react-dom/client';
|
||||
import React from 'react';
|
||||
import './style.css';
|
||||
import HomePage from './pages/home';
|
||||
import App from './app';
|
||||
|
||||
const rootHtmlElement = document.getElementById('root');
|
||||
if (rootHtmlElement) {
|
||||
console.log('Запуск react');
|
||||
const root = createRoot(rootHtmlElement);
|
||||
root.render(<HomePage />);
|
||||
root.render(<App />);
|
||||
}
|
||||
|
||||
// import { initCarusel } from './components/carusel'
|
||||
|
53
src/pages/create/index.tsx
Normal file
53
src/pages/create/index.tsx
Normal file
@ -0,0 +1,53 @@
|
||||
import React, { useState } from 'react';
|
||||
import Header from '../../widgets/header';
|
||||
import { useForm, SubmitHandler } from 'react-hook-form';
|
||||
|
||||
const CreatePage = (): React.ReactElement | string => {
|
||||
const {
|
||||
register,
|
||||
handleSubmit,
|
||||
watch,
|
||||
formState: { errors },
|
||||
} = useForm({
|
||||
mode: 'onBlur',
|
||||
});
|
||||
const onSubmit = (data: unknown) => console.log(data);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Header />
|
||||
<main>
|
||||
<h1>Create</h1>
|
||||
<form
|
||||
style={{ display: 'flex', flexDirection: 'column' }}
|
||||
onSubmit={handleSubmit(onSubmit, (errors) => {
|
||||
console.log('valid form', errors);
|
||||
})}
|
||||
>
|
||||
<label>
|
||||
Name
|
||||
<input
|
||||
type="text"
|
||||
placeholder="DD.MM.YYYY"
|
||||
{...register('name', {
|
||||
required: 'Поле обязательно для заполнения',
|
||||
})}
|
||||
/>
|
||||
{errors.name && <span style={{ color: 'red' }}>{errors.name.message?.toString()}</span>}
|
||||
</label>
|
||||
<label>
|
||||
description
|
||||
<input type="text" name={'description'} />
|
||||
</label>
|
||||
<label>
|
||||
Age
|
||||
<input type="number" name={'age'} />
|
||||
</label>
|
||||
<button>Submit</button>
|
||||
</form>
|
||||
</main>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default CreatePage;
|
@ -24,7 +24,6 @@ const Cubs = () => {
|
||||
useEffect(() => {
|
||||
const interval = setInterval(() => {
|
||||
const newTime = new Date().getTime();
|
||||
console.log(`+${newTime - prevTime}`);
|
||||
prevTime = newTime;
|
||||
setCurIndex((prevIndex) => {
|
||||
return prevIndex === CubItem.FIRST ? CubItem.SECOND : CubItem.FIRST;
|
||||
|
4
src/routes.ts
Normal file
4
src/routes.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export const routes = {
|
||||
home: '/',
|
||||
create: '/creators/:city?',
|
||||
};
|
@ -1,24 +1,28 @@
|
||||
import React from 'react';
|
||||
import logoUrl from '../../images/logo.svg';
|
||||
import { generatePath, NavLink } from 'react-router';
|
||||
import { routes } from '../../routes';
|
||||
|
||||
const Header = (): React.ReactElement => {
|
||||
|
||||
return (
|
||||
<header className="header container">
|
||||
<a href="index.html">
|
||||
<img className="logo" src="./images/logo.svg" alt="" />
|
||||
</a>
|
||||
<NavLink to={routes.home} end>
|
||||
<img className="logo" src={logoUrl} alt="" />
|
||||
</NavLink>
|
||||
<nav>
|
||||
<ul className="nav-list">
|
||||
<li>
|
||||
<a href="./discover.html">Discover</a>
|
||||
<NavLink to="/discover">Discover</NavLink>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./creators.html">creators</a>
|
||||
<NavLink to={generatePath(routes.create, { city: '12345' })}>creators</NavLink>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./creators.html">Sell</a>
|
||||
<NavLink to="/creators">creators</NavLink>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./creators.html">stats</a>
|
||||
<NavLink to="/creators">creators</NavLink>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
@ -8,9 +8,11 @@ module.exports = {
|
||||
output: {
|
||||
filename: 'index.js',
|
||||
path: path.resolve(__dirname, 'dist'),
|
||||
publicPath: '/',
|
||||
clean: true,
|
||||
},
|
||||
devServer: {
|
||||
historyApiFallback: true,
|
||||
hot: true,
|
||||
},
|
||||
resolve: {
|
||||
@ -19,7 +21,7 @@ module.exports = {
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.png/,
|
||||
test: /\.png|.svg/,
|
||||
type: 'asset/resource',
|
||||
},
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user