8
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -3216,6 +3216,14 @@ | ||||
|       "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.1.tgz", | ||||
|       "integrity": "sha512-evY7DN8qSIbsW2H/TWQ1bX3sXN1d4MNb5Vb4n7BzPuCwRHdkZ1H2eNLuSh73EoQqkGKUtju2G2HCcjCfhvZIAA==" | ||||
|     }, | ||||
|     "axios": { | ||||
|       "version": "0.21.1", | ||||
|       "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", | ||||
|       "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", | ||||
|       "requires": { | ||||
|         "follow-redirects": "^1.10.0" | ||||
|       } | ||||
|     }, | ||||
|     "axobject-query": { | ||||
|       "version": "2.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", | ||||
|   | ||||
| @@ -7,6 +7,7 @@ | ||||
|     "@testing-library/jest-dom": "^5.12.0", | ||||
|     "@testing-library/react": "^11.2.7", | ||||
|     "@testing-library/user-event": "^12.8.3", | ||||
|     "axios": "^0.21.1", | ||||
|     "bootstrap": "^4.6.0", | ||||
|     "dotenv": "^10.0.0", | ||||
|     "eslint": "^7.27.0", | ||||
|   | ||||
							
								
								
									
										10
									
								
								src/App.js
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/App.js
									
									
									
									
									
								
							| @@ -16,18 +16,18 @@ const App = () => { | ||||
|   return ( | ||||
|     <Router> | ||||
|         <Switch> | ||||
|           <Route path='/auth' exact> | ||||
|             {/* <AuthPageForPartners /> */} | ||||
|           <Route path='/authdev' exact> | ||||
|             <AuthPageForDevelopers /> | ||||
|           </Route> | ||||
|           <Route path='/auth' exact> | ||||
|             <AuthPageForPartners /> | ||||
|           </Route> | ||||
|           <ProtectedRoute path='/' exact component={HomePage} /> | ||||
|           <ProtectedRoute path='/candidate/:id' component={CandidatePage} /> | ||||
|           <ProtectedRoute path='/calendar' component={CalendarPage} /> | ||||
|           <ProtectedRoute path='/form' component={FormPage} /> | ||||
|           <ProtectedRoute path='/report' component={ReportPage} /> | ||||
|           <Route> | ||||
|             <div>Page not found</div> | ||||
|           </Route> | ||||
|           <ProtectedRoute component={()=><div>Page not found</div>} /> | ||||
|         </Switch> | ||||
|     </Router> | ||||
|   ) | ||||
|   | ||||
							
								
								
									
										5
									
								
								src/api/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/api/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| import axios from 'axios'; | ||||
|  | ||||
| export default axios.create({ | ||||
|   baseURL: process.env.REACT_APP_API_URL | ||||
| }); | ||||
| @@ -16,7 +16,7 @@ import { fetchAuth } from '../../server/server' | ||||
|  | ||||
| import { useSelector } from 'react-redux' | ||||
| import { selectAuth } from '../../redux/outstaffingSlice'; | ||||
| import { Redirect } from 'react-router-dom'; | ||||
| import { Redirect, Link } from 'react-router-dom'; | ||||
|  | ||||
| const AuthForDevelopers = () => { | ||||
|   const dispatch = useDispatch() | ||||
| @@ -25,8 +25,6 @@ const AuthForDevelopers = () => { | ||||
|   const [username, setUsername] = useState('') | ||||
|   const [password, setPassword] = useState('') | ||||
|  | ||||
|   console.log('i', isAuth) | ||||
|  | ||||
|   if(isAuth) { | ||||
|     return <Redirect to='/' /> | ||||
|   } | ||||
| @@ -79,6 +77,10 @@ const AuthForDevelopers = () => { | ||||
|                   > | ||||
|                     Войти | ||||
|                   </button> | ||||
|  | ||||
|                   <button className={`${style.form__btn} ${style.auth__link}`}> | ||||
|                     <Link to='/auth'>Для партнёров</Link> | ||||
|                   </button> | ||||
|                 </form> | ||||
|               </div> | ||||
|             </div> | ||||
|   | ||||
| @@ -399,3 +399,16 @@ | ||||
|   line-height: normal; | ||||
|   margin-left: 24px; | ||||
| } | ||||
|  | ||||
| .auth__link { | ||||
|   display: block; | ||||
|   margin-top: 1.3rem; | ||||
| } | ||||
|  | ||||
|  | ||||
| .auth__link a { | ||||
|   display: block; | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   color: #fff; | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| import React from 'react'; | ||||
| import React, { useState } from 'react'; | ||||
| import { useDispatch } from 'react-redux'; | ||||
| import { auth } from '../../redux/outstaffingSlice'; | ||||
| import style from './AuthForPartners.module.css'; | ||||
| @@ -12,9 +12,22 @@ import phone from '../../images/phone.png'; | ||||
| import telegram from '../../images/telegram.png'; | ||||
| import vector from '../../images/Vector_Smart_Object.png'; | ||||
| import vectorBlack from '../../images/Vector_Smart_Object_black.png'; | ||||
| import { fetchAuth } from '../../server/server' | ||||
|  | ||||
| import { useSelector } from 'react-redux' | ||||
| import { selectAuth } from '../../redux/outstaffingSlice'; | ||||
| import { Redirect, Link } from 'react-router-dom'; | ||||
|  | ||||
| const AuthForPartners = () => { | ||||
|   const dispatch = useDispatch(); | ||||
|   const dispatch = useDispatch() | ||||
|   const isAuth = useSelector(selectAuth) | ||||
|  | ||||
|   const [username, setUsername] = useState('') | ||||
|   const [password, setPassword] = useState('') | ||||
|  | ||||
|   if(isAuth) { | ||||
|     return <Redirect to='/' /> | ||||
|   } | ||||
|  | ||||
|   return ( | ||||
|     <section className={style.partners}> | ||||
| @@ -34,14 +47,33 @@ const AuthForPartners = () => { | ||||
|                 </div> | ||||
|                 <form className={style.partners__form}> | ||||
|                   <label htmlFor="login">Ваш логин:</label> | ||||
|                   <input id="login" type="text" placeholder="Логин" /> | ||||
|                   <input id="login" type="text" placeholder="Логин" | ||||
|                     value={username} | ||||
|                     onChange={(e) => setUsername(e.target.value)} | ||||
|                   /> | ||||
|  | ||||
|                   <label htmlFor="password">Пароль:</label> | ||||
|                   <input id="password" type="password" placeholder="Пароль" /> | ||||
|                   <input id="password" type="password" placeholder="Пароль"  | ||||
|                     value={password} | ||||
|                     onChange={(e) => setPassword(e.target.value)} | ||||
|                   /> | ||||
|  | ||||
|                   <button className={style.form__btn} type="submit" onClick={() => dispatch(auth(true))}> | ||||
|                   <button className={style.form__btn}  | ||||
|                     onClick={(e) => { | ||||
|                       e.preventDefault(); | ||||
|                       fetchAuth({ | ||||
|                         username, | ||||
|                         password, | ||||
|                         dispatch: ()=> dispatch(auth(true)) | ||||
|                       }) | ||||
|                     } | ||||
|                   }> | ||||
|                     Войти | ||||
|                   </button> | ||||
|  | ||||
|                   <button className={`${style.form__btn} ${style.auth__link}`}> | ||||
|                     <Link to='/authdev'>Для разработчиков</Link> | ||||
|                   </button> | ||||
|                 </form> | ||||
|               </div> | ||||
|             </div> | ||||
|   | ||||
| @@ -400,3 +400,15 @@ | ||||
|   line-height: normal; | ||||
|   margin-left: 24px; | ||||
| } | ||||
|  | ||||
| .auth__link { | ||||
|   display: block; | ||||
|   margin-top: 1.3rem; | ||||
| } | ||||
|  | ||||
| .auth__link a { | ||||
|   display: block; | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   color: #fff; | ||||
| } | ||||
| @@ -18,7 +18,7 @@ const Candidate = () => { | ||||
|   const dispatch = useDispatch(); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     fetchItemsForId('https://guild.craft-group.xyz/api/profile/', Number(candidateId)).then((el) => | ||||
|     fetchItemsForId(`${process.env.REACT_APP_API_URL}/api/profile/`, Number(candidateId)).then((el) => | ||||
|       dispatch(currentCandidate(el)) | ||||
|     ); | ||||
|   }, [dispatch, candidateId]); | ||||
|   | ||||
| @@ -14,7 +14,7 @@ const Description = ({ onLoadMore }) => { | ||||
|   const [allCandidates, getAllCandidates] = useState([]); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     fetchProfile('https://guild.craft-group.xyz/api/profile?limit=', 1000).then((p) => getAllCandidates(p)); | ||||
|     fetchProfile(`${process.env.REACT_APP_API_URL}/api/profile?limit=`, 1000).then((p) => getAllCandidates(p)); | ||||
|   }, []); | ||||
|  | ||||
|   return ( | ||||
|   | ||||
| @@ -30,7 +30,7 @@ const Form = () => { | ||||
|     formData.append('phone', data.phone); | ||||
|     formData.append('comment', data.comment); | ||||
|  | ||||
|     fetchForm('https://guild.craft-group.xyz/api/profile/add-to-interview', formData); | ||||
|     fetchForm(`${process.env.REACT_APP_API_URL}/api/profile/add-to-interview`, formData); | ||||
|   }; | ||||
|  | ||||
|   const goBack = () => { | ||||
|   | ||||
| @@ -11,11 +11,11 @@ const Home = () => { | ||||
|   const dispatch = useDispatch(); | ||||
|  | ||||
|   useEffect(() => { | ||||
|     fetchProfile('https://guild.craft-group.xyz/api/profile?limit=', index).then((profileArr) => | ||||
|     fetchProfile(`${process.env.REACT_APP_API_URL}/api/profile?limit=`, index).then((profileArr) => | ||||
|       dispatch(profiles(profileArr)) | ||||
|     ); | ||||
|  | ||||
|     fetchSkills('https://guild.craft-group.xyz/api/skills/skills-on-main-page').then((skills) => { | ||||
|     fetchSkills(`${process.env.REACT_APP_API_URL}/api/skills/skills-on-main-page`).then((skills) => { | ||||
|       const keys = Object.keys(skills); | ||||
|       const values = Object.values(skills); | ||||
|  | ||||
|   | ||||
| @@ -28,7 +28,7 @@ const Outstaffing = () => { | ||||
|           <div className="row"> | ||||
|             <div className="col-12 col-xl-4"> | ||||
|               <OutstaffingBlock | ||||
|                 dataTags={tagsArr.flat().filter((tag) => tag.name === 'skills_front')} | ||||
|                 dataTags={tagsArr && tagsArr.flat().filter((tag) => tag.name === 'skills_front')} | ||||
|                 img={front} | ||||
|                 header="Фронтенд" | ||||
|               /> | ||||
|   | ||||
| @@ -15,7 +15,7 @@ const TagSelect = () => { | ||||
|   const handleSubmit = () => { | ||||
|     const filterItemsId = itemsArr.map((item) => item.id).join(); | ||||
|  | ||||
|     fetchItemsForId(`https://guild.craft-group.xyz/api/profile?skills=`, filterItemsId).then((el) => | ||||
|     fetchItemsForId(`${process.env.REACT_APP_API_URL}/api/profile?skills=`, filterItemsId).then((el) => | ||||
|       dispatch(filteredCandidates(el)) | ||||
|     ); | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,9 @@ export const fetchProfile = async (link, index) => { | ||||
|   try { | ||||
|     const response = await fetch(`${link}${index}`, { | ||||
|       headers: { | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}` | ||||
|         'Access-Control-Request-Headers': 'authorization', | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}`, | ||||
|         'Origin': `${process.env.REACT_APP_BASE_URL}`, | ||||
|       } | ||||
|     }) | ||||
|     let data = await response.json() | ||||
| @@ -15,7 +17,9 @@ export const fetchSkills = async (link) => { | ||||
|   try { | ||||
|     const response = await fetch(link, { | ||||
|       headers: { | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}` | ||||
|         'Access-Control-Request-Headers': 'authorization', | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}`, | ||||
|         'Origin': `${process.env.REACT_APP_BASE_URL}`, | ||||
|       } | ||||
|     }) | ||||
|     let data = await response.json() | ||||
| @@ -25,10 +29,13 @@ export const fetchSkills = async (link) => { | ||||
| } | ||||
|  | ||||
| export const fetchItemsForId = async (link, id) => { | ||||
|   console.log(`Bearer ${localStorage.getItem('auth_token')}`); | ||||
|   try { | ||||
|     const response = await fetch(`${link}${id}`, { | ||||
|       headers: { | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}` | ||||
|         // 'Access-Control-Request-Headers': 'authorization', | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}`, | ||||
|         'Origin': `${process.env.REACT_APP_BASE_URL}`, | ||||
|       } | ||||
|     }) | ||||
|     let data = await response.json() | ||||
| @@ -42,7 +49,9 @@ export const fetchForm = async (link, info) => { | ||||
|     const response = await fetch(link, { | ||||
|       method: 'POST', | ||||
|       headers: { | ||||
|         'Access-Control-Request-Headers': 'authorization', | ||||
|         'Authorization': `Bearer ${localStorage.getItem('auth_token')}`, | ||||
|         'Origin': `${process.env.REACT_APP_BASE_URL}`, | ||||
|         'Content-Type': 'multipart/form-data' | ||||
|       }, | ||||
|       body: info | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 GitHub
						GitHub