import { defineField, defineType } from "sanity"; import { Sparkles } from "lucide-react"; import { orderRankField } from "@sanity/orderable-document-list"; import meta from "../blocks/shared/meta"; export default defineType({ name: "service", title: "Service", type: "document", icon: Sparkles, groups: [ { name: "overview", title: "Overview", }, { name: "content", title: "Details & Content", }, { name: "cta", title: "Call To Action", }, { name: "seo", title: "SEO", }, ], fields: [ defineField({ name: "title", title: "Service Title", type: "string", group: "overview", validation: (Rule) => Rule.required(), }), defineField({ name: "slug", title: "Slug", type: "slug", group: "overview", options: { source: "title", maxLength: 96, }, validation: (Rule) => Rule.required(), }), defineField({ name: "targetAudience", title: "Target Audience", type: "string", group: "overview", options: { list: [ { title: "For Couples (Private Consultation)", value: "couples" }, { title: "For Professionals & Venues (B2B Advisory)", value: "professionals" }, ], layout: "radio", }, validation: (Rule) => Rule.required(), }), defineField({ name: "tagline", title: "Short Tagline", type: "string", description: "e.g. '1-on-1 Bespoke Vietnam Wedding Planning Advisory'", group: "overview", }), defineField({ name: "shortDescription", title: "Short Description", type: "text", rows: 3, group: "overview", }), defineField({ name: "coverImage", title: "Cover Image", type: "image", group: "overview", options: { hotspot: true, }, fields: [ defineField({ name: "alt", type: "string", title: "Alternative Text", }), ], }), defineField({ name: "pricing", title: "Pricing / Investment Note", type: "string", description: "e.g. 'From $500 USD' or 'Tailored Quote on Request'", group: "overview", }), defineField({ name: "features", title: "Key Deliverables & Features", type: "array", group: "content", of: [{ type: "string" }], description: "Bullet points highlighting what is included in this service package", }), defineField({ name: "body", title: "Full Detailed Description", type: "block-content", group: "content", }), defineField({ name: "packages", title: "Advisory Packages & Deliverables", type: "array", group: "content", description: "Structured packages shown in the 3-column breakdown", of: [ { type: "object", name: "servicePackage", title: "Package", fields: [ defineField({ name: "name", title: "Package Name", type: "string", validation: (Rule) => Rule.required(), }), defineField({ name: "tagline", title: "Package Tagline", type: "string", }), defineField({ name: "price", title: "Price / Investment", type: "string", description: "e.g. '$111 USD / hour' or 'Bespoke Consulting'", }), defineField({ name: "badge", title: "Badge Text", type: "string", description: "e.g. 'Most Popular for Initial Phase'", }), defineField({ name: "description", title: "Description", type: "text", rows: 3, }), defineField({ name: "deliverables", title: "Key Deliverables", type: "array", of: [{ type: "string" }], }), defineField({ name: "ctaText", title: "CTA Button Text", type: "string", }), defineField({ name: "isPopular", title: "Is Popular / Featured", type: "boolean", initialValue: false, }), ], preview: { select: { title: "name", subtitle: "price", }, }, }, ], }), defineField({ name: "processSteps", title: "Advisory Process Steps", type: "array", group: "content", description: "How we work together (e.g. 3-step methodology)", of: [ { type: "object", name: "processStep", title: "Step", fields: [ defineField({ name: "stepNumber", title: "Step Number", type: "string", description: "e.g. '01', '02', '03'", }), defineField({ name: "title", title: "Title", type: "string", validation: (Rule) => Rule.required(), }), defineField({ name: "description", title: "Description", type: "text", rows: 3, }), ], preview: { select: { title: "title", subtitle: "stepNumber", }, }, }, ], }), defineField({ name: "faqs", title: "Frequently Asked Questions", type: "array", group: "content", of: [{ type: "reference", to: { type: "faq" } }], description: "Select FAQs specifically relevant to this service", }), defineField({ name: "ctaText", title: "CTA Button Text", type: "string", initialValue: "Book Consultation", group: "cta", }), defineField({ name: "ctaUrl", title: "CTA Target Link", type: "string", description: "WhatsApp link (e.g. https://wa.me/84908372168) or contact page path", initialValue: "https://wa.me/84908372168", group: "cta", }), meta, orderRankField({ type: "service" }), ], preview: { select: { title: "title", audience: "targetAudience", media: "coverImage", }, prepare({ title, audience, media }) { const audienceLabel = audience === "couples" ? "Couples" : audience === "professionals" ? "B2B / Pros" : "General"; return { title, subtitle: `[${audienceLabel}]`, media, }; }, }, });