diff --git a/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.stories.tsx b/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.stories.tsx index 81e7e34f41..3a1b4d61fe 100644 --- a/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.stories.tsx +++ b/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.stories.tsx @@ -3,7 +3,7 @@ import type {Meta, StoryObj} from '@storybook/react'; import FileUpload from './FileUpload'; const meta = { - title: 'Global / Basic File Upload', + title: 'Global / File Upload', component: FileUpload, tags: ['autodocs'] } satisfies Meta; @@ -12,5 +12,15 @@ export default meta; type Story = StoryObj; export const Default: Story = { - args: {} + args: { + id: 'test-file', + onUpload: (file: File) => { + alert(`You're uploading: ${file.name}`); + }, + children: ( +
+ Click here to upload +
+ ) + } }; diff --git a/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.tsx b/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.tsx index 230f667b58..ba8e1b7b1d 100644 --- a/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.tsx +++ b/ghost/admin-x-settings/src/admin-x-ds/global/FileUpload.tsx @@ -1,12 +1,17 @@ -import Button from './Button'; -import React from 'react'; +import React, {useCallback, useEffect} from 'react'; import {ChangeEvent, useState} from 'react'; export interface FileUploadProps { + id: string; + + /** + * Can be any component that has no default onClick eventh handline. E.g. buttons and links won't work + */ + children?: React.ReactNode; onUpload: (file: File) => void; } -const FileUpload: React.FC = ({onUpload}) => { +const FileUpload: React.FC = ({id, onUpload, children, ...props}) => { const [selectedFile, setSelectedFile] = useState(null); const handleFileChange = (event: ChangeEvent) => { @@ -15,22 +20,21 @@ const FileUpload: React.FC = ({onUpload}) => { } }; - const handleFileUpload = () => { + const handleFileUpload = useCallback(() => { if (selectedFile) { onUpload?.(selectedFile); } - }; + }, [onUpload, selectedFile]); + + useEffect(() => { + handleFileUpload(); + }, [handleFileUpload]); return ( -
- -
+ ); };