import type { Meta, StoryObj } from '@storybook/nextjs' import { useState } from 'react' import FileUploaderInChatInput from '.' import { FileContextProvider } from '../store' import type { FileEntity } from '../types' import type { FileUpload } from '@/app/components/base/features/types' import { SupportUploadFileTypes } from '@/app/components/workflow/types' import { TransferMethod } from '@/types/app' import { FileList } from '../file-uploader-in-chat-input/file-list' import { ToastProvider } from '@/app/components/base/toast' const mockFiles: FileEntity[] = [ { id: '1', name: 'Dataset.csv', size: 64000, type: 'text/csv', progress: 100, transferMethod: TransferMethod.local_file, supportFileType: SupportUploadFileTypes.document, }, ] const chatUploadConfig: FileUpload = { enabled: true, allowed_file_upload_methods: [TransferMethod.local_file, TransferMethod.remote_url], allowed_file_types: ['image', 'document'], number_limits: 3, } type ChatInputDemoProps = React.ComponentProps & { initialFiles?: FileEntity[] } const ChatInputDemo = ({ initialFiles = mockFiles, ...props }: ChatInputDemoProps) => { const [files, setFiles] = useState(initialFiles) return (
Simulated chat input
Type a message...
) } const meta = { title: 'Base/Data Entry/FileUploaderInChatInput', component: ChatInputDemo, parameters: { docs: { description: { component: 'Attachment trigger suited for chat inputs. Demonstrates integration with the shared file store and preview list.', }, }, nextjs: { appDirectory: true, navigation: { pathname: '/chats/demo', params: { appId: 'demo-app' }, }, }, }, tags: ['autodocs'], args: { fileConfig: chatUploadConfig, initialFiles: mockFiles, }, } satisfies Meta export default meta type Story = StoryObj export const Playground: Story = { render: args => , } export const RemoteOnly: Story = { args: { fileConfig: { ...chatUploadConfig, allowed_file_upload_methods: [TransferMethod.remote_url], }, initialFiles: [], }, }