-
-
-
Filtry
-
-
- )
+ );
};
Filter.propTypes = {
- isOpen: propTypes.bool,
- searchQuery: propTypes.object,
- setSearchQuery: propTypes.func,
- categories: propTypes.array,
- clearSearchQuery: propTypes.func,
- onClick: propTypes.func
+ isOpen: PropTypes.bool.isRequired,
+ searchQuery: PropTypes.shape({
+ name: PropTypes.string,
+ min_salary: PropTypes.number,
+ max_salary: PropTypes.number,
+ categories: PropTypes.arrayOf(PropTypes.string),
+ work_from_home: PropTypes.arrayOf(PropTypes.string),
+ employment_types: PropTypes.arrayOf(PropTypes.string)
+ }),
+ setSearchQuery: PropTypes.func.isRequired,
+ clearSearchQuery: PropTypes.func.isRequired,
+ onClick: PropTypes.func.isRequired
};
Filter.defaultProps = {
searchQuery: {
categories: [],
work_from_home: [],
- employment: []
+ employment_types: []
}
};
-export default Filter;
+export default Filter;
\ No newline at end of file
diff --git a/src/components/RangeSlider.jsx b/src/components/RangeSlider.jsx
new file mode 100644
index 0000000..2201fa4
--- /dev/null
+++ b/src/components/RangeSlider.jsx
@@ -0,0 +1,76 @@
+import { useRef, useEffect, useCallback } from 'react';
+import propTypes from 'prop-types';
+
+
+const RangeSlider = ({ min, max, minVal, maxVal, setSearchQuery, onRangeChange, isOpen }) => {
+ const minValRef = useRef(minVal);
+ const maxValRef = useRef(maxVal);
+ const range = useRef(null);
+
+ const getPercent = useCallback(
+ (value) => Math.round(((value - min) / (max - min)) * 100),
+ [min, max]
+ );
+
+ useEffect(() => {
+ const minPercent = getPercent(minVal === '' ? min : minVal);
+ const maxPercent = getPercent(maxVal === '' ? max : maxVal);
+
+ if (range.current) {
+ range.current.style.left = `${minPercent}%`;
+ range.current.style.width = `${maxPercent - minPercent}%`;
+ }
+ }, [minVal, maxVal, getPercent, min, max]);
+
+ const handleChange = useCallback((event) => {
+ const { id, value } = event.target;
+ const numValue = Number(value);
+
+ let newMinVal = minVal === '' ? min : minVal;
+ let newMaxVal = maxVal === '' ? max : maxVal;
+
+ if (id === 'range1') {
+ newMinVal = numValue;
+ minValRef.current = newMinVal;
+ } else if (id === 'range2') {
+ newMaxVal = numValue;
+ maxValRef.current = newMaxVal;
+ }
+
+ onRangeChange(newMinVal, newMaxVal);
+ }, [minVal, maxVal, min, max, onRangeChange]);
+
+ return (
+
+ );
+};
+
+export default RangeSlider;
\ No newline at end of file
diff --git a/src/components/Salary.jsx b/src/components/Salary.jsx
index de97710..fe016c9 100644
--- a/src/components/Salary.jsx
+++ b/src/components/Salary.jsx
@@ -82,7 +82,7 @@ const Salary = ({handleChange, formData, removeFields, setFormData}) => {
className={`h-12 border-2 rounded-xl px-5 mx-4 w-full ${!require_salary ? 'bg-slate-200' : ''} `}/>