Compare commits

...

2 Commits

Author SHA1 Message Date
grinikita
0fe463e33a Базовые сетевые запросы 2024-12-07 13:43:07 +03:00
grinikita
34e30fbaba Добавлен логотип 2024-12-07 12:30:07 +03:00
9 changed files with 96 additions and 4 deletions

5
@types/assets.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
declare module '*.png' {
const imagePath: string;
export default imagePath;
}

View File

@ -1,8 +1,45 @@
import React from 'react';
import React, { useEffect, useState } from 'react';
import Heading from '../../components/heading';
const ListPage = (): React.ReactElement => {
return <Heading>List Page New</Heading>;
const [error, setError] = useState<string>(null);
const [data, setData] = useState<Array<{ id: number; title: string; description: string }>>();
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
const handle = async () => {
setIsLoading(true);
try {
const res = await fetch('/api/list');
const data = await res.json();
if (res.ok) {
setData(data);
} else {
setError(data.message);
}
} catch (e) {
setError(e.message);
} finally {
setIsLoading(false);
}
};
handle();
}, []);
return (
<>
<Heading>List Page New</Heading>
{isLoading && <div>Loading...</div>}
{error && <div>Произошла ошибка</div>}
{data?.map((item) => {
return (
<div key={item.id}>
{item.id}: {item.title} - {item.description}
</div>
);
})}
</>
);
};
export default ListPage;

View File

@ -1,6 +1,7 @@
import React from 'react';
import { getNavigationValue } from '@brojs/cli';
import { HeaderContainer, NavContainer, NavItem, NavLink } from './index.style';
import Logo from './logo/logo';
const navigations: Array<{ name: string; href: string }> = [
{
@ -16,6 +17,7 @@ const navigations: Array<{ name: string; href: string }> = [
const Header = (): React.ReactElement => {
return (
<HeaderContainer>
<Logo />
<NavContainer>
{navigations.map((item) => {
return (

View File

@ -1,7 +1,10 @@
import styled from '@emotion/styled';
import { NavLink as NavLinkBase } from 'react-router-dom';
export const HeaderContainer = styled('header')``;
export const HeaderContainer = styled('header')`
display: flex;
align-items: center;
`;
export const NavContainer = styled.nav`
display: flex;

View File

@ -0,0 +1,17 @@
import React from 'react';
import styled from '@emotion/styled';
import logoPng from './logo2.png';
const LogoStyled = styled.img`
width: 24px;
height: 24px;
padding: 8px;
`;
// ${__webpack_public_path__}/remote-assets/logo.png
const Logo = () => {
return <LogoStyled src={logoPng} alt={'logo'} />;
};
export default Logo;

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -1,3 +1,12 @@
const router = require('express').Router();
const listRouter = require('./list');
module.exports = router;
const delay =
(ms = 1000) =>
(req, res, next) => {
setTimeout(next, ms);
};
router.use(delay());
router.use('/list', listRouter);

View File

@ -0,0 +1,7 @@
[
{ "id": 1, "title": "title", "description": "description" },
{ "id": 2, "title": "title", "description": "description" },
{ "id": 3, "title": "title", "description": "description" },
{ "id": 4, "title": "title", "description": "description" },
{ "id": 5, "title": "title", "description": "description" }
]

12
stubs/api/list/index.js Normal file
View File

@ -0,0 +1,12 @@
const router = require('express').Router();
module.exports = router;
const data = require('./data/list.json');
router.get('/', (req, res) => {
res.send(data);
// res.status(500).send({
// message: 'Internal server error'
// });
});