From 7f94b5f9f5b8ae0808c61b738e176955c9b89f4b Mon Sep 17 00:00:00 2001 From: Katie George Date: Thu, 17 Oct 2024 15:14:46 -0700 Subject: [PATCH] chore: Arrange test pages --- pages/file-upload/deconstructed.page.tsx | 101 ++++++------------- pages/prompt-input/with-file-upload.page.tsx | 93 +++++++++++++++++ src/file-token-group/interfaces.ts | 4 +- 3 files changed, 126 insertions(+), 72 deletions(-) create mode 100644 pages/prompt-input/with-file-upload.page.tsx diff --git a/pages/file-upload/deconstructed.page.tsx b/pages/file-upload/deconstructed.page.tsx index 6558a54dd6..ec1484589f 100644 --- a/pages/file-upload/deconstructed.page.tsx +++ b/pages/file-upload/deconstructed.page.tsx @@ -12,7 +12,6 @@ import { FormField, Header, Icon, - PromptInput, } from '~components'; import SpaceBetween from '~components/space-between'; @@ -23,7 +22,6 @@ import { validateContractFiles } from './validations'; export default function FileUploadScenarioStandalone() { const contractsRef = useRef(null); - const [textareaValue, setTextareaValue] = useState(''); const [acceptMultiple, setAcceptMultiple] = useState(true); const [verticalAlign, setVerticalAlign] = useState(false); @@ -31,8 +29,8 @@ export default function FileUploadScenarioStandalone() { const isFileBeingDragged = useDropzoneVisible(acceptMultiple); - // const contractsValidationErrors = validateContractFiles(formState.files); - // const contractsErrors = contractsValidationErrors ?? formState.fileErrors; + const contractsValidationErrors = validateContractFiles(formState.files); + const contractsErrors = contractsValidationErrors ?? formState.fileErrors; const hasError = formState.status === 'error'; useEffect(() => { @@ -56,7 +54,12 @@ export default function FileUploadScenarioStandalone() { return ( -
File upload: deconstructed
+
+ File upload: deconstructed +
setAcceptMultiple(event.detail.checked)}> Accept multiple files @@ -65,82 +68,40 @@ export default function FileUploadScenarioStandalone() { Vertical alignment - - setTextareaValue(event.detail.value)} - onAction={(event: any) => window.alert(`Submitted the following: ${event.detail.value}`)} - placeholder="Ask a question" - maxRows={4} - disableSecondaryActionsPaddings={true} - secondaryActions={ - - handleFilesChange(event.detail.value)} - i18nStrings={i18nStrings} - /> - - } - secondaryContent={ - isFileBeingDragged ? ( - handleFilesChange(event.detail.value)}> - - - Drop files here - - - ) : formState.files.length > 0 ? ( - <> - ({ - file, - loading: formState.status === 'uploading', - errorText: file.size > 5000000 ? 'File size cannot exceed 5MB' : undefined, - }))} - showFileLastModified={true} - showFileSize={true} - showFileThumbnail={true} - i18nStrings={i18nStrings} - onDismiss={onDismiss} - /> - - ) : undefined - } - /> - - - handleFilesChange(event.detail.value)} - // accept="application/pdf, image/*" - i18nStrings={i18nStrings} - /> + {isFileBeingDragged ? ( + handleFilesChange(event.detail.value)}> + + + Drop files here + + + ) : ( + handleFilesChange(event.detail.value)} + // accept="application/pdf, image/*" + i18nStrings={i18nStrings} + /> + )} ({ + items={formState.files.map((file, index) => ({ file, loading: formState.status === 'uploading', - errorText: file.size > 5000000 ? 'File size cannot exceed 5MB' : undefined, + errorText: contractsErrors?.fileErrors?.[index] === null ? undefined : contractsErrors?.fileErrors?.[index], }))} - // showFileLastModified={true} - // showFileSize={true} + showFileLastModified={true} + showFileSize={true} showFileThumbnail={true} i18nStrings={i18nStrings} onDismiss={onDismiss} diff --git a/pages/prompt-input/with-file-upload.page.tsx b/pages/prompt-input/with-file-upload.page.tsx new file mode 100644 index 0000000000..2245b96e5b --- /dev/null +++ b/pages/prompt-input/with-file-upload.page.tsx @@ -0,0 +1,93 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import React, { useState } from 'react'; + +import { + Box, + FileDropzone, + FileInput, + FileTokenGroup, + FormField, + Header, + Icon, + PromptInput, + SpaceBetween, +} from '~components'; + +import { i18nStrings } from '../file-upload/shared'; +import { useDropzoneVisible } from '../file-upload/use-dropzone-visible'; + +export default function PromptInputWithFileUpload() { + const [textareaValue, setTextareaValue] = useState(''); + const [files, setFiles] = useState([]); + + const isFileBeingDragged = useDropzoneVisible(true); + + const handleFilesChange = (newFiles: File[]) => { + const newValue = [...files, ...newFiles]; + setFiles(newValue); + }; + + const onDismiss = (event: { detail: { fileIndex: number } }) => { + const newItems = [...files]; + newItems.splice(event.detail.fileIndex, 1); + setFiles(newItems); + }; + + return ( + + +
Prompt input with file upload
+ + setTextareaValue(event.detail.value)} + onAction={(event: any) => window.alert(`Submitted the following: ${event.detail.value}`)} + placeholder="Ask a question" + maxRows={4} + disableSecondaryActionsPaddings={true} + secondaryActions={ + + handleFilesChange(event.detail.value)} + i18nStrings={i18nStrings} + /> + + } + secondaryContent={ + isFileBeingDragged ? ( + handleFilesChange(event.detail.value)}> + + + Drop files here + + + ) : files.length > 0 ? ( + <> + ({ + file, + errorText: file.size > 5000000 ? 'File size cannot exceed 5MB' : undefined, + }))} + showFileLastModified={true} + showFileSize={true} + showFileThumbnail={true} + i18nStrings={i18nStrings} + onDismiss={onDismiss} + /> + + ) : undefined + } + /> + +
+
+ ); +} diff --git a/src/file-token-group/interfaces.ts b/src/file-token-group/interfaces.ts index 7470d24aee..0d6a6e764c 100644 --- a/src/file-token-group/interfaces.ts +++ b/src/file-token-group/interfaces.ts @@ -94,7 +94,7 @@ export namespace FileTokenGroupProps { disabled?: boolean; loading?: boolean; loadingText?: string; - errorText?: string | null; - warningText?: string | null; + errorText?: null | string; + warningText?: null | string; } }