Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/language/texts/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export function en() {
'form_filler.file_uploader_delete_warning': 'Are you sure you want to delete this attachment?',
'form_filler.file_uploader_delete_button_confirm': 'Yes, delete attachment',
'form_filler.file_uploader_list_header_file_size': 'File size',
'form_filler.file_uploader_list_header_thumbnail': 'Thumbnail',
'form_filler.file_uploader_list_header_name': 'Name',
'form_filler.file_uploader_list_header_status': 'Status',
'form_filler.file_uploader_list_header_delete_sr': 'Delete',
Expand Down
1 change: 1 addition & 0 deletions src/language/texts/nb.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ export function nb() {
'form_filler.file_uploader_delete_warning': 'Er du sikker på at du vil slette dette vedlegget?',
'form_filler.file_uploader_delete_button_confirm': 'Ja, slett vedlegg',
'form_filler.file_uploader_list_header_file_size': 'Filstørrelse',
'form_filler.file_uploader_list_header_thumbnail': 'Miniatyrbilde',
'form_filler.file_uploader_list_header_name': 'Navn',
'form_filler.file_uploader_list_header_status': 'Status',
'form_filler.file_uploader_list_status_done': 'Ferdig lastet',
Expand Down
1 change: 1 addition & 0 deletions src/language/texts/nn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ export function nn() {
'form_filler.file_uploader_delete_warning': 'Er du sikker på at du vil sletta dette vedlegget?',
'form_filler.file_uploader_delete_button_confirm': 'Ja, slett vedlegg',
'form_filler.file_uploader_list_header_file_size': 'Filstorleik',
'form_filler.file_uploader_list_header_thumbnail': 'Miniatyrbilete',
'form_filler.file_uploader_list_header_name': 'Namn',
'form_filler.file_uploader_list_header_status': 'Status',
'form_filler.file_uploader_list_status_done': 'Ferdig lasta',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.thumbnailContainer {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
}

.thumbnail {
max-width: 100px;
max-height: 70px;
object-fit: contain;
border-radius: 2px;
}

.thumbnailMobile {
max-width: 80px;
max-height: 60px;
object-fit: contain;
border-radius: 2px;
}
58 changes: 58 additions & 0 deletions src/layout/FileUpload/FileUploadTable/AttachmentThumbnail.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import React from 'react';

import { isAttachmentUploaded } from 'src/features/attachments';
import { useInstanceDataElements, useLaxInstanceId } from 'src/features/instance/InstanceContext';
import { useCurrentLanguage } from 'src/features/language/LanguageProvider';
import classes from 'src/layout/FileUpload/FileUploadTable/AttachmentThumbnail.module.css';
import { getDataElementUrl } from 'src/utils/urls/appUrlHelper';
import { makeUrlRelativeIfSameDomain } from 'src/utils/urls/urlHelper';
import type { IAttachment } from 'src/features/attachments';
interface IAttachmentThumbnailProps {
attachment: IAttachment;
mobileView: boolean;
}

export const AttachmentThumbnail = ({ attachment, mobileView }: IAttachmentThumbnailProps) => {
// Get all data elements from the instance
const dataElements = useInstanceDataElements(undefined);
const instanceId = useLaxInstanceId();
const language = useCurrentLanguage();

// Only uploaded attachments can have thumbnails
if (!isAttachmentUploaded(attachment)) {
return null;
}

//Check for thumbnail metadata in the attachment
const thumbnailLink = attachment.data.metadata?.find((meta) => meta.key === 'thumbnailLink')?.value ?? null;

if (!thumbnailLink) {
return null;
}

// Find the thumbnail data element
const thumbnailDataElement = dataElements.find(
(el) =>
el.dataType === 'thumbnail' &&
el.metadata?.some((meta) => meta.key === 'attachmentLink' && meta.value === thumbnailLink),
);

if (!thumbnailDataElement?.id || !instanceId) {
return null;
}

const thumbnailUrl = makeUrlRelativeIfSameDomain(getDataElementUrl(instanceId, thumbnailDataElement.id, language));

return (
<div
className={classes.thumbnailContainer}
data-testid='attachment-thumbnail'
>
<img
src={thumbnailUrl}
alt={`Thumbnail for ${attachment.data.filename}`}
className={mobileView ? classes.thumbnailMobile : classes.thumbnail}
/>
</div>
);
};
Loading
Loading