diff --git a/frontend/src/app/store/[slug]/page.tsx b/frontend/src/app/store/[slug]/page.tsx index 9c82ff3..60b38d1 100644 --- a/frontend/src/app/store/[slug]/page.tsx +++ b/frontend/src/app/store/[slug]/page.tsx @@ -37,7 +37,7 @@ export default async function ArtworkDetailPage({ params }: PageProps) { // Fetch related works server-side let relatedWorks: Artwork[] = []; try { - const allWorks = await getArtworks({ status: 'published', limit: 4 }); + const allWorks = await getArtworks({ status: 'published', forSale: true, limit: 4 }); relatedWorks = allWorks.filter((w) => w.id !== artwork.id).slice(0, 3); } catch { relatedWorks = []; diff --git a/frontend/src/lib/directus.ts b/frontend/src/lib/directus.ts index 9cac97c..2c661df 100644 --- a/frontend/src/lib/directus.ts +++ b/frontend/src/lib/directus.ts @@ -240,12 +240,36 @@ export async function getArtworks(options?: { fields?: string[]; forSale?: boolean; }): Promise { + // When forSale is true, build a compound filter requiring: + // - name set, image set, and at least one price (GBP or USD) > 0 + // This means artworks automatically appear in the store once their + // required fields are populated, and disappear when status changes to sold/archived. + if (options?.forSale) { + const conditions: Record[] = [ + { name: { _nnull: true, _nempty: true } }, + { image: { _nnull: true } }, + { _or: [ + { price_gbp: { _gt: 0 } }, + { price_usd: { _gt: 0 } }, + ]}, + ]; + if (options?.status) conditions.push({ status: { _eq: options.status } }); + if (options?.series) conditions.push({ series: { _eq: options.series } }); + + const result = await directus.request( + readItems('artworks', { + filter: { _and: conditions }, + limit: options?.limit || -1, + sort: ['-date_created'], + fields: options?.fields || ['*'], + }) + ); + return (result as Artwork[]).map(mapArtwork); + } + const filter: Record = {}; if (options?.status) filter.status = { _eq: options.status }; if (options?.series) filter.series = { _eq: options.series }; - if (options?.forSale) { - filter.price_gbp = { _nnull: true, _gt: 0 }; - } const result = await directus.request( readItems('artworks', {