ソースを参照

Fixed bug 611

feature/618
Djordje Mitrovic 3年前
コミット
40141580d5
30個のファイルの変更112行の追加127行の削除
  1. 0
    1
      src/components/Cards/ChatCard/ChatCommands/ChatCommands.js
  2. 1
    4
      src/components/Cards/FilterCard/FilterFooter/FilterFooter.js
  3. 4
    4
      src/components/Cards/MessageCard/MessageCard.js
  4. 5
    5
      src/components/Cards/MessageCard/MessageCard.styled.js
  5. 0
    2
      src/components/DirectChat/DirectChat.js
  6. 0
    1
      src/components/DirectChat/DirectChatContent/DirectChatContent.js
  7. 0
    1
      src/components/DirectChat/DirectChatContent/DirectChatContentHeader/DirectChatContentHeader.js
  8. 0
    2
      src/components/DirectChat/DirectChatNewMessage/DirectChatNewMessage.js
  9. 0
    1
      src/components/Header/AboutHeader/AboutHeader.js
  10. 0
    1
      src/components/ImagePicker/ImagePicker.js
  11. 1
    1
      src/components/ItemDetails/ItemDetailsHeaderCard/OfferDetail/Category/CategoryDetail.js
  12. 1
    1
      src/components/ItemDetails/ItemDetailsHeaderCard/OfferDetail/Category/CategoryDetail.styled.js
  13. 1
    4
      src/components/Login/Login.js
  14. 45
    33
      src/components/Popovers/HeaderPopover/HeaderPopover.js
  15. 9
    4
      src/components/Popovers/MyMessages/MyMessages.js
  16. 35
    32
      src/components/Popovers/MyPosts/MyPosts.js
  17. 0
    1
      src/components/Profile/ProfileOffers/ProfileOffers.js
  18. 0
    1
      src/components/ProfileCard/EditProfile/EditProfile.js
  19. 0
    1
      src/components/UserReviews/UserReviews.js
  20. 0
    3
      src/hooks/useOffers/useSearch.js
  21. 1
    0
      src/i18n/resources/rs.js
  22. 3
    5
      src/pages/About/AboutPage.js
  23. 0
    1
      src/pages/ItemDetailsPage/ItemDetailsPageMUI.js
  24. 0
    1
      src/pages/RegisterPages/Register/FirstPart/FirstPartOfRegistration.js
  25. 1
    6
      src/pages/RegisterPages/Register/Register.js
  26. 2
    4
      src/store/reducers/chat/chatReducer.js
  27. 1
    2
      src/store/saga/profileSaga.js
  28. 0
    1
      src/store/saga/registerSaga.js
  29. 1
    3
      src/util/helpers/chatHelper.js
  30. 1
    1
      src/util/helpers/imageUrlGetter.js

+ 0
- 1
src/components/Cards/ChatCard/ChatCommands/ChatCommands.js ファイルの表示

@@ -20,7 +20,6 @@ const ChatCommands = (props) => {
<Commands>
<PhoneIconContainer
onClick={(event) => {
console.log(event);
setShowPhonePopover(true);
setPhonePopoverAnchorEl(event.currentTarget);
}}

+ 1
- 4
src/components/Cards/FilterCard/FilterFooter/FilterFooter.js ファイルの表示

@@ -1,4 +1,4 @@
import React, { useEffect } from "react";
import React from "react";
import PropTypes from "prop-types";
import { FilterFooterContainer } from "./FilterFooter.styled";
import selectedTheme from "../../../../themes";
@@ -14,9 +14,6 @@ const FilterFooter = (props) => {
filters.apply();
props.toggleFilters();
};
useEffect(() => {
console.log(isMobile);
}, [isMobile])
return (
<FilterFooterContainer responsiveOpen={isMobile}>
{isMobile && (

+ 4
- 4
src/components/Cards/MessageCard/MessageCard.js ファイルの表示

@@ -17,16 +17,16 @@ const MessageCard = (props) => {

const dateString = formatDateTime(new Date(message._created));
return (
<MessageCardContainer isMyMessage={props.isMyMessage}>
<MessageCardContainer ismymessage={props.isMyMessage}>
{/* <ProfileImage src={props.image} /> */}
<ProfileImage
src={getImageUrl(props.image, variants.chatMessage, isMobile)}
/>
<MessageContent isMyMessage={props.isMyMessage}>
<MessageText isMyMessage={props.isMyMessage}>
<MessageContent ismymessage={props.isMyMessage}>
<MessageText ismymessage={props.isMyMessage}>
{props.message.text}
</MessageText>
<MessageDate isMyMessage={props.isMyMessage}>{dateString}</MessageDate>
<MessageDate ismymessage={props.isMyMessage}>{dateString}</MessageDate>
</MessageContent>
</MessageCardContainer>
);

+ 5
- 5
src/components/Cards/MessageCard/MessageCard.styled.js ファイルの表示

@@ -4,7 +4,7 @@ import selectedTheme from "../../../themes";

export const MessageCardContainer = styled(Box)`
display: flex;
flex-direction: ${props => props.isMyMessage ? `row-reverse` : `row`};
flex-direction: ${props => props.ismymessage ? `row-reverse` : `row`};
margin-bottom: 18px;
`;
export const ProfileImage = styled.img`
@@ -18,11 +18,11 @@ export const ProfileImage = styled.img`
`;
export const MessageContent = styled(Box)`
background-color: ${(props) =>
props.isMyMessage
props.ismymessage
? selectedTheme.primaryPurple
: selectedTheme.messageBackground};
border-radius: ${(props) =>
props.isMyMessage ? "9px 0px 9px 9px" : "0px 9px 9px 9px"};
props.ismymessage ? "9px 0px 9px 9px" : "0px 9px 9px 9px"};
padding: 9px;
position: relative;
min-height: 65px;
@@ -36,10 +36,10 @@ export const MessageText = styled(Typography)`
font-family: "DM Sans";
font-size: 16px;
line-height: 22px;
color: ${props => props.isMyMessage ? `white` : selectedTheme.messageText};
color: ${props => props.ismymessage ? `white` : selectedTheme.messageText};
`;
export const MessageDate = styled(Typography)`
color: ${props => props.isMyMessage ? selectedTheme.messageMyDate : selectedTheme.messageDate};
color: ${props => props.ismymessage ? selectedTheme.messageMyDate : selectedTheme.messageDate};
font-size: 12px;
font-style: italic;
position: absolute;

+ 0
- 2
src/components/DirectChat/DirectChat.js ファイルの表示

@@ -43,8 +43,6 @@ const DirectChat = () => {
}, [chat, location.state]);

const interlocutorObject = useMemo(() => {
console.log("offer", offer);
console.log("chat", chat);
if (location?.state?.offerId) {
return {
image: offer?.companyData?.image,

+ 0
- 1
src/components/DirectChat/DirectChatContent/DirectChatContent.js ファイルの表示

@@ -28,7 +28,6 @@ const DirectChatContent = (props) => {
props.refreshChat();
};
useEffect(() => {
console.dir(messagesRef.current)
// const offsetBottom =
// messagesRef.current?.offsetTop + messagesRef.current?.offsetHeight;
messagesRef.current?.scrollTo({ top: messagesRef.current.scrollHeight, behaviour: "smooth" });

+ 0
- 1
src/components/DirectChat/DirectChatContent/DirectChatContentHeader/DirectChatContentHeader.js ファイルの表示

@@ -23,7 +23,6 @@ const DirectChatContentHeader = (props) => {
const { isMobile } = useIsMobile();

const togglePhonePopover = (event) => {
console.log(event);
setShowPhonePopover(true);
setPhonePopoverAnchorEl(event.currentTarget);
};

+ 0
- 2
src/components/DirectChat/DirectChatNewMessage/DirectChatNewMessage.js ファイルの表示

@@ -27,7 +27,6 @@ import { useHistory, useLocation } from "react-router-dom";
const DirectChatNewMessage = (props) => {
const [typedValue, setTypedValue] = useState("");
const [isFocused, setIsFocused] = useState(false);
console.log(props);
const dispatch = useDispatch();
const { t } = useTranslation();
const location = useLocation();
@@ -48,7 +47,6 @@ const DirectChatNewMessage = (props) => {
// })
// );
// }
console.log(props.chatId, typedValue, props.interlucator.userId);
if (props.chatId) {
sendMessage(props.chatId, userId, typedValue, props.interlucator.userId);
dispatch(

+ 0
- 1
src/components/Header/AboutHeader/AboutHeader.js ファイルの表示

@@ -8,7 +8,6 @@ import { selectAboutRouteSelected } from "../../../store/selectors/appSelectors"
import { useHistory } from "react-router-dom";

const AboutHeader = () => {
console.log("about header");
const history = useHistory();
const { t } = useTranslation();
const aboutRouteSelected = useSelector(selectAboutRouteSelected);

+ 0
- 1
src/components/ImagePicker/ImagePicker.js ファイルの表示

@@ -55,7 +55,6 @@ const ImagePicker = (props) => {
// reader.readAsBinaryString(file);
reader.onload = () => {
if (props.setImage) props.setImage(file);
console.log(reader.result);
setImage(reader.result);
};
reader.onerror = (error) => {

+ 1
- 1
src/components/ItemDetails/ItemDetailsHeaderCard/OfferDetail/Category/CategoryDetail.js ファイルの表示

@@ -15,7 +15,7 @@ const CategoryDetail = (props) => {
<DetailIcon color={selectedTheme.iconStrokeColor} size="22px">
<Category width={"22px"} />
</DetailIcon>
<DetailText isMyProfile={props.isMyProfile}>
<DetailText ismyprofile={props.isMyProfile}>
{offer?.companyData?.company?.contacts?.location}
</DetailText>
</DetailContainer>

+ 1
- 1
src/components/ItemDetails/ItemDetailsHeaderCard/OfferDetail/Category/CategoryDetail.styled.js ファイルの表示

@@ -27,7 +27,7 @@ export const DetailIcon = styled(Icon)`
`;
export const DetailText = styled(Typography)`
font-family: "DM Sans";
color: ${props => props.isMyProfile ? "white" : selectedTheme.primaryText};
color: ${props => props.ismyprofile ? "white" : selectedTheme.primaryText};
line-height: 16px;
font-size: 16px;
position: relative;

+ 1
- 4
src/components/Login/Login.js ファイルの表示

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

const handleSubmit = (values) => {
const { email, password } = values;
if (!formik.isValid) {
console.log("invalid");
} else {
if (formik.isValid) {
dispatch(clearLoginErrors());
dispatch(
fetchLogin({
@@ -74,7 +72,6 @@ const Login = () => {
handleApiResponseError,
})
);
console.log(values);
}
};


+ 45
- 33
src/components/Popovers/HeaderPopover/HeaderPopover.js ファイルの表示

@@ -19,46 +19,58 @@ import {
import { useTranslation } from "react-i18next";
import useIsMobile from "../../../hooks/useIsMobile";
import { getImageUrl, variants } from "../../../util/helpers/imageUrlGetter";
import { useMemo } from "react";

const HeaderPopover = (props) => {
const { t } = useTranslation();
const {isMobile} = useIsMobile();
const { isMobile } = useIsMobile();
const items = useMemo(() => props.items, [props.items]);
return (
<HeaderPopoverContainer>
<PopoverTitle p={2}>{props.title}</PopoverTitle>
<PopoverList>
{props.items?.length > 0 ? (
props.items.map((item, index) => (
<PopoverListItem key={index}>
<PopoverListItemAvatarContainer>
{props.isProfile ? (
<PopoverListItemProfileAvatar
alt={item.alt}
src={getImageUrl(item.src, variants.profileCard, isMobile)}
onClick={item?.onClick}
/>
) : (
<PopoverListItemAvatar
alt={item.alt}
src={getImageUrl(item.src, variants.profileCard, isMobile)}
onClick={item?.onClick}
/>
)}
</PopoverListItemAvatarContainer>
<PopoverListItemTextContainer
primaryTypographyProps={{
onClick: item.onClick,
}}
primary={item.title}
secondary={
<SecondaryTextContainer>
<SecondaryText>{item.text}</SecondaryText>
<NameOfProduct>{item?.bigText}</NameOfProduct>
</SecondaryTextContainer>
}
></PopoverListItemTextContainer>
</PopoverListItem>
))
{items?.length > 0 ? (
items.map((item, index) => {
return (
<PopoverListItem key={index}>
<PopoverListItemAvatarContainer>
{props.isProfile ? (
<PopoverListItemProfileAvatar
alt={item.alt}
src={getImageUrl(
item.src,
variants.profileCard,
isMobile
)}
onClick={item?.onClick}
/>
) : (
<PopoverListItemAvatar
alt={item.alt}
src={getImageUrl(
item.src,
variants.profileCard,
isMobile
)}
onClick={item?.onClick}
/>
)}
</PopoverListItemAvatarContainer>
<PopoverListItemTextContainer
primaryTypographyProps={{
onClick: item.onClick,
}}
primary={item.title}
secondary={
<SecondaryTextContainer>
<SecondaryText>{item.text}</SecondaryText>
<NameOfProduct>{item?.bigText}</NameOfProduct>
</SecondaryTextContainer>
}
></PopoverListItemTextContainer>
</PopoverListItem>
);
})
) : (
<PopoverNoItemsText>{t("header.noItems")}</PopoverNoItemsText>
)}

+ 9
- 4
src/components/Popovers/MyMessages/MyMessages.js ファイルの表示

@@ -7,6 +7,7 @@ import { selectLatestChats } from "../../../store/selectors/chatSelectors";
import { selectUserId } from "../../../store/selectors/loginSelectors";
import HeaderPopover from "../HeaderPopover/HeaderPopover";
import PropTypes from "prop-types";
import { makeErrorToastMessage } from "../../../store/utils/makeToastMessage";

export const MyMessages = (props) => {
const { t } = useTranslation();
@@ -17,14 +18,13 @@ export const MyMessages = (props) => {
const [lastChats, setLastChats] = useState([]);

const convertMessages = (messages) => {
console.log(messages)
return messages
.map((item) => ({
src: item.interlocutorData.image,
title: item.interlocutorData.name,
onClick: () => goToMessage(item?.chat?._id),
text: "Proizvod: ",
bigText: item.offerData.name
bigText: item.offerData.name,
}))
.slice(0, 2);
};
@@ -40,8 +40,13 @@ export const MyMessages = (props) => {
}
}, [chats]);
const goToMessages = () => {
history.push(`/messages/${chats[0].chat?._id}`);
props.closePopover();
if (lastChats.length !== 0) {
history.push(`/messages/${chats[0].chat?._id}`);
props.closePopover();
} else {
makeErrorToastMessage(t("messages.noMessagesToast"));
props.closePopover();
}
};
const goToMessage = (chatId) => {
history.push(`/messages/${chatId}`);

+ 35
- 32
src/components/Popovers/MyPosts/MyPosts.js ファイルの表示

@@ -24,6 +24,7 @@ import { fetchMineOffers } from "../../../store/actions/offers/offersActions";
import { selectProfileName } from "../../../store/selectors/profileSelectors";
import { useHistory } from "react-router-dom";
import { MY_OFFERS_PAGE } from "../../../constants/pages";
import { useMemo } from "react";

export const MyPosts = (props) => {
const { t } = useTranslation();
@@ -36,40 +37,42 @@ export const MyPosts = (props) => {
dispatch(fetchMineOffers());
}, []);
useEffect(() => {
if (mineOffers?.length > 0) {
if (mineOffers.length > 1) {
setArrayOfMineOffers(
[mineOffers[0], mineOffers[1]].map((item) => ({
src: item.images[0],
title: item.name,
onClick: () => goToOffer(item._id),
text: (
<React.Fragment>
<PostsImgSuit /> {name}
</React.Fragment>
),
}))
);
} else if (mineOffers.length > 0) {
setArrayOfMineOffers(
[mineOffers[0]].map((item) => ({
alt: "Photo",
src: item.images[0],
title: item.name,
onClick: () => goToOffer(item._id),
text: (
<React.Fragment>
<PostsImgSuit /> {name}
</React.Fragment>
),
}))
);
} else {
setArrayOfMineOffers([]);
}
if (mineOffers.length > 1) {
setArrayOfMineOffers(
[mineOffers[0], mineOffers[1]].map((item) => ({
src: item.images[0],
title: item.name,
onClick: () => goToOffer(item._id),
text: (
<React.Fragment>
<PostsImgSuit /> {name}
</React.Fragment>
),
}))
);
} else if (mineOffers.length > 0) {
setArrayOfMineOffers(
[mineOffers[0]].map((item) => ({
alt: "Photo",
src: item.images[0],
title: item.name,
onClick: () => goToOffer(item._id),
text: (
<React.Fragment>
<PostsImgSuit /> {name}
</React.Fragment>
),
}))
);
} else {
setArrayOfMineOffers([]);
}
}, [mineOffers]);

const mineOffersToRender = useMemo(() => {
return [...arrayOfMineOffers];
}, [arrayOfMineOffers, mineOffers]);

const goToOffer = (id) => {
history.push(`/proizvodi/${id}`);
props.closePopover();
@@ -81,7 +84,7 @@ export const MyPosts = (props) => {
return (
<HeaderPopover
title={t("header.myOffers")}
items={arrayOfMineOffers}
items={mineOffersToRender}
buttonText={t("header.checkEverything")}
buttonOnClick={goToMySwaps}
/>

+ 0
- 1
src/components/Profile/ProfileOffers/ProfileOffers.js ファイルの表示

@@ -37,7 +37,6 @@ const ProfileOffers = (props) => {
const isLoadingMineOffers = useSelector(
selectIsLoadingByActionType(OFFERS_PROFILE_SCOPE)
);
console.log("isLoadingMineOffers", isLoadingMineOffers);
const searchRef = useRef(null);
const chats = useSelector(selectLatestChats);
const profileOffers = useSelector(selectProfileOffers);

+ 0
- 1
src/components/ProfileCard/EditProfile/EditProfile.js ファイルの表示

@@ -57,7 +57,6 @@ const EditProfile = (props) => {
};

const handleSubmit = (values) => {
console.log(values);
dispatch(editMineProfile({ ...values, handleApiResponseSuccess }));
props.closeModalHandler();
};

+ 0
- 1
src/components/UserReviews/UserReviews.js ファイルの表示

@@ -25,7 +25,6 @@ const UserReviews = (props) => {
const dispatch = useDispatch();

useEffect(() => {
console.log(routeMatch);
if (props.profileReviews && routeMatch.params?.idProfile) {
let idProfile = routeMatch.params.idProfile;
dispatch(fetchReviews(idProfile));

+ 0
- 3
src/hooks/useOffers/useSearch.js ファイルの表示

@@ -33,7 +33,6 @@ const useSearch = (applyAllFilters) => {
clear();
}
const queryObject = new URLSearchParams(history.location.search);
console.log(queryObject.toString())
if (queryObject.has(KEY_SEARCH)) {
searchOffers(queryObject.get(KEY_SEARCH));
} else {
@@ -43,7 +42,6 @@ const useSearch = (applyAllFilters) => {

// On every local change of search string, global state of search string should be also updated
useEffect(() => {
console.log('ovde')
if (isInitallyLoaded && applyAllFilters) {
dispatch(setSearchString(searchStringLocally));
}
@@ -55,7 +53,6 @@ const useSearch = (applyAllFilters) => {
};

const clear = () => {
console.log('ovde2')
setSearchStringLocally("");
};


+ 1
- 0
src/i18n/resources/rs.js ファイルの表示

@@ -208,6 +208,7 @@ export default {
send: "Pošalji",
sendPlaceholder: "Poruka...",
seeChats: "Pogledaj ćaskanje",
noMessagesToast: "Nemate ni jednu poruku!"
},
editProfile: {
website: "Web Sajt*",

+ 3
- 5
src/pages/About/AboutPage.js ファイルの表示

@@ -40,14 +40,13 @@ const AboutPage = () => {
const yAxis = privacyPolicyRef.current.offsetTop - 64;
window.scrollTo({ top: yAxis, behavior: "smooth" });
if (aboutRouteSelected !== scrollConstants.about.privacyPolicyPage) {
dispatch(setAboutRouteSelected(scrollConstants.about.privacyPolicyPage));
dispatch(
setAboutRouteSelected(scrollConstants.about.privacyPolicyPage)
);
}
}
location.state = {};
}
return () => {
console.log(location);
};
}, [location]);

useEffect(() => {
@@ -56,7 +55,6 @@ const AboutPage = () => {
window.scrollY >
pricesRef.current.offsetTop - window.innerHeight / 2
) {
console.log(true);
if (
window.scrollY >
privacyPolicyRef.current.offsetTop - window.innerHeight / 2

+ 0
- 1
src/pages/ItemDetailsPage/ItemDetailsPageMUI.js ファイルの表示

@@ -21,7 +21,6 @@ const ItemDetailsPage = (props) => {
}, []);

useEffect(() => {
console.log("effect: selectedOffer", selectedOffer, " isInitiallyLoaded: ", isInitiallyLoaded)
if (!selectedOffer?.offer && isInitiallyLoaded) {
dispatch(fetchOneOffer(offerId));
}

+ 0
- 1
src/pages/RegisterPages/Register/FirstPart/FirstPartOfRegistration.js ファイルの表示

@@ -40,7 +40,6 @@ const FirstPartOfRegistration = (props) => {

const handleSubmitForm = (event) => {
event.preventDefault();
console.log(formik);
if (!formik.isValid) {
if (formik.errors.mail) {
formik.setFieldValue("mail", "");

+ 1
- 6
src/pages/RegisterPages/Register/Register.js ファイルの表示

@@ -1,4 +1,4 @@
import React, { useEffect, useState } from "react";
import React, { useState } from "react";
import PropTypes from "prop-types";
import {
RegisterPageContainer,
@@ -71,11 +71,6 @@ const Register = () => {
}
};

useEffect(() => {
console.log("informations", informations)
}, [informations])


const registerUser = (values) => {
dispatch(
fetchRegisterUser({ values, handleResponseSuccess, handleResponseError })

+ 2
- 4
src/store/reducers/chat/chatReducer.js ファイルの表示

@@ -39,7 +39,6 @@ function clearChats() {
function addNewMessage(state, { payload }) {
let allChats = [...state.latestChats];
let chat = allChats.find((item) => item.chat._id === payload._id);
console.log(chat);
chat = {
...chat,
chat: {
@@ -50,9 +49,8 @@ function addNewMessage(state, { payload }) {
allChats = allChats.filter((item) => item.chat._id !== chat.chat._id);
allChats = [chat, ...allChats];
let newSelectedChat = { ...state.selectedChat };
console.log(chat);
console.log(newSelectedChat);
if (newSelectedChat.chat._id === chat.chat._id) newSelectedChat = { ...newSelectedChat, chat: chat.chat };
if (newSelectedChat.chat._id === chat.chat._id)
newSelectedChat = { ...newSelectedChat, chat: chat.chat };
return {
...state,
latestChats: [...allChats],

+ 1
- 2
src/store/saga/profileSaga.js ファイルの表示

@@ -94,12 +94,11 @@ function* changeMineProfile(payload) {
requestBody.append("company[contacts][web]", payload.payload.firmWebsite);

const userId = yield select(selectUserId);
const data = yield call(attemptEditProfile, userId, requestBody);
yield call(attemptEditProfile, userId, requestBody);
yield put(editMineProfileSuccess());
if (payload.payload.handleApiResponseSuccess) {
yield call(payload.payload.handleApiResponseSuccess);
}
console.log(data);
} catch (e) {
yield put(editMineProfileError());
console.dir(e);

+ 0
- 1
src/store/saga/registerSaga.js ファイルの表示

@@ -22,7 +22,6 @@ import i18next from "i18next";
function* fetchRegisterUser({ payload }) {
try {
const requestBody = new FormData();
console.log("requeest body image", payload.values.image);
requestBody.append("email", payload.values.mail);
requestBody.append("password", payload.values.password);
requestBody.append("file", payload.values.image);

+ 1
- 3
src/util/helpers/chatHelper.js ファイルの表示

@@ -1,10 +1,8 @@
import history from "../../store/utils/history";

export const startChat = (chats, offer, userId) => {
console.log(offer);
const chatItem = chats.find(
(item) =>
item.chat.offerId === offer?._id && offer?.userId !== userId
(item) => item.chat.offerId === offer?._id && offer?.userId !== userId
);
if (chatItem !== undefined) {
history.push(`/messages/${chatItem.chat._id}`);

+ 1
- 1
src/util/helpers/imageUrlGetter.js ファイルの表示

@@ -21,7 +21,7 @@ const cloudFlareVariants = {
offerDetails: "primary",
offerDetailsMobile: "primary",
profileImage: "primary",
profileImageMobile: "profileImage",
profileImageMobile: "profileMobile",
reviewCard: "review",
reviewCardMobile: "review",
chatHeader: "chatHeader",

読み込み中…
キャンセル
保存