import type { Meta, StoryObj } from '@storybook/react-vite' import { RecordView } from './RecordView' import type { RecordAction, RecordViewProps } from './RecordView' import type { SiteNavPage } from '../SiteNav' import { Home, List, Inbox, FolderOpen, BarChart3, Search, MessagesSquare, } from 'lucide-react' import { useState, useEffect } from 'react' import { CardLayout } from '../Card/CardLayout' import { HeadingField } from '../Heading/HeadingField' import { RichTextDisplayField } from '../RichText/RichTextDisplayField' import { TextItem } from '../RichText/TextItem' /** Shared render function that wires up stateful view switching */ const InteractiveRender = (args: RecordViewProps) => { const [viewIndex, setViewIndex] = useState(args.selectedViewIndex ?? 0) useEffect(() => { setViewIndex(args.selectedViewIndex ?? 0) }, [args.selectedViewIndex]) return ( ) } const meta = { title: 'Templates/RecordView', component: RecordView, tags: ['autodocs'], parameters: { layout: 'fullscreen' }, render: InteractiveRender, } satisfies Meta export default meta type Story = StoryObj const sitePages: SiteNavPage[] = [ { label: 'Home', icon: Home }, { label: 'Records', icon: List, isSelected: true }, { label: 'Inbox', icon: Inbox, badge: '(3)' }, { label: 'Directory', icon: FolderOpen, isGroup: true, children: [ { label: 'People' }, { label: 'Teams' }, ], }, { label: 'Reports', icon: BarChart3 }, { label: 'Search', icon: Search }, { label: 'Chat', icon: MessagesSquare }, ] const recordActions: RecordAction[] = [ { label: 'EDIT' }, { label: 'APPROVE' }, { label: 'EXPORT' }, { label: 'Archive' }, { label: 'Delete' }, ] const recordViews = [ { label: 'Summary', content: (
)}, { label: 'Details', content: (
)}, { label: 'Activity', content: (
]} />
)}, { label: 'Documents' }, { label: 'History' }, ] export const Default: Story = { args: { displayName: 'My Application', pages: sitePages, recordTitle: 'REC-001 | Sample Record', recordActions, views: recordViews, userName: 'Jane Doe', selectedViewIndex: 0, }, } export const CollapsedNav: Story = { args: { ...Default.args, collapsed: true, }, } export const MinimalRecord: Story = { args: { displayName: 'My Application', pages: [{ label: 'Home', icon: Home, isSelected: true }], recordTitle: 'Case #12345', recordActions: [{ label: 'EDIT' }], views: [{ label: 'Summary' }, { label: 'History' }], userName: 'Alex Brown', selectedViewIndex: 0, }, } export const NoActions: Story = { args: { displayName: 'My Application', pages: sitePages, recordTitle: 'Read-Only Record', recordActions: [], views: [{ label: 'Summary' }, { label: 'Details' }], userName: 'Jane Doe', selectedViewIndex: 0, }, } export const ManyActions: Story = { args: { displayName: 'My Application', pages: sitePages, recordTitle: 'REC-002 | Record With Many Actions', recordActions: [ { label: 'UPDATE' }, { label: 'CREATE DOCUMENT' }, { label: 'UPLOAD DOCUMENTS' }, { label: 'Submit for Review' }, { label: 'Submit to Contracting' }, { label: 'Mark Inactive' }, { label: 'Copy Record' }, ], views: recordViews, userName: 'Jane Doe', selectedViewIndex: 0, }, }