Procházet zdrojové kódy

Fixed bugs 551 and 558

feature/587
Djordje Mitrovic před 3 roky
rodič
revize
0224904310
25 změnil soubory, kde provedl 219 přidání a 122 odebrání
  1. 30
    3
      src/components/Cards/FilterCard/Choser/CategoryChoser/CategoryChoser.js
  2. 20
    3
      src/components/Cards/FilterCard/Choser/LocationChoser/LocationChoser.js
  3. 42
    10
      src/components/Cards/FilterCard/Choser/SubcategoryChoser/SubcategoryChoser.js
  4. 13
    5
      src/components/Cards/FilterCard/FilterCard.js
  5. 11
    5
      src/components/Cards/FilterCard/FilterDropdown/Checkbox/CheckboxDropdownList/CheckboxDropdownList.js
  6. 8
    2
      src/components/Cards/FilterCard/FilterDropdown/Checkbox/FilterCheckboxDropdown.js
  7. 0
    1
      src/components/Cards/FilterCard/FilterFooter/FilterFooter.js
  8. 3
    1
      src/components/Cards/FilterCard/FilterHeader/FilterHeader.js
  9. 0
    2
      src/components/Cards/OfferCard/DeleteOffer/DeleteOffer.js
  10. 0
    1
      src/components/Cards/UserReviewsCard/UserReviewsCard.js
  11. 0
    1
      src/components/CreateReview/SecondStep/SecondStepCreateReview.js
  12. 0
    1
      src/components/DirectChat/DirectChatNewMessage/DirectChatNewMessage.js
  13. 0
    2
      src/components/Login/Login.js
  14. 0
    1
      src/components/Paging/Paging.js
  15. 2
    1
      src/hooks/useOffers/useFilters.js
  16. 15
    3
      src/hooks/useOffers/useOffers.js
  17. 0
    2
      src/pages/RegisterPages/Register/FirstPart/FirstPartOfRegistration.js
  18. 9
    4
      src/pages/RegisterPages/Register/Register.js
  19. 1
    1
      src/request/index.js
  20. 1
    1
      src/store/middleware/accessTokensMiddleware.js
  21. 0
    1
      src/store/reducers/login/loginReducer.js
  22. 0
    2
      src/store/saga/offersSaga.js
  23. 3
    5
      src/store/saga/registerSaga.js
  24. 60
    63
      src/util/helpers/queryHelpers.js
  25. 1
    1
      src/validations/loginValidation.js

+ 30
- 3
src/components/Cards/FilterCard/Choser/CategoryChoser/CategoryChoser.js Zobrazit soubor

@@ -1,4 +1,9 @@
import React from "react";
import React, {
forwardRef,
useEffect,
useImperativeHandle,
useState,
} from "react";
import PropTypes from "prop-types";
import FilterRadioDropdown from "../../FilterDropdown/Radio/FilterRadioDropdown";
import { CategoryChosenIcon, CategoryIcon } from "./CategoryChoser.styled";
@@ -9,13 +14,31 @@ const firstCategoryOption = {
value: { _id: 0 },
};

const CategoryChoser = (props) => {
const CategoryChoser = forwardRef((props, ref) => {
const filters = props.filters;
const { t } = useTranslation();
const [isOpened, setIsOpened] = useState(false);
const handleSelectCategory = (category) => {
filters.category.setSelectedCategory(category);
filters.subcategory.setSelectedSubcategory({});
};
useImperativeHandle(ref, () => ({
closeSection: () => {
setIsOpened(false);
},
isOpened: isOpened ? isOpened : false,
}));

useEffect(() => {
if (
!filters.category.selectedCategoryLocally ||
(filters.category.selectedCategoryLocally?._id === 0 && !isOpened)
) {
setIsOpened(false);
} else {
setIsOpened(true);
}
}, [filters.category.selectedCategoryLocally]);
return (
<FilterRadioDropdown
data={[...filters?.category.allCategories]}
@@ -32,12 +55,16 @@ const CategoryChoser = (props) => {
: t("filters.categories.title")
}
searchPlaceholder={t("filters.categories.placeholder")}
open={isOpened}
handleOpen={() => setIsOpened((prevIsOpened) => !prevIsOpened)}
setSelected={handleSelectCategory}
selected={filters.category.selectedCategoryLocally}
firstOption={firstCategoryOption}
/>
);
};
});

CategoryChoser.displayName = "CategoryChoser";

CategoryChoser.propTypes = {
filters: PropTypes.any,

+ 20
- 3
src/components/Cards/FilterCard/Choser/LocationChoser/LocationChoser.js Zobrazit soubor

@@ -1,23 +1,40 @@
import React from "react";
import React, { forwardRef, useEffect, useImperativeHandle, useState } from "react";
import PropTypes from "prop-types";
import FilterCheckboxDropdown from "../../FilterDropdown/Checkbox/FilterCheckboxDropdown";
import { LocationIcon } from "./LocationChoser.styled";
import { useTranslation } from "react-i18next";

const LocationChoser = (props) => {
const LocationChoser = forwardRef((props, ref) => {
const { t } = useTranslation();
const [isOpened, setIsOpened] = useState(false);
const filters = props.filters;

useImperativeHandle(ref, () => ({
closeSection: () => {
setIsOpened(false);
},
}));

useEffect(() => {
if (filters.locations.selectedLocationsLocally.length > 0 && !isOpened) {
setIsOpened(true);
}
}, [filters.locations.selectedLocationsLocally])
return (
<FilterCheckboxDropdown
searchPlaceholder={t("filters.location.placeholder")}
data={[...filters.locations.allLocations]}
filters={[...filters.locations.selectedLocationsLocally]}
open={isOpened}
handleOpen={() => setIsOpened((prevIsOpened) => !prevIsOpened)}
icon={<LocationIcon />}
title={t("filters.location.title")}
setItemsSelected={filters.locations.setSelectedLocations}
/>
);
};
});

LocationChoser.displayName = "LocationChoser";

LocationChoser.propTypes = {
filters: PropTypes.any,

+ 42
- 10
src/components/Cards/FilterCard/Choser/SubcategoryChoser/SubcategoryChoser.js Zobrazit soubor

@@ -1,4 +1,10 @@
import React, { useEffect, useMemo, useState } from "react";
import React, {
forwardRef,
useEffect,
useImperativeHandle,
useMemo,
useState,
} from "react";
import PropTypes from "prop-types";
import { SubcategoryIcon } from "./SubcategoryChoser.styled";
import FilterRadioDropdown from "../../FilterDropdown/Radio/FilterRadioDropdown";
@@ -9,7 +15,7 @@ import { useTranslation } from "react-i18next";
// value: { _id: 0 },
// };

const SubcategoryChoser = (props) => {
const SubcategoryChoser = forwardRef((props, ref) => {
const filters = props.filters;
const { t } = useTranslation();
const [isOpened, setIsOpened] = useState(false);
@@ -20,13 +26,37 @@ const SubcategoryChoser = (props) => {
);
}, [filters.category.selectedCategoryLocally]);

useEffect(() => {
if (!filters.category.selectedCategoryLocally || filters.category.selectedCategoryLocally?._id === 0) {
useImperativeHandle(ref, () => ({
closeSection: () => {
setIsOpened(false);
setIsDisabled(true);
},
}));

useEffect(() => {
if (props.queryStringHook.isInitiallyLoaded) {
if (
!filters.category.selectedCategoryLocally ||
filters.category.selectedCategoryLocally?._id === 0
) {
setIsOpened(false);
setIsDisabled(true);
} else {
setIsDisabled(false);
setIsOpened(true);
}
} else {
setIsDisabled(false);
setIsOpened(true);
if (
!filters.subcategory.selectedSubcategoryLocally ||
filters.subcategory.selectedSubcategoryLocally?._id === 0
) {
setIsOpened(false);
if (
!filters.category.selectedCategoryLocally ||
filters.category.selectedCategoryLocally?._id === 0
) {
setIsDisabled(true);
}
}
}
}, [filters.category.selectedCategoryLocally]);

@@ -34,8 +64,6 @@ const SubcategoryChoser = (props) => {
setIsOpened((prevState) => !prevState);
};

console.log(filters);

return (
<FilterRadioDropdown
data={subcategories}
@@ -54,10 +82,14 @@ const SubcategoryChoser = (props) => {
firstOption={filters.subcategory.initialOption}
/>
);
};
});

SubcategoryChoser.displayName = "SubcategoryChoser";

SubcategoryChoser.propTypes = {
filters: PropTypes.any,
categoryOpened: PropTypes.bool,
queryStringHook: PropTypes.any,
};

export default SubcategoryChoser;

+ 13
- 5
src/components/Cards/FilterCard/FilterCard.js Zobrazit soubor

@@ -1,4 +1,4 @@
import React from "react";
import React, { useRef } from "react";
import PropTypes from "prop-types";
import { ContentContainer, FilterCardContainer } from "./FilterCard.styled";
import HeaderBack from "../../ItemDetails/Header/Header";
@@ -12,6 +12,14 @@ import SkeletonFilterCard from "./Skeleton/SkeletonFilterCard";
const FilterCard = (props) => {
const offers = props.offers;
const filters = offers.filters;
const categoryRef = useRef(null);
const subcategoryRef = useRef(null);
const locationRef = useRef(null);
const closeAllSections = () => {
categoryRef.current.closeSection();
subcategoryRef.current.closeSection();
locationRef.current.closeSection();
}
return (
<FilterCardContainer
filtersOpened={props.filtersOpened}
@@ -25,17 +33,17 @@ const FilterCard = (props) => {
{/* Header title for my offers */}
{props.myOffers && <HeaderBack />}

<FilterHeader filters={filters} />
<FilterHeader filters={offers} closeAllSections={closeAllSections} />

<ContentContainer>
{/* Categories */}
<CategoryChoser filters={filters} />
<CategoryChoser filters={filters} ref={categoryRef} />

{/* Subcategories */}
<SubcategoryChoser filters={filters} />
<SubcategoryChoser filters={filters} queryStringHook={offers.queryStringHook} ref={subcategoryRef} categoryOpened={categoryRef.current?.isOpened} />

{/* Locations */}
<LocationChoser filters={filters} />
<LocationChoser filters={filters} ref={locationRef}/>
</ContentContainer>

<FilterFooter

+ 11
- 5
src/components/Cards/FilterCard/FilterDropdown/Checkbox/CheckboxDropdownList/CheckboxDropdownList.js Zobrazit soubor

@@ -1,4 +1,4 @@
import React from "react";
import React, { useState } from "react";
import PropTypes from "prop-types";
import DropdownList from "../../../../../Dropdown/DropdownList/DropdownList";
import selectedTheme from "../../../../../../themes";
@@ -14,9 +14,14 @@ import SearchField from "./SearchField/SearchField";

const CheckboxDropdownList = (props) => {
const data = props.data;
const [isOpened, setIsOpened] = useState(false)
const handleDelete = (item) => {
props.setItemsSelected([...props.filters.filter((p) => p !== item)]);
};
const handleOpen = () => {
setIsOpened((prevState) => !prevState);
if (props.handleOpen) props.handleOpen();
};
return (
<DropdownList
title={props.title}
@@ -33,10 +38,10 @@ const CheckboxDropdownList = (props) => {
toggleIconClosed={<DropdownDown />}
toggleIconOpened={<DropdownUp />}
fullWidth
open={props.isOpened}
setIsOpened={props.setIsOpened}
open={props?.open !== undefined ? props.open : isOpened}
setIsOpened={handleOpen}
toggleIconStyles={{
backgroundColor: props.isOpened
backgroundColor: props.open
? "white"
: selectedTheme.primaryIconBackgroundColor,
}}
@@ -77,8 +82,9 @@ CheckboxDropdownList.propTypes = {
data: PropTypes.any,
searchPlaceholder: PropTypes.string,
toSearch: PropTypes.string,
isOpened: PropTypes.bool,
setIsOpened: PropTypes.func,
open: PropTypes.bool,
handleOpen: PropTypes.func,
};

export default CheckboxDropdownList;

+ 8
- 2
src/components/Cards/FilterCard/FilterDropdown/Checkbox/FilterCheckboxDropdown.js Zobrazit soubor

@@ -52,6 +52,10 @@ const FilterCheckboxDropdown = (props) => {
}
}
};
const handleOpen = () => {
setIsOpened((prevState) => !prevState);
if (props.handleOpen) props.handleOpen();
};

return (
<CheckboxDropdownList
@@ -62,8 +66,8 @@ const FilterCheckboxDropdown = (props) => {
icon={props.icon}
data={data}
searchPlaceholder={props.searchPlaceholder}
isOpened={isOpened}
setIsOpened={setIsOpened}
open={props?.open !== undefined ? props.open : isOpened}
handleOpen={handleOpen}
setItemsSelected={props.setItemsSelected}
>
{dataToShow.map((item) => {
@@ -90,6 +94,8 @@ FilterCheckboxDropdown.propTypes = {
searchPlaceholder: PropTypes.string,
setItemsSelected: PropTypes.func,
filters: PropTypes.array,
open: PropTypes.bool,
handleOpen: PropTypes.func,
};
FilterCheckboxDropdown.defaultProps = {
oneValueAllowed: false,

+ 0
- 1
src/components/Cards/FilterCard/FilterFooter/FilterFooter.js Zobrazit soubor

@@ -12,7 +12,6 @@ const FilterFooter = (props) => {
const screenDimensions = useScreenDimensions();
const handleFilters = () => {
filters.apply();
if (props.toggleFilters) props.toggleFilters();
};
return (
<FilterFooterContainer responsiveOpen={screenDimensions.width < 600}>

+ 3
- 1
src/components/Cards/FilterCard/FilterHeader/FilterHeader.js Zobrazit soubor

@@ -8,7 +8,8 @@ const FilterHeader = (props) => {
const filters = props.filters;
const { t } = useTranslation();
const clearFilters = () => {
filters.clear();
filters.clearFiltersAndApply();
props.closeAllSections();
};
return (
<FilterHeaderContainer>
@@ -23,6 +24,7 @@ const FilterHeader = (props) => {
FilterHeader.propTypes = {
children: PropTypes.node,
filters: PropTypes.any,
closeAllSections: PropTypes.func,
};

export default FilterHeader;

+ 0
- 2
src/components/Cards/OfferCard/DeleteOffer/DeleteOffer.js Zobrazit soubor

@@ -41,8 +41,6 @@ const DeleteOffer = (props) => {
dispatch(fetchProfileOffers(userId));
};

console.log(history);

const removeOfferHandler = () => {
dispatch(removeOffer({ offerId, handleApiResponseSuccess }));
props.closeModalHandler();

+ 0
- 1
src/components/Cards/UserReviewsCard/UserReviewsCard.js Zobrazit soubor

@@ -21,7 +21,6 @@ import { useTranslation } from "react-i18next";

const UserReviewsCard = (props) => {
const { t } = useTranslation();
console.log(props);

const review = useMemo(() => {
if (props.givingReview) {

+ 0
- 1
src/components/CreateReview/SecondStep/SecondStepCreateReview.js Zobrazit soubor

@@ -9,7 +9,6 @@ import { useTranslation } from "react-i18next";
import selectedTheme from "../../../themes";

const SecondStepCreateReview = (props) => {
console.log(props);
const {t} = useTranslation();

const goToNextStep = () => {

+ 0
- 1
src/components/DirectChat/DirectChatNewMessage/DirectChatNewMessage.js Zobrazit soubor

@@ -26,7 +26,6 @@ const DirectChatNewMessage = (props) => {
props.refreshChat();
};
const handleSend = useCallback(() => {
console.log(typedValue);
if (location.state?.offerId) {
initiateNewChat(typedValue);
} else {

+ 0
- 2
src/components/Login/Login.js Zobrazit soubor

@@ -54,9 +54,7 @@ const Login = () => {

const handleSubmitForm = (e) => {
e.preventDefault();
console.log("handle submit form");
if (!formik.isValid) {
console.log("greska");
formik.setFieldValue("password", "");
}
formik.handleSubmit(e);

+ 0
- 1
src/components/Paging/Paging.js Zobrazit soubor

@@ -17,7 +17,6 @@ const Paging = (props) => {
: 1;

let moving = 0;
console.log(props.current)
// Making array of pages which contains 2 pages before and after current page
const pagesAsArray = Array.apply(null, Array(5)).map(() => {});


+ 2
- 1
src/hooks/useOffers/useFilters.js Zobrazit soubor

@@ -26,10 +26,11 @@ const useFilters = (clearAll = false) => {
locations.selectedLocationsLocally,
]);

const apply = () => {
const apply = (immediatelyApply = false, applyAllFilters) => {
category.apply();
subcategory.apply();
locations.apply();
if (immediatelyApply) applyAllFilters();
};

const clear = () => {

+ 15
- 3
src/hooks/useOffers/useOffers.js Zobrazit soubor

@@ -1,4 +1,4 @@
import { useEffect, useMemo } from "react";
import { useEffect, useMemo, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import {
KEY_CATEGORY,
@@ -38,6 +38,7 @@ const useOffers = () => {
const offers = useSelector(selectOffers);
const totalOffers = useSelector(selectTotalOffers);
const history = useHistory();
const [filtersCleared, setFiltersCleared] = useState(false);

// Always fetch categories and locations,
// becouse count of total offers change over time
@@ -48,9 +49,7 @@ const useOffers = () => {
}, []);

useEffect(() => {
console.log('location: ', history.location)
if (history.location.state?.logo) {
console.log('logo');
clear();
}
}, [history.location])
@@ -100,6 +99,13 @@ const useOffers = () => {
return offers;
}, [offers]);

useEffect(() => {
if (filtersCleared) {
setFiltersCleared(false);
apply();
}
}, [filtersCleared])

const apply = () => {
filters.apply();
const newQueryString = makeQueryStringHelper(
@@ -111,6 +117,11 @@ const useOffers = () => {
dispatch(setQueryString(convertQueryStringForBackend(newQueryString)));
};

const clearFiltersAndApply = () => {
clear();
setFiltersCleared(true);
}

// Those hooks are below becouse function apply cannot be put on props before initialization
const sorting = useSorting(apply);
const paging = usePaging(apply);
@@ -136,6 +147,7 @@ const useOffers = () => {
queryStringHook,
allOffersToShow,
totalOffers,
clearFiltersAndApply,
apply,
clear,
};

+ 0
- 2
src/pages/RegisterPages/Register/FirstPart/FirstPartOfRegistration.js Zobrazit soubor

@@ -22,9 +22,7 @@ const FirstPartOfRegistration = (props) => {
const { t } = useTranslation();

useEffect(() => {
console.log(props.informations)
if (props.informations?.mail) {
console.log(props.informations)
formik.setFieldValue("mail", props.informations.mail);
formik.setFieldValue("password", props.informations.password)
}

+ 9
- 4
src/pages/RegisterPages/Register/Register.js Zobrazit soubor

@@ -58,13 +58,16 @@ const Register = () => {
} else {
setMailErrorMessage(t("register.emailFormat"));
}
} else if (error?.error?.response?.data?.toString() === "Company with PIB already exists") {
} else if (
error?.error?.response?.data?.toString() ===
"Company with PIB already exists"
) {
setInformations({ mail, password, image });
setCurrentStep(2);
setPIBError(PIB.toString());
setPIBErrorMessage(t("register.PIBTaken"));
} else {
makeErrorToastMessage(t("register.serverError"))
makeErrorToastMessage(t("register.serverError"));
}
};

@@ -75,7 +78,6 @@ const Register = () => {
};

const handleSubmit = (values) => {
console.log(values);
if (currentStep !== 3) {
setCurrentStep((prevState) => prevState + 1);
} else {
@@ -149,7 +151,10 @@ const Register = () => {
/>
)}
{currentStep === 3 && (
<ThirdPartOfRegistration handleSubmit={handleSubmit} informations={informations} />
<ThirdPartOfRegistration
handleSubmit={handleSubmit}
informations={informations}
/>
)}

{imageError && <ErrorMessage>{t("register.imageError")}</ErrorMessage>}

+ 1
- 1
src/request/index.js Zobrazit soubor

@@ -4,7 +4,7 @@ import queryString from "qs";
const request = axios.create({
// baseURL: "http://192.168.88.150:3001/",
// baseURL: "http://192.168.88.175:3005/",
baseURL: "https://trampa-api.dilig.net/",
baseURL: "https://trampa-api-test.dilig.net/",

headers: {
"Content-Type": "application/json",

+ 1
- 1
src/store/middleware/accessTokensMiddleware.js Zobrazit soubor

@@ -13,7 +13,7 @@ import { logoutUser, refreshUserToken } from "../actions/login/loginActions";
// import { setUserAccessToken } from "../actions/user/userActions";

//Change URL with .env
const baseURL = "https://trampa-api.dilig.net/";
const baseURL = "https://trampa-api-test.dilig.net/";
// const baseURL = "http://192.168.88.175:3005/";
// const baseURL = "http://192.168.88.175:3005/";


+ 0
- 1
src/store/reducers/login/loginReducer.js Zobrazit soubor

@@ -59,7 +59,6 @@ function setError(state, action) {
}

function resetLoginState() {
console.log('reset');
return initialState;
}


+ 0
- 2
src/store/saga/offersSaga.js Zobrazit soubor

@@ -72,7 +72,6 @@ function* fetchOffers(payload) {
attemptFetchOffers,
"?" + newQueryString.toString()
);
console.log("data::::::::: ", data.data);
yield put(setTotalOffers(data.data.total));
yield put(setOffers(data.data.items.regularOffers));
yield put(setPinnedOffers(data.data.items.pinnedOffers));
@@ -118,7 +117,6 @@ function* fetchMoreOffers(payload) {

function* createOffer(payload) {
try {
console.log(payload.payload);
yield call(attemptAddOffer, payload.payload.values.offerData);
yield put(addOfferSuccess());
if (payload.payload.handleApiResponseSuccess) {

+ 3
- 5
src/store/saga/registerSaga.js Zobrazit soubor

@@ -1,5 +1,4 @@
import { all, takeLatest, call } from "@redux-saga/core/effects";
import { putRequest } from "../../request";
import { all, takeLatest, call, put } from "@redux-saga/core/effects";
import { attemptRegister } from "../../request/registerRequest";
import { REGISTER_USER_FETCH } from "../actions/register/registerActionConstants";
import {
@@ -33,11 +32,10 @@ function* fetchRegisterUser({ payload }) {
if (payload.values.website?.length === 0)
delete requestData.company.contacts.web;
yield call(attemptRegister, requestData);
console.log("jos nije crash");
if (payload.handleResponseSuccess) {
yield call(payload.handleResponseSuccess);
}
yield putRequest(fetchRegisterUserSuccess());
yield put(fetchRegisterUserSuccess());
} catch (e) {
console.log(e);
let type = "server";
@@ -58,7 +56,7 @@ function* fetchRegisterUser({ payload }) {
if (payload.handleResponseError) {
yield call(payload.handleResponseError, error);
}
yield putRequest(fetchRegisterUserError());
yield put(fetchRegisterUserError());
}
}


+ 60
- 63
src/util/helpers/queryHelpers.js Zobrazit soubor

@@ -1,4 +1,8 @@
import { ALL_CATEGORIES, COMMA, SPREAD } from "../../constants/marketplaceHeaderTitle";
import {
ALL_CATEGORIES,
COMMA,
SPREAD,
} from "../../constants/marketplaceHeaderTitle";
import {
initialSize,
KEY_CATEGORY,
@@ -63,8 +67,6 @@ export const combineQueryStrings = (firstQuery, secondQuery) => {
Object.fromEntries(firstQueryObject)
);
arrayOfProperties.forEach((property) => {
console.log("firstQueryObject[property]: ", firstQueryObject.toString());
console.log("secondQueryObject[property]", secondQueryObject.toString());
if (!secondQueryObject.has(property)) {
// console.log("ovde je doslo query: ", property);
// thirdQueryObject.append(property, secondQueryObject.get(property));
@@ -73,7 +75,6 @@ export const combineQueryStrings = (firstQuery, secondQuery) => {
// console.log("ovde ispod: ", property);
}
});
console.log("thirdQueryObject[property]: ", thirdQueryObject.toString());

return thirdQueryObject.toString();
};
@@ -150,14 +151,12 @@ export const getQueryObjectHelper = (queryString) => {
}
if (queryObject.has(KEY_SUBCATEGORY)) {
newObject[KEY_SUBCATEGORY] = queryObject.get(KEY_SUBCATEGORY);

}
if (queryObject.has(KEY_SEARCH)) {
newObject[KEY_SEARCH] = queryObject.get(KEY_SEARCH);
}
if (queryObject.has(KEY_NAME)) {
newObject[KEY_NAME] = queryObject.get(KEY_NAME);

}
if (queryObject.has(KEY_LOCATION)) {
const arrayOfLocations = queryObject.getAll(KEY_LOCATION);
@@ -186,67 +185,65 @@ export const getQueryObjectHelper = (queryString) => {

export const makeHeaderStringHelper = (filters) => {
let headerStringLocal = ALL_CATEGORIES;
// Adding category to header string
if (filters.category.selectedCategory?.name) {
headerStringLocal = filters.category.selectedCategory?.name;
// Adding subcategories to header string
if (filters.subcategory.selectedSubcategory?.name) {
headerStringLocal += `${SPREAD}${filters.subcategory.selectedSubcategory.name}`;
}
// Adding category to header string
if (filters.category.selectedCategory?.name) {
headerStringLocal = filters.category.selectedCategory?.name;
// Adding subcategories to header string
if (filters.subcategory.selectedSubcategory?.name) {
headerStringLocal += `${SPREAD}${filters.subcategory.selectedSubcategory.name}`;
}
// Adding locations to header string
if (
filters.locations.selectedLocations &&
filters.locations.selectedLocations?.length > 0
) {
headerStringLocal += SPREAD;
}
// Adding locations to header string
if (
filters.locations.selectedLocations &&
filters.locations.selectedLocations?.length > 0
) {
headerStringLocal += SPREAD;

filters.locations.selectedLocations.forEach((location, index) => {
// Checking if item is last
if (index + 1 === filters.locations.selectedLocations.length) {
headerStringLocal += location.city;
} else {
headerStringLocal += location.city + COMMA;
}
});
}
return headerStringLocal;
}
filters.locations.selectedLocations.forEach((location, index) => {
// Checking if item is last
if (index + 1 === filters.locations.selectedLocations.length) {
headerStringLocal += location.city;
} else {
headerStringLocal += location.city + COMMA;
}
});
}
return headerStringLocal;
};
export const makeQueryStringHelper = (filters, paging, search, sorting) => {
const newQueryString = new URLSearchParams();
if (filters.category.selectedCategoryLocally?.name) {
newQueryString.append(
KEY_CATEGORY,
filters.category.selectedCategoryLocally.name
);
}
if (filters.subcategory.selectedSubcategoryLocally?.name) {
newQueryString.append(
KEY_SUBCATEGORY,
filters.subcategory.selectedSubcategoryLocally.name
);
}
if (filters.locations.selectedLocationsLocally?.length > 0) {
filters.locations.selectedLocationsLocally.forEach((location) =>
newQueryString.append(KEY_LOCATION, location?.city)
);
if (filters.category.selectedCategoryLocally?.name) {
newQueryString.append(
KEY_CATEGORY,
filters.category.selectedCategoryLocally.name
);
}
if (filters.subcategory.selectedSubcategoryLocally?.name) {
newQueryString.append(
KEY_SUBCATEGORY,
filters.subcategory.selectedSubcategoryLocally.name
);
}
if (filters.locations.selectedLocationsLocally?.length > 0) {
filters.locations.selectedLocationsLocally.forEach((location) =>
newQueryString.append(KEY_LOCATION, location?.city)
);
}
if (sorting.selectedSortOption?.value) {
if (sorting.selectedSortOption?.value === sortEnum.NEW.value) {
newQueryString.append(KEY_SORTBY, VALUE_SORTBY_NEW);
}
if (sorting.selectedSortOption?.value) {
if (sorting.selectedSortOption?.value === sortEnum.NEW.value) {
newQueryString.append(KEY_SORTBY, VALUE_SORTBY_NEW);
}
if (sorting.selectedSortOption?.value === sortEnum.OLD.value) {
newQueryString.append(KEY_SORTBY, VALUE_SORTBY_OLD);
}
if (sorting.selectedSortOption?.value === sortEnum.POPULAR.value) {
newQueryString.append(KEY_SORTBY, VALUE_SORTBY_POPULAR);
}
if (sorting.selectedSortOption?.value === sortEnum.OLD.value) {
newQueryString.append(KEY_SORTBY, VALUE_SORTBY_OLD);
}
if (paging.currentPage !== 1) {
newQueryString.append(KEY_PAGE, paging.currentPage);
if (sorting.selectedSortOption?.value === sortEnum.POPULAR.value) {
newQueryString.append(KEY_SORTBY, VALUE_SORTBY_POPULAR);
}
newQueryString.append(KEY_SEARCH, search.searchString ?? "");
return newQueryString;
}


}
if (paging.currentPage !== 1) {
newQueryString.append(KEY_PAGE, paging.currentPage);
}
newQueryString.append(KEY_SEARCH, search.searchString ?? "");
return newQueryString;
};

+ 1
- 1
src/validations/loginValidation.js Zobrazit soubor

@@ -2,7 +2,7 @@ import * as Yup from "yup";
import i18n from "../i18n";

export default Yup.object().shape({
email: Yup.string().email(i18n.t("login.emailFormat")).required(i18n.t("login.mailRequired")),
email: Yup.string().email(i18n.t("login.emailFormat")).required(i18n.t("login.emailRequired")),
password: Yup.string()
.required(i18n.t("login.passwordRequired"))
.min(8, i18n.t("login.passwordLength")),

Načítá se…
Zrušit
Uložit