Merge branch 'main' of https://git.itguild.info/apuc/guild_front into fixed-pages

This commit is contained in:
MaxOvs19 2023-12-11 14:16:52 +03:00
commit 7e36248e69
66 changed files with 521 additions and 797 deletions

36
package-lock.json generated
View File

@ -1,5 +1,5 @@
{
"name": "outstaffing-react",
"name": "guild_front",
"version": "0.1.0",
"lockfileVersion": 3,
"requires": true,
@ -5198,18 +5198,18 @@
}
},
"node_modules/@testing-library/dom": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.0.0.tgz",
"integrity": "sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==",
"version": "9.3.3",
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz",
"integrity": "sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
"@types/aria-query": "^5.0.1",
"aria-query": "^5.0.0",
"aria-query": "5.1.3",
"chalk": "^4.1.0",
"dom-accessibility-api": "^0.5.9",
"lz-string": "^1.4.4",
"lz-string": "^1.5.0",
"pretty-format": "^27.0.2"
},
"engines": {
@ -5634,9 +5634,9 @@
}
},
"node_modules/@types/aria-query": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz",
"integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
"peer": true
},
"node_modules/@types/babel__core": {
@ -16956,9 +16956,9 @@
}
},
"node_modules/jquery": {
"version": "3.6.3",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz",
"integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==",
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"peer": true
},
"node_modules/js-base64": {
@ -17401,9 +17401,9 @@
}
},
"node_modules/lz-string": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
"integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==",
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"bin": {
"lz-string": "bin/bin.js"
}
@ -23338,9 +23338,9 @@
"dev": true
},
"node_modules/sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
"integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
"version": "1.18.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
"integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
"dev": true,
"optional": true,
"peer": true,

View File

@ -1,7 +1,7 @@
{
"version": "0.1.0",
"private": true,
"homepage": "https://html.craft-group.xyz/",
"homepage": "https://itguild.info/",
"dependencies": {
"@ckeditor/ckeditor5-build-classic": "^38.0.1",
"@ckeditor/ckeditor5-react": "^6.0.0",

View File

@ -8,8 +8,7 @@ import {
import { getNotification } from "@redux/outstaffingSlice";
import AuthForPartners from "./pages/AuthForPartners/AuthForPartners";
import AuthForDevelopers from "./pages/AuthForDevelopers/AuthForDevelopers";
import Auth from "./pages/Auth/Auth";
import { TrackerIntro } from "./pages/TrackerIntro/TrackerIntro"
import { CompanyInfo } from "@pages/CompanyInfo/CompanyInfo";
import { TrackerAuth } from "@pages/TrackerAuth/TrackerAuth";
@ -54,16 +53,13 @@ import "./assets/global.scss";
import "./assets/fonts/stylesheet.css";
import "bootstrap/dist/css/bootstrap.min.css";
const App = () => {
const notification = useSelector(getNotification)
return (
<>
<Router>
<Routes>
<Route exact path="/authdev" element={<AuthForDevelopers />} />
<Route exact path="/auth" element={<AuthForPartners />} />
<Route exact path="/auth" element={<Auth />} />
<Route exact path="/tracker-intro" element={<TrackerIntro />} />
<Route exact path="/tracker-auth" element={<TrackerAuth />} />
<Route exact path="/tracker-registration" element={<TrackerRegistration />} />

View File

@ -0,0 +1,5 @@
<svg width="1030" height="401" viewBox="0 0 1030 401" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="396" cy="359" r="42" fill="#55B030"/>
<path d="M76.154 0.207915V267.878H31.668V0.207915H76.154ZM328.417 0.207915V38.2849H245.854V267.878H200.991V38.2849H118.805V0.207915H328.417Z" fill="#55B030"/>
<path d="M451.354 78.6239H489.808V260.715C489.808 286.351 481.514 306.081 464.926 319.904C448.59 333.979 426.975 341.016 400.082 341.016C368.666 341.016 339.26 331.842 311.864 313.495L332.222 283.335C346.297 291.88 358.235 297.912 368.037 301.431C378.091 304.95 388.647 306.709 399.705 306.709C415.037 306.709 427.101 302.562 435.897 294.268C444.694 285.974 449.092 273.659 449.092 257.322V237.718C435.772 255.563 416.545 264.485 391.411 264.485C367.283 264.485 347.428 255.563 331.845 237.718C316.263 219.622 308.471 196.499 308.471 168.35C308.471 140.452 316.263 117.581 331.845 99.7359C347.428 81.6399 367.283 72.5919 391.411 72.5919C418.304 72.5919 438.285 82.5196 451.354 102.375V78.6239ZM450.223 168.35C450.223 150.505 445.574 136.054 436.274 124.995C426.975 113.685 414.911 108.03 400.082 108.03C385.002 108.03 372.938 113.559 363.89 124.618C354.842 135.677 350.318 150.254 350.318 168.35C350.318 186.697 354.842 201.526 363.89 212.836C372.938 223.895 385.002 229.424 400.082 229.424C414.911 229.424 426.975 223.769 436.274 212.459C445.574 201.149 450.223 186.446 450.223 168.35ZM633.861 78.6239H675.331V267.878H637.254V246.012C625.944 264.359 607.219 273.533 581.081 273.533C558.963 273.533 542.124 268.129 530.563 257.322C519.253 246.515 513.598 231.686 513.598 212.836V78.6239H555.068V201.526C555.068 213.087 558.084 222.01 564.116 228.293C570.148 234.576 578.819 237.718 590.129 237.718C603.449 237.718 614.005 233.822 621.797 226.031C629.839 218.24 633.861 207.307 633.861 193.232V78.6239ZM740.837 78.6239V267.878H699.367V78.6239H740.837ZM740.837 3.22392V45.8249H699.367V3.22392H740.837ZM806.963 0.207915V267.878H765.493V0.207915H806.963ZM965.032 0.207915H1006.5V267.878H968.048V240.357C954.476 262.223 933.615 273.156 905.466 273.156C881.086 273.156 860.98 263.982 845.146 245.635C829.563 227.036 821.772 202.908 821.772 173.251C821.772 143.594 829.689 119.591 845.523 101.244C861.608 82.6453 881.715 73.3459 905.843 73.3459C932.233 73.3459 951.962 82.5196 965.032 100.867V0.207915ZM951.837 220.376C961.639 208.563 966.54 192.855 966.54 173.251C966.54 153.647 961.639 138.064 951.837 126.503C942.286 114.942 929.719 109.161 914.137 109.161C899.057 109.161 886.867 115.067 877.568 126.88C868.52 138.441 863.996 153.898 863.996 173.251C863.996 192.855 868.52 208.563 877.568 220.376C886.616 231.937 898.68 237.718 913.76 237.718C929.594 237.718 942.286 231.937 951.837 220.376Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -13,10 +13,10 @@ export const AuthBlock = ({ title, description, img, resetModal }) => {
<p>{description}</p>
</div>
<form className="auth__form">
<label htmlFor="login">Ваш email *</label>
<input id="login" type="text" name="username" placeholder="Email" />
<label htmlFor="login">Ваш e-mail</label>
<input id="login" type="text" name="username" placeholder="E-mail" />
<label htmlFor="password">Ваш пароль*</label>
<label htmlFor="password">Ваш пароль</label>
<input
id="password"
type="password"
@ -24,13 +24,7 @@ export const AuthBlock = ({ title, description, img, resetModal }) => {
placeholder="Пароль"
/>
<div className="auth__form__buttons">
<button
onClick={(e) => {
e.preventDefault();
}}
>
Войти
</button>
<button onClick={(e) => e.preventDefault()}>Войти</button>
<span onClick={() => resetModal(true)}>Восстановить пароль</span>
</div>
</form>

View File

@ -5,27 +5,33 @@
padding: 50px 0 35px 56px;
margin-top: 40px;
display: flex;
position: relative;
@media (max-width: 1000px) {
flex-direction: column;
padding: 25px;
margin-top: 0;
padding: 0;
@media (max-width: 1400px) {
margin-top: 100px;
}
@media (max-width: 900px) {
flex-direction: column-reverse;
padding: 20px;
margin-top: 100px;
}
}
&__info {
margin-right: 115px;
@media (max-width: 1000px) {
@media (max-width: 900px) {
order: 3;
flex-direction: column;
margin-bottom: 20px;
}
h3 {
font-weight: 500;
font-size: 30px;
line-height: 32px;
margin-bottom: 20px;
text-align: center;
}
p {
@ -35,7 +41,7 @@
font-size: 16px;
line-height: 30px;
@media (max-width: 1000px) {
@media (max-width: 900px) {
max-width: none;
margin: 15px 25px;
}
@ -46,7 +52,7 @@
}
}
@media (max-width: 1000px) {
@media (max-width: 900px) {
margin-right: 0;
display: flex;
align-items: center;
@ -70,7 +76,7 @@
font-size: 15px;
line-height: 18px;
@media (max-width: 1000px) {
@media (max-width: 900px) {
max-width: 550px;
}
}
@ -109,9 +115,8 @@
}
}
@media (max-width: 1000px) {
@media (max-width: 900px) {
order: 2;
margin-bottom: 55px;
}
}
@ -120,7 +125,7 @@
right: 48px;
top: -90px;
@media (max-width: 1000px) {
@media (max-width: 900px) {
order: 1;
position: inherit;
right: inherit;

View File

@ -53,7 +53,7 @@ export const AuthBox = ({ title }) => {
data: formData,
}).then((res) => {
if (!res.access_token) {
setError("Введены некоректные данные для входа");
setError("Введены некорректные данные для входа");
setModalError(true);
dispatch(loading(false));
} else {
@ -79,14 +79,16 @@ export const AuthBox = ({ title }) => {
<h2 className="auth-box__header">
Вход <img src={authHead} alt="authImg" />
</h2>
{title && (
<div className="auth-box__title">
<span>{title}</span>
</div>
)}
<form ref={ref} className="auth-box__form">
<label htmlFor="login">Ваш email *</label>
<label htmlFor="login">Ваш e-mail</label>
<input id="login" type="text" name="username" placeholder="Логин" />
<label htmlFor="password">Ваш пароль*</label>
<label htmlFor="password">Ваш пароль</label>
<div className="inputWrapper">
<input
id="password"
@ -129,7 +131,7 @@ export const AuthBox = ({ title }) => {
<ModalRegistration active={modalReg} setActive={setModalReg} />
</div>
<p className="auth-box__registration">
У вас еще нет аккаунта? &nbsp;
У вас ещё нет аккаунта? &nbsp;
<span
onClick={(e) => {
e.preventDefault();

View File

@ -15,7 +15,8 @@
letter-spacing: normal;
line-height: 77.81px;
text-align: left;
margin-top: 164px;
margin-top: 150px;
margin-bottom: 30px;
span {
color: #52b709;
@ -88,12 +89,12 @@
letter-spacing: normal;
line-height: 19.2px;
text-align: left;
margin-bottom: 25px;
margin-bottom: 10px;
color: #000000;
}
.inputWrapper {
width: 366px;
width: 100%;
position: relative;
.eye {
@ -101,6 +102,10 @@
position: absolute;
right: 20px;
top: 15px;
@media (min-width: 576px) {
left: 330px;
}
}
}
@ -152,7 +157,6 @@
letter-spacing: normal;
line-height: 32px;
text-align: center;
border: 2px solid #6aaf5c;
margin-right: 1.5rem;
transition: 0.3s;
@ -203,9 +207,13 @@
color: #000000;
font-size: 17px;
font-weight: 400;
margin-top: 45px;
margin-top: 35px;
line-height: 32px;
@media (max-width: 700px) {
text-align: center;
}
span {
cursor: pointer;
color: #52b709;

View File

@ -61,9 +61,7 @@ const Calendar = () => {
</div>
<div>
<Link to="/report">
<button className="calendar__btn">
Заполнить отчет за день
</button>
<button className="calendar__btn">Заполнить отчет</button>
</Link>
</div>
</div>

View File

@ -125,6 +125,10 @@
margin: 50px 0 0;
text-transform: capitalize;
@media (max-width: 500px) {
font-size: 1.7em;
}
span {
font-weight: 100;
font-style: normal;

View File

@ -13,7 +13,7 @@
display: flex;
justify-content: space-between;
@media (max-width: 560px) {
@media (max-width: 760px) {
flex-direction: column;
row-gap: 15px;
}
@ -21,20 +21,13 @@
&-info {
display: flex;
@media (max-width: 685px) {
font-size: 7px;
}
@media (max-width: 560px) {
@media (max-width: 760px) {
font-size: 10px;
}
@media (max-width: 560px) {
justify-content: center;
}
.calendar__hours {
margin: 0 10px;
margin: 0 5px;
line-height: 0;
font-weight: 500;
display: flex;
@ -45,18 +38,14 @@
&-switcher {
display: flex;
@media (max-width: 590px) {
font-size: 8px;
}
@media (max-width: 560px) {
@media (max-width: 760px) {
justify-content: center;
font-size: 12px;
}
}
h3 {
font-size: 2.5em;
font-size: 2.2em;
font-weight: 400;
font-style: normal;
letter-spacing: normal;
@ -165,6 +154,11 @@
justify-content: center;
font-weight: 500;
font-size: 12px;
@media (max-width: 500px) {
font-size: 10px;
font-weight: 400;
}
}
img {
@ -182,27 +176,25 @@
}
@media (max-width: 1200px) {
width: 90px;
height: 40px;
width: 110px;
}
@media (max-width: 968px) {
width: 62px;
height: 40px;
width: 90px;
font-size: 11px;
}
@media (max-width: 680px) {
width: 70px;
font-size: 10px;
@media (max-width: 610px) {
width: auto;
height: auto;
}
}
@media (max-width: 610px) {
width: 55px;
height: 45px;
@media (max-width: 550px) {
width: 60px;
height: 35px;
}
@media (max-width: 480px) {
@media (max-width: 450px) {
width: 45px;
height: 35px;
}
@ -294,12 +286,11 @@
.select {
border-radius: 5px;
border: 1px solid #c4c4c4;
border: 2px solid #c4c4c4;
box-shadow: 0 0 59px rgba(44, 44, 44, 0.05);
padding: 5px 8px;
cursor: pointer;
text-align: center;
min-width: 350px;
}
.close {

View File

@ -174,7 +174,7 @@ const Candidate = () => {
<div className="candidate__works works">
<div className="works__body">
<div className="works__body__info">
<p>Страница портфолио кода разработчика</p>
<p>Портфолио разработчика</p>
</div>
<div className="works__item item-works">
<Link to="/" className="item-works__body">

View File

@ -12,7 +12,7 @@ export const AuthHeader = () => {
<div className="auth-header">
<div className="auth-header__logo">
<h3>
itguild.<span>аутстафинг ИТ специалистов</span>
itguild.<span>аутстаффинг IT-специалистов</span>
</h3>
</div>
<div className="auth-header__navigation">

View File

@ -3,7 +3,7 @@ import React from "react";
import email from "assets/icons/emailLogo.svg";
import tg from "assets/icons/tgFooter.svg";
import vk from "assets/icons/vkLogo.svg";
import logo from "assets/images/logo/LogoITguild.svg";
import logo from "assets/images/logo/ITguild.svg";
import "./footer.scss";
@ -27,21 +27,19 @@ export const Footer = () => {
<div className="footer__bottom">
<div className="footer__social">
<div className="footer__social__icons">
<a>
<img src={vk} alt="vk" />
<a href="https://www.vk.com/">
<img src={vk} alt="vk" width={24} />
</a>
<a>
<img src={tg} alt="tg" />
<a href="https://www.telegram.org/">
<img src={tg} alt="tg" width={24} />
</a>
</div>
<p>Войти в команду</p>
</div>
<div className="footer__info">
<div className="footer__mail">
<a>
<img src={email} alt="email" />
</a>
<p>office@itguild.info</p>
<a href="mailto:office@itguild.info">office@itguild.info</a>
</div>
<a className="footer__policy">Политика конфиденциальности</a>
</div>

View File

@ -79,11 +79,11 @@ footer {
&__mail {
display: flex;
align-items: center;
column-gap: 13px;
column-gap: 5px;
p {
a {
font-weight: 400;
font-size: 12px;
font-size: 14px;
line-height: 16px;
color: #5b6871;
}
@ -91,7 +91,7 @@ footer {
&__policy {
font-weight: 400;
font-size: 10px;
font-size: 13px;
line-height: 16px;
color: #5b6871;
margin-left: 150px;
@ -108,6 +108,7 @@ footer {
&__copyright {
margin-left: auto;
font-size: 13px;
@media (max-width: 910px) {
min-width: 142px;

View File

@ -98,7 +98,7 @@ const Description = ({ onLoadMore }) => {
<div className="description__footer">
<div className="description__footer-btn">
{candidatesListArr && (
<button onClick={() => onLoadMore(2)}>Загрузить еще</button>
<button onClick={() => onLoadMore(2)}>Загрузить ещё</button>
)}
</div>
</div>

View File

@ -85,13 +85,13 @@ const Form = () => {
<div className="row">
<div className="col-sm-12">
<form className="form" id="test">
<label htmlFor="email">Емейл:</label>
<label htmlFor="email">E-mail:</label>
<input
onChange={handleChange}
id="email"
name="Email"
type="email"
placeholder="Емейл"
placeholder="E-mail"
value={data.email}
/>

View File

@ -50,7 +50,7 @@ export const FreeDevelopers = () => {
<div className="free-dev__body">
<div className="free-dev__body-title">
<p>Описание опыта работы</p>
<p>Опыт работы</p>
</div>
<div className="free-dev__body-text">
@ -86,7 +86,7 @@ export const FreeDevelopers = () => {
</div>
<div className="login">
<h3>Для просмотра полного резюме разработчика авторизуйтесь</h3>
<h3>Для просмотра полного резюме разработчика, авторизуйтесь</h3>
<BaseButton styles={"dev-code"}>
<Link to={"/auth"}>Войти</Link>
</BaseButton>

View File

@ -1,9 +1,6 @@
import React, { useState } from "react";
import { useSelector } from "react-redux";
import { useNavigate } from "react-router-dom";
import { getRole } from "@redux/roleSlice";
import { useLogout } from "@hooks/useLogout";
import { Loader } from "@components/Common/Loader/Loader";
@ -12,8 +9,6 @@ import "./logoutButton.scss";
export const LogoutButton = () => {
const [isLoggingOut, setIsLoggingOut] = useState(false);
const userRole = useSelector(getRole);
const navigate = useNavigate();
const { logout } = useLogout();
@ -24,7 +19,7 @@ export const LogoutButton = () => {
setIsLoggingOut(true);
logout();
setIsLoggingOut(false);
navigate(userRole === "ROLE_DEV" ? "/authdev" : "/auth");
navigate("/auth");
}}
>
{isLoggingOut ? <Loader /> : "Выйти"}

View File

@ -17,7 +17,7 @@ export const ModalErrorLogin = ({ active, setActive, title }) => {
setActive(false);
}}
>
Попробовать еще раз
Попробовать ещё раз
</BaseButton>
<span onClick={() => setActive(false)} className="exit"></span>
</ModalLayout>

View File

@ -104,11 +104,11 @@ export const ModalRegistration = ({ active, setActive }) => {
};
return (
<ModalLayout active={active} setActive={closeModal} styles={"registration"}>
<div className="registration-body__left">
<div className="registration-body__main">
<h2>
Подключайтесь к <p>itguild.</p>
Подключайтесь к <p>ITguild</p>
</h2>
<p className="registration-body__left-desc">
<p className="registration-body__main-desc">
Зарегистрируйтесь и начните работу уже сегодня
</p>
@ -132,7 +132,7 @@ export const ModalRegistration = ({ active, setActive }) => {
value={inputsValue.userName}
placeholder="Имя"
/>
{inputsError.name && <span>Минимум 2 символов</span>}
{inputsError.name && <span>Минимум 2 символа</span>}
</div>
<div className="inputContainer">
<h5>E-mail</h5>
@ -153,13 +153,11 @@ export const ModalRegistration = ({ active, setActive }) => {
value={inputsValue.email}
placeholder="Почта"
/>
{inputsError.email && <span>Введите коректный email</span>}
{inputsError.email && <span>Введите корректный e-mail</span>}
</div>
</div>
<div className="input-body__box">
{/*<h5>Название компании</h5>*/}
{/*<input></input>*/}
<div className="inputContainer">
<h5>Пароль</h5>
<input
@ -181,8 +179,30 @@ export const ModalRegistration = ({ active, setActive }) => {
/>
{inputsError.password && <span>Минимум 6 символов</span>}
</div>
<div className="inputContainer">
<h5>Повторите пароль</h5>
<input
className={inputsError.password ? "error" : ""}
type="password"
onChange={(e) => {
setInputsError({
name: false,
email: false,
password: false,
});
setInputsValue((prevValue) => ({
...prevValue,
password: e.target.value,
}));
}}
value={inputsValue.password}
placeholder="Пароль"
/>
{inputsError.password && <span>Минимум 6 символов</span>}
</div>
</div>
</div>
<div className="button-box">
{loader ? (
<Loader style={"green"} />
@ -202,9 +222,9 @@ export const ModalRegistration = ({ active, setActive }) => {
{/*</h5>*/}
</div>
</div>
<div className="registration-body__right">
<div className="registration-body__about">
<h4>Отказ от специалиста в любой момент</h4>
<div className="registration-body__right-text">
<div className="registration-body__about-text">
<img src={anyMoment}></img>
<p>
Поменяйте, откажитесь или возьмите еще специалиста в любой момент
@ -212,7 +232,7 @@ export const ModalRegistration = ({ active, setActive }) => {
</p>
</div>
<h4>100% постоплата</h4>
<div className="registration-body__right-text">
<div className="registration-body__about-text">
<img src={doc}></img>
<p>
Договор не подразумевает какуюлибо оплату до того, как вы
@ -220,7 +240,7 @@ export const ModalRegistration = ({ active, setActive }) => {
</p>
</div>
<h4>Есть вопросы?</h4>
<div className="registration-body__right-text">
<div className="registration-body__about-text">
<img src={telegramLogo}></img>
<p>Напишите нам в Телеграм. Мы с удовольствием ответим!</p>
</div>

View File

@ -6,12 +6,10 @@
justify-content: space-between;
border: 1px solid #dde2e4;
border-radius: 8px;
width: 1088px;
height: 515px;
&-body {
&__left {
padding: 33px 0 30px 77px;
&__main {
padding-left: 30px;
h2 {
font-weight: 500;
@ -51,6 +49,7 @@
font-weight: 400;
font-size: 15px;
line-height: 18px;
margin-left: 10px;
}
input {
@ -112,9 +111,9 @@
}
}
&__right {
&__about {
border-left: 1px solid #f1f1f1;
padding: 30px 32px 46px 25px;
padding: 20px;
display: flex;
flex-direction: column;
justify-content: space-between;

View File

@ -10,7 +10,7 @@ export const ModalReset = ({ setModalReset }) => {
<h3 className="modalReset__title">Восстановление доступа</h3>
<div className="modalReset__input">
<span>Укажите e-mail, для которого хотите восстановить пароль.</span>
<input placeholder="email" />
<input placeholder="e-mail" />
</div>
<button className="modalReset__submit">Восстановить</button>
<img

View File

@ -50,7 +50,7 @@ export const ModalResetPassword = ({ active, setActive }) => {
setInputsError((prevValue) => ({ ...prevValue, email: true }));
return showNotification({
show: true,
text: "Введите коректный email",
text: "Введите корректный e-mail",
type: "error",
});
}
@ -101,7 +101,7 @@ export const ModalResetPassword = ({ active, setActive }) => {
if (data.code === 0) {
showNotification({
show: true,
text: "Введите коректные данные",
text: "Введите корректные данные",
type: "error",
});
} else {
@ -127,7 +127,7 @@ export const ModalResetPassword = ({ active, setActive }) => {
<h3 className="resetPassword__title">Восстановление пароля</h3>
{!step ? (
<div className="resetPassword__email">
<h5>Введите email:</h5>
<h5>Введите ваш e-mail:</h5>
<input
type="email"
onChange={(e) => {
@ -141,13 +141,10 @@ export const ModalResetPassword = ({ active, setActive }) => {
token: false,
});
}}
placeholder="Email"
placeholder="E-mail"
value={inputsValue.email}
className={inputsError.email ? "error" : ""}
/>
{inputsError.email && (
<span className="warningText">Введите коректный email</span>
)}
{loader ? (
<Loader style={"green"} />
) : (

View File

@ -1,5 +1,5 @@
.resetPassword {
width: 370px;
width: 280px;
position: relative;
&__close {
@ -13,7 +13,7 @@
&__title {
font-size: 20px;
text-align: center;
margin-bottom: 15px;
margin-bottom: 20px;
}
&__email {
display: flex;
@ -24,6 +24,7 @@
h5 {
font-size: 16px;
margin-bottom: 10px;
align-self: flex-start;
}
input {
@ -54,11 +55,9 @@
color: #ffffff;
font-weight: 500;
font-size: 15px;
letter-spacing: normal;
line-height: 32px;
text-align: center;
border: 2px solid #6aaf5c;
transition: 0.3s;
margin-top: 15px;
}
.error {

View File

@ -409,7 +409,7 @@ export const TrackerModal = ({
{/* />*/}
{/*</div>*/}
<p className="selectPerson__info">
Выберите пользователя в проекте или добавьте по e- mail
Выберите пользователя в проекте или добавьте по e-mail
</p>
<div className="invite__blocks">
<div className="addPersonBlock">
@ -468,7 +468,7 @@ export const TrackerModal = ({
<div className="input-container invitePersonBlock__input">
<input
className="name-project"
placeholder="email"
placeholder="e-mail"
type="email"
/>
</div>

View File

@ -742,7 +742,7 @@
.exit {
cursor: pointer;
position: absolute;
top: 36px;
top: 20px;
right: 20px;
width: 13px;
height: 13px;

View File

@ -26,7 +26,7 @@ export const Navigation = () => {
},
{
path: "/calendar",
name: "Отчетность",
name: "Отчеты",
},
{
path: "/tracker",

View File

@ -1,7 +1,7 @@
.notification {
border-radius: 40px;
background: linear-gradient(180deg, #FFF 0%, #EBEBEB 100%);
padding: 20px 82px 17px 27px;
padding: 15px 60px 15px 15px;
position: fixed;
bottom: 25px;
right: 25px;
@ -13,7 +13,7 @@
align-items: center;
h2 {
max-width: 194px;
max-width: 210px;
font-weight: 500;
font-size: 16px;
margin-bottom: 0;
@ -27,8 +27,8 @@
&__close {
cursor: pointer;
position: absolute;
top: 15px;
right: 25px;
top: 10px;
right: 20px;
width: 15px;
height: 15px;
}

View File

@ -9,7 +9,7 @@
a {
color: #5b6871;
font-weight: 400;
font-size: 12px;
font-size: 13px;
line-height: 16px;
transition: 0.3s all ease;
position: relative;
@ -17,14 +17,6 @@
display: flex;
align-items: center;
@media (max-width: 525px) {
font-size: 10px;
}
@media (max-width: 455px) {
font-size: 9px;
}
&:hover {
text-decoration: none;
color: #000000;

View File

@ -89,7 +89,7 @@ export const ProfileCalendar = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Ваша отчетность", link: "/profile/calendar" },
{ name: "Отчеты", link: "/profile/calendar" },
]}
/>
<h2 className="summary__title">Ваши отчеты</h2>
@ -110,11 +110,9 @@ export const ProfileCalendar = () => {
<Link to="/report">
<button
className="calendar__btn"
onClick={() => {
dispatch(setReportDate(""));
}}
onClick={() => dispatch(setReportDate(""))}
>
Заполнить отчет за день
Заполнить отчет
</button>
</Link>
</div>

View File

@ -205,11 +205,11 @@ export const ProfileCalendarComponent = React.memo(
<div className="calendar-component">
<div className="calendar-component__header">
<div className="calendar-component__header-info">
<h3>Мои отчеты:</h3>
<h3>Мои отчеты за </h3>
<p className="calendar__hours">
{month}&nbsp;
<span>
{totalHours} {hourOfNum(totalHours)}{" "}
({totalHours} {hourOfNum(totalHours)})
</span>
</p>
</div>
@ -316,13 +316,15 @@ export const ProfileCalendarComponent = React.memo(
? `${getCorrectDate(startDate)} - ${getCorrectDate(endDate)}`
: `${getCorrectDate(endDate)} - ${getCorrectDate(startDate)}`
: activePeriod
? "Выберите начало диапазона"
? "Выберите диапазон на календаре"
: "Выбрать диапазон"}
</span>
<span>
{totalRangeHours
? `${totalRangeHours} ${hourOfNum(totalRangeHours)}`
: "0 часов"}
: endDate
? "0 часов"
: ""}
</span>
{endDate && (
<BaseButton

View File

@ -78,7 +78,6 @@
margin: 0;
max-width: 220px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}

View File

@ -3,7 +3,6 @@ import { useDispatch, useSelector } from "react-redux";
import { NavLink, useNavigate } from "react-router-dom";
import { auth, getProfileInfo, setProfileInfo } from "@redux/outstaffingSlice";
import { getRole } from "@redux/roleSlice";
import { apiRequest } from "@api/request";
@ -15,7 +14,6 @@ export const ProfileHeader = () => {
const navigate = useNavigate();
const dispatch = useDispatch();
const profileInfo = useSelector(getProfileInfo);
const userRole = useSelector(getRole);
const [user] = useState(
localStorage.getItem("role_status") === "18" ? "partner" : "developer"
);
@ -43,7 +41,7 @@ export const ProfileHeader = () => {
localStorage.clear();
dispatch(auth(false));
setIsLoggingOut(false);
navigate(userRole === "ROLE_DEV" ? "/authdev" : "/auth");
navigate("/auth");
};
return (

View File

@ -125,8 +125,8 @@ const ReportForm = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Ваша отчетность", link: "/profile/calendar" },
{ name: "Страница добавления нового отчета", link: "/report" },
{ name: "Отчеты", link: "/profile/calendar" },
{ name: "Добавить отчет", link: "/report" },
]}
/>
<h2 className="summary__title">
@ -180,9 +180,7 @@ const ReportForm = () => {
<p className="report-form__task-title--description">
Краткое описание задачи
</p>
<p className="report-form__task-title--hours">
Количество часов
</p>
<p className="report-form__task-title--hours">Кол-во часов</p>
</div>
{inputs.map((input, index) => {
@ -260,7 +258,7 @@ const ReportForm = () => {
<p className="addMore" onClick={addInput}>
+
</p>
<span>Добавить еще </span>
<span>Добавить задачу</span>
</div>
</div>
</div>
@ -299,7 +297,7 @@ const ReportForm = () => {
{isFetching ? <Loader /> : "Отправить"}
</button>
<p className="report-form__footer-text">
Всего за день :{" "}
Всего за день:{" "}
<span>
{totalHours} {hourOfNum(totalHours)}
</span>

View File

@ -54,7 +54,6 @@
font-weight: 700;
font-style: normal;
letter-spacing: normal;
line-height: 48.74px;
text-align: left;
@media (max-width: 555px) {
@ -75,7 +74,7 @@
@media (max-width: 555px) {
margin-top: 25px;
margin-bottom: 15px;
margin-bottom: 10px;
}
}
}
@ -115,12 +114,11 @@
font-weight: 700;
font-style: normal;
letter-spacing: normal;
line-height: 48.74px;
width: 12px;
}
&-list {
margin-top: 40px;
margin-top: 30px;
display: flex;
align-items: center;
@ -146,7 +144,7 @@
&-header {
display: flex;
justify-content: flex-start;
margin-top: 40px;
margin-top: 20px;
margin-left: 50px;
p {
@ -156,7 +154,7 @@
letter-spacing: normal;
line-height: normal;
text-align: left;
margin-bottom: 26px;
margin-bottom: 10px;
white-space: nowrap;
@media (max-width: 450px) {
@ -276,6 +274,7 @@
margin-left: 28px;
display: flex;
align-items: center;
justify-content: center;
.addMore {
display: flex;
@ -285,9 +284,9 @@
width: 38px;
height: 38px;
background: #e8e8e8;
margin-bottom: 0;
border-radius: 50px;
font-size: 32px;
cursor: pointer;
}
span {
@ -297,7 +296,8 @@
letter-spacing: normal;
line-height: normal;
text-align: left;
margin-left: 20px;
margin-left: 10px;
cursor: pointer;
}
}
@ -352,6 +352,7 @@
&__footer {
display: flex;
flex-direction: column-reverse;
align-items: center;
margin-top: 20px;
@ -380,16 +381,13 @@
&-text {
font-family: "GT Eesti Pro Display";
font-size: 1.9em;
font-weight: 600;
font-style: normal;
letter-spacing: normal;
line-height: 22.38px;
text-align: left;
margin-left: 40px;
margin-bottom: 0;
margin-bottom: 20px;
span {
font-weight: 100;
font-weight: 600;
}
}

View File

@ -2,7 +2,7 @@ import React, { useState } from "react";
import { Link } from "react-router-dom";
import arrow from "assets/icons/sideBarArrow.svg";
import LogoITguild from "assets/images/logo/LogoITguild.svg";
import ITguild from "assets/images/logo/ITguild.svg";
import "./sidebar.scss";
@ -37,13 +37,13 @@ export const SideBar = () => {
</div>
<p className="outstaffing">
<img src={arrow}></img>
2023 © Outstaffing
{new Date().getFullYear()} © Outstaffing
</p>
</div>
<div className={active ? "auth-body active" : "auth-body"}>
<div className="auth-body__title">
<img src={LogoITguild}></img>
<img src={ITguild}></img>
</div>
<ul className="auth-body__navigation">
<li>

View File

@ -125,6 +125,10 @@
&__title {
display: flex;
margin-top: 24px;
img {
width: 160px;
}
}
&__navigation {
@ -143,7 +147,7 @@
&__politic {
margin-top: 42px;
font-size: 12px;
font-size: 14px;
line-height: 22px;
color: #000000;
}
@ -156,7 +160,7 @@
line-height: 33px;
}
p {
font-size: 12px;
font-size: 14px;
}
}
@ -190,6 +194,6 @@
@media (max-width: 1375px) {
left: 0;
width: 100%;
height: 605px;
height: 705px;
}
}

View File

@ -81,7 +81,7 @@ export const SliderWorkers = ({ title, titleInfo, subTitle }) => {
</Slider>
{Boolean(subTitle) ? (
<div className="slider-workers__description">
<h2>Дополните свою команду опытными ИТ-специалистами</h2>
<h2>Дополните Вашу команду опытными IT-специалистами</h2>
<p>
Даём финансовые, юридические и кадровые гарантии, предоставляем
SLA и отвечаем за работу команды. Вам не нужно искать, оформлять

View File

@ -46,11 +46,14 @@
padding: 8px 26px;
font-weight: 400;
font-size: 16px;
line-height: 32px;
@media (max-width: 450px) {
max-width: 180px;
}
}
span {
margin-left: 55px;
margin-left: 20px;
font-weight: 400;
font-size: 16px;
line-height: 32px;

View File

@ -47,7 +47,7 @@ export const Instruction = () => {
<img src={comment} alt="" />
</div>
<div className="instruction__text instruction__text_info">
Количество вопросов в тесте: <span>{countQuestions}</span>
Вопросов в тесте: <span>{countQuestions}</span>
</div>
</div>
</>

View File

@ -1,18 +1,16 @@
import { useDispatch, useSelector } from "react-redux";
import { useDispatch } from "react-redux";
import { useNavigate } from "react-router-dom";
import { auth } from "../redux/outstaffingSlice";
import { getRole } from "../redux/roleSlice";
export const useLogout = () => {
const dispatch = useDispatch();
const userRole = useSelector(getRole);
const navigate = useNavigate();
const logout = () => {
localStorage.clear();
dispatch(auth(false));
navigate(userRole === "ROLE_DEV" ? "/authdev" : "/auth");
navigate("/auth");
};
return { logout };

View File

@ -18,10 +18,6 @@ code {
monospace;
}
h1 {
}
.container {
position: relative !important;
}

View File

@ -73,7 +73,7 @@ export const Article = () => {
предпринимателями и тщательно проверяем своих партнеров.
Партнерами являются агентства, которые специализируются на
оказании услуг в формате аутстафф-модели и обладают глубокой
экспертизой в разработке и внедрении ИТ-проектов.
экспертизой в разработке и внедрении IT-проектов.
</p>
</div>
<img src={mockImgArticle} className="article-blog__body-img" />
@ -81,7 +81,7 @@ export const Article = () => {
<p>
С одной стороны, зарплаты в сфере разработки растут, с другой
стороны, появляется огромное количество новичков, которые хотят
легко и просто войти в ИТ-сферу на волне востребованности и
легко и просто войти в IT-сферу на волне востребованности и
больших зарплат. Разумеется, это приводит к осторожному отношению
работодателя к выпускникам различных курсов. Нет такого курса,
который даст на 100% готового джуна, слишком многое завязано на

View File

@ -1,18 +1,15 @@
import React, { useEffect } from "react";
import { useSelector } from "react-redux";
import { Link, useNavigate } from "react-router-dom";
import { useNavigate } from "react-router-dom";
import { selectAuth } from "@redux/outstaffingSlice";
import { scrollToForm } from "@utils/helper";
import { AuthBox } from "@components/AuthBox/AuthBox";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer";
import SideBar from "@components/SideBar/SideBar";
import SliderWorkers from "@components/SliderWorkers/SliderWorkers";
import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import arrow from "assets/icons/arrows/arrow__login_page.png";
import text from "assets/images/Body_Text.png";
import vector from "assets/images/Vector_Smart_Object.png";
@ -20,9 +17,9 @@ import vectorBlack from "assets/images/Vector_Smart_Object_black.png";
import authImg from "assets/images/auth_img.png";
import cross from "assets/images/cross.png";
import "./authForPartners.scss";
import "./auth.scss";
const AuthForPartners = () => {
const Auth = () => {
const isAuth = useSelector(selectAuth);
let navigate = useNavigate();
@ -46,28 +43,10 @@ const AuthForPartners = () => {
<img className="auth-partners__vector" src={vector} alt="" />
<img className="auth-partners__vector-black" src={vectorBlack} alt="" />
<div className="container">
<div className="change-mode">
<div className="change-mode__arrow" onClick={() => scrollToForm()}>
<img src={arrowBtn}></img>
</div>
<div className="buttons">
<Link to={"/authdev"}>
<button className="change-mode__developersForPart">
Для разработчиков
</button>
</Link>
<Link to={"/auth"}>
<button className="change-mode__partnersForPart">
Для партнёров
</button>
</Link>
</div>
</div>
<div className="row">
<div className="col-12 col-xl-6">
<div className="auth-partners__box">
<AuthBox title="для партнёров" />
<AuthBox />
</div>
</div>
<div className="col-xl-2">
@ -90,7 +69,6 @@ const AuthForPartners = () => {
<img className="cross" src={cross} alt="" />
</div>
<div>
{/* <img className='auth-specialists} src={specialists} alt="" /> */}
<p className="auth-partners__specialists">
300 Специалистов
</p>
@ -121,4 +99,4 @@ const AuthForPartners = () => {
);
};
export default AuthForPartners;
export default Auth;

View File

@ -181,7 +181,7 @@
&__img-text {
position: absolute;
right: -68px;
bottom: -84px;
bottom: 0px;
}
@media (max-width: 575.98px) {

View File

@ -146,14 +146,14 @@ export const AuthForCandidate = () => {
<AuthHeader />
<div className="container">
<AuthBlock
title="Войти, уже есть доступ"
description="если вы получили доступ пройдя
title="Войти, если есть доступ"
description="Если вы получили доступ, пройдя
2 шага для входа или хотите узнать
свои результаты в кабинете"
/>
<div className="auth-candidate__start">
<h2 className="auth-candidate__start__title">
Хочу в команду <span>Айти специалистов</span>
Хочу в команду <span>IT-специалистов</span>
</h2>
<div className="change-mode__arrow">
<img src={arrowBtn} alt="#"></img>
@ -162,7 +162,7 @@ export const AuthForCandidate = () => {
Для нас не имеет значение Ваша локация.
</p>
<div className="auth-candidate__start__categoriesWrapper">
<StepsForCandidate step="шаг 1 - выбери специализацтию" />
<StepsForCandidate step="шаг 1 - выберите специализацию" />
{personalInfoItems.map((item, index) => {
return (
<CategoriesItem

View File

@ -64,6 +64,6 @@
}
footer {
margin-top: 70px;
margin-top: 10px;
}
}

View File

@ -1,124 +0,0 @@
import React, { useEffect } from "react";
import { useSelector } from "react-redux";
import { Link, useNavigate } from "react-router-dom";
import { selectAuth } from "@redux/outstaffingSlice";
import { scrollToForm } from "@utils/helper";
import { AuthBox } from "@components/AuthBox/AuthBox";
import AuthHeader from "@components/Common/AuthHeader/AuthHeader";
import { Footer } from "@components/Common/Footer/Footer";
import SideBar from "@components/SideBar/SideBar";
import SliderWorkers from "@components/SliderWorkers/SliderWorkers";
import arrowBtn from "assets/icons/arrows/arrowRight.svg";
import arrow from "assets/icons/arrows/arrow__login_page.png";
import text from "assets/images/Body_Text.png";
import vector from "assets/images/Vector_Smart_Object.png";
import vectorBlack from "assets/images/Vector_Smart_Object_black.png";
import cross from "assets/images/cross.png";
import medium from "assets/images/medium_male_big.png";
import "./authForDevelopers.scss";
const AuthForDevelopers = () => {
const isAuth = useSelector(selectAuth);
let navigate = useNavigate();
const getToken = localStorage.getItem("auth_token");
useEffect(() => {
if (isAuth || getToken) {
navigate("/profile");
}
}, [getToken]);
return (
<section className="auth-developers">
<AuthHeader />
<SliderWorkers
title={"Свободные разработчики"}
titleInfo={"для Вашей команды"}
subTitle={true}
/>
<div className="auth-developers__background">
<img className="auth-developers__vector" src={vector} alt="" />
<img
className="auth-developers__vector-black"
src={vectorBlack}
alt="#"
/>
<div className="container">
<div className="change-mode">
<div className="change-mode__arrow" onClick={() => scrollToForm()}>
<img src={arrowBtn}></img>
</div>
<div className="buttons">
<Link to={"/authdev"}>
<button className="change-mode__developersForDev">
Для разработчиков
</button>
</Link>
<Link to={"/auth"}>
<button className="change-mode__partnersForDev">
Для партнёров
</button>
</Link>
</div>
</div>
<div className="row">
<div className="col-12 col-xl-6">
<div className="auth-developers__box">
<AuthBox title="для разработчиков" />
</div>
</div>
<div className="col-xl-2">
<img className="auth-developers__arrow" src={arrow} alt="" />
</div>
<div className="col-12 col-xl-4">
<div className="auth-developers__info">
<div className="auth-developers__info-box">
<img src={medium} alt="" />
<h3>
Frontend разработчик,
<br /> Middle
</h3>
</div>
<div className="auth-developers__info-container">
<div className="auth-developers__info-img">
<div>
<img className="cross" src={cross} alt="" />
</div>
<div>
{/* <img className='auth-specialists} src={specialists} alt="" /> */}
<p className="auth-developers__specialists">
300 Специалистов
</p>
</div>
</div>
<ul className="auth-developers__info-list">
<li className="auth-developers__info-item">
Ruby on Rails
</li>
<li className="auth-developers__info-item">PHP</li>
<li className="auth-developers__info-item">Python</li>
<li className="auth-developers__info-item">Vue.js</li>
<li className="auth-developers__info-item">React. JS</li>
</ul>
</div>
<img className="auth-developers__img-text" src={text} alt="" />
</div>
</div>
</div>
<Footer />
</div>
</div>
<SideBar />
</section>
);
};
export default AuthForDevelopers;

View File

@ -1,240 +0,0 @@
.auth-developers {
font-family: "LabGrotesque", sans-serif;
overflow: hidden;
position: relative;
&__background {
background-color: #f1f1f1;
position: relative;
}
&__vector,
&__vector-black {
position: absolute;
}
&__vector {
top: -37px;
left: -285px;
}
&__vector-black {
top: 460px;
right: -224px;
@media (max-width: 1200px) {
top: 370px;
}
@media (max-width: 1024px) {
top: 180px;
}
}
&__arrow {
margin-top: 360px;
z-index: 99;
@media (max-width: 1200px) {
display: none;
}
}
@media (max-width: 575.98px) {
&__vector,
&__vector-black,
&__arrow {
display: none;
}
}
&__info {
background-color: #e1fccf;
margin-top: 70px;
max-width: 310px;
padding-top: 30px;
position: relative;
padding-bottom: 310px;
@media (max-width: 1200px) {
display: none;
}
}
&__info-box {
display: flex;
align-items: center;
}
@media (max-width: 575.98px) {
&__info {
max-width: 380px;
}
&__info-box {
flex-direction: column;
justify-content: center;
}
}
@media (max-width: 375.98px) {
&__info {
max-width: 340px;
}
}
&__info-box > img {
width: 165px;
height: 165px;
margin-left: -84px;
margin-right: 30px;
}
@media (max-width: 575.98px) {
&__info-box > img {
margin-left: 0px;
margin-right: 0px;
}
}
&__info-box > h3 {
font-family: "GT Eesti Pro Display";
font-size: 2em;
font-weight: 100;
font-style: normal;
letter-spacing: normal;
line-height: 36px;
text-align: left;
}
@media (max-width: 575.98px) {
&__info-box > h3 {
margin-top: 20px;
}
}
&__info-container {
display: flex;
position: relative;
}
&__info-img {
display: flex;
flex-direction: column;
text-align: center;
margin-top: 28px;
margin-left: -40px;
}
&__info-img > div > img {
margin-bottom: 100px;
}
&__specialists {
font-family: "GT Eesti Pro Display";
font-size: 1.8em;
font-weight: 100;
font-style: normal;
letter-spacing: normal;
line-height: 26.12px;
text-align: left;
transform: rotate(-90deg);
text-transform: uppercase;
}
&__info-list {
list-style: none;
margin-top: 110px;
position: absolute;
right: -70px;
}
@media (max-width: 575.98px) {
&__info-list {
left: 34px;
}
}
&__info-item {
color: #1f1f1f;
font-family: "GT Eesti Pro Display";
font-size: 4em;
font-weight: 700;
font-style: normal;
letter-spacing: normal;
line-height: 56.95px;
text-align: left;
text-decoration: underline;
text-transform: uppercase;
}
@media (max-width: 575.98px) {
&__info-item {
font-size: 2.6em;
}
}
&__img-text {
position: absolute;
right: -68px;
bottom: -84px;
}
@media (max-width: 575.98px) {
&__img-text {
right: 0px;
bottom: -40px;
}
}
////////////////////////////////////
&__auth-link {
display: block;
}
&__auth-link a {
display: block;
width: 100%;
height: 100%;
color: #fff;
}
@media (max-width: 766px) {
&__form-buttons {
flex-direction: column;
}
&__form-btn {
margin: 0;
margin-bottom: 1.5rem;
}
}
}
.change-mode {
&__partnersForDev {
background: #52b7098c;
color: #2d6505;
margin-left: -35px;
}
&__partnersForDev,
&__developersForDev {
width: 220px;
height: 50px;
border-radius: 44px;
font-size: 16px;
border: none;
}
&__developersForDev {
position: relative;
background: #406128;
color: white;
}
@media (max-width: 768px) {
&__partnersForDev {
margin: 15px 0 0 0;
}
}
}

View File

@ -27,7 +27,7 @@ export const CompanyInfo = () => {
<img src={arrow} alt="arrow" />
</div>
<p className="companyInfo__subTitle">
Мы предоставляем вам «в аренду» it-специалистов. При этом они
Мы предоставляем вам «в аренду» IT-специалистов. При этом они
находятся в нашем штате. Оплата происходит за отработанные часы
</p>
<div className="companyInfo__info">
@ -36,7 +36,8 @@ export const CompanyInfo = () => {
<img src={countingImg} alt="countingImg" />
<div className="countingBlock__info">
<h3 className="countingBlock__title">
Экономия бюджета компании - главное преимущество аутстафинга
Экономия бюджета компании - главное преимущество
аутстаффинга
</h3>
<p className="countingBlock__subTitle">
Приблизительный просчет дал результаты в экономии до 50%

View File

@ -17,7 +17,7 @@ export const FrequentlyAskedQuestion = () => {
id: params.id,
title: "Это фриланс-платформа?",
answer:
"Нет, мы работаем только с юридическими лицами и индивидуальными предпринимателями и тщательно проверяем своих партнеров. Партнерами являются агентства, которые специализируются на оказании услуг в формате аутстафф-модели и обладают глубокой экспертизой в разработке и внедрении ИТ-проектов.",
"Нет, мы работаем только с юридическими лицами и индивидуальными предпринимателями и тщательно проверяем своих партнеров. Партнерами являются агентства, которые специализируются на оказании услуг в формате аутстафф-модели и обладают глубокой экспертизой в разработке и внедрении IT-проектов.",
});
useEffect(() => {

View File

@ -402,7 +402,7 @@ export const PartnerAddRequest = () => {
<h4>Процесс:</h4>
</div>
<p>
При аутстафе мы предоставляем вам it-специалистов при этом они
При аутстаффе мы предоставляем вам IT-специалистов при этом они
находятся в нашем штате.
<br />
<br />

View File

@ -98,7 +98,7 @@ export const PartnerRequests = () => {
<div className="partnerRequests__noItems__create">
<div className="partnerRequests__noItems__create__link">
<img src={cursorImg} alt="cursor" />
<p>У вас еще нет запросов на сотрудников</p>
<p>У вас ещё нет запросов на сотрудников</p>
<BaseButton>
<Link to={"/profile/add-request"}>
<span>+</span>

View File

@ -88,16 +88,16 @@ export const PartnerSettings = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Настройка профиля", link: "/profile/settings" },
{ name: "Настройки", link: "/profile/settings" },
]}
/>
<div className="partner-settings">
<h2 className="infoPersonal__title">Настройки акаунта</h2>
<h2 className="infoPersonal__title">Настройки профиля</h2>
<div className="partner-settings__body">
<div className="partner-settings__login">
<h3 className="settings__title">Вход в систему</h3>
<p className="settings__lable-first">Изменение логина</p>
<p className="settings__label">Изменение логина</p>
<div className="settings__input">
<input
className={inputsError.name ? "warning" : ""}
@ -115,11 +115,11 @@ export const PartnerSettings = () => {
value={inputsValue.name}
/>
{inputsError.name && (
<span className="error">Минимум 2 символов</span>
<span className="error">Минимум 2 символа</span>
)}
</div>
<p className="settings__lable-second">Изменение пароля</p>
<p className="settings__label">Изменение пароля</p>
<div className="settings__input oldPassword">
<input
className={inputsError.password ? "warning" : ""}
@ -185,28 +185,26 @@ export const PartnerSettings = () => {
</div>
<div className="partner-settings__report">
<h3 className="settings__title">Документы и отчеты</h3>
<p className="settings__lable-first">Изменить провадера ЭДО</p>
<p className="settings__label">Изменить провадера ЭДО</p>
<div className="partner-settings__logo">
<div>
<label className="partner-settings__label-first">
<label className="partner-settings__label">
<img src={astral}></img>
<input type="checkbox" />
<span className="checkbox__first"></span>
<span className="checkbox"></span>
</label>
</div>
<div>
<label className="partner-settings__label-second">
<label className="partner-settings__label">
<img src={kontur}></img>
<input type="checkbox" />
<span className="checkbox__second"></span>
<span className="checkbox"></span>
</label>
</div>
</div>
<p className="settings__lable-second">
Изменение названия компании
</p>
<p className="settings__label">Изменение названия компании</p>
<div className="settings__input">
<input></input>
</div>

View File

@ -22,21 +22,12 @@
line-height: 24px;
}
&__lable {
&-first,
&-second {
&__label {
font-size: 15px;
line-height: 18px;
color: #000000;
}
&-first {
margin: 39px 0 10px 0;
}
&-second {
margin: 15px 0 10px 0;
}
}
&__input {
display: flex;
@ -46,7 +37,6 @@
padding: 5px 10px;
background: #eff2f7;
border-radius: 8px;
width: 373px;
height: 35px;
border: none;
font-size: 15px;
@ -75,11 +65,12 @@
}
&__buttons {
width: 87%;
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-between;
margin: 36px 0 30px 0;
justify-content: flex-start;
gap: 20px;
margin: 30px 0 20px;
&-cancel,
&-save {
@ -113,7 +104,7 @@
}
}
@media (max-width: 570px) {
@media (max-width: 800px) {
&__input {
width: 95%;
}
@ -123,6 +114,7 @@
width: 100%;
flex-direction: column-reverse;
align-items: center;
gap: 0px;
&-save {
margin-bottom: 15px;
@ -132,13 +124,7 @@
}
.checkbox {
&__first {
margin: 0px 0 0 20px;
}
&__second {
margin: 0px 20px 0 0;
}
}
.partner-settings {
@ -147,7 +133,7 @@
&__body {
display: flex;
flex-direction: row;
justify-content: space-between;
justify-content: space-around;
margin-top: 27px;
}
@ -197,17 +183,10 @@
}
&__label {
&-first,
&-second {
display: flex;
align-items: center;
}
&-second {
flex-direction: row-reverse;
}
}
@media (max-width: 1200px) {
margin-bottom: 15px;
@ -227,12 +206,9 @@
}
&__label {
&-second,
&-first {
flex-direction: row;
}
}
}
@media (max-width: 950px) {
&__body {
@ -268,6 +244,7 @@
&__report {
margin-top: 55px;
margin-bottom: 10px;
}
&__logo {
@ -276,16 +253,7 @@
}
&__label {
&-second,
&-first {
flex-direction: row;
}
}
.checkbox {
&__second {
margin: 0px 0 0 20px;
}
}
}
}

View File

@ -36,7 +36,7 @@ export const Profile = () => {
{
path: "profile/summary",
img: summaryIcon,
title: "Данные и резюме",
title: "Резюме",
description: "Ваше резюме<br/><span>заполнено</span>",
},
{
@ -54,7 +54,7 @@ export const Profile = () => {
{
path: "profile/settings",
img: settingIcon,
title: "Настройки аккаунта",
title: "Настройки профиля",
description: "Перейдите чтобы начать<br/> редактирование",
},
],
@ -87,7 +87,7 @@ export const Profile = () => {
{
path: "profile/settings",
img: settingIcon,
title: "Настройки аккаунта",
title: "Настройки профиля",
description: "Перейдите чтобы начать<br/> редактирование",
},
],

View File

@ -1,8 +1,8 @@
.profile {
background: #F1F1F1;
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: 'LabGrotesque', sans-serif;
font-family: "LabGrotesque", sans-serif;
&__title {
font-weight: 700;
@ -14,7 +14,7 @@
p {
color: black;
}
color: #52B709;
color: #52b709;
}
@media (max-width: 560px) {
@ -28,7 +28,7 @@
}
&__info {
min-height: 128px;
min-height: 110px;
background: white;
border-radius: 12px;
margin-top: 30px;

View File

@ -25,7 +25,7 @@ export const ProfileCandidate = () => {
{
path: "profile/settings",
img: settingIcon,
title: "Настройки аккаунта",
title: "Настройки профиля",
description: "Перейдите чтобы начать редактирование",
},
]);

View File

@ -1088,7 +1088,7 @@ export const ProjectTracker = () => {
</div>
{acceptModalOpen && (
<AcceptModal
title={"В колонке еще есть задачи, Вы точно хотите удалить её ?"}
title={"В колонке ещё есть задачи, Вы точно хотите удалить её ?"}
closeModal={closeAcceptModal}
agreeHandler={() => deleteColumn(currentColumnDelete)}
/>

View File

@ -17,7 +17,7 @@ export const RegistrationForCandidate = () => {
<div className="container">
<div className="registrationCandidate__start">
<h2 className="auth-candidate__start__title">
Хочу в команду <span>Айти специалистов</span>
Хочу в команду <span>IT-специалистов</span>
</h2>
<div className="change-mode__arrow">
<img src={arrowBtn}></img>
@ -41,7 +41,7 @@ export const RegistrationForCandidate = () => {
</div>
<form className="registrationCandidate__form">
<div className="registrationCandidate__form__input">
<label htmlFor="name">Ваше имя *</label>
<label htmlFor="name">Ваше имя</label>
<input id="name" type="text" placeholder="Имя" />
</div>
<div className="registrationCandidate__form__input">
@ -49,19 +49,19 @@ export const RegistrationForCandidate = () => {
<input id="summary" type="text" placeholder="Резюме" />
</div>
<div className="registrationCandidate__form__input">
<label htmlFor="email">Ваш email *</label>
<input id="email" type="text" placeholder="Email" />
<label htmlFor="email">Ваш e-mail</label>
<input id="email" type="text" placeholder="E-mail" />
</div>
<div className="registrationCandidate__form__input">
<label htmlFor="tg">Ваш телеграм*</label>
<input id="tg" type="text" placeholder="Телеграм" />
<label htmlFor="tg">Ваш telegram</label>
<input id="tg" type="text" placeholder="Telegram" />
</div>
<div className="registrationCandidate__form__input">
<label htmlFor="password">Придумайте пароль*</label>
<label htmlFor="password">Придумайте пароль</label>
<input id="password" type="text" placeholder="Пароль" />
</div>
<div className="registrationCandidate__form__input">
<label htmlFor="secondPassword">Повторите пароль*</label>
<label htmlFor="secondPassword">Повторите пароль</label>
<input id="secondPassword" type="text" placeholder="Пароль" />
</div>
<div className="registrationCandidate__form__submit">

View File

@ -17,6 +17,8 @@ import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import rightArrow from "assets/icons/arrows/arrowRight.svg";
import arrow from "assets/icons/arrows/left-arrow.png";
import arrowDown from "assets/icons/arrows/selectArrow.png";
import deleteIcon from "assets/icons/closeProjectPersons.svg";
import gitImgItem from "assets/icons/gitItemImg.svg";
import avatarMok from "assets/images/avatarMok.png";
@ -30,7 +32,11 @@ export const Summary = () => {
const [openGit, setOpenGit] = useState(false);
const [gitInfo, setGitInfo] = useState([]);
const [editSummeryOpen, setEditSummeryOpen] = useState(false);
const [editSkills, setEditSkills] = useState(false);
const [summery, setSummery] = useState("");
const [selectedSkills, setSelectedSkills] = useState([]);
const [selectSkillsOpen, setSelectSkillsOpen] = useState(false);
const [skillsList, seSkillsList] = useState([]);
useEffect(() => {
apiRequest(
@ -40,8 +46,26 @@ export const Summary = () => {
useEffect(() => {
setSummery(profileInfo.vc_text);
setSelectedSkills(profileInfo.skillValues);
}, [profileInfo]);
useEffect(() => {
apiRequest(`/skills/get-skills-list`).then((el) => {
seSkillsList(el);
});
}, []);
function setSkills() {
apiRequest("/resume/edit-skills", {
method: "PUT",
data: {
UserCard: {
skill: selectedSkills.map((item) => item.skill_id),
},
},
}).then(() => {});
}
function editSummery() {
apiRequest("/resume/edit-text", {
method: "PUT",
@ -59,7 +83,7 @@ export const Summary = () => {
<ProfileBreadcrumbs
links={[
{ name: "Главная", link: "/profile" },
{ name: "Данные и резюме", link: "/profile/summary" },
{ name: "Резюме", link: "/profile/summary" },
]}
/>
<h2 className="summary__title">
@ -98,18 +122,84 @@ export const Summary = () => {
<div className="summary__skills skills__section">
<div className="summary__sections__head">
<h3>Основной стек</h3>
<button>Редактировать раздел</button>
<button
className={editSkills ? "edit" : ""}
onClick={() => {
if (editSkills) {
setSkills();
}
setEditSkills(!editSkills);
}}
>
{editSkills ? "Сохранить" : "Редактировать"}
</button>
</div>
<div className="skills__section__items">
{editSkills ? (
<div className="editSkills">
{selectedSkills &&
selectedSkills.map((skill) => {
return (
<span key={skill.skill_id}>
{skill.skill.name}
<img
src={deleteIcon}
alt="deleteIcon"
onClick={() =>
setSelectedSkills((prevValue) =>
prevValue.filter(
(item) => item.skill_id !== skill.skill_id
)
)
}
/>
</span>
);
})}
<div className="selectSkills">
<div
className="selectSkills__name"
onClick={() => setSelectSkillsOpen(!selectSkillsOpen)}
>
Выберите скилл
<img
className={selectSkillsOpen ? "open" : ""}
src={arrowDown}
/>
</div>
{selectSkillsOpen && (
<div className="selectSkills__dropDown">
{skillsList.map((skill) => {
return (
<p
onClick={() =>
setSelectedSkills((prevValue) => [
...prevValue,
{ skill: skill, skill_id: skill.id },
])
}
key={skill.id}
className="selectSkills__item"
>
{skill.name}
</p>
);
})}
</div>
)}
</div>
</div>
) : (
<div className="skills__section__items__wrapper">
{profileInfo.skillValues &&
profileInfo.skillValues.map((skill, index) => (
{selectedSkills &&
selectedSkills.map((skill, index) => (
<span key={skill.id} className="skill_item">
{skill.skill.name}
{profileInfo.skillValues.length > index + 1 && ","}
{selectedSkills.length > index + 1 && ","}
</span>
))}
</div>
)}
</div>
</div>
)}
@ -117,7 +207,7 @@ export const Summary = () => {
<div className="summary__experience">
<div className="experience__block">
<div className="summary__sections__head">
<h3>Описание опыта работы</h3>
<h3>Опыт работы</h3>
<button
className={editSummeryOpen ? "edit" : ""}
onClick={() => {
@ -127,7 +217,7 @@ export const Summary = () => {
setEditSummeryOpen(!editSummeryOpen);
}}
>
{editSummeryOpen ? "Сохранить" : "Редактировать раздел"}
{editSummeryOpen ? "Сохранить" : "Редактировать"}
</button>
</div>
{editSummeryOpen ? (
@ -165,8 +255,8 @@ export const Summary = () => {
{openGit && (
<div className="summary__sectionGit">
<div className="summary__sections__head">
<h3>Страница портфолио кода разработчика</h3>
<button>Редактировать раздел</button>
<h3>Ваши репозитории</h3>
<button>Редактировать</button>
</div>
<div className="summary__sectionGitItems">
{Boolean(gitInfo.length) &&

View File

@ -1,17 +1,8 @@
.summary {
background: #F1F1F1;
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: 'LabGrotesque', sans-serif;
//
//&__container {
// max-width: 1160px;
// padding: 0 10px;
// margin: 20px auto;
// position: relative;
// display: flex;
// flex-direction: column;
//}
font-family: "LabGrotesque", sans-serif;
&__content {
display: flex;
@ -25,7 +16,7 @@
margin-bottom: 0;
span {
color: #52B709;
color: #52b709;
}
}
@ -45,10 +36,10 @@
}
&__info {
min-height: 128px;
min-height: 110px;
background: white;
border-radius: 12px;
margin-top: 30px;
margin-top: 25px;
display: flex;
align-items: center;
padding: 0 25px 0 45px;
@ -110,14 +101,6 @@
font-size: 16px;
line-height: 32px;
position: relative;
white-space: nowrap;
//@media (max-width: 915px) {
// max-width: 220px;
// overflow: hidden;
// white-space: nowrap;
// text-overflow: ellipsis;
//}
@media (max-width: 690px) {
font-size: 14px;
@ -128,19 +111,18 @@
@media (max-width: 550px) {
max-width: 200px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin: 0;
}
@media (max-width: 450px) {
max-width: 150px;
max-width: 160px;
}
&:after {
content: '';
content: "";
position: absolute;
background: #52B709;
background: #52b709;
border-radius: 12px;
width: 70%;
height: 8px;
@ -159,7 +141,14 @@
color: white;
border: none;
transition: all 0.3s ease;
background-image: linear-gradient(to top, #6aaf5c 0%, #52b709 100%), linear-gradient(36deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.16) 47%, rgba(255, 255, 255, 0.17) 50%, rgba(255, 255, 255, 0) 100%);
background-image: linear-gradient(to top, #6aaf5c 0%, #52b709 100%),
linear-gradient(
36deg,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.16) 47%,
rgba(255, 255, 255, 0.17) 50%,
rgba(255, 255, 255, 0) 100%
);
&:hover {
box-shadow: 6px 5px 20px rgb(87 98 80 / 21%);
@ -170,10 +159,15 @@
width: 120px;
height: 50px;
}
@media (max-width: 450px) {
width: 80px;
height: 40px;
}
}
&__skills {
background: #FFFFFF;
background: #ffffff;
border-radius: 12px;
margin-top: 35px;
}
@ -181,7 +175,7 @@
&__sections__head {
display: flex;
min-height: 69px;
background: #E1FCCF;
background: #e1fccf;
border-radius: 12px 12px 0px 0px;
align-items: center;
padding: 0 35px 0 50px;
@ -195,6 +189,7 @@
font-style: normal;
font-size: 18px;
line-height: 32px;
margin: 0;
@media (max-width: 660px) {
line-height: 20px;
@ -202,7 +197,7 @@
}
button {
background: #FFFFFF;
background: #ffffff;
border-radius: 44px;
padding: 10px 20px;
display: flex;
@ -232,7 +227,7 @@
padding: 25px 35px 25px 50px;
@media (max-width: 550px) {
padding: 15px 15px 20px;
padding: 15px;
}
&__wrapper {
@ -246,6 +241,94 @@
line-height: 32px;
white-space: nowrap;
text-transform: uppercase;
@media (max-width: 550px) {
font-size: 14px;
line-height: 20px;
}
}
}
}
.editSkills {
display: flex;
flex-wrap: wrap;
gap: 14px;
align-items: center;
span {
display: flex;
column-gap: 8px;
background-color: #f5f5f5;
border-radius: 15px;
padding: 3px 10px 3px 10px;
font-weight: 700;
font-size: 16px;
line-height: 32px;
white-space: nowrap;
text-transform: uppercase;
img {
cursor: pointer;
}
}
.selectSkills {
position: relative;
display: flex;
flex-direction: column;
font-weight: 700;
font-size: 16px;
&__name {
display: flex;
column-gap: 12px;
align-items: center;
cursor: pointer;
background-color: #f5f5f5;
border-radius: 15px;
padding: 3px 10px 3px 10px;
img {
transition: all 0.3s ease;
}
.open {
transform: rotate(180deg);
}
}
&__dropDown {
position: absolute;
background-color: white;
border-radius: 12px;
max-height: 300px;
overflow-y: auto;
display: flex;
flex-direction: column;
row-gap: 5px;
align-items: center;
padding: 7px;
top: 35px;
&::-webkit-scrollbar {
width: 3px;
border-radius: 10px;
}
&::-webkit-scrollbar-thumb {
background: #cbd9f9;
border-radius: 20px;
}
&::-webkit-scrollbar-track {
background: #c5c0c6;
border-radius: 20px;
}
p {
cursor: pointer;
}
}
}
}
@ -259,7 +342,7 @@
.experience {
&__block {
background: #FFFFFF;
background: #ffffff;
border-radius: 12px;
}
@ -315,9 +398,9 @@
.noGitItems {
width: 100%;
font-size: 20px;
background: #FFFFFF;
background: #ffffff;
border-radius: 12px;
padding: 35px 30px 30px 45px;
padding: 10px;
color: #000000;
font-weight: 600;
}
@ -327,9 +410,9 @@
display: flex;
align-items: center;
justify-content: space-between;
background: #FFFFFF;
background: #ffffff;
border-radius: 12px;
padding: 35px 30px 30px 45px;
padding: 10px;
transition: all 0.3s ease;
color: #000000;
@ -374,29 +457,11 @@
p {
font-weight: 300;
font-size: 16px;
line-height: 32px;
margin-bottom: 0;
white-space: nowrap;
max-width: 300px;
overflow: hidden;
text-overflow: ellipsis;
@media (max-width: 1040px) {
max-width: 250px;
}
@media (max-width: 890px) {
max-width: 200px;
}
@media (max-width: 825px) {
max-width: 500px;
}
@media (max-width: 720px) {
max-width: 250px;
}
@media (max-width: 470px) {
max-width: 200px;
}
@ -404,7 +469,6 @@
}
&__specification {
margin-top: 30px;
display: flex;
align-items: center;
padding-left: 10px;
@ -415,7 +479,7 @@
}
span {
background: #D4F123;
background: #d4f123;
border-radius: 12px;
max-width: 260px;
width: 100%;
@ -433,7 +497,7 @@
&__link {
border-radius: 50%;
background: #DDEEC6;
background: #ddeec6;
min-width: 48px;
height: 48px;
cursor: pointer;
@ -446,7 +510,7 @@
}
footer {
margin-top: 70px;
margin-top: 10px;
}
.container {

View File

@ -31,19 +31,19 @@ export const TrackerRegistration = () => {
<div className="trackerRegistration__form">
<div className="trackerRegistration__form__inputs">
<div className="trackerRegistration__inputContainer">
<span>Ваше имя *</span>
<span>Ваше имя</span>
<input placeholder="Имя" />
</div>
<div className="trackerRegistration__inputContainer">
<span>Ваш email *</span>
<input placeholder="Email" type="email" />
<span>Ваш e-mail</span>
<input placeholder="E-mail" type="email" />
</div>
<div className="trackerRegistration__inputContainer">
<span>Придумайте пароль*</span>
<span>Придумайте пароль</span>
<input placeholder="Пароль" />
</div>
<div className="trackerRegistration__inputContainer">
<span>Повторите пароль*</span>
<span>Повторите пароль</span>
<input placeholder="Повторите пароль" />
</div>
</div>

View File

@ -14,7 +14,7 @@ export function createMarkup(text) {
// `<div class='experience__block'>
// <div class="summary__sections__head">
// <h3>Описание опыта работы</h3>
// <button>Редактировать раздел</button>
// <button>Редактировать</button>
// </div>
// <div class="experience__content">${item.split("<h3>")[0]}</div>
// </div>`