feat: update nav, remove Perenual UI, fix delete button alignment

- Nav '+' button now links to identify_upload instead of plant_add
- Remove Perenual toggle, results section, and 'Also search Perenual'
  link from species_results partial
- Wrap Plant card / Crop thumbnail / Delete plant buttons in flex
  container for consistent mobile alignment
- Fix pre-existing test assertion to match actual crop-thumbnail URL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Stephan Kerkman 2026-05-30 20:55:32 +02:00
parent e93809ccbf
commit f308d006e4
4 changed files with 12 additions and 43 deletions

View file

@ -31,7 +31,7 @@
<div class="d-flex gap-2">
<a href="{% url 'plant_list' %}" class="btn btn-sm btn-outline-light">Plants</a>
<a href="{% url 'add_plant_from_scan' %}" class="btn btn-sm btn-outline-light" title="Add plant by card scan">📷</a>
<a href="{% url 'plant_add' %}" class="btn btn-sm btn-light fw-bold">+</a>
<a href="{% url 'identify_upload' %}" class="btn btn-sm btn-light fw-bold">+</a>
</div>
</nav>

View file

@ -1,35 +1,3 @@
{% if error %}
<p class="list-group-item text-warning small">⚠️ Perenual: {{ error }}</p>
{% endif %}
{% for result in perenual_results %}
<div class="list-group-item">
<div class="d-flex align-items-center gap-2 mb-1">
{% if result.default_image and result.default_image.thumbnail %}
<img src="{{ result.default_image.thumbnail }}" width="40" height="40" class="rounded" style="object-fit:cover; flex-shrink:0;">
{% else %}
<div style="width:40px; height:40px; background:#d8f3dc; border-radius:.375rem; flex-shrink:0; display:flex; align-items:center; justify-content:center;">🌿</div>
{% endif %}
<div class="flex-grow-1">
<div class="fw-semibold">{{ result.common_name }}</div>
<small class="text-muted fst-italic">{{ result.scientific_name|join:", " }}</small>
</div>
<span class="badge bg-success" style="font-size:.65rem;">Perenual</span>
</div>
<form method="POST" action="{% url 'species_select' %}">
{% csrf_token %}
<input type="hidden" name="perenual_id" value="{{ result.id }}">
<input type="hidden" name="common_name" value="{{ result.common_name }}">
<input type="hidden" name="scientific_name" value="{{ result.scientific_name|join:', ' }}">
<input type="hidden" name="watering" value="{{ result.watering|default:'' }}">
<input type="hidden" name="sunlight" value="{{ result.sunlight|join:', ' }}">
<input type="hidden" name="pruning_months" value="{{ result.pruning_month|join:', ' }}">
<input type="hidden" name="api_image_url" value="{{ result.default_image.regular_url|default:'' }}">
<button type="submit" class="btn btn-sm btn-success">Select →</button>
</form>
</div>
{% endfor %}
{% for result in vpc_results %}
<div class="list-group-item">
<div class="d-flex align-items-center gap-2 mb-1">
@ -52,6 +20,6 @@
</div>
{% endfor %}
{% if not perenual_results and not vpc_results and not error and q %}
<p class="list-group-item text-muted">No results for "{{ q }}"</p>
{% if not vpc_results and not error and q %}
<p class="list-group-item text-muted small">No VPC results for "{{ q }}"</p>
{% endif %}

View file

@ -87,11 +87,12 @@
{% include "plants/partials/photo_gallery.html" %}
</div>
<a href="{% url 'plant_card' plant.pk %}" class="btn btn-sm btn-outline-secondary mb-2">🪧 Plant card</a>
<div class="d-flex flex-wrap gap-2 mt-2">
<a href="{% url 'plant_card' plant.pk %}" class="btn btn-sm btn-outline-secondary">🪧 Plant card</a>
{% if plant.card_photos.all %}
<a href="{% url 'crop_thumbnail' plant.pk %}" class="btn btn-sm btn-outline-secondary mb-2">✂️ Crop thumbnail</a>
<a href="{% url 'crop_thumbnail' plant.pk %}" class="btn btn-sm btn-outline-secondary">✂️ Crop thumbnail</a>
{% endif %}
<a href="{% url 'plant_delete' plant.pk %}" class="btn btn-outline-danger btn-sm mt-2">Delete plant</a>
<a href="{% url 'plant_delete' plant.pk %}" class="btn btn-sm btn-outline-danger">Delete plant</a>
</div>
{% endblock %}

View file

@ -92,12 +92,12 @@ class TestPlantDetail:
plant = Plant.objects.create(name='Fern')
PlantCardPhoto.objects.create(plant=plant, image='plants/cards/card.jpg')
resp = client.get(reverse('plant_detail', args=[plant.pk]))
assert 'View plant card' in resp.content.decode()
assert 'crop-thumbnail' in resp.content.decode()
def test_card_button_hidden_when_no_card_photos(self, client):
plant = Plant.objects.create(name='Fern')
resp = client.get(reverse('plant_detail', args=[plant.pk]))
assert 'View plant card' not in resp.content.decode()
assert 'crop-thumbnail' not in resp.content.decode()
@pytest.mark.django_db