diff --git a/jam-ui/src/components/jamtracks/JKJamTracksFilter.js b/jam-ui/src/components/jamtracks/JKJamTracksFilter.js
index f1985bdc4..587b7dc98 100644
--- a/jam-ui/src/components/jamtracks/JKJamTracksFilter.js
+++ b/jam-ui/src/components/jamtracks/JKJamTracksFilter.js
@@ -4,9 +4,9 @@ import { Card, CardBody, Row, Col } from 'reactstrap';
import FalconCardHeader from '../common/FalconCardHeader';
import { useTranslation } from 'react-i18next';
import JKJamTracksAutoComplete from './JKJamTracksAutoComplete';
-import { getJamTracks, getJamTrackArtists, autocompleteJamTracks } from '../../helpers/rest';
-import JKJamTrackArtists from './JKJamTrackArtists';
+import { getJamTracks, autocompleteJamTracks } from '../../helpers/rest';
import JKJamTracksList from './JKJamTracksList';
+import JKJamTracksSlider from './JKJamTracksSlider';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { useShoppingCart } from '../../hooks/useShoppingCart';
import { useResponsive } from '@farfetch/react-context-responsive';
@@ -14,22 +14,17 @@ import { useResponsive } from '@farfetch/react-context-responsive';
const JKJamTracksFilter = () => {
const { t } = useTranslation('jamtracks');
const [jamTracks, setJamTracks] = useState([]);
- //const [artists, setArtists] = useState([]);
const [selected, setSelected] = useState(null);
const [searchTerm, setSearchTerm] = useState('');
const [showDropdown, setShowDropdown] = useState(false);
- //const [showArtists, setShowArtists] = useState(false);
const [nextOffset, setNextOffset] = useState(null);
+ const [totalJamTracks, setTotalJamTracks] = useState(0);
const [autoCompleteInputValue, setAutoCompleteInputValue] = useState('');
const [page, setPage] = useState(1);
const PER_PAGE = 10;
const { shoppingCart } = useShoppingCart();
const { greaterThan } = useResponsive();
- // useEffect(() => {
- // setCartItems(shoppingCart);
- // }, []);
-
useEffect(() => {
if (selected) {
setSearchTerm(selected.type === 'artist' ? selected.original_artist : selected.name);
@@ -58,10 +53,8 @@ const JKJamTracksFilter = () => {
const handleOnSelect = async selected => {
setPage(1);
- //setArtists([]);
setJamTracks([]);
setSearchTerm('');
- //setShowArtists(false);
setSelected(selected);
const params = queryOptions(selected);
await fetchJamTracks(params);
@@ -69,28 +62,13 @@ const JKJamTracksFilter = () => {
const handleOnEnter = async queryStr => {
setPage(1);
- //setArtists([]);
setJamTracks([]);
setSelected(x => null);
setSearchTerm(queryStr);
- //setShowArtists(false);
- //fetchArtists(queryStr);
const params = queryOptions(queryStr);
- console.log('handleOnEnter _params', params, selected);
await fetchJamTracks(params);
};
- // const handleOnSelectArtist = async artist => {
- // setPage(1);
- // const selectedOpt = {
- // type: 'artist',
- // original_artist: artist.original_artist
- // };
- // setShowDropdown(false);
- // setAutoCompleteInputValue('');
- // await handleOnSelect(selectedOpt);
- // };
-
const handleOnNextJamTracksPage = async () => {
const currentQuery = selected ? selected : searchTerm;
const params = queryOptions(currentQuery);
@@ -101,35 +79,16 @@ const JKJamTracksFilter = () => {
try {
const resp = await getJamTracks(options);
const data = await resp.json();
- console.log('jamtracks', data);
+ //console.log('jamtracks', data);
setJamTracks(prev => [...prev, ...data.jamtracks]);
setNextOffset(data.next);
+ setTotalJamTracks(data.count);
setPage(page + 1);
} catch (error) {
console.error('error', error);
}
};
- // const fetchArtists = query => {
- // const options = {
- // limit: 100
- // };
- // options.artist_search = query;
-
- // getJamTrackArtists(options)
- // .then(resp => {
- // return resp.json();
- // })
- // .then(data => {
- // console.log('artists', data);
- // setArtists(data.artists);
- // setShowArtists(true);
- // })
- // .catch(error => {
- // console.error('error', error);
- // });
- // };
-
return (
@@ -139,6 +98,7 @@ const JKJamTracksFilter = () => {
)}
+
{
{greaterThan.sm && (
-
+
)}
-
- {/*
-
+ {selected?.type && searchTerm.length && jamTracks.length > 0 ? (
+
+
+
+ {t('search.search_results.for_selection')} {selected?.type} "{searchTerm}"
+
+
+
+ ) : (
+ searchTerm.length > 0 &&
+ jamTracks.length > 0 && (
+
+
+ {t('search.search_results.for_search_term')} "{searchTerm}"
+
+
+ )
+ )}
+ >
+ {greaterThan.sm ? (
+
-
*/}
-
+ ) : (
+
+
+
+
+
+ )
+ }
+
);
diff --git a/jam-ui/src/components/jamtracks/JKJamTracksList.js b/jam-ui/src/components/jamtracks/JKJamTracksList.js
index c83fce326..d8aae74c6 100644
--- a/jam-ui/src/components/jamtracks/JKJamTracksList.js
+++ b/jam-ui/src/components/jamtracks/JKJamTracksList.js
@@ -5,29 +5,12 @@ import JKJamTrackPurchaseButton from './JKJamTrackPurchaseButton';
import { JamTrackPreviewProvider } from '../../context/JamTrackPreviewContext';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
+import JKJamTrackItem from './JKJamTrackItem';
const JKJamTracksList = ({ selectedType, searchTerm, jamTracks, nextOffset, onNextPage }) => {
const { t } = useTranslation('jamtracks');
return (
<>
- {selectedType && searchTerm.length && jamTracks.length > 0 ? (
-
-
-
- {t('search.search_results.for_selection')} {selectedType} "{searchTerm}"
-
-
-
- ) : (
- searchTerm.length > 0 &&
- jamTracks.length > 0 && (
-
-
- {t('search.search_results.for_search_term')} "{searchTerm}"
-
-
- )
- )}
{jamTracks.length > 0 && (
@@ -40,22 +23,9 @@ const JKJamTracksList = ({ selectedType, searchTerm, jamTracks, nextOffset, onNe
-
- {jamTracks.map((jamTrack, index) => (
-
-
- {jamTrack.name}
- by {jamTrack.original_artist}
- |
-
-
- |
-
-
- |
-
- ))}
-
+ {jamTracks.map((jamTrack, index) => (
+
+ ))}
@@ -65,7 +35,7 @@ const JKJamTracksList = ({ selectedType, searchTerm, jamTracks, nextOffset, onNe
@@ -87,7 +57,7 @@ JKJamTracksList.defaultProps = {
searchTerm: '',
jamTracks: [],
nextOffset: null,
- onNextPage: () => {}
+ onNextPage: () => { }
};
export default JKJamTracksList;
diff --git a/jam-ui/src/components/jamtracks/JKJamTracksSlider.js b/jam-ui/src/components/jamtracks/JKJamTracksSlider.js
new file mode 100644
index 000000000..d79099208
--- /dev/null
+++ b/jam-ui/src/components/jamtracks/JKJamTracksSlider.js
@@ -0,0 +1,78 @@
+import React from 'react'
+import PropTypes from 'prop-types'
+
+//import Swiper core and required modules
+import SwiperCore, { Navigation, Pagination, Scrollbar, A11y } from 'swiper'
+
+//import Swiper React components
+import { Swiper, SwiperSlide } from 'swiper/react'
+
+//import Swiper styles
+import 'swiper/swiper.scss'
+import 'swiper/components/navigation/navigation.scss'
+import 'swiper/components/pagination/pagination.scss'
+import 'swiper/components/scrollbar/scrollbar.scss'
+
+import { Card, CardBody, CardHeader } from 'reactstrap'
+import JKJamTrackItem from './JKJamTrackItem'
+
+SwiperCore.use([Navigation, Pagination, Scrollbar, A11y])
+
+const JKJamTracksSlider = ({ jamTracks, onNextPage, totalJamTracks }) => {
+ const [index, setIndex] = React.useState(1)
+ return (
+ <>
+ setIndex(index + 1)}
+ onSlideNextTransitionEnd={swiper => {
+ if (swiper.isEnd) {
+ onNextPage()
+ }
+ }}
+ pagination={{
+ clickable: true,
+ type: 'custom'
+ }}
+ navigation={{
+ nextEl: '.swiper-button-next',
+ prevEl: '.swiper-button-prev'
+ }}
+ >
+ {jamTracks && jamTracks.map((jamTrack) => (
+
+
+
+ JamTrack
+
+
+
+
+
+
+ ))}
+
+
+
+ {totalJamTracks > 0 && (
+
+ JamTrack {index} of {totalJamTracks}
+
+ )}
+
+
+
+
+ >
+ )
+}
+
+JKJamTracksSlider.propTypes = {
+ jamTracks: PropTypes.arrayOf(PropTypes.instanceOf(Object)).isRequired,
+ onNextPage: PropTypes.func.isRequired,
+ totalJamTracks: PropTypes.number.isRequired
+}
+
+export default JKJamTracksSlider
\ No newline at end of file
diff --git a/jam-ui/src/components/page/JKPeopleSwiper.js b/jam-ui/src/components/page/JKPeopleSwiper.js
index 566eb5908..42e0661f1 100644
--- a/jam-ui/src/components/page/JKPeopleSwiper.js
+++ b/jam-ui/src/components/page/JKPeopleSwiper.js
@@ -68,7 +68,7 @@ const JKPeopleSwiper = ({ people, goNextPage }) => {
};
JKPeopleSwiper.propTypes = {
- people: PropTypes.arrayOf(PropTypes.instanceOf(Object)),
+ people: PropTypes.arrayOf(PropTypes.instanceOf(Object)).isRequired,
goNextPage: PropTypes.func
};
diff --git a/jam-ui/src/components/shopping-cart/JKCheckout.js b/jam-ui/src/components/shopping-cart/JKCheckout.js
index c54046a9f..3212ee448 100644
--- a/jam-ui/src/components/shopping-cart/JKCheckout.js
+++ b/jam-ui/src/components/shopping-cart/JKCheckout.js
@@ -115,7 +115,7 @@ const JKCheckout = () => {
try {
const userResp = await getUserDetail(options);
const userData = await userResp.json();
- console.log('User Data:', userData);
+ //console.log('User Data:', userData);
setHasRedeemableJamTrack(userData.has_redeemable_jamtrack);
if (userData.has_recurly_account) {
@@ -162,7 +162,7 @@ const JKCheckout = () => {
}, [paymentMethod]);
const onSubmit = async data => {
- console.log('Form Data:', data);
+ //console.log('Form Data:', data);
if (paymentMethod === 'credit-card' || paymentMethod === 'existing-card') {
constructRecurlyAccount(data);
} else if (paymentMethod === 'paypal') {
@@ -171,7 +171,7 @@ const JKCheckout = () => {
};
const constructRecurlyAccount = async data => {
- console.log('Form Data:', data);
+ //console.log('Form Data:', data);
if (paymentMethod === 'credit-card' && !isValidateCard(data)) {
return;
@@ -216,7 +216,7 @@ const JKCheckout = () => {
try {
const orderResp = await placeOrder();
const orderData = await orderResp.json();
- console.log('Order Data:', orderData);
+ //console.log('Order Data:', orderData);
localStorage.setItem('lastPurchaseResponse', JSON.stringify(orderData));
deletePreserveBillingInfo();
history.push('/checkout/success');
@@ -238,12 +238,12 @@ const JKCheckout = () => {
if (!isValid(cardNumber)) {
_isValid = false;
- console.log('Invalid Card Number');
+ //console.log('Invalid Card Number');
setError('number', { type: 'manual', message: 'Invalid Card Number' }, { shouldFocus: false });
}
if (!isExpirationDateValid(data.month, data.year)) {
_isValid = false;
- console.log('Invalid Expiration Date');
+ //console.log('Invalid Expiration Date');
setError('month', { type: 'manual', message: 'Invalid Expiration Date' }, { shouldFocus: false });
setError('year', { type: 'manual', message: 'Invalid Expiration Date' }, { shouldFocus: false });
}
@@ -274,7 +274,7 @@ const JKCheckout = () => {
const handleOnCardNumberChange = e => {
const cardNumber = e.target.value;
- console.log('Formatted Card Number:', formatCardNumber(cardNumber));
+ //console.log('Formatted Card Number:', formatCardNumber(cardNumber));
setCardNumber(formatCardNumber(cardNumber));
};
diff --git a/jam-ui/src/hooks/useShoppingCart.js b/jam-ui/src/hooks/useShoppingCart.js
index 7dfb5a1c8..3654ccbdb 100644
--- a/jam-ui/src/hooks/useShoppingCart.js
+++ b/jam-ui/src/hooks/useShoppingCart.js
@@ -13,6 +13,9 @@ export const useShoppingCart = () => {
const cartTotal = useMemo(() => {
//calculate total price
+ if(shoppingCart.length === 0){
+ return 0.00;
+ }
const totalPrice = shoppingCart.reduce((acc, item) => acc + parseFloat(item.product_info.total_price), 0.00);
return totalPrice;
}, [shoppingCart]);