filtry + ciastko
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Jakub Kaniecki 2024-07-09 22:37:54 +02:00
parent 256bd8a0ee
commit 97b7e8726d
8 changed files with 65 additions and 73 deletions

6
package-lock.json generated
View File

@ -1880,9 +1880,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001620", "version": "1.0.30001640",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz",
"integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {

View File

@ -6,7 +6,7 @@
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", "lint": "eslint -c eslint.config.js --ext .js,.jsx,.ts,.tsx .",
"preview": "vite preview" "preview": "vite preview"
}, },
"dependencies": { "dependencies": {

View File

@ -7,20 +7,21 @@ import { Route, Routes } from "react-router-dom";
import Contact from "./components/Contact"; import Contact from "./components/Contact";
import Mininav from "./components/Mininav"; import Mininav from "./components/Mininav";
import AddJobListing from "./components/AddJobListing"; import AddJobListing from "./components/AddJobListing";
import Cookies from "./components/Cookies";
function App() { function App() {
return ( return (
<Router> <Router>
<div className={`bg-white w-full`}> <div className={`bg-white w-full`}>
<div className={`${styles.paddingX} ${styles.flexCenter} border-b-2 relative`}> <div className={`${styles.paddingX} ${styles.flexCenter}`}>
{/* <Mininav /> */} {/* <Mininav /> */}
<div className={`${styles.boxWidth} mx-auto`}> <div className={`${styles.boxWidth} `}>
<NavBar /> <NavBar />
</div> </div>
</div> </div>
<div className={`${styles.flexStart} mt-18 sm:mt-0`}> <div className={`${styles.flexStart} mt-18 sm:mt-[6.5rem]`}>
<div className={`${styles.boxWidth2} `}> <div className={`${styles.boxWidth2} `}>
<Routes> <Routes>
<Route path="/home" element={<Home />} /> <Route path="/home" element={<Home />} />
@ -32,6 +33,7 @@ function App() {
{/* <Route path="/employerpanel" element={<EmployerPanel />} /> */} {/* <Route path="/employerpanel" element={<EmployerPanel />} /> */}
{/* Add more routes as needed */} {/* Add more routes as needed */}
</Routes> </Routes>
<Cookies />
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,29 @@
import propTypes from 'prop-types'
import { useState } from 'react'
const Cookies = props => {
const handleCookies = () => {
localStorage.setItem('cookies', true)
}
const cookies = localStorage.getItem('cookies')
// if(cookies) return null
const [show, setShow] = useState(true)
if (cookies) return null;
if (!show) return null;
return (
<>
<div className='bg-gray-500 opacity-90 h-32 w-full fixed bottom-0 z-40 flex justify-center items-center'>
<p className=' text-black'>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<button className='bg-white px-4 py-2 rounded-md ml-4'
onClick={() => {handleCookies; setShow(!show)}}>
Zgoda</button>
</div>
</>
)
}
Cookies.propTypes = {
}
export default Cookies

View File

@ -7,64 +7,19 @@ import Selector from './Selector';
const Filter = (props) => { const Filter = (props) => {
useEffect(() => { useEffect(() => {
console.log(props.searchQuery) console.log(props.searchQuery)
console.log(selectedCategories)
console.log(selectedWorkFromHome)
console.log(selectedEmploymentTypes)
console.log(valueminSalary)
}, [props.searchQuery]); }, [props.searchQuery]);
const [selectedCategories, setSelectedCategories] = useState([]);
const [selectedWorkFromHome, setSelectedWorkFromHome] = useState([]);
const [selectedEmploymentTypes, setSelectedEmploymentTypes] = useState([]);
const [valueminSalary, setValueminSalary] = useState('');
const [valuemaxSalary, setValuemaxSalary] = useState('');
const [valueName, setValueName] = useState('');
const [valueLocalization, setValueLocalization] = useState('');
useEffect(() => {
setSelectedCategories([])
setSelectedWorkFromHome([])
setSelectedEmploymentTypes([])
setValueminSalary('')
setValuemaxSalary('')
setValueName('')
setValueLocalization('')
}, [props.clearSearchQuery])
const handle_checked_change = (e) => { const handle_checked_change = (e) => {
switch (e.target.name) { const { name, value, checked } = e.target;
case 'categories': props.setSearchQuery(prevState => {
if (e.target.checked) { const newArray = checked
setSelectedCategories([...selectedCategories, e.target.value]); ? [...(prevState[name] || []), value]
} else { : (prevState[name] || []).filter(item => item !== value);
setSelectedCategories(selectedCategories.filter(category => category !== e.target.value)); return { ...prevState, [name]: newArray };
} });
props.setSearchQuery(prevState =>
({...prevState,
categories: e.target.checked ? [...(prevState.categories || []), e.target.value] : (prevState.categories || []).filter(category => category !== e.target.value)}));
break;
case 'work_from_home':
if (e.target.checked) {
setSelectedWorkFromHome([...selectedWorkFromHome, e.target.value]);
} else {
setSelectedWorkFromHome(selectedCategories.filter(work_from_home => work_from_home !== e.target.value));
}
props.setSearchQuery(prevState =>
({...prevState,
work_from_home: e.target.checked ? [...(prevState.work_from_home || []), e.target.value] : (prevState.work_from_home || []).filter(work_from_home => work_from_home !== e.target.value)}));
break;
case 'employment':
if (e.target.checked) {
setSelectedEmploymentTypes([...selectedEmploymentTypes, e.target.value]);
} else {
setSelectedEmploymentTypes(selectedCategories.filter(employment => employment !== e.target.value));
}
props.setSearchQuery(prevState =>
({...prevState,
employment: e.target.checked ? [...(prevState.employment || []), e.target.value] : (prevState.employment || []).filter(employment => employment !== e.target.value)}));
break;
}
} }
return ( return (
@ -103,9 +58,9 @@ const Filter = (props) => {
setSearchQuery={props.setSearchQuery} setSearchQuery={props.setSearchQuery}
_type='text' _type='text'
value={props.searchQuery.max_salary || ''}/> value={props.searchQuery.max_salary || ''}/>
<Selector value_to_map_from={categories} name='Kategorie' inputname='categories' onChange={handle_checked_change} state={selectedCategories}/> <Selector value_to_map_from={categories} name='Kategorie' inputname='categories' onChange={handle_checked_change} state={props.searchQuery || {} }/>
<Selector value_to_map_from={work_from_home} s name='Praca zdalna' inputname='work_from_home' state={selectedWorkFromHome} onChange={handle_checked_change}/> <Selector value_to_map_from={work_from_home} s name='Praca zdalna' inputname='work_from_home' state={props.searchQuery || {}} onChange={handle_checked_change}/>
<Selector value_to_map_from={employment_types} name='Typ kontraktu' inputname='employment' state={selectedEmploymentTypes} onChange={handle_checked_change} /> <Selector value_to_map_from={employment_types} name='Typ kontraktu' inputname='employment' state={props.searchQuery || {}} onChange={handle_checked_change} />
<button className='bg-gray-600 text-white py-1 sm:py-3 px-12 col-span-2 mx-auto rounded-md font-semibold text-xl hover:bg-gray-500 duration-150 my-3 sm:my-5 sm:min-h-full' <button className='bg-gray-600 text-white py-1 sm:py-3 px-12 col-span-2 mx-auto rounded-md font-semibold text-xl hover:bg-gray-500 duration-150 my-3 sm:my-5 sm:min-h-full'
onClick={props.onClick} onClick={props.onClick}
@ -125,4 +80,12 @@ Filter.propTypes = {
onClick: propTypes.func onClick: propTypes.func
}; };
Filter.defaultProps = {
searchQuery: {
categories: [],
work_from_home: [],
employment: []
}
};
export default Filter; export default Filter;

View File

@ -20,10 +20,10 @@ const NavBar = () => {
const currentLinks = getLinks() const currentLinks = getLinks()
return ( return (
<nav className='fixed top-0 left-0 sm:relative z-30 w-full flex pt-4 justify-between items-center navbar bg-white px-8'> <nav className='fixed top-0 left-0 z-30 w-full flex pt-4 justify-between items-center navbar bg-white px-8 border-b-2 xl:px-64'>
<a href='/' className='font-popins font-semibold text-[24px] text-slate-900'>
<img src={IzaacLOGO} alt="izaac" className='md:w-[200px] w-[120px]'/> <img src={IzaacLOGO} alt="izaac" className='md:w-[200px] w-[120px]'/>
</a>
<ul className='list-none sm:flex hidden justify-end items-center flex-1'> <ul className='list-none sm:flex hidden justify-end items-center flex-1'>
{currentLinks.map((nav, index) => ( {currentLinks.map((nav, index) => (
<li <li

View File

@ -11,11 +11,9 @@ const Selector = (props) => {
<input type='checkbox' name={props.inputname} value={value_to_map_from.id} <input type='checkbox' name={props.inputname} value={value_to_map_from.id}
onChange={props.onChange} onChange={props.onChange}
className='mr-2' className='mr-2'
checked={props.state.includes(value_to_map_from.id)} checked={props.state[props.inputname]?.includes(value_to_map_from.id)}
/> />
{value_to_map_from.name} {value_to_map_from.name}
</label> </label>
))} ))}
</div> </div>

View File

@ -137,12 +137,12 @@ const WorkApp = () => {
}, []); }, []);
return ( return (
<section className={`bg-white w-full`}> <section className={`bg-white`}>
<div className="h-[88vh] flex flex-row sm:px-12"> <div className="h-[88vh] flex flex-row ">
<div <div
className={`relative bg-gray-100 w-full sm:w-[40%] className={`relative bg-gray-100 w-full sm:w-[40%]
${isOpen ? 'h-[100vh] overflow-y-hidden' : 'sm:overflow-y-auto'} ${isOpen ? 'h-[100vh] overflow-y-hidden' : 'sm:overflow-y-auto'}
sm:h-[89vh] ${ sm:h-[89vh] ${
isDetailsVisible ? "hidden sm:block" : "block" isDetailsVisible ? "hidden sm:block" : "block"
@ -199,7 +199,7 @@ const WorkApp = () => {
</div> </div>
</div> </div>
<div <div
className={`absolute sm:relative w-full sm:w-[60%] bg-gray-100 sm:h-[89vh] h-[100vh] top-16 sm:top-0 -left-4 right-0 overflow-y-auto p-4 mx-4 blur-transition ${ className={`absolute sm:relative w-full sm:w-[60%] bg-gray-100 sm:h-[89vh] h-[100vh] top-16 sm:top-0 -left-4 sm:left-0 right-0 overflow-y-auto p-8 sm:p-4 border-separate sm:border-l-8 blur-transition ${
isDetailsVisible ? "block" : "hidden sm:block" isDetailsVisible ? "block" : "hidden sm:block"
} noblur ${isOpen ? 'blur' : ''}`} } noblur ${isOpen ? 'blur' : ''}`}
> >