From c7d185e6150902d28d252c1682dd6fc3cb8eee70 Mon Sep 17 00:00:00 2001
From: Ivana Irene Thomas <ivanaairenee@gmail.com>
Date: Tue, 12 Nov 2019 21:59:21 +0700
Subject: [PATCH] add filter based on salary on vacancy list

---
 assets/js/components/VacancyList.jsx | 41 ++++++++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)

diff --git a/assets/js/components/VacancyList.jsx b/assets/js/components/VacancyList.jsx
index 65040f5f..164a7eb5 100755
--- a/assets/js/components/VacancyList.jsx
+++ b/assets/js/components/VacancyList.jsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import { Item, Grid, Container } from 'semantic-ui-react';
+import { Item, Grid, Container, Dropdown } from 'semantic-ui-react';
 import Vacancy from './Vacancy';
 import CompanyVacancy from './CompanyVacancy';
 import AdminVacancy from './AdminVacancy';
@@ -26,9 +26,18 @@ export default class VacancyList extends React.Component {
       bookmarkList: [],
       appliedList: [],
       loading: true,
+      salaryFilter: 0,
+      salaryFilterBy: [
+        { key: 0, text: 'Semua', value: 0 },
+        { key: 1, text: '< 1 juta', value: 1 },
+        { key: 2, text: '1-3 juta', value: 2 },
+        { key: 3, text: '3-5 juta', value: 3 },
+        { key: 4, text: '> 5 juta', value: 4 },
+      ],
     };
     this.generateVacancies = this.generateVacancies.bind(this);
     this.updateStatus = this.updateStatus.bind(this);
+    this.handleChangeSalaryFilter = this.handleChangeSalaryFilter.bind(this);
   }
 
   updateStatus(id, status) {
@@ -49,6 +58,26 @@ export default class VacancyList extends React.Component {
     this.modalAlert.open('Gagal Menghapus Lowongan', r.error);
   }));
 
+  filterVacanciesBasedOnSalary = (vacancies) => {
+    const salaryFilter = this.state.salaryFilter;
+    let filteredVacancies = vacancies;
+    if (salaryFilter === 1) {
+      filteredVacancies = filteredVacancies.filter((vacancy) => vacancy.props.data.salary < 1000000);
+    } else if (salaryFilter === 2) {
+      filteredVacancies = filteredVacancies.filter((vacancy) => vacancy.props.data.salary >= 1000000 && vacancy.props.data.salary < 3000000);
+    } else if (salaryFilter === 3) {
+      filteredVacancies = filteredVacancies.filter((vacancy) => vacancy.props.data.salary >= 3000000 && vacancy.props.data.salary < 5000000);
+    } else if (salaryFilter === 4){
+      filteredVacancies = filteredVacancies.filter((vacancy) => vacancy.props.data.salary >= 5000000);
+    }
+
+    return filteredVacancies;
+  }
+
+  handleChangeSalaryFilter = (e, data) => {
+    this.setState({ salaryFilter: data.value });
+  }
+
   generateVacancies() {
     if (this.state.vacancies.length === 0) {
       return (
@@ -62,7 +91,7 @@ export default class VacancyList extends React.Component {
       );
     }
     if (this.props.user.role === 'student') {
-      const vacancies = this.state.vacancies.map(vacancy =>
+      let vacancies = this.state.vacancies.map(vacancy =>
         (
           <Vacancy
             key={vacancy.id}
@@ -84,6 +113,7 @@ export default class VacancyList extends React.Component {
           return vac2.props.data.name.localeCompare(vac1.props.data.name);
         });
       }
+      vacancies = this.filterVacanciesBasedOnSalary(vacancies);
       return vacancies;
     } else if ((this.props.user.role === 'admin' && this.props.user.data.company != null)
       || this.props.user.role === 'company') {
@@ -110,6 +140,13 @@ export default class VacancyList extends React.Component {
 
   render = () => (
     <div>
+      <Dropdown
+          placeholder="Filter Berdasarkan Gaji"
+          className="dropdownApplicant"
+          selection
+          options={this.state.salaryFilterBy}
+          onChange={this.handleChangeSalaryFilter}
+        />
       <Grid container columns="eleven" doubling style={{ display: 'block' }}>
         <Item.Group relaxed style={{ width: '100%' }}>
           { this.generateVacancies() }
-- 
GitLab