Fix create trade offer flow and other related bugs

This commit is contained in:
badblocks 2025-03-26 11:38:02 -07:00
parent f3a1366269
commit 65ca344582
40 changed files with 867 additions and 278 deletions

View file

@ -0,0 +1,35 @@
{% load trade_offer_tags %}
{% if trade_offers %}
<div class="flex flex-col">
{% for offer in trade_offers %}
<div class="mb-4">
{% render_trade_offer offer %}
</div>
{% endfor %}
</div>
{% if is_paginated %}
<div class="flex justify-between items-center mt-4">
{% if page_obj.has_previous %}
<button type="button" class="btn btn-sm"
@click="$dispatch('change-page-{{ side }}', { page: {{ page_obj.previous_page_number }} })">
Previous
</button>
{% else %}
<span></span>
{% endif %}
{% if paginator.num_pages > 1 %}
<span class="text-sm">Page {{ page_obj.number }} of {{ paginator.num_pages }}</span>
{% endif %}
{% if page_obj.has_next %}
<button type="button" class="btn btn-sm"
@click="$dispatch('change-page-{{ side }}', { page: {{ page_obj.next_page_number }} })">
Next
</button>
{% else %}
<span></span>
{% endif %}
</div>
{% endif %}
{% else %}
<p class="text-gray-500">No trade offers found.</p>
{% endif %}

View file

@ -0,0 +1,27 @@
{% load trade_offer_tags %}
{% if trade_offers %}
<div class="grid grid-cols-1 gap-4">
{% for offer in trade_offers %}
<div class="mb-4">
{% render_trade_offer offer %}
</div>
{% endfor %}
</div>
<div class="flex justify-between items-center mt-4">
{% if trade_offers.has_previous %}
<button type="button" class="btn btn-sm" @click="$dispatch('change-page', { page: {{ trade_offers.previous_page_number }} })">Previous</button>
{% else %}
<span></span>
{% endif %}
{% if trade_offers.paginator.num_pages > 1 %}
<span class="text-sm">Page {{ trade_offers.number }} of {{ trade_offers.paginator.num_pages }}</span>
{% endif %}
{% if trade_offers.has_next %}
<button type="button" class="btn btn-sm" @click="$dispatch('change-page', { page: {{ trade_offers.next_page_number }} })">Next</button>
{% else %}
<span></span>
{% endif %}
</div>
{% else %}
<p class="text-gray-500">No trade offers found.</p>
{% endif %}

View file

@ -0,0 +1,91 @@
{% extends "base.html" %}
{% load static card_badge %}
{% block content %}
<div class="container mx-auto p-4">
<!-- Card header with badge and details -->
<div class="flex items-center mb-6">
<div class="ml-4">
<h1 class="text-3xl font-bold">{{card.name}}</h1>
<h2 class="text-lg text-gray-500">{{ card.cardset }} #{{ card.cardnum }} &bull; {{ card.rarity_icon }}</h2>
</div>
</div>
<!-- Trade Offers sections -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
<!-- Trade Offers: Have -->
<div x-data="{
order: 'newest',
page: 1,
loadOffers() {
document.activeElement.blur();
fetch(`{% url 'cards:card_trade_offer_have_list' card.pk %}?order=` + this.order + '&page=' + this.page)
.then(response => response.text())
.then(html => { this.$refs.offerList.innerHTML = html; });
}
}"
x-init="loadOffers()"
x-on:change-page-have.window="page = $event.detail.page; loadOffers()"
class="p-4">
<div class="flex items-center justify-between mb-4">
<h2 class="text-xl font-semibold">Have this Card ({{ trade_offer_have_count }})</h2>
<!-- DaisyUI dropdown replacing the select -->
<div class="dropdown dropdown-end">
<div tabindex="0" role="button" class="btn m-1" x-text="order === 'newest' ? 'Newest 🞃' : 'Oldest 🞃'"></div>
<ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-1 w-26 p-2 shadow-sm">
<li>
<a href="#" @click.prevent="order = 'newest'; page = 1; loadOffers()">
Newest
</a>
</li>
<li>
<a href="#" @click.prevent="order = 'oldest'; page = 1; loadOffers()">
Oldest
</a>
</li>
</ul>
</div>
</div>
<div x-ref="offerList">
</div>
</div>
<!-- Trade Offers: Want -->
<div x-data="{
order: 'newest',
page: 1,
loadOffers() {
fetch(`{% url 'cards:card_trade_offer_want_list' card.pk %}?order=` + this.order + '&page=' + this.page)
.then(response => response.text())
.then(html => { this.$refs.offerList.innerHTML = html; });
}
}"
x-init="loadOffers()"
x-on:change-page.window="page = $event.detail.page; loadOffers()"
class="p-4">
<div class="flex items-center justify-between mb-4">
<h2 class="text-xl font-semibold">Want this Card ({{ trade_offer_want_count }})</h2>
<!-- DaisyUI dropdown replacing the select -->
<div class="dropdown dropdown-end">
<div tabindex="0" role="button" class="btn m-1" x-text="order === 'newest' ? 'Newest 🞃' : 'Oldest 🞃'"></div>
<ul tabindex="0" class="dropdown-content menu bg-base-100 rounded-box z-1 w-26 p-2 shadow-sm">
<li>
<a href="#" @click.prevent="order = 'newest'; page = 1; loadOffers()">
Newest
</a>
</li>
<li>
<a href="#" @click.prevent="order = 'oldest'; page = 1; loadOffers()">
Oldest
</a>
</li>
</ul>
</div>
</div>
<div x-ref="offerList">
</div>
</div>
</div>
</div>
{% endblock %}