diff --git a/src/components/ContactForm.tsx b/src/components/ContactForm.tsx index 008756c..becfb08 100644 --- a/src/components/ContactForm.tsx +++ b/src/components/ContactForm.tsx @@ -27,6 +27,7 @@ export interface ContactFormValues { export interface ContactFormProps { visibleFields?: readonly ContactFormField[] prefillValues?: Partial + submissionSource?: string submitLabel?: string className?: string idPrefix?: string @@ -42,6 +43,7 @@ function withPrefix(prefix: string, fieldName: string): string { export function ContactForm({ visibleFields = DEFAULT_VISIBLE_FIELDS, prefillValues, + submissionSource, submitLabel = 'Отправить заявку', className = 'space-y-5', idPrefix = 'contact-form', @@ -54,6 +56,7 @@ export function ContactForm({ return (
+ {submissionSource ? : null} {showNameCompanyRow && (
{fields.has('name') && ( diff --git a/src/components/ContactModal.tsx b/src/components/ContactModal.tsx index cb7439f..61f7422 100644 --- a/src/components/ContactModal.tsx +++ b/src/components/ContactModal.tsx @@ -12,6 +12,7 @@ interface ContactModalProps { contacts: readonly SiteConfigContact[] formVisibleFields?: readonly ContactFormField[] formPrefillValues?: Partial + submissionSource?: string } const DEFAULT_MODAL_VISIBLE_FIELDS: readonly ContactFormField[] = [ @@ -31,6 +32,7 @@ export function ContactModal({ contacts, formVisibleFields = DEFAULT_MODAL_VISIBLE_FIELDS, formPrefillValues, + submissionSource, }: ContactModalProps) { useEffect(() => { if (isOpen) { @@ -74,6 +76,7 @@ export function ContactModal({ idPrefix="contact-modal-form" visibleFields={formVisibleFields} prefillValues={formPrefillValues} + submissionSource={submissionSource} />
diff --git a/src/components/VendorCard.tsx b/src/components/VendorCard.tsx index f8530eb..3ac9f8c 100644 --- a/src/components/VendorCard.tsx +++ b/src/components/VendorCard.tsx @@ -2,9 +2,10 @@ interface VendorCardProps { name?: string description?: string products?: string[] + onLearnMore?: (vendorName?: string) => void } -export function VendorCard({ name, description, products }: VendorCardProps) { +export function VendorCard({ name, description, products, onLearnMore }: VendorCardProps) { return (
@@ -29,7 +30,11 @@ export function VendorCard({ name, description, products }: VendorCardProps) {
)} -
diff --git a/src/pages/[slug].astro b/src/pages/[slug].astro index 186d7fc..85e2fd2 100644 --- a/src/pages/[slug].astro +++ b/src/pages/[slug].astro @@ -76,7 +76,7 @@ const vendors = (category.vendors?.filter(v => v != null) ?? []).map(vendor => (
- +
diff --git a/src/sections/Contact.tsx b/src/sections/Contact.tsx index 7b6f148..e15604d 100644 --- a/src/sections/Contact.tsx +++ b/src/sections/Contact.tsx @@ -6,9 +6,10 @@ export interface ContactProps { contacts: readonly SiteConfigContact[] formVisibleFields?: readonly ContactFormField[] formPrefillValues?: Partial + submissionSource?: string } -export function Contact({ contacts, formVisibleFields, formPrefillValues }: ContactProps) { +export function Contact({ contacts, formVisibleFields, formPrefillValues, submissionSource }: ContactProps) { return (
@@ -24,6 +25,7 @@ export function Contact({ contacts, formVisibleFields, formPrefillValues }: Cont idPrefix="contact-section-form" visibleFields={formVisibleFields} prefillValues={formPrefillValues} + submissionSource={submissionSource} />
diff --git a/src/sections/Header.tsx b/src/sections/Header.tsx index 8265643..5b50027 100644 --- a/src/sections/Header.tsx +++ b/src/sections/Header.tsx @@ -218,7 +218,12 @@ export function Header({ contacts = [], solutions = [], services = [] }: HeaderP
)} - setIsContactModalOpen(false)} contacts={contacts} /> + setIsContactModalOpen(false)} + contacts={contacts} + submissionSource="header_modal" + /> ) } diff --git a/src/sections/Vendors.tsx b/src/sections/Vendors.tsx index 5803dec..88c9da8 100644 --- a/src/sections/Vendors.tsx +++ b/src/sections/Vendors.tsx @@ -8,15 +8,22 @@ interface Vendor { interface VendorsProps { vendors?: Vendor[] + onVendorLearnMore?: (vendorName?: string) => void } -export function Vendors({ vendors }: VendorsProps) { +export function Vendors({ vendors, onVendorLearnMore }: VendorsProps) { if (vendors && vendors.length > 0) { return (
{vendors.map(({ name, description, products }, index) => ( - + ))}
diff --git a/src/views/CategoryView.tsx b/src/views/CategoryView.tsx index 86a32b4..78102e7 100644 --- a/src/views/CategoryView.tsx +++ b/src/views/CategoryView.tsx @@ -1,18 +1,33 @@ -import type { ComponentProps } from 'react' +import { useState, type ComponentProps } from 'react' import { CategoryPageHero } from '../sections/CategoryPageHero' import { Vendors } from '../sections/Vendors' +import { ContactModal } from '../components/ContactModal' +import type { SiteConfigContact } from '../lib/cms/contact/types' export type CategoryViewProps = { title?: string description?: string badge?: string + contacts?: readonly SiteConfigContact[] } & ComponentProps -export function CategoryView({ title, description, vendors = [], badge }: CategoryViewProps) { +export function CategoryView({ title, description, vendors = [], badge, contacts = [] }: CategoryViewProps) { + const [isContactModalOpen, setIsContactModalOpen] = useState(false) + + const handleVendorLearnMore = () => { + setIsContactModalOpen(true) + } + return (
- + + setIsContactModalOpen(false)} + contacts={contacts} + submissionSource="vendor_card_modal" + />
) } diff --git a/src/views/HomePage.tsx b/src/views/HomePage.tsx index f6da44e..a45a1ef 100644 --- a/src/views/HomePage.tsx +++ b/src/views/HomePage.tsx @@ -85,9 +85,14 @@ export function HomePage({ homePage, contacts = [] }: HomePageProps) {
- +
- setContactOpen(false)} contacts={contacts} /> + setContactOpen(false)} + contacts={contacts} + submissionSource="home_modal" + /> ) }