diff --git a/src/components/AddJobListing.jsx b/src/components/AddJobListing.jsx
index 61275a4..d4640a8 100644
--- a/src/components/AddJobListing.jsx
+++ b/src/components/AddJobListing.jsx
@@ -6,8 +6,8 @@ import StepFourJoblisting from './StepFourJoblisting'
const AddJobListing = () => {
const [currentStep, setCurrentStep] = useState(1)
const [formData, setFormData] = useState({
- 'postingOption': 'Opcja 2',
- 'requireSalary': true
+ 'posting_option': 'S',
+ 'requiresalary': true
})
const nextStep = () => {
setCurrentStep(currentStep + 1);
diff --git a/src/components/ImageUpload.jsx b/src/components/ImageUpload.jsx
index d14ae87..acef528 100644
--- a/src/components/ImageUpload.jsx
+++ b/src/components/ImageUpload.jsx
@@ -1,16 +1,19 @@
import React, { useState, useRef, useEffect } from 'react';
-import { IzaacLOGO, placeholderImage } from '../assets'
+import { placeholderImage } from '../assets';
+import axios from 'axios';
-const ImageUpload = ({setFormData}) => {
+
+const ImageUpload = ({setFormData, data}) => {
const [imageSrc, setImageSrc] = useState(placeholderImage);
const fileInputRef = useRef(); // Referencja do ukrytego inputu plików
- const handleImageChange = (e) => {
+ const handleImageChange = async (e) => {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
- reader.onload = (e) => {
- setImageSrc(e.target.result); // Aktualizujemy stan obrazkiem użytkownika
+ reader.onload = async (e) => {
+ // Aktualizujemy stan obrazkiem użytkownika
+ const uploadedImageData = await uploadImage(file);
};
reader.readAsDataURL(file);
}
@@ -20,6 +23,25 @@ const ImageUpload = ({setFormData}) => {
fileInputRef.current.click(); // Programowe kliknięcie na ukrytym inpucie plików
};
+ const uploadImage = async (imageFile) => {
+ const formData = new FormData();
+ formData.append('company_logo', imageFile);
+ formData.append('company_name', data.company_name)
+ try {
+ const response = await axios.post('http://izaac.izaac.pl/api/jobposting/companylogo/', formData, {
+ headers: {
+ "Content-Type": 'multipart/form-data'
+ }
+ });
+ console.log(response)
+ const url = response.data.company_logo
+ setImageSrc(url)
+ }
+ catch (error) {
+ console.error('Błąd podczas przesyłania obrazka:', e)
+ }
+ }
+
useEffect(() => {
// Aktualizujemy dane w hooku nadrzędnym za każdym razem, gdy zmienia się imageSrc
if (imageSrc !== placeholderImage) {
diff --git a/src/components/NavBar.jsx b/src/components/NavBar.jsx
index 1155468..9d94ae7 100644
--- a/src/components/NavBar.jsx
+++ b/src/components/NavBar.jsx
@@ -28,7 +28,10 @@ const NavBar = () => {
{currentLinks.map((nav, index) => (
{nav.title}
@@ -50,12 +53,18 @@ const NavBar = () => {
alt="menu"
className='w-[28px] h-[28px] object-contain'
onClick={() => setToggle((prev) => !prev)}/>
-
-
+
+
{currentLinks.map((nav, index) =>(
{nav.title}
diff --git a/src/components/Salary.jsx b/src/components/Salary.jsx
index 451cc93..73e3e07 100644
--- a/src/components/Salary.jsx
+++ b/src/components/Salary.jsx
@@ -22,7 +22,7 @@ const Salary = ({handleChange, formData, removeFields, setFormData}) => {
};
useEffect(() => {
- setFormData({...formData, 'requireSalary': requireSalary});
+ setFormData({...formData, 'requiresalary': requireSalary});
}, [requireSalary]);
const [minBigger, setMinBigger] = useState(true);
@@ -46,11 +46,11 @@ const Salary = ({handleChange, formData, removeFields, setFormData}) => {
useEffect(() => {
})
useEffect( () =>{
- if (formData.requireSalary === false) {
- removeFields(['minSalary', 'maxSalary']);
- setRequireSalary(formData.requireSalary)
+ if (formData.requiresalary === false) {
+ removeFields(['minsalary', 'maxsalary']);
+ setRequireSalary(formData.requiresalary)
}
- }, [formData.requireSalary])
+ }, [formData.requiresalary])
return (
@@ -60,7 +60,7 @@ const Salary = ({handleChange, formData, removeFields, setFormData}) => {
className='ml-6'
type="checkbox"
checked={!requireSalary}
- name="requireSalary"
+ name="requiresalary"
onChange={handleRequireSalary}
id="" />
Nie chce podawać wysokości wynagrodzenia
@@ -70,10 +70,10 @@ const Salary = ({handleChange, formData, removeFields, setFormData}) => {
Min. wynagrodzenie
{minBigger && (
@@ -86,9 +86,9 @@ const Salary = ({handleChange, formData, removeFields, setFormData}) => {
Maks. wynagrodzenie
diff --git a/src/components/SelectedSkill.jsx b/src/components/SelectedSkill.jsx
index d0e2642..ced52fe 100644
--- a/src/components/SelectedSkill.jsx
+++ b/src/components/SelectedSkill.jsx
@@ -1,37 +1,25 @@
import React from 'react';
-const levels = ['Nice to have','Podstawowy', 'Średnio zaawansowany', 'Zaawansowany', 'Ekspert'];
+const levelMappings = {
+ 'N': 'Nice to have',
+ 'B': 'Podstawowy',
+ 'M': 'Średnio zaawansowany',
+ 'A': 'Zaawansowany',
+ 'E': 'Ekspert',
+};
-function renderCircles(level, handleCircleClick) {
- let numberOfFilledCircles;
-
- switch (level) {
- case 'Nice to have':
- numberOfFilledCircles = 1;
- break;
- case 'Podstawowy':
- numberOfFilledCircles = 2;
- break;
- case 'Średnio zaawansowany':
- numberOfFilledCircles = 3;
- break
- case 'Zaawansowany':
- numberOfFilledCircles = 4;
- break;
- case 'Ekspert':
- numberOfFilledCircles = 5;
- break;
- default:
- numberOfFilledCircles = 1;
- }
+function renderCircles(letter, handleCircleClick) {
+ const level = levelMappings[letter];
+ const numberOfFilledCircles = Object.keys(levelMappings).indexOf(letter) + 1;
return (
<>
{[...Array(5)].map((_, index) => (
handleCircleClick(index)}
- className={`justify-self-center w-3.5 h-3.5 rounded-full ${index < numberOfFilledCircles ? 'bg-red-300 hover:bg-red-700' : 'bg-gray-500 hover:bg-gray-600'}`}
+ onClick={() => handleCircleClick(Object.keys(levelMappings)[index])}
+ className={`justify-self-center w-3.5 h-3.5 rounded-full
+ ${index < numberOfFilledCircles ? 'bg-red-300 hover:bg-red-700' : 'bg-gray-500 hover:bg-gray-600'}`}
/>
))}
>
@@ -39,10 +27,10 @@ function renderCircles(level, handleCircleClick) {
};
-const SelectedSkill = ({ skill, level, onLevelChange, removeSkillFromList, formData }) => {
+const SelectedSkill = ({ skill, letter, onLevelChange, removeSkillFromList, formData }) => {
const handleCircleClick = (levelIndex) => {
- const level = levels[levelIndex];
- onLevelChange(skill, level);
+ const letter = Object.keys(levelMappings)[levelIndex];
+ onLevelChange(skill, levelIndex);
};
return (
@@ -53,9 +41,9 @@ const SelectedSkill = ({ skill, level, onLevelChange, removeSkillFromList, formD
- {renderCircles(level, handleCircleClick)}
+ {renderCircles(letter, handleCircleClick)}
-
{level}
+
{levelMappings[letter]}
diff --git a/src/components/SkillsSelector.jsx b/src/components/SkillsSelector.jsx
index 3f78052..b28c140 100644
--- a/src/components/SkillsSelector.jsx
+++ b/src/components/SkillsSelector.jsx
@@ -31,7 +31,6 @@ const initialSkillsList = [
'Technologia nanomateriałów',
'Projektowanie systemów wbudowanych',
'Inżynieria bezpieczeństwa',
- // ... więcej umiejętności ...
];
const SkillsSelector = ({formData, setFormData}) => {
@@ -56,7 +55,7 @@ const SkillsSelector = ({formData, setFormData}) => {
};
setSkillLevels(prevLevels => ({
...prevLevels,
- [skill]: 'Nice to have' // lub inny domyślny poziom
+ [skill]: 'N' // lub inny domyślny poziom
}));
setInputValue('');
setSuggestions([]);
@@ -131,7 +130,7 @@ const SkillsSelector = ({formData, setFormData}) => {
diff --git a/src/components/StepOneJoblisting.jsx b/src/components/StepOneJoblisting.jsx
index 4e3b670..a2fd41e 100644
--- a/src/components/StepOneJoblisting.jsx
+++ b/src/components/StepOneJoblisting.jsx
@@ -1,68 +1,79 @@
-import React from 'react'
-import styles from '../style'
+import React from "react";
+import styles from "../style";
const StepOneJoblisting = ({ nextStep, handleChange, formData }) => {
- // Funkcja do obsługi kliknięcia na div i aktualizacji stanu
- const handleDivClick = (value) => () => {
- handleChange('postingOption')({ target: { value: value } });
- };
+ // Funkcja do obsługi kliknięcia na div i aktualizacji stanu
+ const handleDivClick = (value) => () => {
+ handleChange("posting_option")({ target: { value: value } });
+ };
- const activeStyle = "h-[500px] w-64 border-4 rounded-xl border-stone-200 bg-gray-200 div-transition scale-125";
- const inactiveStyle = "h-[500px] w-64 rounded-xl bg-gray-200 border-gray-200 div-transition cursor-pointer hover:bg-gray-300"; // Dodaj tę samą klasę przejścia tutaj
+ const activeStyle =
+ "h-[500px] w-64 border-4 rounded-xl border-stone-200 bg-gray-200 div-transition scale-125";
+ const inactiveStyle =
+ "h-[500px] w-64 rounded-xl bg-gray-200 border-gray-200 div-transition cursor-pointer hover:bg-gray-300";
+ return (
+ <>
+
+
+ Zacznij dodawać ogłoszenie z izaac.pl
+
+
+ Wybierz pakiet najlepiej odpowiadający Twoim potrzebom
+
+
+
+ {/* Przykładowe divy jako przyciski wyboru */}
- return (
-
- );
+
+
+
+
+
+
+
+ >
+ );
};
-export default StepOneJoblisting
+export default StepOneJoblisting;
diff --git a/src/components/StepThreeJoblisting.jsx b/src/components/StepThreeJoblisting.jsx
index e804c7d..08e871f 100644
--- a/src/components/StepThreeJoblisting.jsx
+++ b/src/components/StepThreeJoblisting.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useEffect } from 'react';
import DOMPurify from 'dompurify';
import styles from '../style';
import TextDivider from './TextDivider';
@@ -33,10 +33,18 @@ const StepThreeJoblisting = ({ formData, prevStep }) => {
return ;
};
+ const skillData = Object.entries(formData.skillLevels).map(([skill_id, skill_level]) => {
+ return {skill_id, skill_level, jobposting_id: null};
+ });
+
+ useEffect(()=>{
+ console.log(skillData)
+ }, [skillData,])
+
return (
- Wybrałeś opcję {formData.postingOption}
+ Wybrałeś opcję {formData.posting_option}
@@ -54,10 +62,10 @@ const StepThreeJoblisting = ({ formData, prevStep }) => {
>
{cleanAndProcessData(formData.company_name)}
{
- formData.requireSalary && (
{cleanAndProcessData(formData.minSalary)} PLN - {cleanAndProcessData(formData.maxSalary)} PLN
)
+ formData.requiresalary && (
{cleanAndProcessData(formData.minsalary)} PLN - {cleanAndProcessData(formData.maxsalary)} PLN
)
}
{
- !formData.requireSalary && (
)
+ !formData.requiresalary && (
)
}
{cleanAndProcessData(formData.name)}
diff --git a/src/components/StepTwoJoblisting.jsx b/src/components/StepTwoJoblisting.jsx
index 477c76e..a09f1bb 100644
--- a/src/components/StepTwoJoblisting.jsx
+++ b/src/components/StepTwoJoblisting.jsx
@@ -27,8 +27,8 @@ const StepTwoJoblisting = ({ nextStep, prevStep, handleChange, formData, setForm
let newErrors = {};
// Sprawdź każde wymagane pole
- if (!formData.jobtitle) {
- newErrors.jobtitle = 'To pole jest wymagane';
+ if (!formData.name) {
+ newErrors.name = 'To pole jest wymagane';
}
if (!formData.company_name) {
newErrors.company_name = 'To pole jest wymagane';
@@ -43,16 +43,16 @@ const StepTwoJoblisting = ({ nextStep, prevStep, handleChange, formData, setForm
if (formData.requireSalary === true)
{
console.log(formData.requireSalary)
- if (!formData.minSalary) {
- newErrors.minSalary = 'To pole jest wymagane';
+ if (!formData.minsalary) {
+ newErrors.minsalary = 'To pole jest wymagane';
}
- if (!formData.maxSalary) {
- newErrors.maxSalary = 'To pole jest wymagane';
+ if (!formData.maxsalary) {
+ newErrors.maxsalary = 'To pole jest wymagane';
}
}
- if (!formData.employmentType) {
- newErrors.employmentType = 'To pole jest wymagane';
+ if (!formData.workFromHome) {
+ newErrors.workFromHome = 'To pole jest wymagane';
}
if (!formData.employmentType) {
newErrors.employmentType = 'To pole jest wymagane';
@@ -83,7 +83,8 @@ const StepTwoJoblisting = ({ nextStep, prevStep, handleChange, formData, setForm
- Wynagrodzenie *
+
+ Wynagrodzenie
+ *
+
← Przejdź do poprzedniego kroku
+ className='h-12 w-72 rounded-xl bg-gray-700
+ font-poppins font-semibold text-[14px] scale-100
+ text-white hover:scale-125 duration-300'>
+ ←
+ Przejdź do poprzedniego kroku
+ className='h-12 w-72 rounded-xl
+ bg-gray-700 font-poppins
+ font-semibold text-[14px] scale-100
+ text-white hover:scale-125 duration-300'>
+ Przejdź do następnego kroku
+ →