import type { Meta, StoryObj } from '@storybook/react';
import { SummaryStep } from './SummaryStep';
import type { SummarySection, ArrangementDetails } from './SummaryStep';
import { Navigation } from '../../organisms/Navigation';
import Box from '@mui/material/Box';
// ─── Helpers ─────────────────────────────────────────────────────────────────
const FALogo = () => (
);
const nav = (
}
items={[
{ label: 'FAQ', href: '/faq' },
{ label: 'Contact Us', href: '/contact' },
]}
/>
);
const sampleDetails: ArrangementDetails = {
arrangerName: 'Sarah Mitchell',
deceasedName: 'Robert Mitchell',
serviceTradition: 'Non-denominational',
preferredDates: ['Tuesday 15 April', 'Wednesday 16 April'],
preferredTime: 'Morning',
editStepId: 'date_time',
};
const sampleSections: SummarySection[] = [
{
id: 'provider',
title: 'Funeral Provider',
editStepId: 'providers',
imageUrl: 'https://placehold.co/320x200/F5F5F0/8B8B7E?text=H.+Parsons',
name: 'H. Parsons Funeral Directors',
subtitle: 'Essential Service Package',
location: 'Mackay, QLD',
price: 4950,
},
{
id: 'venue',
title: 'Service Venue',
editStepId: 'venue',
imageUrl: 'https://placehold.co/320x200/F5F5F0/8B8B7E?text=West+Chapel',
name: 'West Chapel',
location: 'Strathfield, NSW',
price: 900,
items: [
{ label: 'Photo presentation', price: 150 },
{ label: 'Livestream', price: 200 },
],
},
{
id: 'crematorium',
title: 'Crematorium',
editStepId: 'crematorium',
imageUrl: 'https://placehold.co/320x200/F5F5F0/8B8B7E?text=Warrill+Park',
name: 'Warrill Park Crematorium',
location: 'Ipswich, QLD',
price: 850,
},
{
id: 'coffin',
title: 'Coffin',
editStepId: 'coffins',
imageUrl: 'https://images.unsplash.com/photo-1618220179428-22790b461013?w=320&h=200&fit=crop',
name: 'Richmond Rosewood Coffin',
colourName: 'Natural Oak',
colourHex: '#D4A76A',
price: 1750,
allowanceAmount: 500,
},
{
id: 'included',
title: 'Included Services',
editStepId: 'included_services',
items: [
{ label: 'Dressing and preparation' },
{ label: 'Viewing', value: 'Same venue' },
{ label: 'Funeral announcement' },
],
},
{
id: 'extras',
title: 'Optional Extras',
editStepId: 'extras',
items: [
{ label: 'Catering', priceLabel: 'Price on application' },
{ label: 'Live musician', value: 'Vocalist', price: 450 },
{ label: 'Coffin bearing', value: 'Family and friends' },
{ label: 'Newspaper notice', price: 250 },
],
},
];
// ─── Meta ────────────────────────────────────────────────────────────────────
const meta: Meta = {
title: 'Pages/SummaryStep',
component: SummaryStep,
tags: ['autodocs'],
parameters: {
layout: 'fullscreen',
},
};
export default meta;
type Story = StoryObj;
// ─── At-need (default) ──────────────────────────────────────────────────────
/** Full summary for at-need flow with allowances */
export const Default: Story = {
render: () => (
alert('Confirmed — proceed to payment')}
onBack={() => alert('Back')}
onSaveAndExit={() => alert('Save')}
onEdit={(stepId) => alert(`Edit: ${stepId}`)}
onShareByEmail={(emails) => alert(`Share to: ${emails.join(', ')}`)}
navigation={nav}
/>
),
};
// ─── Coffin fully covered ───────────────────────────────────────────────────
/** Coffin fully covered by allowance */
export const FullyCovered: Story = {
render: () => {
const sections = sampleSections.map((s) =>
s.id === 'coffin' ? { ...s, price: 900, allowanceAmount: 1000 } : s,
);
return (
alert('Confirmed')}
onBack={() => alert('Back')}
onEdit={(stepId) => alert(`Edit: ${stepId}`)}
onShareByEmail={(emails) => alert(`Share to: ${emails.join(', ')}`)}
navigation={nav}
/>
);
},
};
// ─── Pre-planning ───────────────────────────────────────────────────────────
/** Pre-planning variant — "Save your plan" CTA */
export const PrePlanning: Story = {
render: () => (
alert('Plan saved')}
onBack={() => alert('Back')}
onEdit={(stepId) => alert(`Edit: ${stepId}`)}
onShareByEmail={(emails) => alert(`Share to: ${emails.join(', ')}`)}
isPrePlanning
navigation={nav}
/>
),
};
// ─── Loading ────────────────────────────────────────────────────────────────
/** Confirm button loading */
export const Loading: Story = {
render: () => (
{}}
loading
navigation={nav}
/>
),
};