diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/Examples.tsx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/Examples.tsx index e77ff37b67d..f63547fec65 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/Examples.tsx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/Examples.tsx @@ -1,6 +1,7 @@ import ComponentBox from '../../../../../../shared/tags/ComponentBox' import { Form, Value, Field } from '@dnb/eufemia/src/extensions/forms' import { Flex, Span } from '@dnb/eufemia/src' +import { createRequest } from '../../Form/SubmitIndicator/Examples' import { createMockFile } from '../../../../../../docs/uilib/components/upload/Examples' export const Placeholder = () => { @@ -152,8 +153,41 @@ export const Label = () => { export const LabelAndValue = () => { return ( - + + + + ) +} + +export const LabelAndValueOnFileClick = () => { + return ( + { + console.log('Clicked on file') + }} label="Label text" value={[ { @@ -164,6 +198,7 @@ export const LabelAndValue = () => { { file: createMockFile('fileName-2.png', 2000000, 'image/png'), exists: false, + isLoading: true, id: '2', }, ]} @@ -255,6 +290,68 @@ export const ListVariants = () => { ) } +export const ListVariantsOnFileClick = () => { + return ( + + { + console.log('Clicked on file') + }} + value={[ + { + file: createMockFile('fileName-1.png', 1000000, 'image/png'), + exists: false, + isLoading: true, + id: '1', + }, + { + file: createMockFile('fileName-2.png', 2000000, 'image/png'), + exists: false, + id: '2', + }, + { + file: createMockFile('fileName-3.png', 3000000, 'image/png'), + exists: false, + id: '3', + }, + ]} + label="Ordered List" + variant="ol" + /> + { + console.log('Clicked on file') + }} + value={[ + { + file: createMockFile('fileName-1.png', 1000000, 'image/png'), + exists: false, + id: '1', + }, + { + file: createMockFile('fileName-2.png', 2000000, 'image/png'), + exists: false, + id: '2', + isLoading: true, + }, + { + file: createMockFile('fileName-3.png', 3000000, 'image/png'), + exists: false, + id: '3', + isLoading: true, + }, + ]} + label="Unordered List" + variant="ul" + /> + + ) +} + export const ListTypes = () => { return ( @@ -396,28 +493,53 @@ export const ListTypes = () => { export const OnFileClick = () => { return ( - - { - window.open( - 'https://eufemia.dnb.no/images/avatars/' + fileItem.file.name, - '_blank', + + {() => { + function Component() { + async function mockAsyncFileFetching({ fileItem }) { + const request = createRequest() + console.log( + 'making API request to fetch the url of the file: ' + + fileItem.file.name, + ) + await request(2000) // Simulate a request + window.open( + 'https://eufemia.dnb.no/images/avatars/' + + fileItem.file.name, + '_blank', + ) + } + + return ( + ) - }} - /> + } + + return + }} ) } diff --git a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/demos.mdx b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/demos.mdx index 0ea47024a75..023e79d3970 100644 --- a/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/demos.mdx +++ b/packages/dnb-design-system-portal/src/docs/uilib/extensions/forms/Value/Upload/demos.mdx @@ -53,3 +53,8 @@ import * as Examples from './Examples' ### Using `onFileClick` + + + + + diff --git a/packages/dnb-eufemia/src/components/upload/UploadFileListCell.tsx b/packages/dnb-eufemia/src/components/upload/UploadFileListCell.tsx index 78cd45065d1..a44c42d7cb5 100644 --- a/packages/dnb-eufemia/src/components/upload/UploadFileListCell.tsx +++ b/packages/dnb-eufemia/src/components/upload/UploadFileListCell.tsx @@ -29,6 +29,7 @@ import { getPreviousSibling } from '../../shared/component-helper' import useUpload from './useUpload' import { getFileTypeFromExtension } from './UploadVerify' import UploadFileLink from './UploadFileListLink' +import { ProgressIndicatorAllProps } from '../progress-indicator/types' // Will be deprecated - and then default to only showing the file icon, // and not file icon per file extension type @@ -90,8 +91,6 @@ const UploadFileListCell = ({ const { file, errorMessage, isLoading } = uploadFile const hasWarning = errorMessage != null - const fileType = getFileTypeFromExtension(file) - const imageUrl = URL.createObjectURL(file) const cellRef = useRef() const exists = useExistsHighlight(id, file) @@ -122,7 +121,7 @@ const UploadFileListCell = ({ >
- {getIcon()} + {getFileIcon(file, { isLoading }, hasWarning)} {getTitle()}
@@ -142,34 +141,6 @@ const UploadFileListCell = ({ ) - function getIcon() { - if (isLoading) { - return - } - - if (hasWarning) return - - let iconFileType = fileType - - if (!iconFileType) { - const mimeParts = file.type.split('/') - iconFileType = - fileExtensionImages[mimeParts[0]] || - fileExtensionImages[mimeParts[1]] - } - - if ( - !Object.prototype.hasOwnProperty.call( - fileExtensionImages, - iconFileType - ) - ) { - iconFileType = 'file' - } - - return - } - function getTitle() { return isLoading ? (
+ } + + if (hasWarning) return + + if (!file) { + return + } + + let iconFileType = getFileTypeFromExtension(file) + + if (!iconFileType) { + const mimeParts = file.type.split('/') + iconFileType = + fileExtensionImages[mimeParts[0]] || + fileExtensionImages[mimeParts[1]] + } + + if ( + !Object.prototype.hasOwnProperty.call( + fileExtensionImages, + iconFileType + ) + ) { + iconFileType = 'file' + } + + return +} diff --git a/packages/dnb-eufemia/src/components/upload/UploadFileListLink.tsx b/packages/dnb-eufemia/src/components/upload/UploadFileListLink.tsx index 9a96178d4ca..015ed24284a 100644 --- a/packages/dnb-eufemia/src/components/upload/UploadFileListLink.tsx +++ b/packages/dnb-eufemia/src/components/upload/UploadFileListLink.tsx @@ -36,6 +36,7 @@ const UploadFileButton = (props: UploadFileButtonProps) => { const spacingClasses = createSpacingClasses(props) return (