use user data

This commit is contained in:
balistiks 2023-05-17 13:41:10 +10:00
parent 0af62ee05d
commit ae9f466482
1 changed files with 216 additions and 101 deletions

View File

@ -1,11 +1,11 @@
import React, { useEffect, useState }from 'react'; import React, { useEffect, useState } from "react";
import styled, { keyframes } from 'styled-components'; import styled, { keyframes } from "styled-components";
import SVGIcon from "../../components/UI/Icon/SVGIcon"; import SVGIcon from "../../components/UI/Icon/SVGIcon";
import { User } from '../../API/User'; import { User } from "../../API/User";
import { useFetching } from '../../hooks/useFetching'; import { useFetching } from "../../hooks/useFetching";
import { Row, Col, Stack } from 'react-bootstrap'; import { Row, Col, Stack } from "react-bootstrap";
const BackButton = styled.button` const BackButton = styled.button`
border: 1px solid #c2c4c2; border: 1px solid #c2c4c2;
@ -21,7 +21,7 @@ const BackButton = styled.button`
float: left; float: left;
& ${SVGIcon} { & ${SVGIcon} {
transform: translate(-4px, 2px) transform: translate(-4px, 2px);
} }
`; `;
@ -54,7 +54,7 @@ const CabinetSection = styled.div`
width: 1270px; width: 1270px;
height: 650px; height: 650px;
background: #FFFFFF; background: #ffffff;
box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.25); box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.25);
border-radius: 20px; border-radius: 20px;
margin: 27px auto; margin: 27px auto;
@ -87,9 +87,9 @@ const UploadPhoto = styled.button`
font-weight: 700; font-weight: 700;
font-size: 16px; font-size: 16px;
line-height: 19px; line-height: 19px;
color: #FFFFFF; color: #ffffff;
background: #007EFF; background: #007eff;
border-radius: 12px; border-radius: 12px;
`; `;
@ -106,11 +106,11 @@ const MainText = styled.p`
`; `;
const InputBlock = styled.input` const InputBlock = styled.input`
border: 1px solid #CCCCCC; border: 1px solid #cccccc;
border-radius: 12px; border-radius: 12px;
width: ${props => props.width}px; width: ${(props) => props.width}px;
height: ${props => props.height}px; height: ${(props) => props.height}px;
padding-left: 10px; padding-left: 10px;
@ -123,12 +123,12 @@ const InputBlock = styled.input`
font-weight: 500; font-weight: 500;
font-size: 12px; font-size: 12px;
line-height: 24px; line-height: 24px;
color: #CCCCCC; color: #cccccc;
} }
`; `;
const TextAreaBlock = styled.textarea` const TextAreaBlock = styled.textarea`
border: 1px solid #CCCCCC; border: 1px solid #cccccc;
border-radius: 12px; border-radius: 12px;
margin: 16px 0px 0px 55px; margin: 16px 0px 0px 55px;
@ -145,7 +145,7 @@ const TextAreaBlock = styled.textarea`
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
color: #CCCCCC; color: #cccccc;
} }
`; `;
@ -160,9 +160,9 @@ const CharacterTraitBlock = styled.div`
display: inline-block; display: inline-block;
align-items: center; align-items: center;
text-align: center; text-align: center;
color: #FFFFFF; color: #ffffff;
background: ${props => props.background}; background: ${(props) => props.background};
border-radius: 20px; border-radius: 20px;
`; `;
@ -182,8 +182,8 @@ const ButtonCircleChangeTrait = styled.button`
text-align: center; text-align: center;
border-radius: 70%; border-radius: 70%;
color: #FFFFFF; color: #ffffff;
background: #D9D9D9; background: #d9d9d9;
`; `;
const ButtonChangeTrait = styled.button` const ButtonChangeTrait = styled.button`
@ -200,14 +200,14 @@ const ButtonChangeTrait = styled.button`
text-align: left; text-align: left;
color: #007EFF; color: #007eff;
background: none; background: none;
`; `;
const InformationBlock = (props) => { const InformationBlock = (props) => {
return ( return (
<> <>
<Row style={{marginTop: props.marginTop, marginLeft: 19}}> <Row style={{ marginTop: props.marginTop, marginLeft: 19 }}>
<Col xs={5}> <Col xs={5}>
<MainText>{props.title}</MainText> <MainText>{props.title}</MainText>
</Col> </Col>
@ -217,27 +217,33 @@ const InformationBlock = (props) => {
</Row> </Row>
</> </>
); );
} };
const InformationBlockInput = (props) => { const InformationBlockInput = (props) => {
return ( return (
<> <>
<Row style={{marginTop: props.marginTop, marginLeft: 19}}> <Row style={{ marginTop: props.marginTop, marginLeft: 19 }}>
<Col xs={5}> <Col xs={5}>
<MainText>{props.title}</MainText> <MainText>{props.title}</MainText>
</Col> </Col>
<Col xs={5}> <Col xs={5}>
<InputBlock width={props.width} height={props.height} placeholder={props.placeholderInput} value={props.valueInput}/> <InputBlock
width={props.width}
height={props.height}
placeholder={props.placeholderInput}
value={props.valueInput}
/>
</Col> </Col>
</Row> </Row>
</> </>
); );
} };
const TraitsBlock = (props) => { const TraitsBlock = (props) => {
const list = props.list; const list = props.list;
if (list.length == 0) return ( if (list.length == 0)
return (
<> <>
<h1>Вы ничего не указали</h1> <h1>Вы ничего не указали</h1>
</> </>
@ -245,71 +251,97 @@ const TraitsBlock = (props) => {
return ( return (
<> <>
<Row style={{marginLeft: 19}}> <Row style={{ marginLeft: 19 }}>
{ {list.map((el, i) => {
list.map((el, i) => {
return ( return (
<Col style={{paddingLeft: 0, marginRight: 9, marginTop: 10}} key={i}> <Col
style={{
paddingLeft: 0,
marginRight: 9,
marginTop: 10,
}}
key={i}
>
<CharacterTraitBlock background={el.color}> <CharacterTraitBlock background={el.color}>
{el.text} {el.text}
</CharacterTraitBlock> </CharacterTraitBlock>
</Col> </Col>
); );
}) })}
} {props.button ? (
{props.button
?
<> <>
<Col style={{paddingLeft: 0, marginRight: 9, marginTop: 10}}> <Col
<ButtonCircleChangeTrait> style={{
+ paddingLeft: 0,
</ButtonCircleChangeTrait> marginRight: 9,
marginTop: 10,
}}
>
<ButtonCircleChangeTrait>+</ButtonCircleChangeTrait>
</Col> </Col>
</> </>
: ) : (
<> <>
<ButtonChangeTrait>Изменить..</ButtonChangeTrait> <ButtonChangeTrait>Изменить..</ButtonChangeTrait>
</> </>
} )}
</Row> </Row>
</> </>
); );
} };
const PersonalCabinet = function () { const PersonalCabinet = function () {
const user = User.restoreFromLocalStorage();
const [user, setUser] = useState() const userID = user.id;
const userID = 1;
const [fetchUser, isUserLoading, userError] = useFetching(async (userID) => {
const response = await User.getById(userID);
setUser(response)
console.log(user.name)
})
useEffect(() => { useEffect(() => {
fetchUser(userID) fetchUser(userID);
}, []) }, []);
const TraitsListOne = [{text: 'Честность', color: '#3F51B5'}, {text: 'Аккуратность', color: '#03BCD6'}, {text: 'Музыкальность', color: '#E91D65'}, const TraitsListOne = [
{text: 'Общительность', color: '#03A9F4'}, {text: 'Дружелюбность', color: '#8CC34D'}] { text: "Честность", color: "#3F51B5" },
{ text: "Аккуратность", color: "#03BCD6" },
{ text: "Музыкальность", color: "#E91D65" },
{ text: "Общительность", color: "#03A9F4" },
{ text: "Дружелюбность", color: "#8CC34D" },
];
const TraitsListTwo = [{text: 'Честность', color: '#3F51B5'}, {text: 'Аккуратность', color: '#03BCD6'}, {text: 'Музыкальность', color: '#E91D65'}, const TraitsListTwo = [
{text: 'Общительность', color: '#03A9F4'}, {text: 'Дружелюбность', color: '#8CC34D'}, {text: 'Мудрость', color: '#FF5923'}, { text: "Честность", color: "#3F51B5" },
{text: 'Адекватность', color: '#2196F4'}, {text: 'Щедрость', color: '#FFC308'}, {text: 'Вежливость', color: '#9D28B2'}] { text: "Аккуратность", color: "#03BCD6" },
{ text: "Музыкальность", color: "#E91D65" },
{ text: "Общительность", color: "#03A9F4" },
{ text: "Дружелюбность", color: "#8CC34D" },
{ text: "Мудрость", color: "#FF5923" },
{ text: "Адекватность", color: "#2196F4" },
{ text: "Щедрость", color: "#FFC308" },
{ text: "Вежливость", color: "#9D28B2" },
];
const TraitsListThree = [{text: 'Курит', color: '#94740B'}, {text: 'Равнодушие', color: '#D9B8B0'}, {text: 'Эгоист', color: '#6E3F58'}, {text: 'Лень', color: '#9F6844'}, const TraitsListThree = [
{text: 'Лживость', color: '#AD9029'}, {text: 'Диструктивность', color: '#9A150C'}, {text: 'Токсичность', color: '#608426'}] { text: "Курит", color: "#94740B" },
{ text: "Равнодушие", color: "#D9B8B0" },
{ text: "Эгоист", color: "#6E3F58" },
{ text: "Лень", color: "#9F6844" },
{ text: "Лживость", color: "#AD9029" },
{ text: "Диструктивность", color: "#9A150C" },
{ text: "Токсичность", color: "#608426" },
];
return ( return (
<> <>
<Title> <Title>
<BackButton> <BackButton>
<SVGIcon src='/images/icons/left-arrow-light.svg' width={10} height={16}/> <SVGIcon
src="/images/icons/left-arrow-light.svg"
width={10}
height={16}
/>
Вернуться назад Вернуться назад
</BackButton> </BackButton>
<h2>Личный кабинет<span>/ Мои данные</span></h2> <h2>
Личный кабинет<span>/ Мои данные</span>
</h2>
</Title> </Title>
<CabinetSection> <CabinetSection>
<CabinetContainer> <CabinetContainer>
@ -317,38 +349,121 @@ const PersonalCabinet = function () {
<Stack> <Stack>
<WelcomeText>Добрый день, Александр!</WelcomeText> <WelcomeText>Добрый день, Александр!</WelcomeText>
<MainText>Ваш статус - Студент</MainText> <MainText>Ваш статус - Студент</MainText>
<Avatar src='/images/avatar-test.jpg'/> <Avatar src="/images/avatar-test.jpg" />
<UploadPhoto> <UploadPhoto>
<SVGIcon src='/images/icons/camera.svg' width={18} height={16}/> <SVGIcon
src="/images/icons/camera.svg"
width={18}
height={16}
/>
Загрузить фото Загрузить фото
</UploadPhoto> </UploadPhoto>
<TextAreaBlock rows={3} cols={30} placeholder='Опиши себя парой предложений..'/> <TextAreaBlock
<TextAreaBlock style={{marginTop: 9}} rows={3} cols={30} placeholder='Напишите сюда свои хобби..'/> rows={3}
cols={30}
placeholder="Опиши себя парой предложений.."
/>
<TextAreaBlock
style={{ marginTop: 9 }}
rows={3}
cols={30}
placeholder="Напишите сюда свои хобби.."
/>
</Stack> </Stack>
</Col> </Col>
<Col> <Col>
<Stack style={{borderLeft: '1px solid #CCCCCC', height: '100%'}}> <Stack
<InformationBlock marginTop={13} title={'Имя'} text={'Александр'}/> style={{
<InformationBlock marginTop={13} title={'Фамилия'} text={'Манаенков'}/> borderLeft: "1px solid #CCCCCC",
<InformationBlock marginTop={13} title={'Отчество'} text={'Викторович'}/> height: "100%",
<InformationBlock marginTop={13} title={'Дата рождения'} text={'14.09.2004'}/> }}
<InformationBlock marginTop={33} title={'Факультет'} text={'Информационные системы (по отраслям)'}/> >
<InformationBlock marginTop={44} title={'Группа'} text={'СО-ИС-20'}/> <InformationBlock
<InformationBlockInput marginTop={33} title={'Телефон'} width={190} height={32} placeholderInput={'Введите номер телефона'}/> marginTop={13}
<InformationBlockInput marginTop={10} title={'E-mail'} width={190} height={32} placeholderInput={'Введите E-mail'}/> title={"Имя"}
<InformationBlockInput marginTop={10} title={'Telegram'} width={190} height={32} placeholderInput={'Введите Ваш телеграмм'}/> text={"Александр"}
<InformationBlockInput marginTop={10} title={'Discord'} width={190} height={32} placeholderInput={'Введите Ваш дискорд'}/> />
<InformationBlockInput marginTop={55} title={'Город'} width={190} height={32} placeholderInput={'Введите город'}/> <InformationBlock
marginTop={13}
title={"Фамилия"}
text={"Манаенков"}
/>
<InformationBlock
marginTop={13}
title={"Отчество"}
text={"Викторович"}
/>
<InformationBlock
marginTop={13}
title={"Дата рождения"}
text={"14.09.2004"}
/>
<InformationBlock
marginTop={33}
title={"Факультет"}
text={"Информационные системы (по отраслям)"}
/>
<InformationBlock
marginTop={44}
title={"Группа"}
text={"СО-ИС-20"}
/>
<InformationBlockInput
marginTop={33}
title={"Телефон"}
width={190}
height={32}
placeholderInput={"Введите номер телефона"}
/>
<InformationBlockInput
marginTop={10}
title={"E-mail"}
width={190}
height={32}
placeholderInput={"Введите E-mail"}
/>
<InformationBlockInput
marginTop={10}
title={"Telegram"}
width={190}
height={32}
placeholderInput={"Введите Ваш телеграмм"}
/>
<InformationBlockInput
marginTop={10}
title={"Discord"}
width={190}
height={32}
placeholderInput={"Введите Ваш дискорд"}
/>
<InformationBlockInput
marginTop={55}
title={"Город"}
width={190}
height={32}
placeholderInput={"Введите город"}
/>
</Stack> </Stack>
</Col> </Col>
<Col> <Col>
<Stack style={{borderLeft: '1px solid #CCCCCC', height: '100%'}}> <Stack
<MainText style={{marginLeft: 19, marginTop: 13}}>Ваши личностные характеристики</MainText> style={{
<TraitsBlock list={TraitsListOne} button={true}/> borderLeft: "1px solid #CCCCCC",
<MainText style={{marginLeft: 19, marginTop: 25}}>Желаемые черты соседа</MainText> height: "100%",
<TraitsBlock list={TraitsListTwo}/> }}
<MainText style={{marginLeft: 19, marginTop: 19}}>Нежелаемые черты соседа</MainText> >
<TraitsBlock list={TraitsListThree}/> <MainText style={{ marginLeft: 19, marginTop: 13 }}>
Ваши личностные характеристики
</MainText>
<TraitsBlock list={TraitsListOne} button={true} />
<MainText style={{ marginLeft: 19, marginTop: 25 }}>
Желаемые черты соседа
</MainText>
<TraitsBlock list={TraitsListTwo} />
<MainText style={{ marginLeft: 19, marginTop: 19 }}>
Нежелаемые черты соседа
</MainText>
<TraitsBlock list={TraitsListThree} />
</Stack> </Stack>
</Col> </Col>
</CabinetContainer> </CabinetContainer>