Fix create trade offer flow and other related bugs
This commit is contained in:
parent
f3a1366269
commit
65ca344582
40 changed files with 867 additions and 278 deletions
|
|
@ -8,12 +8,12 @@
|
|||
<span class="inline-block relative align-text-top">P</span><span class="inline-block relative align-text-bottom">K</span><span class="inline-block relative align-text-top">M</span><span class="inline-block relative align-text-bottom">N</span>
|
||||
<span class="inline-block relative">Trade Club</span>
|
||||
</span>
|
||||
<span aria-hidden="false" class="sr-only">Welcome to Pokemon Trade Club</span>
|
||||
<span aria-hidden="false" class="sr-only">Welcome to PKMN Trade Club</span>
|
||||
</h1>
|
||||
|
||||
<!-- Search Form Section -->
|
||||
<!-- Search/Create Form Section -->
|
||||
<section id="trade-search" class="mb-8">
|
||||
<form method="post" action="{% url 'trade_offer_search' %}" class="space-y-4">
|
||||
<form id="tradeSearchForm" method="post" class="space-y-4">
|
||||
{% csrf_token %}
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div>
|
||||
|
|
@ -23,26 +23,28 @@
|
|||
{% card_multiselect "want_cards" "I Want:" "Select some cards..." cards want_cards %}
|
||||
</div>
|
||||
</div>
|
||||
{# Pass the user's default friend code as a hidden field for creation #}
|
||||
<input type="hidden" name="initiated_by" value="{{ request.user.default_friend_code.pk }}">
|
||||
<div class="flex flex-col md:flex-row gap-4">
|
||||
<button type="submit" class="btn btn-primary grow">
|
||||
<button type="submit" name="search" formaction="{% url 'trade_offer_search' %}" class="btn btn-primary grow">
|
||||
Find a Trade Offer
|
||||
</button>
|
||||
<a href="{% url 'trade_offer_create' %}" id="createTradeOfferBtn" class="btn btn-secondary grow">
|
||||
<button type="submit" name="preview" formaction="{% url 'trade_offer_confirm_create' %}" class="btn btn-secondary grow">
|
||||
Create Trade Offer
|
||||
</a>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
<!-- Market Stats Section -->
|
||||
<!-- Card Stats Section -->
|
||||
<section aria-labelledby="stats-heading" class="mb-8">
|
||||
<h2 id="stats-heading" class="text-2xl font-semibold mb-4">Market Stats</h2>
|
||||
<h2 id="stats-heading" class="text-2xl font-semibold mb-4">Card Stats</h2>
|
||||
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
|
||||
<!-- Most Offered Cards -->
|
||||
<div>
|
||||
<div class="card card-border bg-base-100 shadow-lg">
|
||||
<div class="card-header text-base-content p-4">
|
||||
<h5 class="text-xl text-center font-semibold whitespace-nowrap truncate mb-0">Most Offered Cards</h5>
|
||||
<h5 class="text-xl text-center font-semibold whitespace-nowrap truncate mb-0">Most Offered</h5>
|
||||
</div>
|
||||
<div class="card-body my-4 p-0">
|
||||
{% cache 3600 most_offered_cards %}
|
||||
|
|
@ -55,7 +57,7 @@
|
|||
<div>
|
||||
<div class="card card-border bg-base-100 shadow-lg">
|
||||
<div class="card-header text-base-content p-4">
|
||||
<h5 class="text-xl text-center font-semibold whitespace-nowrap truncate mb-0">Most Wanted Cards</h5>
|
||||
<h5 class="text-xl text-center font-semibold whitespace-nowrap truncate mb-0">Most Wanted</h5>
|
||||
</div>
|
||||
<div class="card-body my-4 p-0">
|
||||
{% cache 3600 most_wanted_cards %}
|
||||
|
|
@ -68,7 +70,7 @@
|
|||
<div class="col-span-2 md:col-span-1">
|
||||
<div class="card card-border bg-base-100 shadow-lg">
|
||||
<div class="card-header text-base-content p-4">
|
||||
<h5 class="text-xl text-center font-semibold whitespace-nowrap truncate mb-0">Least Offered Cards</h5>
|
||||
<h5 class="text-xl text-center font-semibold whitespace-nowrap truncate mb-0">Least Offered</h5>
|
||||
</div>
|
||||
<div class="card-body my-4 p-0">
|
||||
{% cache 3600 least_offered_cards %}
|
||||
|
|
@ -160,39 +162,6 @@
|
|||
{% block javascript %}
|
||||
<script defer>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Updated: JS to carry over selections (including quantities) to the Create Trade Offer page.
|
||||
const createBtn = document.getElementById('createTradeOfferBtn');
|
||||
if (createBtn) {
|
||||
createBtn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
// Use the standardized field names for both "have_cards" and "want_cards"
|
||||
const haveSelect = document.querySelector('select[name="have_cards"]');
|
||||
const wantSelect = document.querySelector('select[name="want_cards"]');
|
||||
const url = new URL(createBtn.href, window.location.origin);
|
||||
|
||||
if (haveSelect) {
|
||||
// For each selected option, include the quantity from data-quantity (defaulting to "1")
|
||||
const selectedHave = Array.from(haveSelect.selectedOptions).map(opt => {
|
||||
const cardId = opt.value;
|
||||
const quantity = opt.getAttribute('data-quantity') || '1';
|
||||
return cardId + ':' + quantity;
|
||||
});
|
||||
selectedHave.forEach(val => url.searchParams.append('have_cards', val));
|
||||
}
|
||||
|
||||
if (wantSelect) {
|
||||
const selectedWant = Array.from(wantSelect.selectedOptions).map(opt => {
|
||||
const cardId = opt.value;
|
||||
const quantity = opt.getAttribute('data-quantity') || '1';
|
||||
return cardId + ':' + quantity;
|
||||
});
|
||||
selectedWant.forEach(val => url.searchParams.append('want_cards', val));
|
||||
}
|
||||
|
||||
window.location.href = url.href;
|
||||
});
|
||||
}
|
||||
|
||||
// Minimal JavaScript for toggling Featured Offers tabs
|
||||
const featuredTabs = document.querySelectorAll('input[name="featured_tabs"]');
|
||||
const featuredTabContents = document.querySelectorAll('#featured-tab-contents .tab-content');
|
||||
|
|
@ -202,11 +171,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||
if (radio.checked) {
|
||||
const target = radio.id;
|
||||
featuredTabContents.forEach(content => {
|
||||
if (content.getAttribute('data-tab') === target) {
|
||||
content.style.display = 'block';
|
||||
} else {
|
||||
content.style.display = 'none';
|
||||
}
|
||||
content.style.display = content.getAttribute('data-tab') === target ? 'block' : 'none';
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue