ソースを参照

Merge branch 'feature/update_applicant-fe' of Neca/HRCenter into FE_dev

pull/163/head
safet.purkovic 3年前
コミット
2e77f7c102

+ 48
- 0
src/assets/styles/components/_ads.scss ファイルの表示

@@ -918,6 +918,54 @@ h3 {
height: 10.5px !important;
}

.uploadCV-input {
width: 100%;
height: 140px;
border: 1px solid #e4e4e4;
border-radius: 6px;
margin-top: 6px;
display: flex;
justify-content: center;
align-items: center;
}

.uploadCV-content-sub-container {
display: flex;
flex-direction: column;
}

.uploadCV-content-sub-container > p {
font-family: Source Sans Pro;
font-size: 14px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0em;
text-align: left;
}

.uploadCV-input-sub-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}

.uploadCV-input-sub-container img {
width: 22px;
height: 22px;
}

.uploadCV-input-sub-container p {
width: 332px;
height: 40px;
font-family: Source Sans Pro;
font-size: 16px;
font-weight: 400;
line-height: 20.11px;
letter-spacing: 0em;
text-align: center;
}

.apply-for-ad-modal-form-control {
display: flex;
flex-direction: column;

+ 0
- 181
src/assets/styles/components/_uploadCVPage.scss ファイルの表示

@@ -1,181 +0,0 @@
.uploadCV-main-container {
display: flex;
width: 100%;
height: 100%;
background-color: gray;
justify-content: center;
align-items: center;
}

.uploadCV-container {
display: flex;
width: 512px;
height: 591px;
background-color: #fff;
border-radius: 18px;
padding: 36px;
flex-direction: column;
}

.uploadCV-top-container {
display: flex;
align-items: center;
height: fit-content;
justify-content: space-between;
}

.uploadCV-top-container-image1 {
width: 18px;
height: 16.88px;
}

.uploadCV-top-container-image2 {
width: 9px;
height: 10.5px;
margin-left: 54px;
}

.uploadCV-top-container-text {
margin-left: 9px;
}

.uploadCV-top-container-text > p:first-child {
font-family: Source Sans Pro;
font-size: 24px;
font-weight: 600;
line-height: 32px;
letter-spacing: 0.02em;
text-align: left;
}

.uploadCV-top-container-text > p:last-child {
font-family: Source Sans Pro;
font-size: 16px;
font-weight: 600;
line-height: 20px;
letter-spacing: 0em;
text-align: left;
color: #226cb0;
}

.uploadCV-content-container {
display: flex;
flex-direction: column;
margin-top: 36px;
}

.uploadCV-input {
width: 100%;
height: 140px;
border: 1px solid #e4e4e4;
border-radius: 6px;
margin-top: 6px;
display: flex;
justify-content: center;
align-items: center;
}

.uploadCV-content-sub-container {
display: flex;
flex-direction: column;
}

.uploadCV-content-sub-container > p {
font-family: Source Sans Pro;
font-size: 14px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0em;
text-align: left;
}

.uploadCV-input-sub-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}

.uploadCV-input-sub-container img {
width: 22px;
height: 22px;
}

.uploadCV-input-sub-container p {
width: 332px;
height: 40px;
font-family: Source Sans Pro;
font-size: 16px;
font-weight: 400;
line-height: 20.11px;
letter-spacing: 0em;
text-align: center;
}

.uploadCV-input2 {
width: 100%;
height: 140px;
border: 1px solid #e4e4e4;
border-radius: 6px;
margin-top: 6px;
padding: 15px;
resize: none;
}

.uploadCV-input2::placeholder {
color: #9d9d9d;
font-family: Source Sans Pro;
font-size: 14px;
font-style: italic;
font-weight: 400;
line-height: 18px;
letter-spacing: 0em;
text-align: left;
word-break: break-all;
white-space: normal;
}

.uploadCV-buttons-container {
display: flex;
margin-top: 35px;
justify-content: space-between;
flex-direction: row;
}

.uploadCV-button {
width: 202px;
height: 51px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;

gap: 10;
border-radius: 9px;
border: none;
font-family: "Source Sans Pro";
font-style: normal;
font-size: 12px;
line-height: 15px;
letter-spacing: 0.04em;
text-transform: uppercase;
color: #ffffff;
cursor: pointer;
}

.uploadCV-buttons-container > button:first-child {
@extend .uploadCV-button;
background: #ffffff;
color: #226cb0;
border: 1px solid #226cb0;
padding: 18px 72px;
font-weight: 600;
}

.uploadCV-buttons-container > button:last-child {
@extend .uploadCV-button;
background: #226cb0;
color: #ffffff;
padding: 18px 22px;
border: 1px solid #226cb0;
}

+ 8
- 0
src/components/Ads/ApplyForAd.js ファイルの表示

@@ -19,10 +19,12 @@ const ApplyForAd = ({ open, title, adId, onCloseModal }) => {
const [stage, setStage] = useState(1);
const [firstName, setFirstName] = useState("");
const [lastName, setLastName] = useState("");
const [gender, setGender] = useState("");
const [dateOfBirth, setDateOfBirth] = useState("");
const [phoneNumber, setPhoneNumber] = useState("");
const [mappedTechnologies, setMappedTechnologies] = useState([]);
const [experience, setExperience] = useState(0);
const [professionalQualification, setProfessionalQualification] = useState("");
const [linkedinLink, setLinkedinLink] = useState("");
const [githubLink, setGithubLink] = useState("");
const [email, setEmail] = useState("");
@@ -68,10 +70,12 @@ const ApplyForAd = ({ open, title, adId, onCloseModal }) => {
adId,
firstName,
lastName,
gender,
dateOfBirth,
phoneNumber,
technologiesIds,
experience,
professionalQualification,
linkedinLink,
githubLink,
bitBucketLink,
@@ -110,6 +114,8 @@ const ApplyForAd = ({ open, title, adId, onCloseModal }) => {
setFirstName={setFirstName}
lastName={lastName}
setLastName={setLastName}
gender={gender}
setGender={setGender}
dateOfBirth={dateOfBirth}
setDateOfBirth={setDateOfBirth}
phoneNumber={phoneNumber}
@@ -122,6 +128,8 @@ const ApplyForAd = ({ open, title, adId, onCloseModal }) => {
technologies={mappedTechnologies}
setTechnologies={setMappedTechnologies}
experience={experience}
professionalQualification={professionalQualification}
setProfessionalQualification={setProfessionalQualification}
setExperience={setExperience}
onIncreaseStage={increaseStageHandler}
onDecreaseStage={decreaseStageHandler}

+ 31
- 1
src/components/Ads/ApplyForAdFirstStage.js ファイルの表示

@@ -5,6 +5,8 @@ const ApplyForAdFirstStage = ({
firstName,
setFirstName,
lastName,
gender,
setGender,
setLastName,
dateOfBirth,
setDateOfBirth,
@@ -16,7 +18,8 @@ const ApplyForAdFirstStage = ({
firstName.length === 0 ||
lastName.length === 0 ||
dateOfBirth === "" ||
phoneNumber.length === 0;
phoneNumber.length === 0 ||
gender.length === 0;

return (
<div>
@@ -38,6 +41,31 @@ const ApplyForAdFirstStage = ({
onChange={(e) => setLastName(e.target.value)}
/>
</div>
<div className="apply-for-ad-modal-form-control">
<label>Pol</label>
<div style={{ display: "flex" }}>
<div style={{ display: "flex" }}>
<input
type="radio"
name="gender"
value="Muski"
checked={gender === "Muski"}
onChange={(e) => setGender(e.target.value)}
/>
<p style={{ marginLeft: "5px" }}>Muski</p>
</div>
<div style={{ display: "flex", marginLeft: "50px" }}>
<input
type="radio"
name="gender"
value="Zenski"
checked={gender === "Zenski"}
onChange={(e) => setGender(e.target.value)}
/>
<p style={{ marginLeft: "5px" }}>Zenski</p>
</div>
</div>
</div>
<div className="apply-for-ad-modal-form-control">
<label>Datum Rodjenja</label>
<input
@@ -70,6 +98,8 @@ ApplyForAdFirstStage.propTypes = {
firstName: PropTypes.string,
setFirstName: PropTypes.any,
lastName: PropTypes.string,
gender: PropTypes.string,
setGender: PropTypes.func,
setLastName: PropTypes.any,
dateOfBirth: PropTypes.any,
setDateOfBirth: PropTypes.any,

+ 23
- 3
src/components/Ads/ApplyForAdSecondStage.js ファイルの表示

@@ -3,6 +3,8 @@ import PropTypes from "prop-types";
import { Checkbox, FormControlLabel } from "@mui/material";

const ApplyForAdSecondStage = ({
professionalQualification,
setProfessionalQualification,
technologies,
setTechnologies,
experience,
@@ -11,8 +13,14 @@ const ApplyForAdSecondStage = ({
onDecreaseStage,
}) => {
let disabled = true;
let isTechnologySelected = false;
if (technologies.length > 0) {
disabled = technologies.some((x) => x.isChecked === true);
isTechnologySelected = technologies.some((x) => x.isChecked === true);
}
if (isTechnologySelected) {
if (professionalQualification.length > 0) {
disabled = false;
}
}

const handleCheckboxes = (technologyId) => {
@@ -26,10 +34,20 @@ const ApplyForAdSecondStage = ({

return (
<div>
<div className="apply-for-ad-header-title">
<p>Strucna sprema</p>
</div>
<div className="apply-for-ad-modal-form-control">
<input
type="text"
placeholder="ex. Elektrotehnicki fakultet"
value={professionalQualification}
onChange={(e) => setProfessionalQualification(e.target.value)}
/>
</div>
<div className="apply-for-ad-header-title">
<p>Tehnologije koje znaš</p>
</div>

<div className="apply-for-ad-header-sub">
<div className="apply-for-ad-header-sub-group">
<label>Back-End</label>
@@ -103,7 +121,7 @@ const ApplyForAdSecondStage = ({
</div>
<div className="apply-for-ad-buttons">
<button onClick={onDecreaseStage}>NAZAD</button>
<button onClick={onIncreaseStage} disabled={!disabled}>
<button onClick={onIncreaseStage} disabled={disabled}>
NASTAVI
</button>
</div>
@@ -112,6 +130,8 @@ const ApplyForAdSecondStage = ({
};

ApplyForAdSecondStage.propTypes = {
professionalQualification: PropTypes.string,
setProfessionalQualification: PropTypes.func,
technologies: PropTypes.any,
setTechnologies: PropTypes.any,
experience: PropTypes.number,

+ 20
- 0
src/pages/CandidatesPage/CandidateDetailsPage.js ファイルの表示

@@ -261,6 +261,26 @@ const CandidateDetailsPage = ({ history }) => {
))}
</div>
<div className="candidate-informations-container">
<div className="candidate-informations-sub-container">
<div className="candidate-property-container">
<p className="informations-candidate-header">Informacije</p>
<p className="candidate-property">Pol:</p>
<p className="candidate-property">Strucna sprema:</p>
</div>
<div
style={{ alignSelf: "flex-end", marginLeft: 42 }}
className="candidate-property-container"
>
<p className="candidate-property-value">
{candidate.gender === "M" ? "Muski" : "Zenski"}
</p>
<p className="candidate-property-value">
{candidate.professionalQualification === ""
? "/"
: candidate.professionalQualification}
</p>
</div>
</div>
<div className="candidate-informations-sub-container">
<div className="candidate-property-container">
<p className="informations-candidate-header">Kontakt</p>

+ 2
- 0
src/store/saga/applicantsSaga.js ファイルの表示

@@ -18,8 +18,10 @@ export function* applyForAdSaga({ payload }) {
formData.append("adId", payload.adId);
formData.append("firstName", payload.firstName);
formData.append("lastName", payload.lastName);
formData.append("gender", payload.gender);
formData.append("dateOfBirth", payload.dateOfBirth);
formData.append("phoneNumber", payload.phoneNumber);
formData.append("professionalQualification", payload.professionalQualification);
formData.append("technologiesIds", payload.technologiesIds);
formData.append("experience", payload.experience);
formData.append("linkedinLink", payload.linkedinLink);

読み込み中…
キャンセル
保存