refactor(contacts): Implement multi-page Contact Management with advanced sorting

Split Contact Management into 3 dedicated pages for improved mobile usability:
- /contacts/manage - Settings & navigation hub (manual approval + cleanup)
- /contacts/pending - Full-screen pending contacts view
- /contacts/existing - Full-screen existing contacts with search/filter/sort

New Features:
- Advanced sorting: Name (A-Z/Z-A) & Last advert (newest/oldest)
- URL-based sort state (?sort=name&order=asc)
- Activity indicators: 🟢 active, 🟡 recent, 🔴 inactive
- Changed terminology: "Last seen" → "Last advert" (more accurate)
- Cleanup tool moved from Settings modal to Contact Management page

Technical Changes:
- Created contacts_base.html standalone template
- Split contacts.html into 3 specialized templates
- Refactored contacts.js for multi-page support with page detection
- Added 2 new Flask routes: /contacts/pending, /contacts/existing
- Removed cleanup section from base.html Settings modal

Mobile-first design: Each page has full-screen space with touch-friendly
navigation and back buttons.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
MarekWo
2025-12-30 08:40:22 +01:00
parent d601d714f7
commit cdc8be9eb4
8 changed files with 1011 additions and 68 deletions
-13
View File
@@ -244,19 +244,6 @@
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<h6>Contact Management</h6>
<hr>
<div class="mb-3">
<label for="inactiveHours" class="form-label">Remove contacts inactive for:</label>
<div class="input-group">
<input type="number" class="form-control" id="inactiveHours" value="48" min="1">
<span class="input-group-text">hours</span>
</div>
</div>
<button class="btn btn-danger" id="cleanupBtn">
<i class="bi bi-trash"></i> Clean Inactive Contacts
</button>
<hr>
<h6>Device Information</h6>
<div id="deviceInfo" class="small text-muted">
Loading...