Ignore:
Timestamp:
06/10/24 22:34:32 (3 weeks ago)
Author:
223021 <daniel.ilievski.2@…>
Branches:
main
Children:
befb988
Parents:
28b3398
Message:

Added no access page for new recruiters and admin panel for granting access

Location:
jobvista-frontend/src/views
Files:
5 added
3 edited

Legend:

Unmodified
Added
Removed
  • jobvista-frontend/src/views/dashboard/Dashboard.js

    r28b3398 rb248810  
    44import {useEffect, useState} from "react";
    55import {JobAdvertisementActions} from "../../redux/actions/jobAdvertisementActions";
    6 import {formatRelativeTime, sortElementsByDateCreated} from "../../utils/utils";
     6import {formatRelativeTime, sortElementsBy} from "../../utils/utils";
    77import {dataRangeOptions, industryOptions, industryOptionsFilter, sortOptions} from "../selectOptions";
    88import Select from "react-select";
     
    1010import {Link} from "react-router-dom";
    1111import JobType from "../../enumerations/JobType";
     12import {AUTH_TOKEN} from "../../axios/axiosInstance";
     13import {jwtDecode} from "jwt-decode";
    1214
    13 export const Dashboard = () => {
     15export const Dashboard = (props) => {
    1416
    1517    const dispatch = useDispatch();
     
    1719    const [jobAdvertisements, setJobAdvertisements] = useState([]);
    1820    let jobAdvertisementsState = useSelector(state => state.jobAd.jobAdvertisements)
    19     const auth = useSelector(state => state.auth.currentUser);
     21    const auth = useSelector(state => state.auth);
    2022
    21     const [role, setRole] = useState("");
     23    // const [role, setRole] = useState("");
    2224    const [selectedSortOrder, setSelectedSortOrder] = useState("date_newest");
    2325    const [selectedIndustry, setSelectedIndustry] = useState("all");
     
    2527    const [dispatched, setDispatched] = useState(false)
    2628
    27     useEffect(() => {
    28         if (auth) {
    29             setRole(auth.role);
    30         }
    31     }, [auth]);
     29    // const [user, setUser] = useState(null);
     30    //
     31    // useEffect(() => {
     32    //     const token = localStorage.getItem(AUTH_TOKEN);
     33    //     if (token!=null) {
     34    //         try {
     35    //             const decodedToken = jwtDecode(token);
     36    //             setUser({
     37    //                 name: decodedToken.name,
     38    //                 role: decodedToken.role,
     39    //                 hasAccess: decodedToken.access,
     40    //             });
     41    //         } catch (error) {
     42    //             console.error('Failed to decode token', error);
     43    //         }
     44    //     }
     45    //     console.log(user)
     46    // }, [auth]);
     47
     48    // useEffect(() => {
     49    //     if (auth) {
     50    //         setRole(auth.role);
     51    //     }
     52    //     console.log(props)
     53    // }, [auth]);
    3254
    3355    useEffect(() => {
     
    3557            dispatch(JobAdvertisementActions.fetchJobAdvertisements((success, response) => {
    3658                if (success && response.data.length > 0) {
    37                     setJobAdvertisements(sortElementsByDateCreated(response.data))
     59                    setJobAdvertisements(sortElementsBy(response.data))
    3860                }
    3961                setDispatched(true)
     
    6284
    6385    return (
     86
    6487        <div className="container">
    6588            <div className="head-dashboard-box">
  • jobvista-frontend/src/views/job_advertisements/JobAdvertisements.js

    r28b3398 rb248810  
    55import {useEffect, useState} from "react";
    66import {JobAdvertisementActions} from "../../redux/actions/jobAdvertisementActions";
    7 import {formatRelativeTime, sortElementsByDateCreated} from "../../utils/utils";
     7import {formatRelativeTime, sortElementsBy} from "../../utils/utils";
    88import {dataRangeOptions, industryOptions, industryOptionsFilter, sortOptions} from "../selectOptions";
    99import Select from "react-select";
     
    3737            dispatch(JobAdvertisementActions.fetchJobAdvertisementsByRecruiter((success, response) => {
    3838                if (success && response.data.length > 0) {
    39                     setJobAdvertisementsByRecruiter(sortElementsByDateCreated(response.data))
     39                    setJobAdvertisementsByRecruiter(sortElementsBy(response.data))
    4040                }
    4141                console.log("Fetch job advertisements by recruiter GET")
  • jobvista-frontend/src/views/static/Header.js

    r28b3398 rb248810  
    11import {Link, NavLink} from "react-router-dom";
    22import "./Header.css"
     3import { jwtDecode } from "jwt-decode";
    34import {useDispatch, useSelector} from 'react-redux';
    45import {useEffect, useState} from "react";
     
    67import Roles from "../../enumerations/Roles";
    78import {useNavigate} from "react-router";
     9import {AUTH_TOKEN} from "../../axios/axiosInstance";
    810
    911export const Header = (props) => {
     
    1618    const [username, setUsername] = useState("");
    1719
     20    const [user, setUser] = useState("");
     21
    1822    const signOut = () => {
    1923        dispatch(AuthActions.signOut());
    2024        window.location = "/";
    2125    }
     26
     27    useEffect(() => {
     28        const token = localStorage.getItem(AUTH_TOKEN);
     29        if (token!=null) {
     30            try {
     31                const decodedToken = jwtDecode(token);
     32                setUser({
     33                    name: decodedToken.name,
     34                    role: decodedToken.role,
     35                    hasAccess: decodedToken.hasAccess,
     36                });
     37            } catch (error) {
     38                console.error('Failed to decode token', error);
     39            }
     40        }
     41    }, [auth]);
    2242
    2343    useEffect(() => {
     
    4969                            </>
    5070                        }
     71                        {role===Roles.ADMIN &&
     72                            <>
     73                                <NavLink to="/admin-panel" className="nav-item nav-link">Admin Panel</NavLink>
     74                            </>
     75
     76                        }
    5177                        <NavLink to="/about" className="nav-item nav-link">About</NavLink>
    5278                        <NavLink to="/contact" className="nav-item nav-link">Support</NavLink>
     
    5783                            <img src="/images/user.png" width="45" height="45"/>
    5884                            <div className="auth-box">
    59                                 <p className="user"><b>{username}</b></p>
    60                                 <p className="role">{role==Roles.RECRUITER ? "Recruiter" : "Job Seeker"}</p>
     85                                <p className="user"><b>{user.name}</b></p>
     86                                {user.role==Roles.RECRUITER && <p className="role">Recruiter</p>}
     87                                {user.role==Roles.JOBSEEKER && <p className="role">Job Seeker</p>}
     88                                {user.role==Roles.ADMIN && <p className="role">Admin</p>}
     89                                {/*<p className="role">{user.role==Roles.RECRUITER ? "Recruiter" : "Job Seeker"}</p>*/}
    6190                            </div>
    6291
Note: See TracChangeset for help on using the changeset viewer.