Просмотр исходного кода

Finished feature 688

feature/701
jovan.cirkovic 3 лет назад
Родитель
Сommit
0d2ee535c9

+ 6
- 3
src/components/Cards/OfferCard/OfferCard.styled.js Просмотреть файл

right: 134px; right: 134px;
top: 18px; top: 18px;
@media (max-width: 600px) { @media (max-width: 600px) {
${props => props.vertical && `
${(props) =>
props.vertical &&
`
display: block; display: block;
top: initial; top: initial;
right: initial; right: initial;
@media (max-width: 600px) { @media (max-width: 600px) {
top: 20px; top: 20px;
right: 55px; right: 55px;
${props => props.vertical && `
${(props) =>
props.vertical &&
`
top: initial; top: initial;
bottom: 18px; bottom: 18px;
right: 18px; right: 18px;
`} `}
} }
`; `;
export const CategoryIcon = styled(Category)` export const CategoryIcon = styled(Category)`
width: 14px; width: 14px;

+ 4
- 0
src/components/Cards/ProfileCard/EditProfile/PIBField/PIBField.js Просмотреть файл

error={props.formik.touched.firmPIB && props.formik.errors.firmPIB} error={props.formik.touched.firmPIB && props.formik.errors.firmPIB}
margin="normal" margin="normal"
fullWidth fullWidth
<<<<<<< HEAD
disabled={!props.isAdmin} disabled={!props.isAdmin}
=======
// disabled
>>>>>>> 7c00f1e951b91c197b9f517e6e795cd4a821e12f
/> />
</> </>
); );

+ 1
- 0
src/components/Cards/ProfileCard/ProfileMainInfo/ProfileMainInfo.js Просмотреть файл

const ProfileMainInfo = (props) => { const ProfileMainInfo = (props) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { isMobile } = useIsMobile(); const { isMobile } = useIsMobile();
console.log(props.profile);
const goToUser = () => { const goToUser = () => {
if (isAdminRoute()) { if (isAdminRoute()) {
history.push( history.push(

+ 1
- 1
src/components/Cards/UserReviewsCard/UserReviewsCard.js Просмотреть файл

) )
isGoodCommunication = reviewEnum.NO.mainText.toUpperCase(); isGoodCommunication = reviewEnum.NO.mainText.toUpperCase();
return { return {
_id: props.review._id,
name: props.review.userWhoGaveReview.name, name: props.review.userWhoGaveReview.name,
image: props.review.userWhoGaveReview.image, image: props.review.userWhoGaveReview.image,
userId: props.review.userId, userId: props.review.userId,
offerImage: props.review.offer.image, offerImage: props.review.offer.image,
}; };
}, [props.review]); }, [props.review]);
console.log(review);


return ( return (
<> <>

+ 14
- 1
src/components/Modals/DeleteReview/DeleteReview.js Просмотреть файл

import UserReviewsSingleCard from "../../Cards/UserReviewsCard/UserReviewsSingleCard/UserReviewsSingleCard"; import UserReviewsSingleCard from "../../Cards/UserReviewsCard/UserReviewsSingleCard/UserReviewsSingleCard";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import DeleteButton from "./DeleteButton/DeleteButton"; import DeleteButton from "./DeleteButton/DeleteButton";
import { useDispatch } from "react-redux";
import { removeReview } from "../../../store/actions/review/reviewActions";


const DeleteReview = (props) => { const DeleteReview = (props) => {
const dispatch = useDispatch();
const reviewId = props.review._id;
const { t } = useTranslation(); const { t } = useTranslation();

const handleApiResponseSuccess = () => {
console.log("Succes");
};

const deleteReviewHandler = () => {
dispatch(removeReview({ reviewId, handleApiResponseSuccess }));
props.setOpenedDeleteModal(false);
};
return ( return (
<> <>
<BackdropComponent <BackdropComponent
review={props.review} review={props.review}
/> />
<XIcon onClick={() => props.setOpenedDeleteModal(false)} /> <XIcon onClick={() => props.setOpenedDeleteModal(false)} />
<DeleteButton />
<DeleteButton onClick={deleteReviewHandler} />
</DeleteReviewContainer> </DeleteReviewContainer>
</> </>
); );

+ 7
- 5
src/request/apiEndpoints.js Просмотреть файл

updateUserRegistration: "/users/{userUid}", updateUserRegistration: "/users/{userUid}",
invite: "/users/invite", invite: "/users/invite",
getProfile: "users/", getProfile: "users/",
editProfile: "users",
editProfile: "users/{userId}",
getAllProfiles: "users/companies",
editProfileAsAdmin: "admin/users/{userId}", editProfileAsAdmin: "admin/users/{userId}",
getAllProfiles: "users",
getAllProfilesAsAdmin: "admin/users", getAllProfilesAsAdmin: "admin/users",
deleteProfileAsAdmin: "admin/users/{userId}", deleteProfileAsAdmin: "admin/users/{userId}",
blockProfileAsAdmin: "admin/users/{userId}/block", blockProfileAsAdmin: "admin/users/{userId}/block",
validateExchange: "exchanges", validateExchange: "exchanges",
}, },
reviews: { reviews: {
postReview: "reviews",
getUserReviews: "/users/{userId}/reviews",
postReview: "/users/{userId}/reviews",
removeReview: "/admin/reviews/{id}",
}, },
admin: { admin: {
categories: { categories: {
locations: { locations: {
newLocation: "admin/locations", newLocation: "admin/locations",
editLocation: "admin/locations/{locationId}", editLocation: "admin/locations/{locationId}",
deleteLocation: "admin/locations/{locationId}"
}
deleteLocation: "admin/locations/{locationId}",
},
}, },
}; };

+ 6
- 2
src/request/profileRequest.js Просмотреть файл

export const attemptFetchAllProfilesAsAdmin = (payload) => export const attemptFetchAllProfilesAsAdmin = (payload) =>
getRequest(apiEndpoints.users.getAllProfilesAsAdmin + "?" + payload); getRequest(apiEndpoints.users.getAllProfilesAsAdmin + "?" + payload);


export const attemptEditProfile = (payload, requestData) =>
putRequest(apiEndpoints.users.editProfile + "/" + payload, requestData);
export const attemptEditProfile = (payload, requestData) => {
return putRequest(
replaceInUrl(apiEndpoints.users.editProfile, { userId: payload }),
requestData
);
};
export const attemptEditProfileAsAdmin = (payload, requestData) => export const attemptEditProfileAsAdmin = (payload, requestData) =>
putRequest( putRequest(
replaceInUrl(apiEndpoints.users.editProfileAsAdmin, { userId: payload }), replaceInUrl(apiEndpoints.users.editProfileAsAdmin, { userId: payload }),

+ 17
- 7
src/request/reviewRequest.js Просмотреть файл

import { getRequest, postRequest } from "."
import apiEndpoints from "./apiEndpoints"
import { deleteRequest, getRequest, postRequest, replaceInUrl } from ".";
import apiEndpoints from "./apiEndpoints";


export const attemptGiveReview = (payload) => {
return postRequest(apiEndpoints.reviews.postReview, payload);
}
export const attemptGiveReview = (userId, payload) => {
return postRequest(
replaceInUrl(apiEndpoints.reviews.postReview, { userId: userId }),
payload
);
};
export const attemptFetchReview = (payload) => { export const attemptFetchReview = (payload) => {
return getRequest(`users/${payload}/reviews`)
}
return getRequest(
replaceInUrl(apiEndpoints.reviews.getUserReviews, { userId: payload })
);
};
export const attemptRemoveReview = (payload) => {
return deleteRequest(
replaceInUrl(apiEndpoints.reviews.removeReview, { id: payload })
);
};

+ 5
- 0
src/store/actions/review/reviewActionConstants.js Просмотреть файл

export const REVIEW_GET_SUCCESS = createSuccessType(REVIEW_GET_SCOPE); export const REVIEW_GET_SUCCESS = createSuccessType(REVIEW_GET_SCOPE);
export const REVIEW_GET_ERROR = createErrorType(REVIEW_GET_SCOPE); export const REVIEW_GET_ERROR = createErrorType(REVIEW_GET_SCOPE);


export const REVIEW_REMOVE_SCOPE = "REVIEW_REMOVE_SCOPE";
export const REVIEW_REMOVE = createFetchType(REVIEW_REMOVE_SCOPE);
export const REVIEW_REMOVE_SUCCESS = createSuccessType(REVIEW_REMOVE_SCOPE);
export const REVIEW_REMOVE_ERROR = createErrorType(REVIEW_REMOVE_SCOPE);

export const REVIEW_SET = createSetType("REVIEW_SET"); export const REVIEW_SET = createSetType("REVIEW_SET");

+ 39
- 18
src/store/actions/review/reviewActions.js Просмотреть файл

import { REVIEW_GET, REVIEW_GET_ERROR, REVIEW_GET_SUCCESS, REVIEW_GIVE, REVIEW_GIVE_ERROR, REVIEW_GIVE_SUCCESS, REVIEW_SET } from "./reviewActionConstants";
import {
REVIEW_GET,
REVIEW_GET_ERROR,
REVIEW_GET_SUCCESS,
REVIEW_GIVE,
REVIEW_GIVE_ERROR,
REVIEW_GIVE_SUCCESS,
REVIEW_REMOVE,
REVIEW_REMOVE_ERROR,
REVIEW_REMOVE_SUCCESS,
REVIEW_SET,
} from "./reviewActionConstants";


export const fetchReviews = (payload) => ({ export const fetchReviews = (payload) => ({
type: REVIEW_GET,
payload,
})
type: REVIEW_GET,
payload,
});
export const fetchReviewsSuccess = () => ({ export const fetchReviewsSuccess = () => ({
type: REVIEW_GET_SUCCESS
})
type: REVIEW_GET_SUCCESS,
});
export const fetchReviewsError = () => ({ export const fetchReviewsError = () => ({
type: REVIEW_GET_ERROR
})
type: REVIEW_GET_ERROR,
});
export const giveReview = (payload) => ({ export const giveReview = (payload) => ({
type: REVIEW_GIVE,
payload,
})
type: REVIEW_GIVE,
payload,
});
export const giveReviewSuccess = () => ({ export const giveReviewSuccess = () => ({
type: REVIEW_GIVE_SUCCESS
})
type: REVIEW_GIVE_SUCCESS,
});
export const giveReviewError = () => ({ export const giveReviewError = () => ({
type: REVIEW_GIVE_ERROR
})
type: REVIEW_GIVE_ERROR,
});
export const removeReview = (payload) => ({
type: REVIEW_REMOVE,
payload,
});
export const removeReviewSuccess = () => ({
type: REVIEW_REMOVE_SUCCESS,
});
export const removeReviewError = () => ({
type: REVIEW_REMOVE_ERROR,
});
export const setReviews = (payload) => ({ export const setReviews = (payload) => ({
type: REVIEW_SET,
payload,
})
type: REVIEW_SET,
payload,
});

+ 24
- 2
src/store/saga/reviewSaga.js Просмотреть файл

import { all, takeLatest, call, put } from "@redux-saga/core/effects";
import { all, takeLatest, call, put, select } from "@redux-saga/core/effects";
import { import {
attemptFetchReview, attemptFetchReview,
attemptGiveReview, attemptGiveReview,
attemptRemoveReview,
} from "../../request/reviewRequest"; } from "../../request/reviewRequest";
import { import {
REVIEW_GET, REVIEW_GET,
REVIEW_GIVE, REVIEW_GIVE,
REVIEW_REMOVE,
} from "../actions/review/reviewActionConstants"; } from "../actions/review/reviewActionConstants";
import { import {
fetchReviewsError, fetchReviewsError,
fetchReviewsSuccess, fetchReviewsSuccess,
giveReviewError, giveReviewError,
giveReviewSuccess, giveReviewSuccess,
removeReviewError,
removeReviewSuccess,
setReviews, setReviews,
} from "../actions/review/reviewActions"; } from "../actions/review/reviewActions";
import { selectUserId } from "../selectors/loginSelectors";


function* fetchReviews(payload) { function* fetchReviews(payload) {
try { try {
console.log(payload);
const data = yield call(attemptFetchReview, payload.payload); const data = yield call(attemptFetchReview, payload.payload);
yield put(setReviews([...data.data].reverse())); yield put(setReviews([...data.data].reverse()));
yield put(fetchReviewsSuccess()); yield put(fetchReviewsSuccess());


function* giveReview(payload) { function* giveReview(payload) {
try { try {
yield call(attemptGiveReview, payload.payload.review);
const userId = yield select(selectUserId);
yield call(attemptGiveReview, userId, payload.payload.review);
if (payload.payload.handleApiResponseSuccess) { if (payload.payload.handleApiResponseSuccess) {
yield call(payload.payload.handleApiResponseSuccess); yield call(payload.payload.handleApiResponseSuccess);
} }
} }
} }


function* removeReview(payload) {
try {
console.log(payload);
yield call(attemptRemoveReview, payload.payload.reviewId);
if (payload.payload.handleApiResponseSuccess) {
yield call(payload.payload.handleApiResponseSuccess);
}
yield put(removeReviewSuccess());
} catch (e) {
yield put(removeReviewError());
console.dir(e);
}
}

export default function* reviewSaga() { export default function* reviewSaga() {
yield all([ yield all([
takeLatest(REVIEW_GET, fetchReviews), takeLatest(REVIEW_GET, fetchReviews),
takeLatest(REVIEW_GIVE, giveReview), takeLatest(REVIEW_GIVE, giveReview),
takeLatest(REVIEW_REMOVE, removeReview),
]); ]);
} }

+ 1
- 1
src/validations/editProfileValidation.js Просмотреть файл

Yup.object().shape({ Yup.object().shape({
firmName: Yup.string().required(i18n.t("editProfile.labelNameRequired")), firmName: Yup.string().required(i18n.t("editProfile.labelNameRequired")),
firmPIB: Yup.string() firmPIB: Yup.string()
.required(i18n.t("editProfile.labelPIBRequired"))
// .required(i18n.t("editProfile.labelPIBRequired"))
.min(9, i18n.t("register.PIBnoOfCharacters")) .min(9, i18n.t("register.PIBnoOfCharacters"))
.max(9, i18n.t("register.PIBnoOfCharacters")), .max(9, i18n.t("register.PIBnoOfCharacters")),
firmLocation: Yup.string().oneOf( firmLocation: Yup.string().oneOf(

Загрузка…
Отмена
Сохранить