| @@ -6,7 +6,6 @@ import { useLocation } from "react-router-dom"; | |||
| import { | |||
| ADS_PAGE, | |||
| AD_DETAILS_PAGE, | |||
| FORGOT_PASSWORD_PAGE, | |||
| FORGOT_PASSWORD_CONFIRMATION_PAGE, | |||
| NOT_FOUND_PAGE, | |||
| @@ -25,6 +24,7 @@ import { | |||
| STATS_PAGE, | |||
| REGISTER_PAGE, | |||
| CREATE_AD_PAGE, | |||
| JOB_DETAILS_PAGE, | |||
| } from "./constants/pages"; | |||
| import LoginPage from "./pages/LoginPage/LoginPageMUI"; | |||
| @@ -73,7 +73,7 @@ const AppRoutes = () => { | |||
| <Route exact path={REGISTER_PAGE} component={RegisterPage} /> | |||
| <Route path={RESET_PASSWORD_PAGE} component={ResetPasswordPage} /> | |||
| <PrivateRoute exact path={ADS_PAGE} component={AdsPage} /> | |||
| <PrivateRoute exact path={AD_DETAILS_PAGE} component={AdDetailsPage} /> | |||
| <PrivateRoute exact path={JOB_DETAILS_PAGE} component={AdDetailsPage} /> | |||
| <PrivateRoute exact path={USER_DETAILS_PAGE} component={UserDetails} /> | |||
| <PrivateRoute exact path={USERS_PAGE} component={UsersPage} /> | |||
| <PrivateRoute exact path={CANDIDATES_PAGE} component={CandidatesPage} /> | |||
| @@ -49,13 +49,13 @@ describe("Ad details candidate card ui tests", () => { | |||
| it("Should load ad details candidate card component", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("ad-details-candidate")).toBeDefined(); | |||
| expect(screen.getByTestId("job-details-candidate")).toBeDefined(); | |||
| }); | |||
| it("Should navigate on candidates page when button clicked", async () => { | |||
| render(cont); | |||
| waitFor(() => { | |||
| fireEvent.click(screen.getByTestId("ad-details-candidate-title-link")); | |||
| fireEvent.click(screen.getByTestId("job-details-candidate-title-link")); | |||
| expect(props.history.push).toHaveBeenCalledWith("/candidates/1"); | |||
| }); | |||
| }); | |||
| @@ -43,13 +43,13 @@ describe("AdDetailsPage render tests", () => { | |||
| it("Should render AdDetailsPage", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("ad-details-page")).toBeDefined(); | |||
| expect(screen.getByTestId("job-details-page")).toBeDefined(); | |||
| }); | |||
| it("Should render modal when click archive ad button", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click(container.getElementsByClassName("archive-ad-button")[0]); | |||
| fireEvent.click(container.getElementsByClassName("archive-job-button")[0]); | |||
| expect(screen.getByTestId("alert-container")).toBeDefined(); | |||
| }); | |||
| @@ -58,25 +58,25 @@ describe("AdDetailsPage render tests", () => { | |||
| const { container } = render(cont); | |||
| waitFor(() => { | |||
| fireEvent.click(container.getElementsByClassName("archive-ad-button")[0]); | |||
| fireEvent.click(container.getElementsByClassName("archive-job-button")[0]); | |||
| fireEvent.click(container.getElementsByClassName("dialog-btn")[1]); | |||
| waitFor(() => expect(props.history.push).toHaveBeenCalledWith('/ads')); | |||
| waitFor(() => expect(props.history.push).toHaveBeenCalledWith('/jobs')); | |||
| }); | |||
| }); | |||
| it("Should render apply for ad button", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("apply-for-ad-button")[0] | |||
| container.getElementsByClassName("apply-for-job-button")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Should render apply for ad modal after click button", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click(container.getElementsByClassName("apply-for-ad-button")[0]); | |||
| fireEvent.click(container.getElementsByClassName("apply-for-job-button")[0]); | |||
| const a = screen.getByTestId("custom-modal-test-id"); | |||
| @@ -86,7 +86,7 @@ describe("AdDetailsPage render tests", () => { | |||
| it("Should render go back button", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("ad-details-buttons-link")[0] | |||
| container.getElementsByClassName("job-details-buttons-link")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| @@ -94,10 +94,10 @@ describe("AdDetailsPage render tests", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("ad-details-buttons-link")[0] | |||
| container.getElementsByClassName("job-details-buttons-link")[0] | |||
| ); | |||
| const arg = { pathname: "/ads" }; | |||
| const arg = { pathname: "/jobs" }; | |||
| waitFor(() => expect(props.history.push).toHaveBeenCalledWith(arg)); | |||
| }); | |||
| @@ -39,13 +39,13 @@ describe("TableViewPage render tests", () => { | |||
| it("Should render", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("ads-candidates-container")[0] | |||
| container.getElementsByClassName("jobs-candidates-container")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Number of sliders should be equal to length of our adsCandidates array", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("ads-candidates").length).toBe( | |||
| expect(container.getElementsByClassName("jobs-candidates").length).toBe( | |||
| mockState.candidates.adsCandidates.length | |||
| ); | |||
| }); | |||
| @@ -54,7 +54,7 @@ describe("TableViewPage render tests", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container | |||
| .getElementsByClassName("ads-candidates")[0] | |||
| .getElementsByClassName("jobs-candidates")[0] | |||
| .getElementsByClassName("slick-slide").length | |||
| ).toBe(mockState.candidates.adsCandidates[0].applicants.length); | |||
| }); | |||
| @@ -62,7 +62,7 @@ describe("TableViewPage render tests", () => { | |||
| it("Number of arrows (left and right) should be 1 because there is more than 4 candidates which applied for ad", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("active-ads-ads-arrows").length | |||
| container.getElementsByClassName("active-jobs-jobs-arrows").length | |||
| ).toBe(1); | |||
| }); | |||
| @@ -70,14 +70,14 @@ describe("TableViewPage render tests", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click( | |||
| container | |||
| .getElementsByClassName("active-ads-ads-arrows")[0] | |||
| .getElementsByClassName("active-jobs-jobs-arrows")[0] | |||
| .getElementsByTagName("button")[1] | |||
| ); | |||
| await waitFor(() => | |||
| expect( | |||
| container | |||
| .getElementsByClassName("ads-candidates")[0] | |||
| .getElementsByClassName("jobs-candidates")[0] | |||
| .getElementsByClassName("slick-active")[0] | |||
| .getElementsByClassName("candidate-card-container")[0] | |||
| .getElementsByClassName("candidate-card-applicant-name")[0] | |||
| @@ -52,27 +52,27 @@ describe("AdsPage render tests", () => { | |||
| it("Should render ads", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("ads-page")).toBeDefined(); | |||
| expect(screen.getByTestId("jobs-page")).toBeDefined(); | |||
| }); | |||
| it("Should be rendered button which is used for showing input responsible for searching by name", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("ads-page-btn")[0]).toBeDefined(); | |||
| expect(container.getElementsByClassName("jobs-page-btn")[0]).toBeDefined(); | |||
| }); | |||
| it("Should be rendered button for toggling filters modal", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("ads-page-btn")[1]).toBeDefined(); | |||
| expect(container.getElementsByClassName("jobs-page-btn")[1]).toBeDefined(); | |||
| }); | |||
| it("Should be rendered button for adding new ad", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("ads-page-btn")[2]).toBeDefined(); | |||
| expect(container.getElementsByClassName("jobs-page-btn")[2]).toBeDefined(); | |||
| }); | |||
| it("Should render CreateAdPage when click Add Ad button", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click(container.getElementsByClassName("ads-page-btn")[2]); | |||
| fireEvent.click(container.getElementsByClassName("jobs-page-btn")[2]); | |||
| expect(props.history.push).toHaveBeenCalledWith("/create-ad"); | |||
| }); | |||
| @@ -80,41 +80,41 @@ describe("AdsPage render tests", () => { | |||
| it("Input for searching by title should not be shown when component is initialy rendered", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("ads-page-search-by-title")[0].style | |||
| container.getElementsByClassName("jobs-page-search-by-title")[0].style | |||
| .visibility | |||
| ).toBe("hidden"); | |||
| }); | |||
| it("Should be rendered ad cards", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("ad-card").length).toBeGreaterThan( | |||
| expect(container.getElementsByClassName("job-card").length).toBeGreaterThan( | |||
| 0 | |||
| ); | |||
| }); | |||
| it("Should be rendered archive ad cards", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("archive-ad").length).toBe(0); | |||
| expect(container.getElementsByClassName("archive-job").length).toBe(0); | |||
| }); | |||
| it("Should render filter drawer after click filter button", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click(container.getElementsByClassName("fltr-btn")[0]); | |||
| expect(screen.getByTestId("ad-filters-drawer")).toBeDefined(); | |||
| expect(screen.getByTestId("job-filters-drawer")).toBeDefined(); | |||
| }); | |||
| it("Should render arrow buttons for active ads slider", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("active-ads-ads-arrows") | |||
| container.getElementsByClassName("active-jobs-jobs-arrows") | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Should render arrow buttons for archived ads slider", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("archived-ads-ads-arrows") | |||
| container.getElementsByClassName("archived-jobs-jobs-arrows") | |||
| ).toBeDefined(); | |||
| }); | |||
| @@ -125,13 +125,13 @@ describe("AdsPage render tests", () => { | |||
| fireEvent.click(container.getElementsByClassName("fltr-btn")[0]); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("ad-filters-checkbox")[0] | |||
| container.getElementsByClassName("job-filters-checkbox")[0] | |||
| ); | |||
| fireEvent.click(container.getByTestId("ad-filters-submit")[0]); | |||
| fireEvent.click(container.getByTestId("job-filters-submit")[0]); | |||
| expect( | |||
| container.getElementsByClassName("ad-card").length | |||
| container.getElementsByClassName("job-card").length | |||
| ).toBeGreaterThan(0); | |||
| }); | |||
| }); | |||
| @@ -140,15 +140,15 @@ describe("AdsPage render tests", () => { | |||
| const { container } = render(cont); | |||
| waitFor(() => | |||
| expect( | |||
| container.getElementsByClassName("ad-card").length | |||
| container.getElementsByClassName("job-card").length | |||
| ).toBeGreaterThan(0) | |||
| ); | |||
| }); | |||
| it("Should navigate to ad details when click on ad card", async () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click(container.getElementsByClassName("ad-card")[0]); | |||
| fireEvent.click(container.getElementsByClassName("job-card")[0]); | |||
| expect(props.history.push).toHaveBeenCalledWith("/ads/1"); | |||
| expect(props.history.push).toHaveBeenCalledWith("/jobs/1"); | |||
| }); | |||
| }); | |||
| @@ -45,13 +45,13 @@ describe("Apply for ad first stage ui tests", () => { | |||
| it("Should render firstName input", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("apply-for-ad-modal-first-name-input")).toBeDefined(); | |||
| expect(screen.getByTestId("apply-for-job-modal-first-name-input")).toBeDefined(); | |||
| }); | |||
| it("Should change firstName on changing input", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-first-name-input"), | |||
| screen.getByTestId("apply-for-job-modal-first-name-input"), | |||
| { target: { value: "Ermin" } } | |||
| ); | |||
| @@ -60,7 +60,7 @@ describe("Apply for ad first stage ui tests", () => { | |||
| it("Should change last on changing input", async () => { | |||
| render(cont); | |||
| fireEvent.change(screen.getByTestId("apply-for-ad-modal-last-name-input"), { | |||
| fireEvent.change(screen.getByTestId("apply-for-job-modal-last-name-input"), { | |||
| target: { value: "Bronja" }, | |||
| }); | |||
| @@ -70,7 +70,7 @@ describe("Apply for ad first stage ui tests", () => { | |||
| it("Should select male gender", async () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("apply-for-ad-modal-gender-input")[0] | |||
| container.getElementsByClassName("apply-for-job-modal-gender-input")[0] | |||
| ); | |||
| waitFor(() => expect(props.setGender).toHaveBeenCalled()); | |||
| @@ -79,7 +79,7 @@ describe("Apply for ad first stage ui tests", () => { | |||
| it("Should select female gender", async () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("apply-for-ad-modal-gender-input")[1] | |||
| container.getElementsByClassName("apply-for-job-modal-gender-input")[1] | |||
| ); | |||
| waitFor(() => expect(props.setGender).toHaveBeenCalled()); | |||
| @@ -87,7 +87,7 @@ describe("Apply for ad first stage ui tests", () => { | |||
| it("Should change date of birth", async () => { | |||
| render(cont); | |||
| fireEvent.change(screen.getByTestId("apply-for-ad-modal-date-of-birth"), { | |||
| fireEvent.change(screen.getByTestId("apply-for-job-modal-date-of-birth"), { | |||
| target: { value: "1998-05-05" }, | |||
| }); | |||
| @@ -96,14 +96,14 @@ describe("Apply for ad first stage ui tests", () => { | |||
| it("Should change phone number", async () => { | |||
| render(cont); | |||
| fireEvent.change(screen.getByTestId("apply-for-ad-modal-phone-number"), { target: { value: "0000000000" } }); | |||
| fireEvent.change(screen.getByTestId("apply-for-job-modal-phone-number"), { target: { value: "0000000000" } }); | |||
| waitFor(() => expect(props.setPhoneNumber).toHaveBeenCalled()); | |||
| }); | |||
| it("Should click go forward button", async () => { | |||
| render(cont); | |||
| fireEvent.click(screen.getByTestId("apply-for-ad-modal-go-forward-button")); | |||
| fireEvent.click(screen.getByTestId("apply-for-job-modal-go-forward-button")); | |||
| waitFor(() => expect(props.onIncreaseStage).toHaveBeenCalled()); | |||
| }); | |||
| @@ -42,13 +42,13 @@ describe("Apply for ad fourth stage ui tests", () => { | |||
| it("Should render apply for ad fourth stage modal", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("apply-for-ad-modal-fourth-stage")).toBeDefined(); | |||
| expect(screen.getByTestId("apply-for-job-modal-fourth-stage")).toBeDefined(); | |||
| }); | |||
| it("Should change pdfFile", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-fourth-stage-pdf-input"), | |||
| screen.getByTestId("apply-for-job-modal-fourth-stage-pdf-input"), | |||
| { target: { files: [file] } } | |||
| ); | |||
| @@ -58,7 +58,7 @@ describe("Apply for ad fourth stage ui tests", () => { | |||
| it("Should change coverLetter", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-fourth-stage-cover-letter-input"), | |||
| screen.getByTestId("apply-for-job-modal-fourth-stage-cover-letter-input"), | |||
| { target: { value: "Cover Letter" } } | |||
| ); | |||
| @@ -68,7 +68,7 @@ describe("Apply for ad fourth stage ui tests", () => { | |||
| it("Should go back on click button", async () => { | |||
| render(cont); | |||
| fireEvent.click( | |||
| screen.getByTestId("apply-for-ad-modal-fourth-stage-go-back-button") | |||
| screen.getByTestId("apply-for-job-modal-fourth-stage-go-back-button") | |||
| ); | |||
| waitFor(() => expect(props.onDecreaseStage).toHaveBeenCalled()); | |||
| @@ -77,7 +77,7 @@ describe("Apply for ad fourth stage ui tests", () => { | |||
| it("Should finish stages on click button", async () => { | |||
| render(cont); | |||
| fireEvent.click( | |||
| screen.getByTestId("apply-for-ad-modal-fourth-stage-go-forward-button") | |||
| screen.getByTestId("apply-for-job-modal-fourth-stage-go-forward-button") | |||
| ); | |||
| waitFor(() => expect(props.onFinishedFourStages).toHaveBeenCalled()); | |||
| @@ -61,14 +61,14 @@ describe("Apply for ad second stage ui tests", () => { | |||
| it("Should render apply for ad second stage", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("apply-for-ad-second-stage")).toBeDefined(); | |||
| expect(screen.getByTestId("apply-for-job-second-stage")).toBeDefined(); | |||
| }); | |||
| it("Should change professional qualification input", () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId( | |||
| "apply-for-ad-second-stage-professional-qualification" | |||
| "apply-for-job-second-stage-professional-qualification" | |||
| ), | |||
| { | |||
| target: { value: "Faculty" }, | |||
| @@ -82,7 +82,7 @@ describe("Apply for ad second stage ui tests", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("apply-for-ad-second-stage-checkbox")[0] | |||
| container.getElementsByClassName("apply-for-job-second-stage-checkbox")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| @@ -90,7 +90,7 @@ describe("Apply for ad second stage ui tests", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("apply-for-ad-second-stage-checkbox")[1] | |||
| container.getElementsByClassName("apply-for-job-second-stage-checkbox")[1] | |||
| ).toBeDefined(); | |||
| }); | |||
| @@ -98,7 +98,7 @@ describe("Apply for ad second stage ui tests", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("apply-for-ad-second-stage-checkbox")[2] | |||
| container.getElementsByClassName("apply-for-job-second-stage-checkbox")[2] | |||
| ).toBeDefined(); | |||
| }); | |||
| @@ -106,7 +106,7 @@ describe("Apply for ad second stage ui tests", () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-second-stage-experience-input"), | |||
| screen.getByTestId("apply-for-job-second-stage-experience-input"), | |||
| { target: { value: 2 } } | |||
| ); | |||
| @@ -117,7 +117,7 @@ describe("Apply for ad second stage ui tests", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("apply-for-ad-second-stage-checkbox")[0] | |||
| container.getElementsByClassName("apply-for-job-second-stage-checkbox")[0] | |||
| ); | |||
| waitFor(() => expect(props.technologies[0]).toBe(true)); | |||
| @@ -45,7 +45,7 @@ describe("Apply for ad third stage ui tests", () => { | |||
| it("Should change linkedin input", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-linkedin-input"), | |||
| screen.getByTestId("apply-for-job-modal-third-stage-linkedin-input"), | |||
| { target: { value: "https://linkedin" } } | |||
| ); | |||
| @@ -56,14 +56,14 @@ describe("Apply for ad third stage ui tests", () => { | |||
| render(cont); | |||
| expect( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-linkedin-input") | |||
| screen.getByTestId("apply-for-job-modal-third-stage-linkedin-input") | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Should change github input", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-github-input"), | |||
| screen.getByTestId("apply-for-job-modal-third-stage-github-input"), | |||
| { target: { value: "https://github" } } | |||
| ); | |||
| @@ -73,7 +73,7 @@ describe("Apply for ad third stage ui tests", () => { | |||
| it("Should change bitbucket input", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-bitbucket-input"), | |||
| screen.getByTestId("apply-for-job-modal-third-stage-bitbucket-input"), | |||
| { target: { value: "https://bitbucket" } } | |||
| ); | |||
| @@ -83,7 +83,7 @@ describe("Apply for ad third stage ui tests", () => { | |||
| it("Should change email input", async () => { | |||
| render(cont); | |||
| fireEvent.change( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-email-input"), | |||
| screen.getByTestId("apply-for-job-modal-third-stage-email-input"), | |||
| { target: { value: "ermin.bronja@dilig.net" } } | |||
| ); | |||
| @@ -93,7 +93,7 @@ describe("Apply for ad third stage ui tests", () => { | |||
| it("Should go back when button clicked", async () => { | |||
| render(cont); | |||
| fireEvent.click( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-go-back-button") | |||
| screen.getByTestId("apply-for-job-modal-third-stage-go-back-button") | |||
| ); | |||
| waitFor(() => expect(props.onDecreaseStage).toHaveBeenCalled()); | |||
| @@ -102,7 +102,7 @@ describe("Apply for ad third stage ui tests", () => { | |||
| it("Should go forward when button clicked", async () => { | |||
| render(cont); | |||
| fireEvent.click( | |||
| screen.getByTestId("apply-for-ad-modal-third-stage-go-forward-button") | |||
| screen.getByTestId("apply-for-job-modal-third-stage-go-forward-button") | |||
| ); | |||
| waitFor(() => expect(props.onIncreaseStage).toHaveBeenCalled()); | |||
| @@ -191,7 +191,7 @@ describe("CandidateDetailsPage render tests", () => { | |||
| it("Should render page with all candidates", () => { | |||
| const { container } = render(cont); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("applicant-ads-back-button")[0] | |||
| container.getElementsByClassName("applicant-jobs-back-button")[0] | |||
| ); | |||
| const arg = { pathname: "/candidates" }; | |||
| expect(props.history.push).toHaveBeenCalledWith(arg); | |||
| @@ -39,32 +39,32 @@ describe("CreateAdPage render tests", () => { | |||
| it("Should render create ad page", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("create-ad-page")).toBeDefined(); | |||
| expect(screen.getByTestId("create-job-page")).toBeDefined(); | |||
| }); | |||
| it("Should render go back button", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("create-ad-buttons-back")[0] | |||
| container.getElementsByClassName("create-job-buttons-back")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Should render go forward button", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("create-ad-buttons-forward")[0] | |||
| container.getElementsByClassName("create-job-buttons-forward")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Should render create ad first step form", () => { | |||
| render(cont); | |||
| expect(screen.getByTestId("create-ad-first-step-form")).toBeDefined(); | |||
| expect(screen.getByTestId("create-job-first-step-form")).toBeDefined(); | |||
| }); | |||
| it("Should render sercond step form", () => { | |||
| const { container } = render(cont); | |||
| const formControls = container.getElementsByClassName( | |||
| "create-ad-form-control-first-step-input" | |||
| "create-job-form-control-first-step-input" | |||
| ); | |||
| fireEvent.change(formControls[0], { target: { value: ".NET DEVELOPER" } }); | |||
| @@ -72,13 +72,13 @@ describe("CreateAdPage render tests", () => { | |||
| fireEvent.change(formControls[1], { target: { value: "2020-05-24" } }); | |||
| fireEvent.click( | |||
| container.getElementsByClassName("create-ad-buttons-forward")[0] | |||
| container.getElementsByClassName("create-job-buttons-forward")[0] | |||
| ); | |||
| fireEvent.click(container.getElementsByClassName("create-ad-second-step-checkbox")[0]) | |||
| fireEvent.click(container.getElementsByClassName("create-job-second-step-checkbox")[0]) | |||
| fireEvent.click( | |||
| container.getElementsByClassName("create-ad-buttons-forward")[0] | |||
| container.getElementsByClassName("create-job-buttons-forward")[0] | |||
| ); | |||
| expect(screen.getByTestId("create-ad-third-step-form")).toBeDefined(); | |||
| @@ -80,7 +80,7 @@ describe("PatternDetailsPage render tests", () => { | |||
| const { container } = render(cont); | |||
| waitFor(() => { | |||
| expect( | |||
| container.getElementsByClassName("ad-details-buttons-link")[0] | |||
| container.getElementsByClassName("job-details-buttons-link")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| }); | |||
| @@ -53,7 +53,7 @@ describe("PatternsPage render tests", () => { | |||
| it("Should render add pattern button", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("add-ad-btn")[0]).toBeDefined(); | |||
| expect(container.getElementsByClassName("add-job-btn")[0]).toBeDefined(); | |||
| }); | |||
| it("Should render add pattern modal", () => { | |||
| @@ -29,20 +29,20 @@ describe("StatsAd render tests", () => { | |||
| it("Should render", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("stats-ad")[0]).toBeDefined(); | |||
| expect(container.getElementsByClassName("stats-job")[0]).toBeDefined(); | |||
| }); | |||
| it("Should render title", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("archive-ad-title")[0] | |||
| container.getElementsByClassName("archive-job-title")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| it("Should render date", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container.getElementsByClassName("archive-ad-date")[0] | |||
| container.getElementsByClassName("archive-job-date")[0] | |||
| ).toBeDefined(); | |||
| }); | |||
| @@ -50,7 +50,7 @@ describe("StatsAd render tests", () => { | |||
| const { container } = render(cont); | |||
| expect( | |||
| container | |||
| .getElementsByClassName("archive-ad-experience")[0] | |||
| .getElementsByClassName("archive-job-experience")[0] | |||
| .getElementsByTagName("p")[0].textContent | |||
| ).toBe("1+ common.experience"); | |||
| }); | |||
| @@ -43,7 +43,7 @@ describe("StatsPage render tests", () => { | |||
| it("Should render ads because there is more than 0 ads", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("archived-ads")[0]).toBeDefined(); | |||
| expect(container.getElementsByClassName("archived-jobs")[0]).toBeDefined(); | |||
| }); | |||
| it("Should render only one right arrow and that depends on screen size", () => { | |||
| @@ -63,7 +63,7 @@ describe("StatsPage render tests", () => { | |||
| it("Should render all ads in slider", () => { | |||
| const { container } = render(cont); | |||
| expect(container.getElementsByClassName("stats-ad").length).toBe( | |||
| expect(container.getElementsByClassName("stats-job").length).toBe( | |||
| mockState.stats.ads.length | |||
| ); | |||
| }); | |||
| @@ -85,7 +85,7 @@ describe("StatsPage render tests", () => { | |||
| container | |||
| .getElementsByClassName("slick-list")[0] | |||
| .getElementsByClassName("slick-active")[4] | |||
| .getElementsByClassName("archive-ad-title")[0].textContent | |||
| .getElementsByClassName("archive-job-title")[0].textContent | |||
| ).toBe("React") | |||
| ); | |||
| }); | |||
| @@ -290,11 +290,11 @@ | |||
| color: #226cb0; | |||
| } | |||
| .applicant-ads-container { | |||
| .applicant-jobs-container { | |||
| margin-top: 36px; | |||
| } | |||
| .applicant-ads-container > p { | |||
| .applicant-jobs-container > p { | |||
| font-family: "Source Sans Pro"; | |||
| font-weight: 600; | |||
| font-size: 24px; | |||
| @@ -303,7 +303,7 @@ | |||
| color: #272727; | |||
| } | |||
| .applicant-ads-sub-container { | |||
| .applicant-jobs-sub-container { | |||
| margin-top: 18px; | |||
| display: flex; | |||
| margin-left: -20px; | |||
| @@ -384,7 +384,7 @@ | |||
| text-decoration: none; | |||
| } | |||
| .applicant-ads-back-button { | |||
| .applicant-jobs-back-button { | |||
| margin-right: 36px; | |||
| font-family: "Source Sans Pro"; | |||
| font-weight: 400; | |||
| @@ -439,7 +439,7 @@ | |||
| color: #272727; | |||
| } | |||
| .applicant-ads-container-2 { | |||
| .applicant-jobs-container-2 { | |||
| display: flex; | |||
| align-items: center; | |||
| margin-top: 18px; | |||
| @@ -606,7 +606,7 @@ | |||
| justify-content: initial; | |||
| } | |||
| .applicant-ads-container-2 { | |||
| .applicant-jobs-container-2 { | |||
| flex-direction: column-reverse; | |||
| align-items: flex-start; | |||
| } | |||
| @@ -614,7 +614,7 @@ | |||
| padding-left: 0 !important; | |||
| } | |||
| .applicant-ads-back-button { | |||
| .applicant-jobs-back-button { | |||
| font-size: 14px; | |||
| line-height: 18px; | |||
| margin-right: 0; | |||
| @@ -627,11 +627,11 @@ | |||
| letter-spacing: 0.04em; | |||
| } | |||
| .active-ads-ads-arrows { | |||
| .active-jobs-jobs-arrows { | |||
| margin-left: -0.75rem; | |||
| } | |||
| .applicant-ads-buttons-container{ | |||
| .applicant-jobs-buttons-container{ | |||
| margin-left: 36px; | |||
| } | |||
| } | |||
| @@ -86,32 +86,32 @@ | |||
| background-color: #226cb0; | |||
| } | |||
| .ads-candidates-container { | |||
| .jobs-candidates-container { | |||
| max-height: 837px; | |||
| overflow-y: auto; | |||
| overflow-x: hidden; | |||
| } | |||
| .ads-candidates-slider { | |||
| .jobs-candidates-slider { | |||
| display: flex; | |||
| margin-top: 31px; | |||
| } | |||
| .ads-candidates-slider .slick-track { | |||
| .jobs-candidates-slider .slick-track { | |||
| margin: 0 !important; | |||
| } | |||
| .ads-candidates-slider .slick-slider { | |||
| .jobs-candidates-slider .slick-slider { | |||
| width: 100% !important; | |||
| } | |||
| .ads-candidates-top-container { | |||
| .jobs-candidates-top-container { | |||
| display: flex; | |||
| align-items: center; | |||
| margin-left: 72px; | |||
| } | |||
| .ads-candidates-title { | |||
| .jobs-candidates-title { | |||
| font-family: Source Sans Pro; | |||
| font-size: 24px; | |||
| font-weight: 600; | |||
| @@ -119,7 +119,7 @@ | |||
| margin-left: 18px; | |||
| } | |||
| .ads-candidates-numberOfApplicants { | |||
| .jobs-candidates-numberOfApplicants { | |||
| font-family: Source Sans Pro; | |||
| font-size: 16px; | |||
| font-weight: 600; | |||
| @@ -128,7 +128,7 @@ | |||
| margin-left: 5px; | |||
| } | |||
| .ads-candidates-image { | |||
| .jobs-candidates-image { | |||
| width: 49px; | |||
| height: 39px; | |||
| } | |||
| @@ -194,7 +194,7 @@ | |||
| margin-left: 42px; | |||
| } | |||
| .ads-search-field-responsive { | |||
| .jobs-search-field-responsive { | |||
| min-width: 350px; | |||
| border: 1px solid #226cb0; | |||
| border-radius: 10px; | |||
| @@ -209,13 +209,13 @@ | |||
| } | |||
| } | |||
| .ads-search-field-responsive::placeholder { | |||
| .jobs-search-field-responsive::placeholder { | |||
| font-size: 1rem; | |||
| color: #9d9d9d; | |||
| font-style: italic; | |||
| } | |||
| .ads-search-field { | |||
| .jobs-search-field { | |||
| min-width: 700px !important; | |||
| border: 1px solid #226cb0; | |||
| border-radius: 10px; | |||
| @@ -227,7 +227,7 @@ | |||
| z-index: 1000; | |||
| } | |||
| .ads-search-field::placeholder { | |||
| .jobs-search-field::placeholder { | |||
| font-size: 1rem; | |||
| color: #9d9d9d; | |||
| font-style: italic; | |||
| @@ -280,21 +280,21 @@ | |||
| } | |||
| @media only screen and (max-width: 600px) { | |||
| .ads-candidates-title { | |||
| .jobs-candidates-title { | |||
| font-size: 18px; | |||
| margin-left: 10px; | |||
| } | |||
| .ads-candidates-image { | |||
| .jobs-candidates-image { | |||
| width: 40px; | |||
| height: 30px; | |||
| } | |||
| .ads-candidates-numberOfApplicants { | |||
| .jobs-candidates-numberOfApplicants { | |||
| font-size: 14px; | |||
| } | |||
| } | |||
| @media only screen and (max-width: 361px) { | |||
| .ads-candidates-slider { | |||
| .jobs-candidates-slider { | |||
| flex-direction: column-reverse; | |||
| } | |||
| @@ -310,7 +310,7 @@ | |||
| margin-left: 36px; | |||
| } | |||
| .ads-candidates-top-container { | |||
| .jobs-candidates-top-container { | |||
| margin-left: 36px; | |||
| } | |||
| @@ -210,7 +210,7 @@ | |||
| padding: 20px 36px !important; | |||
| } | |||
| } | |||
| .ad-count { | |||
| .job-count { | |||
| display: flex; | |||
| flex-direction: row; | |||
| justify-content: center; | |||
| @@ -232,7 +232,7 @@ | |||
| order: 0; | |||
| flex-grow: 0; | |||
| } | |||
| .stat-ads { | |||
| .stat-jobs { | |||
| margin-bottom: 0 !important; | |||
| padding-bottom: 0 !important; | |||
| } | |||
| @@ -22,44 +22,44 @@ const Ad = ({ | |||
| const { t } = useTranslation(); | |||
| return ( | |||
| <div className={`ad-card ${className}`} onClick={onShowAdDetails}> | |||
| <div className="ad-card-date"> | |||
| <div className={`job-card ${className}`} onClick={onShowAdDetails}> | |||
| <div className="job-card-date"> | |||
| <p> | |||
| {new Date(createdAt).toLocaleDateString()} -{" "} | |||
| {new Date(expiredAt).toLocaleDateString()} | |||
| </p> | |||
| </div> | |||
| <div className="ad-card-title"> | |||
| <div className="job-card-title"> | |||
| <h3>{title}</h3> | |||
| </div> | |||
| <div className="ad-card-logo"> | |||
| <div className="job-card-logo"> | |||
| <img src={selectLogo(title)} alt="logo-react" /> | |||
| </div> | |||
| <div className="ad-card-experience"> | |||
| <div className="job-card-experience"> | |||
| <p> | |||
| {minimumExperience}+ {t("common.experience")} | |||
| </p> | |||
| </div> | |||
| {!matches && ( | |||
| <div className="ad-card-buttons"> | |||
| <div className="job-card-buttons"> | |||
| <button>LinkedIn</button> | |||
| <button>Facebook</button> | |||
| <button disabled>Instagram</button> | |||
| </div> | |||
| )} | |||
| {matches && ( | |||
| <div className="ad-card-buttons"> | |||
| <button className="ad-card-buttons-button"> | |||
| <div className="job-card-buttons"> | |||
| <button className="job-card-buttons-button"> | |||
| <img src={linkedin} /> | |||
| </button> | |||
| <button className="ad-card-buttons-button"> | |||
| <button className="job-card-buttons-button"> | |||
| <img src={facebook} /> | |||
| </button> | |||
| <button disabled className="ad-card-buttons-button"> | |||
| <button disabled className="job-card-buttons-button"> | |||
| <img src={instagram} /> | |||
| </button> | |||
| </div> | |||
| @@ -16,15 +16,15 @@ const AdDetailsCandidateCard = ({ | |||
| const { t } = useTranslation(); | |||
| return ( | |||
| <div | |||
| data-testid="ad-details-candidate" | |||
| className={`ad-details-candidate ${className}`} | |||
| data-testid="job-details-candidate" | |||
| className={`job-details-candidate ${className}`} | |||
| > | |||
| <div className="ad-details-candidate-date"> | |||
| <div className="job-details-candidate-date"> | |||
| <p>{new Date().toLocaleDateString()}</p> | |||
| </div> | |||
| <div className="ad-details-candidate-title"> | |||
| <div className="job-details-candidate-title"> | |||
| <h3 | |||
| data-testid="ad-details-candidate-title-link" | |||
| data-testid="job-details-candidate-title-link" | |||
| onClick={() => | |||
| history.push(CANDIDATES_DETAILS_PAGE.replace(":id", id)) | |||
| } | |||
| @@ -32,7 +32,7 @@ const AdDetailsCandidateCard = ({ | |||
| {firstName} {lastName} | |||
| </h3> | |||
| </div> | |||
| <div className="ad-details-candidate-experience"> | |||
| <div className="job-details-candidate-experience"> | |||
| {experience > 0 ? ( | |||
| <p> | |||
| {experience}+ {t("common.experience")} | |||
| @@ -41,12 +41,12 @@ const AdDetailsCandidateCard = ({ | |||
| <p>{t("common.noExperience")}</p> | |||
| )} | |||
| </div> | |||
| <div className="ad-details-candidate-buttons"> | |||
| <div className="job-details-candidate-buttons"> | |||
| <button>React</button> | |||
| <button>.NET</button> | |||
| <button>Angular</button> | |||
| </div> | |||
| <div className="ad-details-candidate-cv"> | |||
| <div className="job-details-candidate-cv"> | |||
| <a href="#">{cv}</a> | |||
| </div> | |||
| </div> | |||
| @@ -81,23 +81,23 @@ const AdFilters = ({ open, handleClose, technologies }) => { | |||
| onKeyDown={handleClose} | |||
| > | |||
| <div data-testid="ad-filters-drawer"> | |||
| <div className="ad-filters-header-container"> | |||
| <div className="ad-filters-header"> | |||
| <div className="job-filters-header-container"> | |||
| <div className="job-filters-header"> | |||
| <img src={filterIcon} alt="filter_icon" /> | |||
| <h3>{t("filters.filters")}</h3> | |||
| <p> | |||
| <sub>| {t("ads.ads")}</sub> | |||
| </p> | |||
| </div> | |||
| <div className="ad-filters-header-close" onClick={handleClose}> | |||
| <div className="job-filters-header-close" onClick={handleClose}> | |||
| <img src={x} alt="x" /> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-experience"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-experience"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.experience")}</p> | |||
| </div> | |||
| <div className="ad-filters-experience-slider"> | |||
| <div className="job-filters-experience-slider"> | |||
| <Slider | |||
| getAriaLabel={() => "Temperature range"} | |||
| value={sliderValue} | |||
| @@ -107,11 +107,11 @@ const AdFilters = ({ open, handleClose, technologies }) => { | |||
| /> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.tecnologies")}</p> | |||
| </div> | |||
| <div className="ad-filters-technologies-checkboxes"> | |||
| <div className="job-filters-technologies-checkboxes"> | |||
| <FormGroup> | |||
| {technologies?.map((technology, index) => ( | |||
| <FormControlLabel | |||
| @@ -121,7 +121,7 @@ const AdFilters = ({ open, handleClose, technologies }) => { | |||
| onChange={handleCheckboxes} | |||
| value={technology.name} | |||
| checked={technology.isChecked} | |||
| className="ad-filters-checkbox" | |||
| className="job-filters-checkbox" | |||
| /> | |||
| } | |||
| label={technology.name} | |||
| @@ -130,11 +130,11 @@ const AdFilters = ({ open, handleClose, technologies }) => { | |||
| </FormGroup> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.employmentType")}</p> | |||
| </div> | |||
| <div className="ad-filters-employment-type"> | |||
| <div className="job-filters-employment-type"> | |||
| <button | |||
| className={`c-btn ${ | |||
| employmentType === "Intership" | |||
| @@ -157,11 +157,11 @@ const AdFilters = ({ open, handleClose, technologies }) => { | |||
| </button> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.workHour")}</p> | |||
| </div> | |||
| <div className="ad-filters-employment-type"> | |||
| <div className="job-filters-employment-type"> | |||
| <button | |||
| className={`c-btn ${ | |||
| workHour === "PartTime" | |||
| @@ -184,11 +184,11 @@ const AdFilters = ({ open, handleClose, technologies }) => { | |||
| </button> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-search"> | |||
| <div className="job-filters-search"> | |||
| <button | |||
| onClick={onSubmitFilters} | |||
| className="c-btn c-btn--primary" | |||
| data-testid="ad-filters-submit" | |||
| data-testid="job-filters-submit" | |||
| > | |||
| {t("filters.search")} | |||
| </button> | |||
| @@ -91,20 +91,20 @@ const ApplyForAd = ({ open, title, adId, onCloseModal }) => { | |||
| }; | |||
| return ( | |||
| <CustomModal open={open} onCloseModal={onCloseModal} classes="apply-for-ad"> | |||
| <div className="apply-for-ad-header"> | |||
| <div className="apply-for-ad-header-left"> | |||
| <div className="apply-for-ad-header-left-image"> | |||
| <CustomModal open={open} onCloseModal={onCloseModal} classes="apply-for-job"> | |||
| <div className="apply-for-job-header"> | |||
| <div className="apply-for-job-header-left"> | |||
| <div className="apply-for-job-header-left-image"> | |||
| <img src={briefcaseIcon} alt="plus" /> | |||
| </div> | |||
| <div className="apply-for-ad-header-left-image-title"> | |||
| <div className="apply-for-job-header-left-image-title"> | |||
| <p>{t("ads.signUp")}</p> | |||
| </div> | |||
| <div className="apply-for-ad-header-left-image-title-sub"> | |||
| <div className="apply-for-job-header-left-image-title-sub"> | |||
| <sub> | {title}</sub> | |||
| </div> | |||
| </div> | |||
| <div className="apply-for-ad-header-right"> | |||
| <div className="apply-for-job-header-right"> | |||
| <button onClick={onCloseModal}> | |||
| <img src={xIcon} alt="x" /> | |||
| </button> | |||
| @@ -26,27 +26,27 @@ const ApplyForAdFirstStage = ({ | |||
| return ( | |||
| <div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("common.name")}</label> | |||
| <input | |||
| type="text" | |||
| placeholder="ex. Petar" | |||
| value={firstName} | |||
| data-testid="apply-for-ad-modal-first-name-input" | |||
| data-testid="apply-for-job-modal-first-name-input" | |||
| onChange={(e) => setFirstName(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("common.lastName")}</label> | |||
| <input | |||
| type="text" | |||
| placeholder="ex. Petrovic" | |||
| value={lastName} | |||
| data-testid="apply-for-ad-modal-last-name-input" | |||
| data-testid="apply-for-job-modal-last-name-input" | |||
| onChange={(e) => setLastName(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("common.gender")}</label> | |||
| <div style={{ display: "flex" }}> | |||
| <div style={{ display: "flex" }}> | |||
| @@ -54,7 +54,7 @@ const ApplyForAdFirstStage = ({ | |||
| type="radio" | |||
| name="gender" | |||
| value="Muski" | |||
| className="apply-for-ad-modal-gender-input" | |||
| className="apply-for-job-modal-gender-input" | |||
| checked={gender === "Muski"} | |||
| onChange={(e) => setGender(e.target.value)} | |||
| /> | |||
| @@ -65,7 +65,7 @@ const ApplyForAdFirstStage = ({ | |||
| type="radio" | |||
| name="gender" | |||
| value="Zenski" | |||
| className="apply-for-ad-modal-gender-input" | |||
| className="apply-for-job-modal-gender-input" | |||
| checked={gender === "Zenski"} | |||
| onChange={(e) => setGender(e.target.value)} | |||
| /> | |||
| @@ -73,31 +73,31 @@ const ApplyForAdFirstStage = ({ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("common.dateOfBirth")}</label> | |||
| <input | |||
| type="date" | |||
| placeholder="ex. Datum rodjenja" | |||
| data-testid="apply-for-ad-modal-date-of-birth" | |||
| data-testid="apply-for-job-modal-date-of-birth" | |||
| value={dateOfBirth} | |||
| onChange={(e) => setDateOfBirth(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("common.phoneNumber")}</label> | |||
| <input | |||
| type="text" | |||
| placeholder="ex. +381/60/000/0000" | |||
| data-testid="apply-for-ad-modal-phone-number" | |||
| data-testid="apply-for-job-modal-phone-number" | |||
| value={phoneNumber} | |||
| onChange={(e) => setPhoneNumber(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-buttons"> | |||
| <div className="apply-for-job-buttons"> | |||
| <button disabled>{t("common.back")}</button> | |||
| <button | |||
| disabled={disabled} | |||
| data-testid="apply-for-ad-modal-go-forward-button" | |||
| data-testid="apply-for-job-modal-go-forward-button" | |||
| onClick={() => onIncreaseStage()} | |||
| > | |||
| {t("common.continue")} | |||
| @@ -22,8 +22,8 @@ const ApplyForAdFourthStage = ({ | |||
| }; | |||
| return ( | |||
| <div data-testid="apply-for-ad-modal-fourth-stage"> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div data-testid="apply-for-job-modal-fourth-stage"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>CV</label> | |||
| <div | |||
| className="uploadCV-input" | |||
| @@ -67,7 +67,7 @@ const ApplyForAdFourthStage = ({ | |||
| id="upload-file" | |||
| style={{ display: "none", zIndex: -1 }} | |||
| value={pdfFile} | |||
| data-testid="apply-for-ad-modal-fourth-stage-pdf-input" | |||
| data-testid="apply-for-job-modal-fourth-stage-pdf-input" | |||
| onChange={(e) => { | |||
| console.log("Ovde smo"); | |||
| setPdfFile(e.target.files[0]); | |||
| @@ -79,26 +79,26 @@ const ApplyForAdFourthStage = ({ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("ads.coverLetter")}</label> | |||
| <textarea | |||
| value={coverLetter} | |||
| onChange={(e) => setCoverLetter(e.target.value)} | |||
| data-testid="apply-for-ad-modal-fourth-stage-cover-letter-input" | |||
| data-testid="apply-for-job-modal-fourth-stage-cover-letter-input" | |||
| placeholder="ex. Kao student Elektronskog fakulteta u Nišu..." | |||
| rows={5} | |||
| ></textarea> | |||
| </div> | |||
| <div className="apply-for-ad-buttons"> | |||
| <div className="apply-for-job-buttons"> | |||
| <button | |||
| onClick={onDecreaseStage} | |||
| data-testid="apply-for-ad-modal-fourth-stage-go-back-button" | |||
| data-testid="apply-for-job-modal-fourth-stage-go-back-button" | |||
| > | |||
| {t("common.back")} | |||
| </button> | |||
| <button | |||
| disabled={disabled} | |||
| data-testid="apply-for-ad-modal-fourth-stage-go-forward-button" | |||
| data-testid="apply-for-job-modal-fourth-stage-go-forward-button" | |||
| onClick={onFinishedFourStages} | |||
| > | |||
| {t("ads.signUp")} | |||
| @@ -35,11 +35,11 @@ const ApplyForAdSecondStage = ({ | |||
| }; | |||
| return ( | |||
| <div data-testid="apply-for-ad-second-stage"> | |||
| <div className="apply-for-ad-header-title"> | |||
| <div data-testid="apply-for-job-second-stage"> | |||
| <div className="apply-for-job-header-title"> | |||
| <p>{t("ads.professionalQualification")}</p> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <input | |||
| type="text" | |||
| placeholder="ex. Elektrotehnicki fakultet" | |||
| @@ -48,13 +48,13 @@ const ApplyForAdSecondStage = ({ | |||
| onChange={(e) => setProfessionalQualification(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-header-title"> | |||
| <div className="apply-for-job-header-title"> | |||
| <p>{t("ads.technologies")}</p> | |||
| </div> | |||
| <div className="apply-for-ad-header-sub"> | |||
| <div className="apply-for-ad-header-sub-group"> | |||
| <div className="apply-for-job-header-sub"> | |||
| <div className="apply-for-job-header-sub-group"> | |||
| <label>Back-End</label> | |||
| <div className="apply-for-ad-header-sub-group-checkboxes"> | |||
| <div className="apply-for-job-header-sub-group-checkboxes"> | |||
| {technologies | |||
| .filter((x) => x.technologyType === "Backend") | |||
| .map((x) => ( | |||
| @@ -62,7 +62,7 @@ const ApplyForAdSecondStage = ({ | |||
| key={x.technologyId} | |||
| control={ | |||
| <Checkbox | |||
| className="apply-for-ad-second-stage-checkbox" | |||
| className="apply-for-job-second-stage-checkbox" | |||
| value={x.name} | |||
| checked={x.isChecked} | |||
| onChange={handleCheckboxes.bind(this, x.technologyId)} | |||
| @@ -73,9 +73,9 @@ const ApplyForAdSecondStage = ({ | |||
| ))} | |||
| </div> | |||
| </div> | |||
| <div className="apply-for-ad-header-sub-group"> | |||
| <div className="apply-for-job-header-sub-group"> | |||
| <label>Front-End</label> | |||
| <div className="apply-for-ad-header-sub-group-checkboxes"> | |||
| <div className="apply-for-job-header-sub-group-checkboxes"> | |||
| {technologies | |||
| .filter((x) => x.technologyType === "Frontend") | |||
| .map((x) => ( | |||
| @@ -83,7 +83,7 @@ const ApplyForAdSecondStage = ({ | |||
| key={x.technologyId} | |||
| control={ | |||
| <Checkbox | |||
| className="apply-for-ad-second-stage-checkbox" | |||
| className="apply-for-job-second-stage-checkbox" | |||
| value={x.name} | |||
| checked={x.isChecked} | |||
| onChange={handleCheckboxes.bind(this, x.technologyId)} | |||
| @@ -94,9 +94,9 @@ const ApplyForAdSecondStage = ({ | |||
| ))} | |||
| </div> | |||
| </div> | |||
| <div className="apply-for-ad-header-sub-group"> | |||
| <div className="apply-for-job-header-sub-group"> | |||
| <label>{t("ads.others")}</label> | |||
| <div className="apply-for-ad-header-sub-group-checkboxes"> | |||
| <div className="apply-for-job-header-sub-group-checkboxes"> | |||
| {technologies | |||
| .filter((x) => x.technologyType === "Other") | |||
| .map((x) => ( | |||
| @@ -104,7 +104,7 @@ const ApplyForAdSecondStage = ({ | |||
| key={x.technologyId} | |||
| control={ | |||
| <Checkbox | |||
| className="apply-for-ad-second-stage-checkbox" | |||
| className="apply-for-job-second-stage-checkbox" | |||
| value={x.name} | |||
| checked={x.isChecked} | |||
| onChange={handleCheckboxes.bind(this, x.technologyId)} | |||
| @@ -116,7 +116,7 @@ const ApplyForAdSecondStage = ({ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>{t("filters.experience")}</label> | |||
| <input | |||
| type="number" | |||
| @@ -126,7 +126,7 @@ const ApplyForAdSecondStage = ({ | |||
| onChange={(e) => setExperience(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-buttons"> | |||
| <div className="apply-for-job-buttons"> | |||
| <button onClick={onDecreaseStage}>{t("common.back")}</button> | |||
| <button onClick={onIncreaseStage} disabled={disabled}> | |||
| {t("common.continue")} | |||
| @@ -23,10 +23,10 @@ const ApplyForAdThirdStage = ({ | |||
| return ( | |||
| <div> | |||
| <div className="apply-for-ad-header-title"> | |||
| <div className="apply-for-job-header-title"> | |||
| <p>{t("common.socialNetwork")}</p> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>LinkedIn</label> | |||
| <input | |||
| type="text" | |||
| @@ -36,7 +36,7 @@ const ApplyForAdThirdStage = ({ | |||
| placeholder="ex. https://www.linkedin.com/in/petar-petrovic" | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>GitHub</label> | |||
| <input | |||
| type="text" | |||
| @@ -46,7 +46,7 @@ const ApplyForAdThirdStage = ({ | |||
| placeholder="ex. https://www.github.com/petarpetrovic" | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>BitBucket</label> | |||
| <input | |||
| type="text" | |||
| @@ -56,7 +56,7 @@ const ApplyForAdThirdStage = ({ | |||
| placeholder="ex. https://developer.atlassian.com/user/petarapetrovic" | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-modal-form-control"> | |||
| <div className="apply-for-job-modal-form-control"> | |||
| <label>Email</label> | |||
| <input | |||
| type="email" | |||
| @@ -66,7 +66,7 @@ const ApplyForAdThirdStage = ({ | |||
| placeholder="ex. petar.petrovic@dilig.net" | |||
| /> | |||
| </div> | |||
| <div className="apply-for-ad-buttons"> | |||
| <div className="apply-for-job-buttons"> | |||
| <button | |||
| onClick={onDecreaseStage} | |||
| data-testid="apply-for-ad-modal-third-stage-go-back-button" | |||
| @@ -3,7 +3,7 @@ import PropTypes from "prop-types"; | |||
| import { selectLogo } from "../../util/helpers/technologiesLogos"; | |||
| import { useTranslation } from "react-i18next"; | |||
| const ArchiveAd = ({ | |||
| const ArchiveJob = ({ | |||
| className, | |||
| title, | |||
| minimumExperience, | |||
| @@ -13,20 +13,20 @@ const ArchiveAd = ({ | |||
| }) => { | |||
| const { t } = useTranslation(); | |||
| return ( | |||
| <div className={`archive-ad ${className}`} onClick={onShowAdDetails}> | |||
| <div className="archive-ad-date"> | |||
| <div className={`archive-job ${className}`} onClick={onShowAdDetails}> | |||
| <div className="archive-job-date"> | |||
| <p> | |||
| {new Date(createdAt).toLocaleDateString()} -{" "} | |||
| {new Date(expiredAt).toLocaleDateString()} | |||
| </p> | |||
| </div> | |||
| <div className="archive-ad-title"> | |||
| <div className="archive-job-title"> | |||
| <h3>{title}</h3> | |||
| </div> | |||
| <div className="archive-ad-image"> | |||
| <div className="archive-job-image"> | |||
| <img src={selectLogo(title)} alt=".net icon" /> | |||
| </div> | |||
| <div className="archive-ad-experience"> | |||
| <div className="archive-job-experience"> | |||
| {minimumExperience > 0 ? ( | |||
| <p> | |||
| {minimumExperience}+ {t("common.experience")} | |||
| @@ -39,7 +39,7 @@ const ArchiveAd = ({ | |||
| ); | |||
| }; | |||
| ArchiveAd.propTypes = { | |||
| ArchiveJob.propTypes = { | |||
| id: PropTypes.number, | |||
| title: PropTypes.string, | |||
| minimumExperience: PropTypes.number, | |||
| @@ -49,4 +49,4 @@ ArchiveAd.propTypes = { | |||
| className: PropTypes.any, | |||
| }; | |||
| export default ArchiveAd; | |||
| export default ArchiveJob; | |||
| @@ -14,23 +14,23 @@ const StatsAd = ({ | |||
| }) => { | |||
| const {t} = useTranslation() | |||
| return ( | |||
| <div className={`archive-ad stats-ad ${className}`} onClick={onShowAdDetails}> | |||
| <div className="ad-count"> | |||
| <div className={`archive-job stats-job ${className}`} onClick={onShowAdDetails}> | |||
| <div className="job-count"> | |||
| {count} {t("ads.registered")} | |||
| </div> | |||
| <div className="archive-ad-date"> | |||
| <div className="archive-job-date"> | |||
| <p> | |||
| {new Date(createdAt).toLocaleDateString()} -{" "} | |||
| {new Date(expiredAt).toLocaleDateString()} | |||
| </p> | |||
| </div> | |||
| <div className="archive-ad-title"> | |||
| <div className="archive-job-title"> | |||
| <h3>{title}</h3> | |||
| </div> | |||
| <div className="archive-ad-image"> | |||
| <div className="archive-job-image"> | |||
| <img src={selectLogo(title)} alt=".net icon" /> | |||
| </div> | |||
| <div className="archive-ad-experience"> | |||
| <div className="archive-job-experience"> | |||
| {minimumExperience > 0 ? ( | |||
| <p>{minimumExperience}+ {t("common.experience")}</p> | |||
| ) : ( | |||
| @@ -14,7 +14,7 @@ const FilterButton = ({ onShowFilters }) => { | |||
| return ( | |||
| <IconButton | |||
| className={ | |||
| "c-btn--primary-outlined ads-page-btn fltr-btn c-btn userPageBtn ml-20px no-padding custom-filter-button" | |||
| "c-btn--primary-outlined jobs-page-btn fltr-btn c-btn userPageBtn ml-20px no-padding custom-filter-button" | |||
| } | |||
| onClick={onShowFilters} | |||
| > | |||
| @@ -182,23 +182,23 @@ const CandidateFilters = ({ | |||
| onKeyDown={handleClose} | |||
| > | |||
| <div> | |||
| <div className="ad-filters-header-container"> | |||
| <div className="ad-filters-header"> | |||
| <div className="job-filters-header-container"> | |||
| <div className="job-filters-header"> | |||
| <img src={filterIcon} alt="filter_icon" /> | |||
| <h3>{t("filters.filters")}</h3> | |||
| <p> | |||
| <sub>| {t("candidates.candidates")}</sub> | |||
| </p> | |||
| </div> | |||
| <div className="ad-filters-header-close" onClick={handleClose}> | |||
| <div className="job-filters-header-close" onClick={handleClose}> | |||
| <img src={x} alt="x" /> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-experience"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-experience"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.experience")}</p> | |||
| </div> | |||
| <div className="ad-filters-experience-slider"> | |||
| <div className="job-filters-experience-slider"> | |||
| <Slider | |||
| getAriaLabel={() => "Temperature range"} | |||
| value={sliderValue} | |||
| @@ -208,11 +208,11 @@ const CandidateFilters = ({ | |||
| /> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.technologies")}</p> | |||
| </div> | |||
| <div className="ad-filters-technologies-checkboxes"> | |||
| <div className="job-filters-technologies-checkboxes"> | |||
| <FormGroup> | |||
| {technologies.map((technology, index) => ( | |||
| <FormControlLabel | |||
| @@ -221,7 +221,7 @@ const CandidateFilters = ({ | |||
| <Checkbox | |||
| checked={technology.isChecked} | |||
| name={technology.name} | |||
| className="ad-filters-technologies-checkboxes-checkbox" | |||
| className="job-filters-technologies-checkboxes-checkbox" | |||
| onChange={handleTechologiesChange} | |||
| /> | |||
| } | |||
| @@ -231,11 +231,11 @@ const CandidateFilters = ({ | |||
| </FormGroup> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.employmentType")}</p> | |||
| </div> | |||
| <div className="ad-filters-employment-type"> | |||
| <div className="job-filters-employment-type"> | |||
| {typesOfEmployments.map((type, index) => ( | |||
| <button | |||
| key={index} | |||
| @@ -251,8 +251,8 @@ const CandidateFilters = ({ | |||
| ))} | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies" style={{ marginTop: "35px" }}> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies" style={{ marginTop: "35px" }}> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("filters.dateOfApplication")}</p> | |||
| <div className="filter-date-container"> | |||
| <p>{t("common.from")}</p> | |||
| @@ -277,7 +277,7 @@ const CandidateFilters = ({ | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-search" style={{ marginTop: "45px" }}> | |||
| <div className="job-filters-search" style={{ marginTop: "45px" }}> | |||
| <button | |||
| className="c-btn c-btn--primary" | |||
| onClick={fiterItems} | |||
| @@ -36,7 +36,7 @@ import { Link, useLocation } from "react-router-dom"; | |||
| const NavbarComponent = () => { | |||
| const navItems = [ | |||
| "ads", | |||
| "jobs", | |||
| "selectionFlow", | |||
| "candidates", | |||
| "schedule", | |||
| @@ -45,7 +45,7 @@ const ApplicantSelection = ({ | |||
| <p>{date && date !== "" && formatDate(new Date(date))}</p> | |||
| </div> | |||
| <div className="ad-card-title"> | |||
| <div className="job-card-title"> | |||
| <h3>{levelName}</h3> | |||
| </div> | |||
| @@ -61,12 +61,12 @@ const ApplicantSelection = ({ | |||
| <div className="active-process-card-link"> | |||
| {status === "Odrađen" && ( | |||
| <Link className="ad-details-buttons-link" to={"/candidates/" + id}> | |||
| <Link className="job-details-buttons-link" to={"/candidates/" + id}> | |||
| {t("selection.report")} | |||
| </Link> | |||
| )} | |||
| {link && status !== "Odrađen" && ( | |||
| <a href={link} className="ad-details-buttons-link"> | |||
| <a href={link} className="job-details-buttons-link"> | |||
| {t("selection.link")} | |||
| </a> | |||
| )} | |||
| @@ -53,23 +53,23 @@ const SelectionFilter = ({ open, handleClose, statuses }) => { | |||
| onKeyDown={handleClose} | |||
| > | |||
| <div> | |||
| <div className="ad-filters-header-container"> | |||
| <div className="ad-filters-header"> | |||
| <div className="job-filters-header-container"> | |||
| <div className="job-filters-header"> | |||
| <img src={filterIcon} alt="filter_icon" /> | |||
| <h3>{t("filters.filters")}</h3> | |||
| <p> | |||
| <sub>| {t("selection.title")}</sub> | |||
| </p> | |||
| </div> | |||
| <div className="ad-filters-header-close" onClick={handleClose}> | |||
| <div className="job-filters-header-close" onClick={handleClose}> | |||
| <img src={x} alt="x" /> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>Status</p> | |||
| </div> | |||
| <div className="ad-filters-technologies-checkboxes"> | |||
| <div className="job-filters-technologies-checkboxes"> | |||
| <FormGroup> | |||
| {statuses?.map((technology, index) => ( | |||
| <FormControlLabel | |||
| @@ -87,8 +87,8 @@ const SelectionFilter = ({ open, handleClose, statuses }) => { | |||
| </FormGroup> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-technologies"> | |||
| {/* <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-technologies"> | |||
| {/* <div className="job-filters-sub-title"> | |||
| <p>Datum isteka oglasa</p> | |||
| </div> | |||
| <input | |||
| @@ -97,10 +97,10 @@ const SelectionFilter = ({ open, handleClose, statuses }) => { | |||
| value={expiredAt} | |||
| onChange={(e) => setExpiredAt(e.target.value)} | |||
| /> */} | |||
| <div className="ad-filters-sub-title"> | |||
| <div className="job-filters-sub-title"> | |||
| <p>{t("selection.filterDate")}</p> | |||
| </div> | |||
| <div className="add-ad-modal-stage-sub-card"> | |||
| <div className="add-job-modal-stage-sub-card"> | |||
| <label>{t("common.from")}</label> | |||
| <input | |||
| type="date" | |||
| @@ -109,7 +109,7 @@ const SelectionFilter = ({ open, handleClose, statuses }) => { | |||
| onChange={(e) => setStartAt(e.target.value)} | |||
| /> | |||
| </div> | |||
| <div className="add-ad-modal-stage-sub-card"> | |||
| <div className="add-job-modal-stage-sub-card"> | |||
| <label>{t("common.to")}</label> | |||
| <input | |||
| type="date" | |||
| @@ -119,7 +119,7 @@ const SelectionFilter = ({ open, handleClose, statuses }) => { | |||
| /> | |||
| </div> | |||
| </div> | |||
| <div className="ad-filters-search"> | |||
| <div className="job-filters-search"> | |||
| <button onClick={onSubmitFilters} className="c-btn c-btn--primary"> | |||
| {t("common.search")} | |||
| </button> | |||
| @@ -2,8 +2,8 @@ | |||
| export const BASE_PAGE = '/'; | |||
| export const FORGOT_PASSWORD_PAGE = '/forgot-password'; | |||
| export const HOME_PAGE = '/home'; | |||
| export const ADS_PAGE = '/ads'; | |||
| export const AD_DETAILS_PAGE = '/ads/:id'; | |||
| export const ADS_PAGE = '/jobs'; | |||
| export const JOB_DETAILS_PAGE = '/jobs/:id'; | |||
| export const ERROR_PAGE = '/error-page'; | |||
| export const NOT_FOUND_PAGE = '/not-found'; | |||
| export const USERS_PAGE = '/users'; | |||
| @@ -19,4 +19,4 @@ export const PATTERN_DETAILS_PAGE = '/patterns/:id'; | |||
| export const SCHEDULE_PAGE = '/schedule' | |||
| export const STATS_PAGE = '/statistics'; | |||
| export const REGISTER_PAGE = '/register'; | |||
| export const CREATE_AD_PAGE = '/create-ad'; | |||
| export const CREATE_AD_PAGE = '/create-job'; | |||
| @@ -121,7 +121,7 @@ export default { | |||
| }, | |||
| nav: { | |||
| navigation: "Navigation", | |||
| ads: "Ads", | |||
| jobs: "Ads", | |||
| selectionFlow: "Selection flow", | |||
| candidates: "Candidates", | |||
| planer: "Planer", | |||
| @@ -108,31 +108,31 @@ const AdDetailsPage = () => { | |||
| <> | |||
| {!ad && <p>Radi</p>} | |||
| {ad && ( | |||
| <div data-testid="ad-details-page"> | |||
| <div data-testid="job-details-page"> | |||
| <ApplyForAd | |||
| open={applyForAdOpenModal} | |||
| title={ad.title} | |||
| adId={id} | |||
| onCloseModal={handleCloseApplyForAdModal} | |||
| /> | |||
| <div className="ad-details"> | |||
| <div className="job-details"> | |||
| {matches && ( | |||
| <div className="ad-details-tech-logo-date"> | |||
| <div className="job-details-tech-logo-date"> | |||
| <p> | |||
| <span>{t("ads.adDetailsExpiredAt")}: </span> | |||
| {new Date(ad.expiredAt).toLocaleDateString()} | |||
| </p> | |||
| </div> | |||
| )} | |||
| <div className="ad-details-tech-logo"> | |||
| <div className="ad-details-tech-logo-title"> | |||
| <div className="ad-details-tech-logo-title-img"> | |||
| <div className="job-details-tech-logo"> | |||
| <div className="job-details-tech-logo-title"> | |||
| <div className="job-details-tech-logo-title-img"> | |||
| <img src={selectLogo(ad.title)} alt="asp-net-icon" /> | |||
| </div> | |||
| <div className="ad-details-tech-logo-title-title"> | |||
| <div className="job-details-tech-logo-title-title"> | |||
| <h1>{ad.title}</h1> | |||
| </div> | |||
| <div className="ad-details-tech-logo-title-sub"> | |||
| <div className="job-details-tech-logo-title-sub"> | |||
| <sub> | |||
| | {ad.totalApplicants} {t("ads.registered")} | |||
| </sub> | |||
| @@ -141,7 +141,7 @@ const AdDetailsPage = () => { | |||
| {!(new Date(ad.expiredAt) < new Date()) && ( | |||
| <IconButton | |||
| onClick={() => setShowArchiveAdDialog(true)} | |||
| className={`c-btn--primary-outlined editEnableBtn c-btn userPageBtn archive-ad-button | |||
| className={`c-btn--primary-outlined editEnableBtn c-btn userPageBtn archive-job-button | |||
| }`} | |||
| > | |||
| {!matches && "Arhiviraj"} | |||
| @@ -167,43 +167,43 @@ const AdDetailsPage = () => { | |||
| }} | |||
| onConfirm={() => archiveAdHandler()} | |||
| /> | |||
| <div className="ad-details-content"> | |||
| <div className="ad-details-content-experience"> | |||
| <div className="job-details-content"> | |||
| <div className="job-details-content-experience"> | |||
| <p> | |||
| {ad.minimumExperience}+ {t("ads.adDetailsExperience")} | |||
| </p> | |||
| </div> | |||
| <div className="ad-details-content-work-time"> | |||
| <div className="job-details-content-work-time"> | |||
| <button>{t("filters.work")}</button> | |||
| <button>{t("filters.fullTime")}</button> | |||
| </div> | |||
| <div className="ad-details-content-content"> | |||
| <div className="ad-details-content-conten-description"> | |||
| <div className="job-details-content-content"> | |||
| <div className="job-details-content-conten-description"> | |||
| <p>{t("ads.adDetailsDescription")}</p> | |||
| </div> | |||
| <div className="ad-details-content-conten-description"> | |||
| <div className="job-details-content-conten-description"> | |||
| <h3>{t("ads.adDetailsKeyResponsibilities")}</h3> | |||
| {parse(ad.keyResponsibilities)} | |||
| </div> | |||
| <div className="ad-details-content-conten-description"> | |||
| <div className="job-details-content-conten-description"> | |||
| <h3>{t("ads.adDetailsRequirements")}</h3> | |||
| {parse(ad.requirements)} | |||
| </div> | |||
| <div className="ad-details-content-conten-description"> | |||
| <div className="job-details-content-conten-description"> | |||
| <h3>{t("ads.adDetailsOffer")}</h3> | |||
| {parse(ad.offer)} | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {ad.applicants && ad.applicants.length > 0 && ( | |||
| <div className="ad-details-applicants"> | |||
| <div className="ad-details-applicants-header"> | |||
| <div className="job-details-applicants"> | |||
| <div className="job-details-applicants-header"> | |||
| <h2>{t("ads.archiveAdsCandidates")}</h2> | |||
| </div> | |||
| <div className="ad-details-applicants-applicants"> | |||
| <div className="job-details-applicants-applicants"> | |||
| {!matches && ( | |||
| <div className="ad-details-applicants-applicants-a"> | |||
| <div className="ad-details-applicants-applicants-arrows"> | |||
| <div className="job-details-applicants-applicants-a"> | |||
| <div className="job-details-applicants-applicants-arrows"> | |||
| <button onClick={archiveAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -215,7 +215,7 @@ const AdDetailsPage = () => { | |||
| </div> | |||
| </div> | |||
| )} | |||
| <div className="ad-details-applicants-applicants-applicant"> | |||
| <div className="job-details-applicants-applicants-applicant"> | |||
| <Slider | |||
| ref={archiveAdsSliderRef} | |||
| {...settings} | |||
| @@ -239,7 +239,7 @@ const AdDetailsPage = () => { | |||
| </div> | |||
| </div> | |||
| {matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={archiveAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -252,10 +252,10 @@ const AdDetailsPage = () => { | |||
| )} | |||
| </div> | |||
| )} | |||
| <div className="ad-details-actions"> | |||
| <div className="job-details-actions"> | |||
| {!matches && ( | |||
| <div className="ad-details-expired-at"> | |||
| <div className="ad-details-tech-logo-date"> | |||
| <div className="job-details-expired-at"> | |||
| <div className="job-details-tech-logo-date"> | |||
| <p> | |||
| <span>{t("ads.adDetailsExpiredAt")}: </span> | |||
| {new Date(ad.expiredAt).toLocaleDateString()} | |||
| @@ -263,9 +263,9 @@ const AdDetailsPage = () => { | |||
| </div> | |||
| </div> | |||
| )} | |||
| <div className="ad-details-buttons"> | |||
| <div className="job-details-buttons"> | |||
| <button | |||
| className="ad-details-buttons-link" | |||
| className="job-details-buttons-link" | |||
| onClick={() => history.push({ pathname: ADS_PAGE })} | |||
| > | |||
| {t("ads.backToAds")} | |||
| @@ -273,7 +273,7 @@ const AdDetailsPage = () => { | |||
| {!(new Date(ad.expiredAt) < new Date()) && ( | |||
| <IconButton | |||
| className="c-btn c-btn--primary add-ad-btn apply-for-ad-button" | |||
| className="c-btn c-btn--primary add-job-btn apply-for-job-button" | |||
| onClick={() => setApplyForAdOpenModal(true)} | |||
| > | |||
| {t("ads.signUp").toUpperCase()} | |||
| @@ -1,7 +1,6 @@ | |||
| import React, { useState, useEffect, useRef } from "react"; | |||
| import PropTypes from "prop-types"; | |||
| import Ad from "../../components/Ads/Ad"; | |||
| import ArchiveAd from "../../components/Ads/ArchiveAd"; | |||
| import IconButton from "../../components/IconButton/IconButton"; | |||
| import arrow_left from "../../assets/images/arrow_left.png"; | |||
| import arrow_right from "../../assets/images/arrow_right.png"; | |||
| @@ -15,7 +14,7 @@ import { | |||
| } from "../../store/actions/ads/adsAction"; | |||
| import { useSelector } from "react-redux"; | |||
| import { selectAds } from "../../store/selectors/adsSelectors"; | |||
| import { AD_DETAILS_PAGE, CREATE_AD_PAGE } from "../../constants/pages"; | |||
| import { JOB_DETAILS_PAGE, CREATE_AD_PAGE } from "../../constants/pages"; | |||
| import FilterButton from "../../components/Button/FilterButton"; | |||
| import Slider from "react-slick"; | |||
| import "slick-carousel/slick/slick.css"; | |||
| @@ -31,6 +30,7 @@ import { useLocation } from "react-router-dom"; | |||
| import Fade from "@mui/material/Fade"; | |||
| import { FETCH_ADS_LOADING } from "../../store/actions/ads/adsActionConstants"; | |||
| import { selectIsLoadingByActionType } from "../../store/selectors/loadingSelectors"; | |||
| import ArchiveJob from '../../components/Ads/ArchiveJob' | |||
| const AdsPage = ({ history }) => { | |||
| const theme = useTheme(); | |||
| @@ -41,9 +41,9 @@ const AdsPage = ({ history }) => { | |||
| const [tmp, setTmp] = useState(null); | |||
| const ads = useSelector(selectAds); | |||
| const technologies = useSelector(selectTechnologies); | |||
| const archiveAds = useSelector(selectArchiveAds); | |||
| const archiveJobs = useSelector(selectArchiveAds); | |||
| const activeAdsSliderRef = useRef(); | |||
| const archiveAdsSliderRef = useRef(); | |||
| const archiveJobsSliderRef = useRef(); | |||
| const { t } = useTranslation(); | |||
| const dispatch = useDispatch(); | |||
| const { search } = useLocation(); | |||
| @@ -53,8 +53,8 @@ const AdsPage = ({ history }) => { | |||
| dispatch(setArchiveAdsReq()); | |||
| }, []); | |||
| var slider1 = document.querySelector(".active-ads-ads-ad .slick-track"); | |||
| var slider2 = document.querySelector(".archived-ads-ads-ad .slick-track"); | |||
| var slider1 = document.querySelector(".active-jobs-jobs-job .slick-track"); | |||
| var slider2 = document.querySelector(".archived-jobs-jobs-job .slick-track"); | |||
| useEffect(() => { | |||
| if (slider1 && slider2) { | |||
| @@ -150,11 +150,11 @@ const AdsPage = ({ history }) => { | |||
| }; | |||
| const archiveAdsArrowLeftHandler = () => { | |||
| archiveAdsSliderRef.current.slickPrev(); | |||
| archiveJobsSliderRef.current.slickPrev(); | |||
| }; | |||
| const archiveAdsArrowRightHandler = () => { | |||
| archiveAdsSliderRef.current.slickNext(); | |||
| archiveJobsSliderRef.current.slickNext(); | |||
| }; | |||
| // const deleteFiltersHandler = () => { | |||
| @@ -172,11 +172,11 @@ const AdsPage = ({ history }) => { | |||
| return ads; | |||
| }; | |||
| const getDummyArchiveAds = (len) => { | |||
| const getDummyArchiveJobs = (len) => { | |||
| const ads = []; | |||
| for (let i = 0; i < 5 - len + 1; i++) { | |||
| ads.push(<ArchiveAd key={i} className="hiddenAd" />); | |||
| ads.push(<ArchiveJob key={i} className="hiddenAd" />); | |||
| } | |||
| return ads; | |||
| @@ -196,7 +196,7 @@ const AdsPage = ({ history }) => { | |||
| placeholder="Pretrazi..." | |||
| value={searchInput} | |||
| onChange={(e) => setSearchInput(e.target.value)} | |||
| className="ads-search-field" | |||
| className="jobs-search-field" | |||
| onClick={stopPropagation} | |||
| style={{ zIndex: 1000 }} | |||
| /> | |||
| @@ -209,7 +209,7 @@ const AdsPage = ({ history }) => { | |||
| placeholder="Pretrazi..." | |||
| value={searchInput} | |||
| onChange={(e) => setSearchInput(e.target.value)} | |||
| className="ads-search-field-responsive smaller" | |||
| className="jobs-search-field-responsive smaller" | |||
| onClick={stopPropagation} | |||
| style={{ zIndex: 1000 }} | |||
| /> | |||
| @@ -226,7 +226,7 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| </div> | |||
| ) : ( | |||
| <div data-testid="ads-page"> | |||
| <div data-testid="jobs-page"> | |||
| <div className="l-t-rectangle"></div> | |||
| <div className="r-b-rectangle"></div> | |||
| {/* <AdFilters /> */} | |||
| @@ -241,7 +241,7 @@ const AdsPage = ({ history }) => { | |||
| <Fade | |||
| in={isSearchFieldVisible} | |||
| timeout={500} | |||
| className="ads-page-search-by-title" | |||
| className="jobs-page-search-by-title" | |||
| > | |||
| {inputNormal} | |||
| </Fade> | |||
| @@ -279,12 +279,12 @@ const AdsPage = ({ history }) => { | |||
| </> | |||
| )} | |||
| </div> | |||
| <div className="ads" onClick={() => handleChangeVisibility(false)}> | |||
| <div className="jobs" onClick={() => handleChangeVisibility(false)}> | |||
| {ads && ads.length > 0 && ( | |||
| <div className="active-ads"> | |||
| <div className="active-ads-header"> | |||
| <div className="active-jobs"> | |||
| <div className="active-jobs-header"> | |||
| <h1>{t("ads.activeAds")}</h1> | |||
| <div className="active-ads-header-buttons"> | |||
| <div className="active-jobs-header-buttons"> | |||
| <IconButton | |||
| className={ | |||
| "c-btn--primary-outlined c-btn ads-page-btn userPageBtn ml-20px no-padding" | |||
| @@ -304,10 +304,10 @@ const AdsPage = ({ history }) => { | |||
| <FilterButton onShowFilters={handleToggleFiltersDrawer} /> | |||
| </div> | |||
| </div> | |||
| <div className="active-ads-ads"> | |||
| <div className="active-ads-ads-a"> | |||
| <div className="active-jobs-jobs"> | |||
| <div className="active-jobs-jobs-a"> | |||
| {!matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={activeAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -319,7 +319,7 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| )} | |||
| </div> | |||
| <div className="active-ads-ads-ad"> | |||
| <div className="active-jobs-jobs-job"> | |||
| <Slider | |||
| {...settings} | |||
| slidesToShow={3} | |||
| @@ -334,7 +334,7 @@ const AdsPage = ({ history }) => { | |||
| .map((ad, index) => ( | |||
| <Ad | |||
| onShowAdDetails={() => | |||
| history.push(AD_DETAILS_PAGE.replace(":id", ad.id)) | |||
| history.push(JOB_DETAILS_PAGE.replace(":id", ad.id)) | |||
| } | |||
| key={index} | |||
| title={ad.title} | |||
| @@ -350,7 +350,7 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| )} | |||
| {ads && ads.length > 0 && matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={activeAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -362,16 +362,16 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| )} | |||
| {(!ads || ads.length === 0) && ( | |||
| <div className="active-ads-ads-no-ads"> | |||
| <div className="active-ads-ads-no-ads-filters"> | |||
| <div className="active-jobs-jobs-no-jobs"> | |||
| <div className="active-jobs-jobs-no-jobs-filters"> | |||
| <FilterButton onShowFilters={handleToggleFiltersDrawer} /> | |||
| </div> | |||
| <img src={noActiveAds} alt="noActiveAds" /> | |||
| <h1>{t("ads.thereIsNoAds")}</h1> | |||
| <p>{t("ads.addAd")}</p> | |||
| <div className="add-ad add-ad-no-ads"> | |||
| <div className="add-job add-job-no-jobs"> | |||
| <IconButton | |||
| className="c-btn ads-page-btn c-btn--primary add-ad-btn" | |||
| className="c-btn jobs-page-btn c-btn--primary add-job-btn" | |||
| onClick={() => history.push(CREATE_AD_PAGE)} | |||
| > | |||
| {t("ads.adNewAd")} | |||
| @@ -379,19 +379,19 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| </div> | |||
| )} | |||
| {archiveAds && archiveAds.length > 0 && ( | |||
| <div className="archived-ads"> | |||
| <div className="archived-ads-header"> | |||
| {archiveJobs && archiveJobs.length > 0 && ( | |||
| <div className="archived-jobs"> | |||
| <div className="archived-jobs-header"> | |||
| <h2>{t("ads.archiveAds")}</h2> | |||
| </div> | |||
| <div className="archived-ads-ads"> | |||
| <div className="archived-jobs-jobs"> | |||
| {!matches && ( | |||
| <div className="archived-ads-ads-a"> | |||
| <div className="archived-ads-ads-arrows"> | |||
| <div className="archived-jobs-jobs-a"> | |||
| <div className="archived-jobs-jobs-arrows"> | |||
| <button onClick={archiveAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| {archiveAds.length > 5 && ( | |||
| {archiveJobs.length > 5 && ( | |||
| <button onClick={archiveAdsArrowRightHandler}> | |||
| <img src={arrow_right} alt="arrow-right" /> | |||
| </button> | |||
| @@ -399,41 +399,41 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| </div> | |||
| )} | |||
| <div className="archived-ads-ads-ad"> | |||
| <div className="archived-jobs-jobs-job"> | |||
| <Slider | |||
| ref={archiveAdsSliderRef} | |||
| ref={archiveJobsSliderRef} | |||
| {...settings} | |||
| slidesToShow={5} | |||
| slidesToScroll={5} | |||
| style={{ width: "100%" }} | |||
| > | |||
| {archiveAds | |||
| {archiveJobs | |||
| .filter((ad) => | |||
| ad.title.toLowerCase().includes(searchInput.toLowerCase()) | |||
| ) | |||
| .map((ad, index) => ( | |||
| <ArchiveAd | |||
| <ArchiveJob | |||
| key={index} | |||
| title={ad.title} | |||
| minimumExperience={ad.minimumExperience} | |||
| createdAt={ad.createdAt} | |||
| expiredAt={ad.expiredAt} | |||
| onShowAdDetails={() => | |||
| history.push(AD_DETAILS_PAGE.replace(":id", ad.id)) | |||
| history.push(JOB_DETAILS_PAGE.replace(":id", ad.id)) | |||
| } | |||
| /> | |||
| ))} | |||
| {archiveAds.length <= 5 && | |||
| getDummyArchiveAds(archiveAds.length)} | |||
| {archiveJobs.length <= 5 && | |||
| getDummyArchiveJobs(archiveJobs.length)} | |||
| </Slider> | |||
| </div> | |||
| </div> | |||
| {matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={archiveAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| {archiveAds.length > 5 && ( | |||
| {archiveJobs.length > 5 && ( | |||
| <button onClick={archiveAdsArrowRightHandler}> | |||
| <img src={arrow_right} alt="arrow-right" /> | |||
| </button> | |||
| @@ -441,15 +441,15 @@ const AdsPage = ({ history }) => { | |||
| </div> | |||
| )} | |||
| <div className="archive-ads-no-active-ads"></div> | |||
| <div className="archive-jobs-no-active-jobs"></div> | |||
| </div> | |||
| )} | |||
| </div> | |||
| {ads && ads.length > 0 && ( | |||
| <div className="add-ad"> | |||
| <div className="add-job"> | |||
| <IconButton | |||
| className="c-btn ads-page-btn c-btn--primary add-ad-btn" | |||
| className="c-btn ads-page-btn c-btn--primary add-job-btn" | |||
| onClick={createAd} | |||
| > | |||
| + {t("ads.ad")} | |||
| @@ -22,20 +22,20 @@ const CreateAdFirstStep = ({ | |||
| }; | |||
| return ( | |||
| <div data-testid="create-ad-first-step-form"> | |||
| <div className="create-ad-form-control"> | |||
| <div data-testid="create-job-first-step-form"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("common.title")}</label> | |||
| <input | |||
| type="text" | |||
| className="create-ad-form-control-first-step-input" | |||
| className="create-job-form-control-first-step-input" | |||
| onChange={(e) => setTitle(e.target.value)} | |||
| value={title} | |||
| placeholder="ex. Medior React Developer" | |||
| /> | |||
| </div> | |||
| <div className="create-ad-form-control"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("filters.employmentType")}</label> | |||
| <div className="create-ad-form-control-buttons"> | |||
| <div className="create-job-form-control-buttons"> | |||
| <button | |||
| className={`c-btn ${ | |||
| employmentType === "Work" | |||
| @@ -58,9 +58,9 @@ const CreateAdFirstStep = ({ | |||
| </button> | |||
| </div> | |||
| </div> | |||
| <div className="create-ad-form-control"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("filters.workHour")}</label> | |||
| <div className="create-ad-form-control-buttons"> | |||
| <div className="create-job-form-control-buttons"> | |||
| <button | |||
| className={`c-btn ${ | |||
| workHour === "PartTime" | |||
| @@ -83,11 +83,11 @@ const CreateAdFirstStep = ({ | |||
| </button> | |||
| </div> | |||
| </div> | |||
| <div className="create-ad-form-control"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("ads.expirationDate")}</label> | |||
| <input | |||
| type="date" | |||
| className="create-ad-form-control-first-step-input" | |||
| className="create-job-form-control-first-step-input" | |||
| onChange={(e) => setExpiredAt(e.target.value)} | |||
| value={expiredAt} | |||
| /> | |||
| @@ -109,9 +109,9 @@ const CreateAdPage = () => { | |||
| }; | |||
| return ( | |||
| <div className="create-ad-page" data-testid="create-ad-page"> | |||
| <div className="create-ad-page-content"> | |||
| <div className="create-ad-page-content-header"> | |||
| <div className="create-job-page" data-testid="create-job-page"> | |||
| <div className="create-job-page-content"> | |||
| <div className="create-job-page-content-header"> | |||
| <img | |||
| src={plusIcon} | |||
| alt="plus" | |||
| @@ -122,7 +122,7 @@ const CreateAdPage = () => { | |||
| <sub> | {t("ads.ad")}</sub> | |||
| </h2> | |||
| </div> | |||
| <div className="create-ad-steps"> | |||
| <div className="create-job-steps"> | |||
| {stage === 1 && ( | |||
| <CreateAdFirstStep | |||
| title={title} | |||
| @@ -144,16 +144,16 @@ const CreateAdPage = () => { | |||
| )} | |||
| {stage === 3 && <CreateAdThirdStep childRef={childRef} />} | |||
| </div> | |||
| <div className="create-ad-buttons" style={{ marginBottom: "2rem" }}> | |||
| <div className="create-job-buttons" style={{ marginBottom: "2rem" }}> | |||
| <button | |||
| className="create-ad-buttons-back" | |||
| className="create-job-buttons-back" | |||
| disabled={stage === 1} | |||
| onClick={backClickHandler} | |||
| > | |||
| {t("common.back")} | |||
| </button> | |||
| <button | |||
| className="create-ad-buttons-forward" | |||
| className="create-job-buttons-forward" | |||
| onClick={forwardClickHandler} | |||
| > | |||
| {t("common.continue")} | |||
| @@ -14,14 +14,14 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| }; | |||
| return ( | |||
| <div data-testid="create-ad-second-step-form"> | |||
| <div className="create-ad-form-control"> | |||
| <div data-testid="create-job-second-step-form"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("filters.advancedTechnologies")}</label> | |||
| </div> | |||
| <div className="add-ad-modal-stage-sub-card"> | |||
| <div className="add-ad-modal-stage-sub-card-checkboxes-group"> | |||
| <div className="add-job-modal-stage-sub-card"> | |||
| <div className="add-job-modal-stage-sub-card-checkboxes-group"> | |||
| <label>Front-End</label> | |||
| <div className="add-ad-modal-stage-sub-card-checkboxes"> | |||
| <div className="add-job-modal-stage-sub-card-checkboxes"> | |||
| {technologies | |||
| .filter((x) => x.technologyType === "Frontend") | |||
| .map((x) => ( | |||
| @@ -32,7 +32,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| value={x.name} | |||
| checked={x.isChecked} | |||
| onChange={handleCheckboxes.bind(this, x.technologyId)} | |||
| className="create-ad-second-step-checkbox" | |||
| className="create-job-second-step-checkbox" | |||
| /> | |||
| } | |||
| label={x.name} | |||
| @@ -41,9 +41,9 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| </div> | |||
| </div> | |||
| <div className="add-ad-modal-stage-sub-card-checkboxes-group"> | |||
| <div className="add-job-modal-stage-sub-card-checkboxes-group"> | |||
| <label>Back-End</label> | |||
| <div className="add-ad-modal-stage-sub-card-checkboxes"> | |||
| <div className="add-job-modal-stage-sub-card-checkboxes"> | |||
| {technologies | |||
| .filter((x) => x.technologyType === "Backend") | |||
| .map((x) => ( | |||
| @@ -54,7 +54,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| value={x.name} | |||
| checked={x.isChecked} | |||
| onChange={handleCheckboxes.bind(this, x.technologyId)} | |||
| className="create-ad-second-step-checkbox" | |||
| className="create-job-second-step-checkbox" | |||
| /> | |||
| } | |||
| label={x.name} | |||
| @@ -63,9 +63,9 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| </div> | |||
| </div> | |||
| <div className="add-ad-modal-stage-sub-card-checkboxes-group"> | |||
| <div className="add-job-modal-stage-sub-card-checkboxes-group"> | |||
| <label>{t("ads.others")}</label> | |||
| <div className="add-ad-modal-stage-sub-card-checkboxes"> | |||
| <div className="add-job-modal-stage-sub-card-checkboxes"> | |||
| {technologies | |||
| .filter((x) => x.technologyType === "Other") | |||
| .map((x) => ( | |||
| @@ -76,7 +76,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| value={x.name} | |||
| checked={x.isChecked} | |||
| onChange={handleCheckboxes.bind(this, x.technologyId)} | |||
| className="create-ad-second-step-checkbox" | |||
| className="create-job-second-step-checkbox" | |||
| /> | |||
| } | |||
| label={x.name} | |||
| @@ -85,7 +85,7 @@ const CreateAdSecondStep = ({ technologies, experience, setExperience }) => { | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div className="create-ad-form-control"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("filters.experience")}</label> | |||
| <input | |||
| type="number" | |||
| @@ -24,8 +24,8 @@ const CreateAdThirdStep = ({ childRef }) => { | |||
| } | |||
| return ( | |||
| <div data-testid="create-ad-third-step-form"> | |||
| <div className="create-ad-form-control"> | |||
| <div data-testid="create-job-third-step-form"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("ads.duties")}</label> | |||
| <Editor | |||
| onInit={(evt, editor) => | |||
| @@ -34,14 +34,14 @@ const CreateAdThirdStep = ({ childRef }) => { | |||
| style={{ height: "1rem !important" }} | |||
| /> | |||
| </div> | |||
| <div className="create-ad-form-control"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("ads.conditions")}</label> | |||
| <Editor | |||
| onInit={(evt, editor) => (editorRequirementsRef.current = editor)} | |||
| style={{ height: "1rem !important" }} | |||
| /> | |||
| </div> | |||
| <div className="create-ad-form-control"> | |||
| <div className="create-job-form-control"> | |||
| <label>{t("ads.offer")}</label> | |||
| <Editor | |||
| onInit={(evt, editor) => (editorOfferRef.current = editor)} | |||
| @@ -103,20 +103,20 @@ const AdsCandidatesPage = ({ history, search }) => { | |||
| }; | |||
| return ( | |||
| <div className="ads-candidates-container top-cnd"> | |||
| <div className="jobs-candidates-container top-cnd"> | |||
| {adsCandidates.map((adCandidates, index) => ( | |||
| <div className="ads-candidates" key={index}> | |||
| <div className="ads-candidates-top-container"> | |||
| <img src={adImage} className="ads-candidates-image" /> | |||
| <p className="ads-candidates-title">{adCandidates.title}</p> | |||
| <p className="ads-candidates-numberOfApplicants"> | |||
| <div className="jobs-candidates" key={index}> | |||
| <div className="jobs-candidates-top-container"> | |||
| <img src={adImage} className="jobs-candidates-image" /> | |||
| <p className="jobs-candidates-title">{adCandidates.title}</p> | |||
| <p className="jobs-candidates-numberOfApplicants"> | |||
| | {adCandidates.nubmerOfApplicants} {t("ads.registered")} | |||
| </p> | |||
| </div> | |||
| <div className="ads-candidates-slider"> | |||
| <div className="jobs-candidates-slider"> | |||
| {filterByName(adCandidates).length > 4 && ( | |||
| <div | |||
| className="active-ads-ads-arrows" | |||
| className="active-jobs-jobs-arrows" | |||
| style={matches ? { marginLeft: 36 } : { marginLeft: 0 }} | |||
| > | |||
| <button onClick={() => activeAdsArrowLeftHandler(index)}> | |||
| @@ -444,11 +444,11 @@ const CandidateDetailsPage = ({ history }) => { | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div className="applicant-ads-container"> | |||
| <div className="applicant-jobs-container"> | |||
| <p style={{ marginLeft: matches ? 36 : 144 }}> | |||
| {t("candidates.allApplications")} | |||
| </p> | |||
| <div className="applicant-ads-container-2"> | |||
| <div className="applicant-jobs-container-2"> | |||
| <div | |||
| style={{ | |||
| marginLeft: matches ? 36 : candidate.ads.length < 5 ? 108 : 72, | |||
| @@ -458,7 +458,7 @@ const CandidateDetailsPage = ({ history }) => { | |||
| ? candidate.ads.length > 1 | |||
| : candidate.ads.length > 5) && ( | |||
| <div | |||
| className="active-ads-ads-arrows" | |||
| className="active-jobs-jobs-arrows" | |||
| data-testid="candidate-ad-responsive-arrows" | |||
| > | |||
| <button onClick={activeAdsArrowLeftHandler}> | |||
| @@ -482,10 +482,10 @@ const CandidateDetailsPage = ({ history }) => { | |||
| </Slider> | |||
| </div> | |||
| </div> | |||
| <div className="applicant-ads-buttons-container"> | |||
| <div className="applicant-jobs-buttons-container"> | |||
| <p | |||
| to="/candidates" | |||
| className="applicant-ads-back-button" | |||
| className="applicant-jobs-back-button" | |||
| onClick={goToPageWithAllCandidates} | |||
| > | |||
| {t("candidates.backToCandidates")} | |||
| @@ -177,15 +177,15 @@ const PatternDetailsPage = () => { | |||
| <div className="pattern-details-card-buttons"> | |||
| <button | |||
| className="ad-details-buttons-link" | |||
| data-testid="ad-details-buttons-link" | |||
| className="job-details-buttons-link" | |||
| data-testid="job-details-buttons-link" | |||
| onClick={() => history.push(PATTERNS_PAGE)} | |||
| > | |||
| {t("ads.backToAds")} | |||
| </button> | |||
| <IconButton | |||
| disabled={emails && emails.length === 0} | |||
| className="c-btn c-btn--primary add-ad-btn" | |||
| className="c-btn c-btn--primary add-job-btn" | |||
| data-testid="pattern-details-send-email" | |||
| onClick={scheduleAppointmentHandler} | |||
| > | |||
| @@ -330,7 +330,7 @@ const PatternsPage = ({ history }) => { | |||
| </div> | |||
| <div className="patterns-button"> | |||
| <IconButton | |||
| className="c-btn c-btn--primary add-ad-btn add-pattern-btn" | |||
| className="c-btn c-btn--primary add-job-btn add-pattern-btn" | |||
| onClick={() => setOpenAddPatternModal(true)} | |||
| > | |||
| {t("patterns.addPattern")} | |||
| @@ -105,10 +105,10 @@ const SelectionProcessOfApplicantPage = () => { | |||
| <div className="l-t-rectangle"></div> | |||
| <div className="r-b-rectangle"></div> | |||
| {/* <AdFilters /> */} | |||
| <div data-testid="appl-sel" className="ads"> | |||
| <div data-testid="appl-sel" className="jobs"> | |||
| {processes && processes.length > 0 && ( | |||
| <div className="active-ads"> | |||
| <div className="active-ads-header"> | |||
| <div className="active-jobs"> | |||
| <div className="active-jobs-header"> | |||
| <h1> | |||
| {t("selection.title")} | |||
| <span className="level-header-spliter">|</span> | |||
| @@ -118,10 +118,10 @@ const SelectionProcessOfApplicantPage = () => { | |||
| </h1> | |||
| </div> | |||
| <div className="active-ads-ads"> | |||
| <div className="active-ads-ads-a"> | |||
| <div className="active-jobs-jobs"> | |||
| <div className="active-jobs-jobs-a"> | |||
| {!matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={activeAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -131,7 +131,7 @@ const SelectionProcessOfApplicantPage = () => { | |||
| </div> | |||
| )} | |||
| </div> | |||
| <div className="active-ads-ads-ad"> | |||
| <div className="active-jobs-jobs-job"> | |||
| <Slider | |||
| {...settings} | |||
| slidesToShow={4} | |||
| @@ -167,7 +167,7 @@ const SelectionProcessOfApplicantPage = () => { | |||
| </div> | |||
| )} | |||
| {matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={activeAdsArrowLeftHandler}> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -199,7 +199,7 @@ const SelectionProcessOfApplicantPage = () => { | |||
| </p> | |||
| </div> | |||
| </div> | |||
| <div className="add-ad"> | |||
| <div className="add-job"> | |||
| <Link className="ad-details-buttons-link" to="/selectionFlow"> | |||
| {t("candidates.backToCandidates")} | |||
| </Link> | |||
| @@ -5,7 +5,7 @@ import { useRef } from "react"; | |||
| import arrow_left from "../../assets/images/arrow_left.png"; | |||
| import arrow_right from "../../assets/images/arrow_right.png"; | |||
| import Slider from "react-slick"; | |||
| import { AD_DETAILS_PAGE } from "../../constants/pages"; | |||
| import { JOB_DETAILS_PAGE } from "../../constants/pages"; | |||
| import StatsAd from "../../components/Ads/StatsAd"; | |||
| import { useDispatch } from "react-redux"; | |||
| import { useSelector } from "react-redux"; | |||
| @@ -154,16 +154,16 @@ const StatsPage = ({ history }) => { | |||
| <div className="stats-section"> | |||
| <h2 className="section-header">{t("stats.registered")}</h2> | |||
| </div> | |||
| <div className="ads stat-ads"> | |||
| <div className="jobs stat-jobs"> | |||
| {stats.ads && stats.ads.length > 0 && ( | |||
| <div className="archived-ads"> | |||
| {/* <div className="archived-ads-header"> | |||
| <div className="archived-jobs"> | |||
| {/* <div className="archived-jobs-header"> | |||
| <h2>{t("ads.archiveAds")}</h2> | |||
| </div> */} | |||
| <div className="archived-ads-ads"> | |||
| <div className="archived-jobs-jobs"> | |||
| {!matches && ( | |||
| <div className="archived-ads-ads-a"> | |||
| <div className="archived-ads-ads-arrows"> | |||
| <div className="archived-jobs-jobs-a"> | |||
| <div className="archived-jobs-jobs-arrows"> | |||
| <button onClick={arrowLeftHandler} data-testid="left-arrow"> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -178,7 +178,7 @@ const StatsPage = ({ history }) => { | |||
| </div> | |||
| </div> | |||
| )} | |||
| <div className="archived-ads-ads-ad"> | |||
| <div className="archived-jobs-jobs-job"> | |||
| <Slider | |||
| ref={sliderRef} | |||
| {...settings} | |||
| @@ -195,7 +195,7 @@ const StatsPage = ({ history }) => { | |||
| createdAt={ad.createdAt} | |||
| expiredAt={ad.expiredAt} | |||
| onShowAdDetails={() => | |||
| history.push(AD_DETAILS_PAGE.replace(":id", ad.id)) | |||
| history.push(JOB_DETAILS_PAGE.replace(":id", ad.id)) | |||
| } | |||
| /> | |||
| ))} | |||
| @@ -205,7 +205,7 @@ const StatsPage = ({ history }) => { | |||
| </div> | |||
| </div> | |||
| {matches && ( | |||
| <div className="active-ads-ads-arrows"> | |||
| <div className="active-jobs-jobs-arrows"> | |||
| <button onClick={arrowLeftHandler} data-testid="left-arrow"> | |||
| <img src={arrow_left} alt="arrow-left" /> | |||
| </button> | |||
| @@ -147,7 +147,7 @@ const UsersPage = (props) => { | |||
| <Fade | |||
| in={isSearchFieldVisible} | |||
| timeout={500} | |||
| className="ads-page-search-by-title" | |||
| className="jobs-page-search-by-title" | |||
| > | |||
| {inputNormal} | |||
| </Fade> | |||
| @@ -23,12 +23,12 @@ export default { | |||
| initProcess: base + "/applicants/selection-init", | |||
| }, | |||
| ads: { | |||
| allAds: base + "/ads", | |||
| createAd: base + "/ads", | |||
| allFilteredAds: base + "/ads/filtered", | |||
| allArchiveAds: base + "/ads/archive", | |||
| adDetails: base + "/ads/details", | |||
| archiveActiveAd: base + "/ads/archive-active-ad/:id", | |||
| allAds: base + "/jobs", | |||
| createAd: base + "/jobs", | |||
| allFilteredAds: base + "/jobs/filtered", | |||
| allArchiveAds: base + "/jobs/archive", | |||
| adDetails: base + "/jobs/details", | |||
| archiveActiveAd: base + "/jobs/archive-active-job/:id", | |||
| }, | |||
| technologies: { | |||
| allTechnologies: base + "/technologies", | |||