Compare commits

...

3 Commits

Author SHA1 Message Date
f180586eb3 Merge pull request 'routes' (#26) from routes into main
Reviewed-on: #26
2024-03-15 18:22:17 +03:00
Mikola
78f2b34810 guardian routes 2024-03-15 18:19:48 +03:00
Mikola
f2ad6b43bd guardian routes 2024-03-15 18:18:10 +03:00
13 changed files with 251 additions and 163 deletions

View File

@ -10,50 +10,9 @@ import {
import { getNotification } from "@redux/outstaffingSlice"; import { getNotification } from "@redux/outstaffingSlice";
import { Article } from "@pages/Article/Article"; import { MainPage } from "@pages/MainPage/MainPage";
import { Auth } from "@pages/Auth/Auth";
import { AuthForCandidate } from "@pages/AuthForCandidate/AuthForCandidate";
import { Blog } from "@pages/Blog/Blog";
import CatalogSpecialists from "@pages/CatalogSpecialists/CatalogSpecialists";
import { CompanyInfo } from "@pages/CompanyInfo/CompanyInfo";
import { FormPage } from "@pages/FormPage/FormPage";
import { Forms } from "@pages/Forms/Forms";
import { FrequentlyAskedQuestion } from "@pages/FrequentlyAskedQuestion/FrequentlyAskedQuestion";
import { FrequentlyAskedQuestions } from "@pages/FrequentlyAskedQuestions/FrequentlyAskedQuestions";
import { Home } from "@pages/Home/Home";
import { PartnerAddRequest } from "@pages/PartnerAddRequest/PartnerAddRequest";
import { PartnerBid } from "@pages/PartnerBid/PartnerBid";
import { PartnerEmployeeReport } from "@pages/PartnerEmployeeReport/PartnerEmployeeReport";
import { PartnerEmployees } from "@pages/PartnerEmployees/PartnerEmployees";
import { PartnerRequests } from "@pages/PartnerRequests/PartnerRequests";
import { PartnerSettings } from "@pages/PartnerSettings/PartnerSettings";
import { PartnerTreaties } from "@pages/PartnerTreaties/PartnerTreaties";
import { PartnerCategories } from "@pages/PartnerСategories/PartnerСategories";
import { Payouts } from "@pages/Payouts/Payouts";
import { Profile } from "@pages/Profile/Profile";
import { ProfileCandidate } from "@pages/ProfileCandidate/ProfileCandidate";
import { ProjectTracker } from "@pages/ProjectTracker/ProjectTracker";
import { PassingTests } from "@pages/Quiz/PassingTests";
import { QuizPage } from "@pages/Quiz/QuizPage";
import { QuizReportPage } from "@pages/Quiz/QuizReportPage";
import { RegistrationForCandidate } from "@pages/RegistrationForCandidate/RegistrationForCandidate";
import { RegistrationSetting } from "@pages/RegistrationSetting/RegistrationSetting";
import { SingleReportPage } from "@pages/SingleReportPage/SingleReportPage";
import Statistics from "@pages/Statistics/Statistics";
import { Summary } from "@pages/Summary/Summary";
import { Tracker } from "@pages/Tracker/Tracker";
import { TrackerAuth } from "@pages/TrackerAuth/TrackerAuth";
import { TrackerIntro } from "@pages/TrackerIntro/TrackerIntro";
import { TrackerRegistration } from "@pages/TrackerRegistration/TrackerRegistration";
import { ViewReport } from "@pages/ViewReport/ViewReport";
import { Calendar } from "@components/Calendar/Calendar";
import { Candidate } from "@components/Candidate/Candidate";
import { FreeDevelopers } from "@components/FreeDevelopers/FreeDevelopers";
import { TicketFullScreen } from "@components/Modal/Tracker/TicketFullScreen/TicketFullScreen";
import { Notification } from "@components/Notification/Notification"; import { Notification } from "@components/Notification/Notification";
import { ProfileCalendar } from "@components/ProfileCalendar/ProfileCalendar";
import { ReportForm } from "@components/ReportForm/ReportForm";
import "assets/fonts/stylesheet.css"; import "assets/fonts/stylesheet.css";
import "assets/global.scss"; import "assets/global.scss";
@ -64,109 +23,7 @@ const App = () => {
<> <>
<Router> <Router>
<Routes> <Routes>
<Route exact path="/auth" element={<Auth />} /> <Route path="*" element={<MainPage />} />
<Route exact path="/tracker-intro" element={<TrackerIntro />} />
<Route exact path="/tracker-auth" element={<TrackerAuth />} />
<Route exact path="/forms" element={<Forms />} />
<Route
exact
path="/tracker-registration"
element={<TrackerRegistration />}
/>
<Route exact path="/company" element={<CompanyInfo />} />
<Route
exact
path="/registration-setting"
element={<RegistrationSetting />}
/>
<Route
exact
path="/catalog-specialists"
element={<CatalogSpecialists />}
/>
<Route exact path="/worker/:id" element={<FreeDevelopers />} />
<Route
exact
path="/tracker/task/:id"
element={<TicketFullScreen />}
></Route>
<Route
exact
path="/tracker/project/:id"
element={<ProjectTracker />}
/>
<Route exact path="/auth-candidate" element={<AuthForCandidate />} />
<Route
exact
path="/registration-candidate"
element={<RegistrationForCandidate />}
/>
<Route exact path="/blog" element={<Blog />}></Route>
<Route exact path="/blog/article/:id" element={<Article />}></Route>
<Route
exact
path="/frequently-asked-questions"
element={<FrequentlyAskedQuestions />}
/>
<Route
exact
path="/frequently-asked-question/:id"
element={<FrequentlyAskedQuestion />}
/>
<Route exact path="/candidate/:id" element={<Candidate />} />
<Route exact path="/candidate/:id/form" element={<FormPage />} />
<Route path="/:userId/calendar" element={<Calendar />} />
<Route path="/report/:id" element={<SingleReportPage />} />
<Route exact path="profile">
<Route index element={<Profile />} />
<Route exact path="catalog" element={<Home />} />
<Route exact path="calendar" element={<ProfileCalendar />} />
<Route exact path="calendar/report" element={<ReportForm />} />
<Route
exact
path="calendar/view/:date/:id"
element={<ViewReport />}
/>
<Route exact path="summary" element={<Summary />} />
<Route exact path="tracker" element={<Tracker />} />
<Route exact path="statistics/:id" element={<Statistics />} />
<Route exact path="payouts" element={<Payouts />} />
<Route exact path="settings" element={<PartnerSettings />} />
<Route exact path="requests" element={<PartnerRequests />} />
<Route exact path="requests-add" element={<PartnerAddRequest />} />
<Route exact path="requests-edit" element={<PartnerAddRequest />} />
<Route exact path="requests-bid" element={<PartnerBid />} />
<Route exact path="employees" element={<PartnerCategories />} />
<Route
exact
path="employees/report/:uuid"
element={<PartnerEmployeeReport />}
/>
<Route exact path="treaties" element={<PartnerTreaties />} />
<Route exact path="quiz">
<Route index element={<QuizPage />} />
<Route exact path="test/:uuid" element={<PassingTests />} />
<Route exact path="report/:uuid" element={<QuizReportPage />} />
</Route>
<Route
exact
path="categories/employees"
element={<PartnerEmployees />}
/>
</Route>
<Route exact path="profile-candidate/:id">
<Route index element={<ProfileCandidate />} />
</Route>
<Route path="*" element={<Navigate to="/auth" replace />} />
</Routes> </Routes>
</Router> </Router>
{notification.show && <Notification />} {notification.show && <Notification />}

View File

@ -41,7 +41,7 @@ export const apiRequest = (
if (response.data?.redirect || response.status === 401) { if (response.data?.redirect || response.status === 401) {
window.location.replace("/auth"); window.location.replace("/auth");
localStorage.clear(); localStorage.clear();
// dispatch(auth(false)); store.dispatch(auth(false));
store.dispatch(setProfileInfo({})); store.dispatch(setProfileInfo({}));
} }
return resolve(response); return resolve(response);

View File

@ -70,6 +70,7 @@ export const AuthBox = ({ title }) => {
dispatch(setUserInfo(res)); dispatch(setUserInfo(res));
dispatch(loading(false)); dispatch(loading(false));
dispatch(setRole("ROLE_PARTNER")); dispatch(setRole("ROLE_PARTNER"));
navigate("/profile");
} }
}); });
} }

View File

@ -24,9 +24,9 @@ export const AuthHeader = () => {
<span>Главная</span> <span>Главная</span>
</NavLink> </NavLink>
</li> </li>
<li> {/*<li>*/}
<NavLink to={"/profile"}>Кабинет разработчика</NavLink> {/* <NavLink to={"/profile"}>Кабинет разработчика</NavLink>*/}
</li> {/*</li>*/}
<li> <li>
<NavLink to={"/tracker-intro"}>Трекер</NavLink> <NavLink to={"/tracker-intro"}>Трекер</NavLink>
</li> </li>

View File

@ -81,7 +81,7 @@ export const Navigation = () => {
<NavLink <NavLink
key={index} key={index}
end end
to={link.path === "/quiz" ? link.path : `/profile${link.path}`} to={`/profile${link.path}`}
className={ className={
currentPath.includes(link.path) || currentPath.includes(link.path) ||
currentPath.includes(link.active) currentPath.includes(link.active)

View File

@ -91,11 +91,10 @@ export const ProfileHeader = () => {
}); });
}, []); }, []);
const handler = () => { const handler = (e) => {
setIsLoggingOut(true); e.preventDefault();
localStorage.clear(); localStorage.clear();
dispatch(auth(false)); dispatch(auth(false));
setIsLoggingOut(false);
navigate("/auth"); navigate("/auth");
dispatch(setProfileInfo({})); dispatch(setProfileInfo({}));
}; };

View File

@ -19,16 +19,16 @@ import cross from "assets/images/cross.png";
import "./auth.scss"; import "./auth.scss";
export const Auth = () => { export const Auth = () => {
const isAuth = useSelector(selectAuth); // const isAuth = useSelector(selectAuth);
let navigate = useNavigate(); // let navigate = useNavigate();
//
// const getToken = localStorage.getItem("auth_token");
const getToken = localStorage.getItem("auth_token"); // useEffect(() => {
// if (isAuth || getToken) {
useEffect(() => { // navigate("/profile");
if (isAuth || getToken) { // }
navigate("/profile"); // }, [getToken]);
}
}, [getToken]);
return ( return (
<section className="auth-partners"> <section className="auth-partners">

View File

@ -0,0 +1,33 @@
import React from "react";
import { useMemo } from "react";
import { useSelector } from "react-redux";
import { selectAuth } from "@redux/outstaffingSlice";
import { DeveloperPage } from "@pages/roles/DeveloperPage";
import { GuestPage } from "@pages/roles/GuestPage";
import { PartnerPage } from "@pages/roles/PartnerPage";
export const MainPage = () => {
const roleId = localStorage.getItem("role_status");
const isAuth = useSelector(selectAuth);
const user_roles = {
developer: 4,
partner: 18
};
const CurrentRolePage = useMemo(() => getRolePage(Number(roleId)), [isAuth]);
function getRolePage(roleId) {
switch (roleId) {
case user_roles.developer:
return DeveloperPage;
case user_roles.partner:
return PartnerPage;
default:
return GuestPage;
}
}
return <CurrentRolePage />;
};

View File

@ -64,6 +64,14 @@ export const PartnerCategories = () => {
}, },
{ {
label: "Резюме", label: "Резюме",
renderCell: (item) => (
<Link className="table__link" to={`/candidate/${item.user_id}`}>
Резюме
</Link>
)
},
{
label: "Отчет",
renderCell: (item) => ( renderCell: (item) => (
<Link <Link
className="table__link" className="table__link"

View File

@ -0,0 +1,51 @@
import React from "react";
import { Navigate, Route, Routes } from "react-router-dom";
import { PartnerSettings } from "@pages/PartnerSettings/PartnerSettings";
import { PartnerTreaties } from "@pages/PartnerTreaties/PartnerTreaties";
import { Payouts } from "@pages/Payouts/Payouts";
import { Profile } from "@pages/Profile/Profile";
import { ProjectTracker } from "@pages/ProjectTracker/ProjectTracker";
import { PassingTests } from "@pages/Quiz/PassingTests";
import { QuizPage } from "@pages/Quiz/QuizPage";
import { QuizReportPage } from "@pages/Quiz/QuizReportPage";
import Statistics from "@pages/Statistics/Statistics";
import { Summary } from "@pages/Summary/Summary";
import { Tracker } from "@pages/Tracker/Tracker";
import { ViewReport } from "@pages/ViewReport/ViewReport";
import { TicketFullScreen } from "@components/Modal/Tracker/TicketFullScreen/TicketFullScreen";
import { ProfileCalendar } from "@components/ProfileCalendar/ProfileCalendar";
import { ReportForm } from "@components/ReportForm/ReportForm";
export const DeveloperPage = () => {
return (
<Routes>
<Route
exact
path="/tracker/task/:id"
element={<TicketFullScreen />}
></Route>
<Route exact path="/tracker/project/:id" element={<ProjectTracker />} />
<Route exact path="profile">
<Route index element={<Profile />} />
<Route exact path="calendar" element={<ProfileCalendar />} />
<Route exact path="calendar/report" element={<ReportForm />} />
<Route exact path="calendar/view/:date/:id" element={<ViewReport />} />
<Route exact path="summary" element={<Summary />} />
<Route exact path="tracker" element={<Tracker />} />
<Route exact path="statistics/:id" element={<Statistics />} />
<Route exact path="payouts" element={<Payouts />} />
<Route exact path="settings" element={<PartnerSettings />} />
<Route exact path="treaties" element={<PartnerTreaties />} />
<Route exact path="quiz">
<Route index element={<QuizPage />} />
<Route exact path="test/:uuid" element={<PassingTests />} />
<Route exact path="report/:uuid" element={<QuizReportPage />} />
</Route>
</Route>
<Route path="*" element={<Navigate to="/profile" replace />} />
</Routes>
);
};

View File

@ -0,0 +1,74 @@
import React from "react";
import { Navigate, Route, Routes } from "react-router-dom";
import { Article } from "@pages/Article/Article";
import { Auth } from "@pages/Auth/Auth";
import { AuthForCandidate } from "@pages/AuthForCandidate/AuthForCandidate";
import { Blog } from "@pages/Blog/Blog";
import CatalogSpecialists from "@pages/CatalogSpecialists/CatalogSpecialists";
import { CompanyInfo } from "@pages/CompanyInfo/CompanyInfo";
import { Forms } from "@pages/Forms/Forms";
import { FrequentlyAskedQuestion } from "@pages/FrequentlyAskedQuestion/FrequentlyAskedQuestion";
import { FrequentlyAskedQuestions } from "@pages/FrequentlyAskedQuestions/FrequentlyAskedQuestions";
import { ProfileCandidate } from "@pages/ProfileCandidate/ProfileCandidate";
import { RegistrationForCandidate } from "@pages/RegistrationForCandidate/RegistrationForCandidate";
import { RegistrationSetting } from "@pages/RegistrationSetting/RegistrationSetting";
import { SingleReportPage } from "@pages/SingleReportPage/SingleReportPage";
import { TrackerAuth } from "@pages/TrackerAuth/TrackerAuth";
import { TrackerIntro } from "@pages/TrackerIntro/TrackerIntro";
import { TrackerRegistration } from "@pages/TrackerRegistration/TrackerRegistration";
import { FreeDevelopers } from "@components/FreeDevelopers/FreeDevelopers";
export const GuestPage = () => {
return (
<Routes>
<Route exact path="/auth" element={<Auth />} />
<Route path="*" element={<Navigate to="/auth" replace />} />
<Route exact path="/tracker-intro" element={<TrackerIntro />} />
<Route exact path="/tracker-auth" element={<TrackerAuth />} />
<Route exact path="/forms" element={<Forms />} />
<Route
exact
path="/tracker-registration"
element={<TrackerRegistration />}
/>
<Route exact path="/company" element={<CompanyInfo />} />
<Route
exact
path="/registration-setting"
element={<RegistrationSetting />}
/>
<Route
exact
path="/catalog-specialists"
element={<CatalogSpecialists />}
/>
<Route exact path="/worker/:id" element={<FreeDevelopers />} />
<Route exact path="/auth-candidate" element={<AuthForCandidate />} />
<Route
exact
path="/registration-candidate"
element={<RegistrationForCandidate />}
/>
<Route exact path="/blog" element={<Blog />}></Route>
<Route exact path="/blog/article/:id" element={<Article />}></Route>
<Route
exact
path="/frequently-asked-questions"
element={<FrequentlyAskedQuestions />}
/>
<Route
exact
path="/frequently-asked-question/:id"
element={<FrequentlyAskedQuestion />}
/>
<Route path="/report/:id" element={<SingleReportPage />} />
<Route exact path="profile-candidate/:id">
<Route index element={<ProfileCandidate />} />
</Route>
</Routes>
);
};

View File

@ -0,0 +1,65 @@
import React from "react";
import { Navigate, Route, Routes } from "react-router-dom";
import { FormPage } from "@pages/FormPage/FormPage";
import { Home } from "@pages/Home/Home";
import { PartnerAddRequest } from "@pages/PartnerAddRequest/PartnerAddRequest";
import { PartnerBid } from "@pages/PartnerBid/PartnerBid";
import { PartnerEmployeeReport } from "@pages/PartnerEmployeeReport/PartnerEmployeeReport";
import { PartnerEmployees } from "@pages/PartnerEmployees/PartnerEmployees";
import { PartnerRequests } from "@pages/PartnerRequests/PartnerRequests";
import { PartnerSettings } from "@pages/PartnerSettings/PartnerSettings";
import { PartnerTreaties } from "@pages/PartnerTreaties/PartnerTreaties";
import { PartnerCategories } from "@pages/PartnerСategories/PartnerСategories";
import { Profile } from "@pages/Profile/Profile";
import { ProjectTracker } from "@pages/ProjectTracker/ProjectTracker";
import Statistics from "@pages/Statistics/Statistics";
import { Tracker } from "@pages/Tracker/Tracker";
import { ViewReport } from "@pages/ViewReport/ViewReport";
import { Calendar } from "@components/Calendar/Calendar";
import { Candidate } from "@components/Candidate/Candidate";
import { TicketFullScreen } from "@components/Modal/Tracker/TicketFullScreen/TicketFullScreen";
export const PartnerPage = () => {
return (
<Routes>
<Route exact path="/candidate/:id" element={<Candidate />} />
<Route exact path="/candidate/:id/form" element={<FormPage />} />
<Route path="/:userId/calendar" element={<Calendar />} />
<Route
exact
path="/tracker/task/:id"
element={<TicketFullScreen />}
></Route>
<Route exact path="/tracker/project/:id" element={<ProjectTracker />} />
<Route exact path="profile">
<Route index element={<Profile />} />
<Route exact path="catalog" element={<Home />} />
<Route exact path="calendar/view/:date/:id" element={<ViewReport />} />
<Route exact path="tracker" element={<Tracker />} />
<Route exact path="statistics/:id" element={<Statistics />} />
<Route exact path="settings" element={<PartnerSettings />} />
<Route exact path="requests" element={<PartnerRequests />} />
<Route exact path="requests-add" element={<PartnerAddRequest />} />
<Route exact path="requests-edit" element={<PartnerAddRequest />} />
<Route exact path="requests-bid" element={<PartnerBid />} />
<Route exact path="employees" element={<PartnerCategories />} />
<Route
exact
path="employees/report/:uuid"
element={<PartnerEmployeeReport />}
/>
<Route exact path="treaties" element={<PartnerTreaties />} />
<Route
exact
path="categories/employees"
element={<PartnerEmployees />}
/>
</Route>
<Route path="*" element={<Navigate to="/profile" replace />} />
</Routes>
);
};

View File

@ -6,7 +6,7 @@ const initialState = {
filteredCandidates: null, filteredCandidates: null,
selectedItems: [], selectedItems: [],
currentCandidate: {}, currentCandidate: {},
auth: false, auth: null,
positionId: null, positionId: null,
profileInfo: {}, profileInfo: {},
reportsDates: "", reportsDates: "",