add jamtrack and artist landing pages
This commit is contained in:
parent
46111f041d
commit
3677181e09
|
|
@ -32,7 +32,7 @@ describe('JamTracks Page', () => {
|
||||||
cy.get('input[type="search"]').type('ba');
|
cy.get('input[type="search"]').type('ba');
|
||||||
cy.wait('@getMyJamTracks_page1');
|
cy.wait('@getMyJamTracks_page1');
|
||||||
cy.get('[data-testid=myJamTrackList] a').first().click();
|
cy.get('[data-testid=myJamTrackList] a').first().click();
|
||||||
cy.url().should('include', '/jamtracks/1');
|
cy.url().should('include', '/jamtrack/1');
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,11 @@ import { Card, CardBody } from 'reactstrap';
|
||||||
import FalconCardHeader from '../common/FalconCardHeader';
|
import FalconCardHeader from '../common/FalconCardHeader';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import JKJamTracksAutoComplete from '../jamtracks/JKJamTracksAutoComplete';
|
import JKJamTracksAutoComplete from '../jamtracks/JKJamTracksAutoComplete';
|
||||||
import { getJamTracks, getAffiliatePartnerData, autocompleteJamTracks } from '../../helpers/rest';
|
import { getJamTracks, getJamTrackArtists, getAffiliatePartnerData, autocompleteJamTracks } from '../../helpers/rest';
|
||||||
import { useAuth } from '../../context/UserAuth';
|
import { useAuth } from '../../context/UserAuth';
|
||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
import { useResponsive } from '@farfetch/react-context-responsive';
|
import { useResponsive } from '@farfetch/react-context-responsive';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
|
||||||
const JKAffiliateLinks = () => {
|
const JKAffiliateLinks = () => {
|
||||||
const { t } = useTranslation('affiliate');
|
const { t } = useTranslation('affiliate');
|
||||||
|
|
@ -16,6 +17,7 @@ const JKAffiliateLinks = () => {
|
||||||
const [affiliatePartnerId, setAffiliatePartnerId] = useState('xxxxx');
|
const [affiliatePartnerId, setAffiliatePartnerId] = useState('xxxxx');
|
||||||
const [affiliate, setAffiliate] = useState(null);
|
const [affiliate, setAffiliate] = useState(null);
|
||||||
const [jamTracks, setJamTracks] = useState([]);
|
const [jamTracks, setJamTracks] = useState([]);
|
||||||
|
const [jamTrackArtists, setJamTrackArtists] = useState([]);
|
||||||
const [showDropdown, setShowDropdown] = useState(false);
|
const [showDropdown, setShowDropdown] = useState(false);
|
||||||
const [autoCompleteInputValue, setAutoCompleteInputValue] = useState('');
|
const [autoCompleteInputValue, setAutoCompleteInputValue] = useState('');
|
||||||
const [jamTracksNextPage, setJamTracksNextPage] = useState(null);
|
const [jamTracksNextPage, setJamTracksNextPage] = useState(null);
|
||||||
|
|
@ -42,11 +44,22 @@ const JKAffiliateLinks = () => {
|
||||||
const resp = await getJamTracks(options);
|
const resp = await getJamTracks(options);
|
||||||
const data = await resp.json();
|
const data = await resp.json();
|
||||||
console.log('data', data);
|
console.log('data', data);
|
||||||
|
setJamTrackArtists([]);
|
||||||
setJamTracks(data.jamtracks);
|
setJamTracks(data.jamtracks);
|
||||||
setJamTracksNextPage(data.next);
|
setJamTracksNextPage(data.next);
|
||||||
} catch (error) {}
|
} catch (error) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const fetchJamTrackArtists = async options => {
|
||||||
|
try {
|
||||||
|
const resp = await getJamTrackArtists(options);
|
||||||
|
const data = await resp.json();
|
||||||
|
console.log('data', data);
|
||||||
|
setJamTracks([]);
|
||||||
|
setJamTrackArtists(data.artists);
|
||||||
|
} catch (error) {}
|
||||||
|
};
|
||||||
|
|
||||||
const queryOptions = selected => {
|
const queryOptions = selected => {
|
||||||
const options = {
|
const options = {
|
||||||
limit: 100
|
limit: 100
|
||||||
|
|
@ -75,14 +88,25 @@ const JKAffiliateLinks = () => {
|
||||||
if (!jamTrack) {
|
if (!jamTrack) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
return `${process.env.REACT_APP_CLIENT_BASE_URL}/jamtrack/landing/${jamTrack.plan_code}?affiliate=${affiliatePartnerId}`;
|
return `${process.env.REACT_APP_CLIENT_BASE_URL}/jamtracks/${encodeURIComponent(jamTrack.original_artist)}/${jamTrack.slug}?affiliate=${affiliatePartnerId}`;
|
||||||
|
}, [affiliatePartnerId]);
|
||||||
|
|
||||||
|
const jamTrackArtistLink = useMemo(() => artist => {
|
||||||
|
if (!artist) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return `${process.env.REACT_APP_CLIENT_BASE_URL}/jamtracks/${encodeURIComponent(artist.original_artist)}?affiliate=${affiliatePartnerId}`;
|
||||||
}, [affiliatePartnerId]);
|
}, [affiliatePartnerId]);
|
||||||
|
|
||||||
//autocomplete related code
|
//autocomplete related code
|
||||||
const handleOnSelect = selected => {
|
const handleOnSelect = selected => {
|
||||||
console.log('onSelect', selected);
|
console.log('onSelect', selected);
|
||||||
const params = queryOptions(selected);
|
const params = queryOptions(selected);
|
||||||
|
if(selected.type === 'artist') {
|
||||||
|
fetchJamTrackArtists(params);
|
||||||
|
}else {
|
||||||
fetchJamTracks(params);
|
fetchJamTracks(params);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleOnEnter = queryStr => {
|
const handleOnEnter = queryStr => {
|
||||||
|
|
@ -132,13 +156,47 @@ const JKAffiliateLinks = () => {
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{affiliate ? (
|
{affiliate ? (
|
||||||
<a href={jamTrackLink(jamTrack)} target="_blank">
|
// <a href={jamTrackLink(jamTrack)} target="_blank">
|
||||||
|
// {jamTrackLink(jamTrack)}
|
||||||
|
// </a>
|
||||||
|
<Link to={`/jamtracks/${jamTrack.original_artist}/${jamTrack.slug}`}>
|
||||||
{jamTrackLink(jamTrack)}
|
{jamTrackLink(jamTrack)}
|
||||||
</a>
|
</Link>
|
||||||
) : (
|
) : (
|
||||||
<a href="javascript:void(0);" onClick={() => history.push('/affiliate/agreement')}>
|
// <a href="javascript:void(0);" onClick={() => history.push('/affiliate/agreement')}>
|
||||||
|
// {jamTrackLink(jamTrack)}
|
||||||
|
// </a>
|
||||||
|
<Link to={`/affiliate/agreement`} target="_blank">
|
||||||
{jamTrackLink(jamTrack)}
|
{jamTrackLink(jamTrack)}
|
||||||
</a>
|
</Link>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
|
||||||
|
{jamTrackArtists &&
|
||||||
|
jamTrackArtists.map(artist => {
|
||||||
|
return (
|
||||||
|
<div key={artist.original_artist}>
|
||||||
|
<div>
|
||||||
|
{t('links.affiliate_link_for')} {artist.original_artist}:
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{affiliate ? (
|
||||||
|
// <a href={jamTrackArtistLink(artist)} target="_blank">
|
||||||
|
// {jamTrackArtistLink(artist)}
|
||||||
|
// </a>
|
||||||
|
<Link to={`/jamtracks/${artist.original_artist}`}>
|
||||||
|
{jamTrackArtistLink(artist)}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
// <a href="javascript:void(0);" onClick={() => history.push('/affiliate/agreement')}>
|
||||||
|
// {jamTrackArtistLink(artist)}
|
||||||
|
// </a>
|
||||||
|
<Link to={`/affiliate/agreement`} target="_blank">
|
||||||
|
{jamTrackArtistLink(artist)}
|
||||||
|
</Link>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ import JKCheckout from '../shopping-cart/JKCheckout';
|
||||||
import JKCheckoutSuccess from '../shopping-cart/JKCheckoutSuccess';
|
import JKCheckoutSuccess from '../shopping-cart/JKCheckoutSuccess';
|
||||||
import JKMyJamTracks from '../jamtracks/JKMyJamTracks';
|
import JKMyJamTracks from '../jamtracks/JKMyJamTracks';
|
||||||
import JKJamTrackShow from '../jamtracks/JKJamTrackShow';
|
import JKJamTrackShow from '../jamtracks/JKJamTrackShow';
|
||||||
|
import JKJamTracksLanding from '../jamtracks/JKJamTracksLanding';
|
||||||
|
|
||||||
//import loadable from '@loadable/component';
|
//import loadable from '@loadable/component';
|
||||||
//const DashboardRoutes = loadable(() => import('../../layouts/JKDashboardRoutes'));
|
//const DashboardRoutes = loadable(() => import('../../layouts/JKDashboardRoutes'));
|
||||||
|
|
@ -299,7 +300,10 @@ function JKDashboardMain() {
|
||||||
<PrivateRoute path="/affiliate/signups" component={JKAffiliateSignups} />
|
<PrivateRoute path="/affiliate/signups" component={JKAffiliateSignups} />
|
||||||
<PrivateRoute path="/affiliate/earnings" component={JKAffiliateEarnings} />
|
<PrivateRoute path="/affiliate/earnings" component={JKAffiliateEarnings} />
|
||||||
<PrivateRoute path="/affiliate/agreement" component={JKAffiliateAgreement} />
|
<PrivateRoute path="/affiliate/agreement" component={JKAffiliateAgreement} />
|
||||||
<PrivateRoute path="/jamtracks/:id" component={JKJamTrackShow} />
|
<PrivateRoute path="/jamtracks/:artist/:song_slug" component={JKJamTracksLanding} />
|
||||||
|
<PrivateRoute path="/jamtracks/:artist" component={JKJamTracksLanding} />
|
||||||
|
<PrivateRoute path="/jamtracks" component={JKJamTracksFilter} />
|
||||||
|
<PrivateRoute path="/jamtrack/:id" component={JKJamTrackShow} />
|
||||||
<PrivateRoute path="/jamtracks" component={JKJamTracksFilter} />
|
<PrivateRoute path="/jamtracks" component={JKJamTracksFilter} />
|
||||||
<PrivateRoute path="/my-jamtracks" component={JKMyJamTracks} />
|
<PrivateRoute path="/my-jamtracks" component={JKMyJamTracks} />
|
||||||
<PrivateRoute path="/shopping-cart" component={JKShoppingCart} />
|
<PrivateRoute path="/shopping-cart" component={JKShoppingCart} />
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
import React from 'react'
|
||||||
|
import { useParams, Link } from 'react-router-dom';
|
||||||
|
|
||||||
|
const JKJamTracksLanding = () => {
|
||||||
|
const { artist, song_slug } = useParams();
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>JKJamTracksLanding</h1>
|
||||||
|
<p>artist: {artist}</p>
|
||||||
|
<p>song_slug: {song_slug}</p>
|
||||||
|
<Link to="/jamtracks">Back to JamTracks</Link>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default JKJamTracksLanding
|
||||||
|
|
@ -100,7 +100,7 @@ const JKMyJamTracks = () => {
|
||||||
jamTracks.map((jamTrack, index) => (
|
jamTracks.map((jamTrack, index) => (
|
||||||
<div key={jamTrack.id} ref={ref => (jamTracks.length - 1 === index ? setLastJamTrackRef(ref) : null)}>
|
<div key={jamTrack.id} ref={ref => (jamTracks.length - 1 === index ? setLastJamTrackRef(ref) : null)}>
|
||||||
<ListGroupItem>
|
<ListGroupItem>
|
||||||
<Link to={`/jamtracks/${jamTrack.id}`}>{jamTrack.name}</Link>
|
<Link to={`/jamtrack/${jamTrack.id}`}>{jamTrack.name}</Link>
|
||||||
{jamTrack.original_artist && ` by ${jamTrack.original_artist}`}
|
{jamTrack.original_artist && ` by ${jamTrack.original_artist}`}
|
||||||
</ListGroupItem>
|
</ListGroupItem>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ const JKCheckoutSuccess = () => {
|
||||||
)}
|
)}
|
||||||
</p>
|
</p>
|
||||||
{jamtrack && (
|
{jamtrack && (
|
||||||
<Link to={`/jamtracks/${jamtrack.id}`} className="btn btn-primary">
|
<Link to={`/jamtrack/${jamtrack.id}`} className="btn btn-primary">
|
||||||
{t('open_jamtrack')}
|
{t('open_jamtrack')}
|
||||||
</Link>
|
</Link>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
object @jam_track
|
object @jam_track
|
||||||
|
|
||||||
attributes :id, :name, :description, :recording_type, :original_artist, :songwriter, :publisher, :sales_region, :price, :version, :duration, :year, :plan_code, :allow_free, :download_price, :upgrade_price
|
attributes :id, :name, :description, :recording_type, :original_artist, :songwriter, :publisher, :sales_region, :price, :version, :duration, :year, :plan_code, :allow_free, :download_price, :upgrade_price, :slug
|
||||||
|
|
||||||
node :genres do |item|
|
node :genres do |item|
|
||||||
item.genres.select(:description).map(&:description)
|
item.genres.select(:description).map(&:description)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue