diff --git a/src/actions/searchOffersActions.js b/src/actions/searchOffersActions.js index 751cdb0f..6cce5f3e 100644 --- a/src/actions/searchOffersActions.js +++ b/src/actions/searchOffersActions.js @@ -15,6 +15,7 @@ export const OfferSearchTypes = Object.freeze({ DISABLE_OFFER: "DISABLE_OFFER", COMPANY_ENABLE_OFFER: "COMPANY_ENABLE_OFFER", ADMIN_ENABLE_OFFER: "ADMIN_ENABLE_OFFER", + SET_SHOW_HIDDEN: "SET_SHOW_HIDDEN", }); export const setLoadingOffers = (loading) => ({ @@ -100,3 +101,8 @@ export const resetAdvancedSearchFields = () => (dispatch) => { dispatch(setFields([])); dispatch(setTechs([])); }; + +export const setShowHidden = (showHidden) => ({ + type: OfferSearchTypes.SET_SHOW_HIDDEN, + showHidden, +}); diff --git a/src/components/HomePage/SearchArea/AdvancedSearch/AdvancedSearchDesktop.js b/src/components/HomePage/SearchArea/AdvancedSearch/AdvancedSearchDesktop.js index d2f31681..ae88745f 100644 --- a/src/components/HomePage/SearchArea/AdvancedSearch/AdvancedSearchDesktop.js +++ b/src/components/HomePage/SearchArea/AdvancedSearch/AdvancedSearchDesktop.js @@ -53,7 +53,7 @@ const AdvancedSearchDesktop = () => { const { advancedOptions, resetAdvancedSearch, FieldsSelectorProps, TechsSelectorProps, JobTypeSelectorProps, JobDurationSwitchProps, ResetButtonProps, JobDurationSliderText, JobDurationCollapseProps, JobDurationSwitchLabel, JobHiddenSwitchLabel, - JobDurationSliderProps, + JobDurationSliderProps, ShowHiddenSwitchProps, } = useContext(AdvancedSearchControllerContext); return ( @@ -104,19 +104,19 @@ const AdvancedSearchDesktop = () => { }} />
- -
+ + {sessionData?.isAdmin && } + control={} label={JobHiddenSwitchLabel} /> } diff --git a/src/components/HomePage/SearchArea/AdvancedSearch/useAdvancedSearch.js b/src/components/HomePage/SearchArea/AdvancedSearch/useAdvancedSearch.js index 17ab2b37..39f73710 100644 --- a/src/components/HomePage/SearchArea/AdvancedSearch/useAdvancedSearch.js +++ b/src/components/HomePage/SearchArea/AdvancedSearch/useAdvancedSearch.js @@ -19,6 +19,8 @@ export default ({ technologies, setTechs, resetAdvancedSearchFields, + showHidden, + setShowHidden, }) => { const jobDuration = [jobMinDuration, jobMaxDuration]; @@ -72,6 +74,15 @@ export default ({ const FieldsSelectorProps = useFieldSelector(fields, setFields); const TechsSelectorProps = useTechSelector(technologies, setTechs); + const toggleShowHidden = useCallback(() => { + setShowHidden(!showHidden); + }, [setShowHidden, showHidden]); + + const ShowHiddenSwitchProps = { + checked: showHidden, + onChange: toggleShowHidden, + value: "filterShowHiddenOffers", + }; const advancedOptionsActive = showJobDurationSlider || (jobType !== INITIAL_JOB_TYPE) @@ -104,5 +115,6 @@ export default ({ JobDurationSliderProps, JobDurationSliderText, ResetButtonProps, + ShowHiddenSwitchProps, }; }; diff --git a/src/components/HomePage/SearchArea/SearchArea.js b/src/components/HomePage/SearchArea/SearchArea.js index 59ca9125..d7ac62a3 100644 --- a/src/components/HomePage/SearchArea/SearchArea.js +++ b/src/components/HomePage/SearchArea/SearchArea.js @@ -12,6 +12,7 @@ import { setShowJobDurationSlider, setTechs, hideOffer, + setShowHidden, } from "../../../actions/searchOffersActions"; import { INITIAL_JOB_TYPE, INITIAL_JOB_DURATION } from "../../../reducers/searchOffersReducer"; @@ -33,7 +34,8 @@ export const AdvancedSearchControllerContext = React.createContext({}); export const AdvancedSearchController = ({ enableAdvancedSearchDefault, showJobDurationSlider, setShowJobDurationSlider, jobMinDuration, jobMaxDuration, setJobDuration, jobType, setJobType, fields, setFields, technologies, setTechs, - resetAdvancedSearchFields, onSubmit, searchValue, setSearchValue, onMobileClose, + resetAdvancedSearchFields, onSubmit, searchValue, setSearchValue, onMobileClose, showHidden, + setShowHidden, }) => { const advancedSearchProps = useAdvancedSearch({ @@ -51,6 +53,8 @@ export const AdvancedSearchController = ({ setTechs, resetAdvancedSearchFields, hideOffer, + showHidden, + setShowHidden, }); const { search: searchOffers } = useOffersSearcher({ @@ -60,6 +64,7 @@ export const AdvancedSearchController = ({ jobType, fields, technologies, + showHidden, }); const submitForm = useCallback((e) => { @@ -87,7 +92,8 @@ export const AdvancedSearchController = ({ export const SearchArea = ({ onSubmit, searchValue, jobMinDuration = INITIAL_JOB_DURATION, jobMaxDuration = INITIAL_JOB_DURATION + 1, jobType = INITIAL_JOB_TYPE, fields, technologies, showJobDurationSlider, setShowJobDurationSlider, advanced: enableAdvancedSearchDefault = false, - setSearchValue, setJobDuration, setJobType, setFields, setTechs, resetAdvancedSearchFields, onMobileClose }) => { + setSearchValue, setJobDuration, setJobType, setFields, setTechs, resetAdvancedSearchFields, onMobileClose, showHidden, + setShowHidden }) => { const classes = useSearchAreaStyles(); const { @@ -103,6 +109,7 @@ export const SearchArea = ({ onSubmit, searchValue, enableAdvancedSearchDefault, showJobDurationSlider, setShowJobDurationSlider, jobMinDuration, jobMaxDuration, setJobDuration, jobType, setJobType, fields, setFields, technologies, setTechs, resetAdvancedSearchFields, hideOffer, onSubmit, searchValue, setSearchValue, onMobileClose, + showHidden, setShowHidden, }, AdvancedSearchControllerContext ); @@ -163,6 +170,8 @@ SearchArea.propTypes = { setTechs: PropTypes.func.isRequired, setShowJobDurationSlider: PropTypes.func.isRequired, onMobileClose: PropTypes.func, + showHidden: PropTypes.bool, + setShowHidden: PropTypes.func, advanced: PropTypes.bool, }; @@ -174,6 +183,7 @@ export const mapStateToProps = ({ offerSearch }) => ({ fields: offerSearch.fields, technologies: offerSearch.technologies, showJobDurationSlider: offerSearch.filterJobDuration, + showHidden: offerSearch.showHidden, }); export const mapDispatchToProps = (dispatch) => ({ @@ -183,6 +193,7 @@ export const mapDispatchToProps = (dispatch) => ({ setFields: (fields) => dispatch(setFields(fields)), setTechs: (technologies) => dispatch(setTechs(technologies)), setShowJobDurationSlider: (val) => dispatch(setShowJobDurationSlider(val)), + setShowHidden: (val) => dispatch(setShowHidden(val)), resetAdvancedSearchFields: () => dispatch(resetAdvancedSearchFields()), }); diff --git a/src/components/HomePage/SearchArea/searchAreaStyle.js b/src/components/HomePage/SearchArea/searchAreaStyle.js index 7db66521..c13dde37 100644 --- a/src/components/HomePage/SearchArea/searchAreaStyle.js +++ b/src/components/HomePage/SearchArea/searchAreaStyle.js @@ -96,6 +96,5 @@ export default makeStyles((theme) => ({ jobHiddenSliderToggle: { gridRowStart: 4, gridColumnStart: 2, - }, })); diff --git a/src/reducers/searchOffersReducer.js b/src/reducers/searchOffersReducer.js index c07b18f1..1240de74 100644 --- a/src/reducers/searchOffersReducer.js +++ b/src/reducers/searchOffersReducer.js @@ -18,6 +18,7 @@ const initialState = { offers: [], loading: false, error: INITIAL_ERROR, + showHidden: false, }; export default (state = initialState, action) => { @@ -107,6 +108,11 @@ export default (state = initialState, action) => { new Offer({ ...offer, isHidden: false, hiddenReason: null, adminReason: null }) : offer ) }; + case OfferSearchTypes.SET_SHOW_HIDDEN: + return { + ...state, + showHidden: action.showHidden, + }; default: return state; }