From 72d60bcdaded1bfa80ad995a6c008979e4eec664 Mon Sep 17 00:00:00 2001 From: Alexander Schmidt Date: Mon, 9 Feb 2026 18:03:25 +0100 Subject: [PATCH] fix: implement views counter increment via public role, add spacing between sidebar buttons --- js/components/pages/page-listing.js | 4 ++++ js/services/directus/listings.js | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/js/components/pages/page-listing.js b/js/components/pages/page-listing.js index dc8ac5d..f77e50f 100644 --- a/js/components/pages/page-listing.js +++ b/js/components/pages/page-listing.js @@ -949,6 +949,10 @@ style.textContent = /* css */` gap: var(--space-sm); } + page-listing .sidebar-btn + .sidebar-btn { + margin-top: var(--space-sm); + } + page-listing .sidebar-actions { display: flex; flex-direction: column; diff --git a/js/services/directus/listings.js b/js/services/directus/listings.js index 8ff82ff..c929124 100644 --- a/js/services/directus/listings.js +++ b/js/services/directus/listings.js @@ -94,10 +94,22 @@ export async function updateListing(id, data) { return response.data } -// View counting requires server-side implementation (e.g. Directus Flow) -// Client-side increment is not possible with current permissions -export async function incrementListingViews(_id) { - return null +export async function incrementListingViews(id) { + try { + const listing = await getListing(id) + if (!listing) return null + const newViews = (listing.views || 0) + 1 + const response = await fetch(`${client.baseUrl}/items/listings/${id}`, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ views: newViews }) + }) + if (!response.ok) return null + return newViews + } catch (e) { + console.warn('Failed to increment views:', e) + return null + } } export async function deleteListing(id) {