소스 검색

Not finished yety

bugfix/app-changes
Djordje Mitrovic 3 년 전
부모
커밋
c15c0b1e6b
32개의 변경된 파일184개의 추가작업 그리고 75개의 파일을 삭제
  1. 0
    1
      src/App.js
  2. 2
    1
      src/components/Cards/FilterCard/Choser/CategoryChoser/CategoryChoser.js
  3. 14
    1
      src/components/Cards/FilterCard/Choser/CompanyChoser/CompanyChoser.js
  4. 14
    1
      src/components/Cards/FilterCard/Choser/LocationChoser/LocationChoser.js
  5. 6
    3
      src/components/Cards/FilterCard/Choser/SubcategoryChoser/SubcategoryChoser.js
  6. 3
    2
      src/components/Cards/FilterCard/FilterDropdown/Checkbox/CheckboxDropdownList/CheckboxDropdownList.js
  7. 1
    0
      src/components/Cards/FilterCard/FilterDropdown/Checkbox/FilterSubDropdown/FilterSubDropdown.js
  8. 4
    1
      src/components/Cards/FilterCard/FilterDropdown/Radio/FilterRadioDropdown.js
  9. 9
    4
      src/components/Cards/ItemDetailsCard/ItemDetailsCard.js
  10. 8
    2
      src/components/Cards/ItemDetailsCard/OfferDetails/OfferDetails.js
  11. 6
    3
      src/components/Cards/OfferCard/DeleteOffer/OfferDescription/OfferDescription.js
  12. 7
    1
      src/components/Cards/OfferCard/DeleteOffer/OfferDescription/OfferDescription.styled.js
  13. 7
    4
      src/components/Cards/OfferCard/OfferCard.js
  14. 6
    2
      src/components/Cards/ProfileCard/ProfileControl/ProfileControl.js
  15. 4
    8
      src/components/CreateReview/CreateReview.js
  16. 6
    0
      src/components/CreateReview/ThirdStep/ThirdStepCreateReview.js
  17. 0
    2
      src/components/DirectChat/DirectChat.js
  18. 2
    2
      src/components/DirectChat/DirectChatHeader/DirectChatHeader.js
  19. 3
    3
      src/components/ItemDetails/ItemDetailsHeaderCard/ItemDetailsHeaderCard.js
  20. 2
    0
      src/components/MarketPlace/Header/TooltipHeader/TooltipHeader.js
  21. 3
    1
      src/components/MarketPlace/Offers/Offers.js
  22. 1
    1
      src/components/MarketPlace/Offers/OffersList/OffersList.js
  23. 11
    4
      src/components/Profile/ProfileOffers/ProfileOffers.js
  24. 4
    5
      src/hooks/useOffers/useMyOffers.js
  25. 6
    1
      src/initialValues/createOfferInitialValues/secondPartCreateOfferInitialValues.js
  26. 4
    1
      src/pages/ItemDetailsPage/ItemDetailsPageMUI.js
  27. 3
    2
      src/request/apiEndpoints.js
  28. 5
    5
      src/request/index.js
  29. 13
    2
      src/request/offersRequest.js
  30. 2
    4
      src/store/middleware/accessTokensMiddleware.js
  31. 27
    7
      src/store/saga/offersSaga.js
  32. 1
    1
      src/store/saga/reviewSaga.js

+ 0
- 1
src/App.js 파일 보기

useEffect(() => { useEffect(() => {
socketInit(userId); socketInit(userId);
}, [userId]); }, [userId]);

return ( return (
<Router history={history}> <Router history={history}>
<Helmet> <Helmet>

+ 2
- 1
src/components/Cards/FilterCard/Choser/CategoryChoser/CategoryChoser.js 파일 보기



useEffect(() => { useEffect(() => {
if ( if (
!filters.category.selectedCategoryLocally ||
(filters.category.selectedCategoryLocally &&
!("_id" in filters.category.selectedCategoryLocally)) ||
(filters.category.selectedCategoryLocally?._id === 0 && !isOpened) (filters.category.selectedCategoryLocally?._id === 0 && !isOpened)
) { ) {
setIsOpened(false); setIsOpened(false);

+ 14
- 1
src/components/Cards/FilterCard/Choser/CompanyChoser/CompanyChoser.js 파일 보기



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


} }
}, [filters.companies.selectedCompaniesLocally]); }, [filters.companies.selectedCompaniesLocally]);


useEffect(() => {
if (appliedFilters) {
props?.offers?.apply();
setAppliedFilters(false);
}
}, [filters.companies.selectedCompaniesLocally]);

const handleSetItemsSelected = (items) => {
filters.companies.setSelectedCompanies(items);
setAppliedFilters(true);
};

return ( return (
<FilterSubDropdown <FilterSubDropdown
searchPlaceholder={t("filters.company.placeholder")} searchPlaceholder={t("filters.company.placeholder")}
handleOpen={() => setIsOpened((prevIsOpened) => !prevIsOpened)} handleOpen={() => setIsOpened((prevIsOpened) => !prevIsOpened)}
icon={<CompanyIcon />} icon={<CompanyIcon />}
title={t("filters.company.title")} title={t("filters.company.title")}
setItemsSelected={filters.companies.setSelectedCompanies}
setItemsSelected={handleSetItemsSelected}
companies companies
offers={props.offers} offers={props.offers}
/> />

+ 14
- 1
src/components/Cards/FilterCard/Choser/LocationChoser/LocationChoser.js 파일 보기



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


setIsOpened(true); setIsOpened(true);
} }
}, [filters.locations.selectedLocationsLocally]); }, [filters.locations.selectedLocationsLocally]);

useEffect(() => {
if (appliedFilters) {
props?.offers?.apply();
setAppliedFilters(false);
}
}, [appliedFilters]);

const handleSetItemsSelected = (items) => {
filters.locations.setSelectedLocations(items);
setAppliedFilters(true);
};
return ( return (
<FilterCheckboxDropdown <FilterCheckboxDropdown
searchPlaceholder={t("filters.location.placeholder")} searchPlaceholder={t("filters.location.placeholder")}
handleOpen={() => setIsOpened((prevIsOpened) => !prevIsOpened)} handleOpen={() => setIsOpened((prevIsOpened) => !prevIsOpened)}
icon={<LocationIcon />} icon={<LocationIcon />}
title={t("filters.location.title")} title={t("filters.location.title")}
setItemsSelected={filters.locations.setSelectedLocations}
setItemsSelected={handleSetItemsSelected}
offers={props.offers} offers={props.offers}
/> />
); );

+ 6
- 3
src/components/Cards/FilterCard/Choser/SubcategoryChoser/SubcategoryChoser.js 파일 보기

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

+ 3
- 2
src/components/Cards/FilterCard/FilterDropdown/Checkbox/CheckboxDropdownList/CheckboxDropdownList.js 파일 보기

const data = props.data; const data = props.data;
const [isOpened, setIsOpened] = useState(false); const [isOpened, setIsOpened] = useState(false);
const handleDelete = (item) => { const handleDelete = (item) => {
props.setItemsSelected([...props.filters.filter((p) => p !== item)]);
props.offers.applyFilters();
console.log(item);
console.log(props.filters)
props.setItemsSelected([...props.filters.filter((p) => p?._id !== item?._id)]);
}; };
const handleOpen = () => { const handleOpen = () => {
setIsOpened((prevState) => !prevState); setIsOpened((prevState) => !prevState);

+ 1
- 0
src/components/Cards/FilterCard/FilterDropdown/Checkbox/FilterSubDropdown/FilterSubDropdown.js 파일 보기

filters={props.filters} filters={props.filters}
icon={props.icon} icon={props.icon}
data={data} data={data}
offers={props?.offers}
searchPlaceholder={props.searchPlaceholder} searchPlaceholder={props.searchPlaceholder}
open={props?.open !== undefined ? props.open : isOpened} open={props?.open !== undefined ? props.open : isOpened}
handleOpen={handleOpen} handleOpen={handleOpen}

+ 4
- 1
src/components/Cards/FilterCard/FilterDropdown/Radio/FilterRadioDropdown.js 파일 보기

label={props.firstOption.label} label={props.firstOption.label}
// number={item.numberOfProducts} // number={item.numberOfProducts}
fullWidth fullWidth
checked={!props.selected || props.selected._id === 0}
checked={
(props?.selected && !("_id" in props?.selected)) ||
props?.selected?._id === 0
}
onChange={props.setSelected} onChange={props.setSelected}
/> />
</DropdownItem> </DropdownItem>

+ 9
- 4
src/components/Cards/ItemDetailsCard/ItemDetailsCard.js 파일 보기

const dispatch = useDispatch(); const dispatch = useDispatch();
const offer = useMemo(() => { const offer = useMemo(() => {
if (props.offer) { if (props.offer) {
if (props.offer._id === routeMatch.params?.offerId && !props?.createOffer) {
if (
props.offer._id === routeMatch.params?.offerId &&
!props?.createOffer
) {
return props.offer; return props.offer;
} }
if (props.createOffer) return props.offer.offer; if (props.createOffer) return props.offer.offer;
<DateButtonsContainer> <DateButtonsContainer>
{props.isMyOffer && ( {props.isMyOffer && (
<ButtonsContainer> <ButtonsContainer>
<PinIconContainer onClick={showPinOfferModalHandler}>
{offer?.pinned ? <UnpinIcon /> : <PinIcon />}
</PinIconContainer>
{props?.isAdmin && (
<PinIconContainer onClick={showPinOfferModalHandler}>
{offer?.pinned ? <UnpinIcon /> : <PinIcon />}
</PinIconContainer>
)}
<EditIconContainer onClick={showEditOfferModalHandler}> <EditIconContainer onClick={showEditOfferModalHandler}>
<EditIcon /> <EditIcon />
</EditIconContainer> </EditIconContainer>

+ 8
- 2
src/components/Cards/ItemDetailsCard/OfferDetails/OfferDetails.js 파일 보기

const [images, setImages] = useState([]); const [images, setImages] = useState([]);
const [imagesCarouselModal, setImagesCarouselModal] = useState(false); const [imagesCarouselModal, setImagesCarouselModal] = useState(false);



useEffect(() => { useEffect(() => {
if (props?.offer?.images) { if (props?.offer?.images) {
props.offer.images.map((file) => { props.offer.images.map((file) => {
} }
}); });
} }
return () => {
setImages([]);
};
}, [props?.offer?.images]); }, [props?.offer?.images]);
const date = formatDateLocale(new Date(offer?._created)); const date = formatDateLocale(new Date(offer?._created));
const onModalClose = () => { const onModalClose = () => {
</OfferInfoContainer> </OfferInfoContainer>
</Details> </Details>
{imagesCarouselModal && ( {imagesCarouselModal && (
<ImagesCarousel offer={props.offer} images={images} onModalClose={onModalClose} />
<ImagesCarousel
offer={props.offer}
images={images}
onModalClose={onModalClose}
/>
)} )}
</> </>
); );

+ 6
- 3
src/components/Cards/OfferCard/DeleteOffer/OfferDescription/OfferDescription.js 파일 보기

import { import {
CategoryIcon, CategoryIcon,
CategoryIconContainer, CategoryIconContainer,
OfferCategoryContainer,
OfferDescriptionCategory, OfferDescriptionCategory,
OfferDescriptionContainer, OfferDescriptionContainer,
OfferDescriptionTitle, OfferDescriptionTitle,
return ( return (
<OfferDescriptionContainer> <OfferDescriptionContainer>
<OfferDescriptionTitle>{props.offerName}</OfferDescriptionTitle> <OfferDescriptionTitle>{props.offerName}</OfferDescriptionTitle>
<OfferDescriptionCategory>
<OfferCategoryContainer>
<CategoryIconContainer <CategoryIconContainer
color={selectedTheme.colors.iconStrokeDisabledColor} color={selectedTheme.colors.iconStrokeDisabledColor}
component="span" component="span"
> >
<CategoryIcon /> <CategoryIcon />
</CategoryIconContainer> </CategoryIconContainer>
{props.categoryName}
</OfferDescriptionCategory>
<OfferDescriptionCategory>
{props.categoryName}
</OfferDescriptionCategory>
</OfferCategoryContainer>
</OfferDescriptionContainer> </OfferDescriptionContainer>
); );
}; };

+ 7
- 1
src/components/Cards/OfferCard/DeleteOffer/OfferDescription/OfferDescription.styled.js 파일 보기

font-family: ${selectedTheme.fonts.textFont}; font-family: ${selectedTheme.fonts.textFont};
color: ${selectedTheme.colors.primaryDarkText}; color: ${selectedTheme.colors.primaryDarkText};
`; `;
export const OfferCategoryContainer = styled(Box)`
display: flex;
flex-direction: row;
white-space: nowrap;
`


export const CategoryIconContainer = styled(Icon)` export const CategoryIconContainer = styled(Icon)`
margin-right: 4px; margin-right: 4px;
position: relative; position: relative;
top: 2px; top: 2px;
display: inline;
& svg { & svg {
width: 14px; width: 14px;
position: relative; position: relative;
top: -6px;
top: -4px;
} }
`; `;
export const CategoryIcon = styled(Category)``; export const CategoryIcon = styled(Category)``;

+ 7
- 4
src/components/Cards/OfferCard/OfferCard.js 파일 보기

}) })
); );
} else { } else {
history.push(
replaceInRoute(ITEM_DETAILS_PAGE, {
history.push({
pathname: replaceInRoute(ITEM_DETAILS_PAGE, {
offerId: itemId, offerId: itemId,
})
);
}),
state: {
view: true,
},
});
} }
} }
}; };

+ 6
- 2
src/components/Cards/ProfileCard/ProfileControl/ProfileControl.js 파일 보기

); );
}; };
const handleEditProfile = () => { const handleEditProfile = () => {
if (!props.profile?._blocked) {
console.log("edit")
console.log(props)
if (!props.profile?._blocked || props?.isAdmin) {
console.log("edit2")
dispatch( dispatch(
toggleEditProfileModal({ toggleEditProfileModal({
userId: props.profile._id, userId: props.profile._id,
); );
} }
}; };
console.log(props)
return ( return (
<ButtonsContainer> <ButtonsContainer>
{props.profile?._blocked && !props.isMobile && <BlockedProfile />}
{props.profile?._blocked && !props.isMobile && !props?.isAdmin && <BlockedProfile />}
{props.isAdmin && ( {props.isAdmin && (
<> <>
{props.profile?._blocked ? ( {props.profile?._blocked ? (

+ 4
- 8
src/components/CreateReview/CreateReview.js 파일 보기

import FirstStepCreateReview from "./FirstStep/FirstStepCreateReview"; import FirstStepCreateReview from "./FirstStep/FirstStepCreateReview";
import SecondStepCreateReview from "./SecondStep/SecondStepCreateReview"; import SecondStepCreateReview from "./SecondStep/SecondStepCreateReview";
import ThirdStepCreateReview from "./ThirdStep/ThirdStepCreateReview"; import ThirdStepCreateReview from "./ThirdStep/ThirdStepCreateReview";
import { useDispatch, useSelector } from "react-redux";
import { useDispatch } from "react-redux";
import { giveReview } from "../../store/actions/review/reviewActions"; import { giveReview } from "../../store/actions/review/reviewActions";
import { selectUserId } from "../../store/selectors/loginSelectors";
import { reviewEnum } from "../../enums/reviewEnum"; import { reviewEnum } from "../../enums/reviewEnum";
import { fetchExchange } from "../../store/actions/exchange/exchangeActions"; import { fetchExchange } from "../../store/actions/exchange/exchangeActions";
import { closeModal } from "../../store/actions/modal/modalActions"; import { closeModal } from "../../store/actions/modal/modalActions";
const [informations, setInformations] = useState({}); const [informations, setInformations] = useState({});
const [currentStep, setCurrentStep] = useState(1); const [currentStep, setCurrentStep] = useState(1);
const dispatch = useDispatch(); const dispatch = useDispatch();
const userId = useSelector(selectUserId);
const closeModalHandler = () => { const closeModalHandler = () => {
dispatch(closeModal()); dispatch(closeModal());
}; };
setTimeout(() => {
dispatch(closeModal());
}, 3000);
const handleApiResponseSuccess = () => { const handleApiResponseSuccess = () => {
dispatch(fetchExchange(props.exchange._id)); dispatch(fetchExchange(props.exchange._id));
}; };
dispatch( dispatch(
giveReview({ giveReview({
review: { review: {
exchangeId: props.exchange._id,
userId: userId,
exchange: {
_id: props.exchange._id,
},
succeeded, succeeded,
communication, communication,
message: informations.comment, message: informations.comment,

+ 6
- 0
src/components/CreateReview/ThirdStep/ThirdStepCreateReview.js 파일 보기

ThirdStepCreateReviewContainer, ThirdStepCreateReviewContainer,
} from "./ThirdStepCreateReview.styled"; } from "./ThirdStepCreateReview.styled";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useDispatch } from "react-redux";
import { closeModal } from "../../../store/actions/modal/modalActions";


const ThirdStepCreateReview = () => { const ThirdStepCreateReview = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const dispatch = useDispatch();
setTimeout(() => {
dispatch(closeModal());
}, 3000);
return ( return (
<ThirdStepCreateReviewContainer> <ThirdStepCreateReviewContainer>
<LogoImage /> <LogoImage />

+ 0
- 2
src/components/DirectChat/DirectChat.js 파일 보기

}; };
const handleAcceptExchangeSuccess = () => { const handleAcceptExchangeSuccess = () => {
let interlocutor = userId === chat?.participants[0]._id ? 1 : 0; let interlocutor = userId === chat?.participants[0]._id ? 1 : 0;
console.log("accept salje i prima 3 POZVANA RESPONSE FUNKCIJA")
acceptExchangeSocket( acceptExchangeSocket(
chat?._id, chat?._id,
userId, userId,
chat?.participants[interlocutor]._id, chat?.participants[interlocutor]._id,
() => { () => {
console.log("accept salje i prima 4 SOCKET FUNKCIJA")
dispatch( dispatch(
addNewMessage({ addNewMessage({
_id: chat?._id, _id: chat?._id,

+ 2
- 2
src/components/DirectChat/DirectChatHeader/DirectChatHeader.js 파일 보기



const isDisabledReviews = useMemo(() => { const isDisabledReviews = useMemo(() => {
if (!exchange.valid) return true; if (!exchange.valid) return true;
if (exchange.seller?.userId === userId && exchange.seller?.givenReview)
if (exchange.seller?.user._id === userId && exchange.seller?.givenReview)
return true; return true;
if (exchange.buyer?.userId === userId && exchange.buyer?.givenReview)
if (exchange.buyer?.user._id === userId && exchange.buyer?.givenReview)
return true; return true;
return false; return false;
}, [exchange, userId]); }, [exchange, userId]);

+ 3
- 3
src/components/ItemDetails/ItemDetailsHeaderCard/ItemDetailsHeaderCard.js 파일 보기

}; };
const messageUser = (offer) => { const messageUser = (offer) => {
const chatItem = chats.find( const chatItem = chats.find(
(item) => item.chat.offerId === offer?._id
(item) => item.offer._id === offer?._id
); );
if (chatItem !== undefined) { if (chatItem !== undefined) {
history.push(DIRECT_CHAT_PAGE, { history.push(DIRECT_CHAT_PAGE, {
chatId: chatItem.chat._id
chatId: chatItem._id
}); });
} else { } else {
if (offer?.userId !== userId) {
if (offer?.user?._id !== userId) {
history.push(`/messages/newMessage`, { history.push(`/messages/newMessage`, {
offerId: offer?._id, offerId: offer?._id,
}); });

+ 2
- 0
src/components/MarketPlace/Header/TooltipHeader/TooltipHeader.js 파일 보기

const handleClickCategory = () => { const handleClickCategory = () => {
props?.offers?.filters?.locations.clear(); props?.offers?.filters?.locations.clear();
props?.offers?.filters?.subcategory.clear(); props?.offers?.filters?.subcategory.clear();
props?.offers?.filters?.companies?.clear();
props?.offers?.applyFilters(); props?.offers?.applyFilters();
}; };
const handleClickSubcategory = () => { const handleClickSubcategory = () => {
props?.offers?.filters?.locations.clear(); props?.offers?.filters?.locations.clear();
props?.offers?.filters?.companies?.clear();
props?.offers?.applyFilters(); props?.offers?.applyFilters();
}; };
const goBack = () => { const goBack = () => {

+ 3
- 1
src/components/MarketPlace/Offers/Offers.js 파일 보기

const Offers = (props) => { const Offers = (props) => {
const offers = props?.offers; const offers = props?.offers;
const arrayForMapping = Array.apply(null, Array(4)).map(() => {}); const arrayForMapping = Array.apply(null, Array(4)).map(() => {});
console.log("rerender")

return ( return (
<> <>
<OffersFilterButton /> <OffersFilterButton />
<OffersSearchField /> <OffersSearchField />
<OffersNotFound />
<OffersNotFound skeleton={props?.skeleton} />
<OffersList <OffersList
loading={props?.skeleton} loading={props?.skeleton}
offers={offers} offers={offers}

+ 1
- 1
src/components/MarketPlace/Offers/OffersList/OffersList.js 파일 보기

offer={item} offer={item}
halfwidth={props?.isGrid} halfwidth={props?.isGrid}
messageUser={messageOneUser} messageUser={messageOneUser}
isMyOffer={item?.userId === userId || props?.isAdmin}
isMyOffer={item?.user._id === userId || props?.isAdmin}
isAdmin={props?.isAdmin} isAdmin={props?.isAdmin}
/> />
); );

+ 11
- 4
src/components/Profile/ProfileOffers/ProfileOffers.js 파일 보기

const dispatch = useDispatch(); const dispatch = useDispatch();
const searchRef = useRef(null); const searchRef = useRef(null);


useEffect(() => {
return () => {
dispatch(setProfileOffers([]));
};
}, []);

useEffect(() => { useEffect(() => {
dispatch( dispatch(
fetchProfileOffers({ fetchProfileOffers({
sortOption: sortOption, sortOption: sortOption,
append: isMobile && append, append: isMobile && append,
page: paging.currentPage, page: paging.currentPage,
isAdmin: props?.isAdmin,
}) })
); );
setAppend(true); setAppend(true);
<ProfileOffersHeaderSkeleton /> <ProfileOffersHeaderSkeleton />
{isMobile ? ( {isMobile ? (
<SkeletonContainer> <SkeletonContainer>
<SkeletonOfferCard vertical />
<SkeletonOfferCard vertical />
<SkeletonOfferCard vertical />
<SkeletonOfferCard vertical skeleton />
<SkeletonOfferCard vertical skeleton />
<SkeletonOfferCard vertical skeleton />
</SkeletonContainer> </SkeletonContainer>
) : ( ) : (
<> <>
{arrayForMapping.map((item, index) => ( {arrayForMapping.map((item, index) => (
<SkeletonOfferCard key={index} />
<SkeletonOfferCard key={index} skeleton />
))} ))}
</> </>
)} )}

+ 4
- 5
src/hooks/useOffers/useMyOffers.js 파일 보기

import useSorting from "./useSorting"; import useSorting from "./useSorting";


const useMyOffers = () => { const useMyOffers = () => {
const applyFilters = () => {
paging.changePage(1);
setAppliedFilters(false);
};
const filters = useFilters(true); const filters = useFilters(true);
const sorting = useSorting(); const sorting = useSorting();
const mineOffers = useSelector(selectMineOffers); const mineOffers = useSelector(selectMineOffers);
setAppliedFilters(false); setAppliedFilters(false);
} }


const applyFilters = () => {
paging.changePage(1);
setAppliedFilters(false);
};

// Filter, search and sort all mine offers // Filter, search and sort all mine offers
const allOffersToShow = useMemo(() => { const allOffersToShow = useMemo(() => {
let mineOffersFiltered = [...mineOffers]; let mineOffersFiltered = [...mineOffers];

+ 6
- 1
src/initialValues/createOfferInitialValues/secondPartCreateOfferInitialValues.js 파일 보기

export default (informations, offer, images) => ({ export default (informations, offer, images) => ({
images: informations?.image || offer?.images || images, images: informations?.image || offer?.images || images,
condition: informations?.condition || offer?.condition || "default",
condition:
informations?.condition ||
(typeof offer?.condition === "string" &&
offer?.condition?.charAt(0)?.toUpperCase() +
offer?.condition?.slice(1)) ||
"default",
}); });

+ 4
- 1
src/pages/ItemDetailsPage/ItemDetailsPageMUI.js 파일 보기

import UserReviews from "../../components/UserReviews/UserReviews"; import UserReviews from "../../components/UserReviews/UserReviews";
import { selectOffer } from "../../store/selectors/offersSelectors"; import { selectOffer } from "../../store/selectors/offersSelectors";
import ProfileMini from "../../components/ProfileMini/ProfileMini"; import ProfileMini from "../../components/ProfileMini/ProfileMini";
import history from "../../store/utils/history";


const ItemDetailsPage = (props) => { const ItemDetailsPage = (props) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const offerId = props.match.params.offerId; const offerId = props.match.params.offerId;


useEffect(() => { useEffect(() => {
dispatch(fetchOneOffer(offerId));
const view = history?.location?.state?.view;
console.log(view)
dispatch(fetchOneOffer({ offerId, view }));
() => dispatch(clearSelectedOffer()); () => dispatch(clearSelectedOffer());
}, []); }, []);



+ 3
- 2
src/request/apiEndpoints.js 파일 보기

setFingerprint: "/affiliate/fingerprint", setFingerprint: "/affiliate/fingerprint",
}, },
offers: { offers: {
getOneOffer: "offers",
getOneOffer: "offers/{offerId}",
getOffers: "offers", getOffers: "offers",
getFeaturedOffers: "offers/featured", getFeaturedOffers: "offers/featured",
addOffer: "/users/{userId}/offers", addOffer: "/users/{userId}/offers",
locations: "locations", locations: "locations",
mineOffers: "users", mineOffers: "users",
profileOffers: "users/{userId}/offers", profileOffers: "users/{userId}/offers",
profileOffersAsAdmin: "admin/users/{userId}/offers",
removeOffer: "/users/{userId}/offers/{offerId}", removeOffer: "/users/{userId}/offers/{offerId}",
removeOfferAsAdmin: "/admin/offers/{offerId}", removeOfferAsAdmin: "/admin/offers/{offerId}",
pinOffer: "admin/offers/{id}/pin", pinOffer: "admin/offers/{id}/pin",
exchange: { exchange: {
getExchange: "exchanges", getExchange: "exchanges",
validateExchange: "exchanges", validateExchange: "exchanges",
acceptExchange: "users/{userId}/exchanges/{exchangeId}/accept"
acceptExchange: "users/{userId}/exchanges/{exchangeId}/accept",
}, },
reviews: { reviews: {
getUserReviews: "/users/{userId}/reviews", getUserReviews: "/users/{userId}/reviews",

+ 5
- 5
src/request/index.js 파일 보기

import axios from "axios"; import axios from "axios";
import queryString from "qs";
// import queryString from "qs";


const request = axios.create({ const request = axios.create({
// baseURL: "http://192.168.88.150:3001/", // DJOLE // baseURL: "http://192.168.88.150:3001/", // DJOLE
// baseURL: "http://192.168.88.175:3005/", // baseURL: "http://192.168.88.175:3005/",
// baseURL: "http://192.168.88.143:3001/", // DULE // baseURL: "http://192.168.88.143:3001/", // DULE
// baseURL: "https://trampa-api.dilig.net/", // baseURL: "https://trampa-api.dilig.net/",
// baseURL: "https://trampa-api-test.dilig.net/",
baseURL: "http://localhost:3001/",
baseURL: "https://trampa-api-test.dilig.net/",
// baseURL: "http://localhost:3001/",
// baseURL: process.env.REACT_APP_BASE_API_URL, // baseURL: process.env.REACT_APP_BASE_API_URL,
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
// withCredentials: true, // withCredentials: true,
paramsSerializer: (params) =>
queryString.stringify(params, { arrayFormat: "comma" }),
// paramsSerializer: (params) =>
// queryString.stringify(params, { arrayFormat: "comma" }),
}); });


export const getRequest = (url, params = null, options = null) => { export const getRequest = (url, params = null, options = null) => {

+ 13
- 2
src/request/offersRequest.js 파일 보기

return getRequest(apiEndpoints.offers.getOffers); return getRequest(apiEndpoints.offers.getOffers);
}; };
export const attemptFetchOneOffer = (payload) => { export const attemptFetchOneOffer = (payload) => {
const url = `${apiEndpoints.offers.getOneOffer}/${payload}`;
return getRequest(url);
return getRequest(
replaceInUrl(apiEndpoints.offers.getOneOffer, {
offerId: payload.offerId,
}),
payload.queryObject
);
}; };
export const attemptFetchMoreOffers = (page, payload) => { export const attemptFetchMoreOffers = (page, payload) => {
if (payload) if (payload)
}) + `?${queryString}` }) + `?${queryString}`
); );
}; };
export const attemptFetchProfileOffersAsAdmin = (userId, queryString = "") => {
return getRequest(
replaceInUrl(apiEndpoints.offers.profileOffersAsAdmin, {
userId: userId,
}) + `?${queryString}`
);
};
export const attemptRemoveOffer = (payload, offerId) => { export const attemptRemoveOffer = (payload, offerId) => {
return deleteRequest( return deleteRequest(
replaceInUrl(apiEndpoints.offers.removeOffer, { replaceInUrl(apiEndpoints.offers.removeOffer, {

+ 2
- 4
src/store/middleware/accessTokensMiddleware.js 파일 보기

// const baseURL = "http://192.168.88.143:3001/"; // DULE // const baseURL = "http://192.168.88.143:3001/"; // DULE
// const baseURL = "http://192.168.88.175:3005/"; // const baseURL = "http://192.168.88.175:3005/";
// const baseURL = "https://trampa-api.dilig.net/"; // const baseURL = "https://trampa-api.dilig.net/";
// const baseURL = "https://trampa-api-test.dilig.net/";
const baseURL = "https://trampa-api-test.dilig.net/";
// const baseURL = "http://192.168.88.150:3001/"; // DJOLE // const baseURL = "http://192.168.88.150:3001/"; // DJOLE
const baseURL = "http://localhost:3001/";
// const baseURL = "http://localhost:3001/";
// const baseURL = process.env.REACT_APP_BASE_API_URL // const baseURL = process.env.REACT_APP_BASE_API_URL


//Interceptor unique name //Interceptor unique name
} }


// If refresh token is expired, log out user // If refresh token is expired, log out user
console.log(new Date(refreshTokenDecoded?.exp * 1000))
console.log(new Date())
if (new Date() > new Date(refreshTokenDecoded?.exp * 1000)) { if (new Date() > new Date(refreshTokenDecoded?.exp * 1000)) {
dispatch(logoutUser()); dispatch(logoutUser());
return Promise.resolve(response) return Promise.resolve(response)

+ 27
- 7
src/store/saga/offersSaga.js 파일 보기

attemptFetchFeaturedOffers, attemptFetchFeaturedOffers,
attemptFetchOffers, attemptFetchOffers,
attemptFetchOneOffer, attemptFetchOneOffer,
attemptFetchProfileOffersAsAdmin,
attemptPinOffer, attemptPinOffer,
attemptRemoveOffer, attemptRemoveOffer,
attemptRemoveOfferAsAdmin, attemptRemoveOfferAsAdmin,


function* fetchOneOffer(payload) { function* fetchOneOffer(payload) {
try { try {
const data = yield call(attemptFetchOneOffer, payload.payload);
let offerId = payload.payload;
console.log("sagabb", payload.payload);
const queryObject = new URLSearchParams();
if (typeof payload.payload === "object") {
offerId = payload.payload.offerId;
queryObject.set("view", "true");
}
const data = yield call(attemptFetchOneOffer, {
offerId,
queryObject,
});
if (!data?.data) throw new Error(); if (!data?.data) throw new Error();
yield put(fetchOneOfferSuccess(data?.data)); yield put(fetchOneOfferSuccess(data?.data));
} catch (e) { } catch (e) {
queryString = yield select(selectQueryString); queryString = yield select(selectQueryString);
} }
console.log(queryString.toString()); console.log(queryString.toString());
const data = yield call(
attemptFetchProfileOffers,
userId,
convertQueryStringForBackend(queryString)
);
let data;
if (payload.payload.isAdmin) {
data = yield call(
attemptFetchProfileOffersAsAdmin,
userId,
convertQueryStringForBackend(queryString)
);
} else {
data = yield call(
attemptFetchProfileOffers,
userId,
convertQueryStringForBackend(queryString)
);
}
if (payload.payload.append) { if (payload.payload.append) {
yield put(addProfileOffers(data.data.offers)); yield put(addProfileOffers(data.data.offers));
} else { } else {
const offerData = payload.payload.offerData; const offerData = payload.payload.offerData;
const formData = new FormData(); const formData = new FormData();
formData.append("category[name]", offerData.category.name); formData.append("category[name]", offerData.category.name);
formData.append("condition", offerData.condition);
formData.append("condition", offerData.condition.toLowerCase());
formData.append("description", offerData.description); formData.append("description", offerData.description);
// const oldImages = []; // const oldImages = [];
for (var i = 0; i < offerData.images.length; i++) { for (var i = 0; i < offerData.images.length; i++) {

+ 1
- 1
src/store/saga/reviewSaga.js 파일 보기

try { try {
console.log(payload); 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.reviews].reverse()));
yield put(fetchReviewsSuccess()); yield put(fetchReviewsSuccess());
} catch (e) { } catch (e) {
yield put(fetchReviewsError()); yield put(fetchReviewsError());

Loading…
취소
저장