diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json index ff2ee732c..341da26f2 100644 --- a/frontend/public/locales/en-GB/translation.json +++ b/frontend/public/locales/en-GB/translation.json @@ -1080,7 +1080,6 @@ }, "changeMetadata": { "tags": "Title,author,date,creation,time,publisher,producer,stats", - "title": "Change Metadata", "header": "Change Metadata", "selectText": { "1": "Please edit the variables you wish to change", @@ -1089,15 +1088,103 @@ "4": "Other Metadata:", "5": "Add Custom Metadata Entry" }, - "author": "Author:", - "creationDate": "Creation Date (yyyy/MM/dd HH:mm:ss):", - "creator": "Creator:", - "keywords": "Keywords:", - "modDate": "Modification Date (yyyy/MM/dd HH:mm:ss):", - "producer": "Producer:", - "subject": "Subject:", - "trapped": "Trapped:", - "submit": "Change" + "submit": "Change", + "filenamePrefix": "metadata", + "settings": { + "title": "Metadata Settings" + }, + "standardFields": { + "title": "Standard Metadata" + }, + "deleteAll": { + "label": "Delete all metadata", + "description": "Remove all metadata from the PDF document" + }, + "title": { + "label": "Title", + "placeholder": "Document title" + }, + "author": { + "label": "Author", + "placeholder": "Document author" + }, + "subject": { + "label": "Subject", + "placeholder": "Document subject" + }, + "keywords": { + "label": "Keywords", + "placeholder": "Document keywords" + }, + "creator": { + "label": "Creator", + "placeholder": "Document creator" + }, + "producer": { + "label": "Producer", + "placeholder": "Document producer" + }, + "dates": { + "title": "Document Dates", + "format": "Format: yyyy/MM/dd HH:mm:ss" + }, + "creationDate": { + "label": "Creation Date" + }, + "modificationDate": { + "label": "Modification Date" + }, + "trapped": { + "label": "Trapped Status", + "description": "Indicates whether the document has been trapped for high-quality printing", + "unknown": "Unknown", + "true": "True", + "false": "False" + }, + "customFields": { + "title": "Custom Metadata", + "description": "Add custom metadata fields to the document", + "add": "Add Field", + "key": "Key", + "keyPlaceholder": "Custom key", + "value": "Value", + "valuePlaceholder": "Custom value", + "remove": "Remove" + }, + "results": { + "title": "Updated PDFs" + }, + "error": { + "failed": "An error occurred while changing the PDF metadata." + }, + "tooltip": { + "header": { + "title": "PDF Metadata Overview" + }, + "standardFields": { + "title": "Standard Fields", + "text": "Common PDF metadata fields that describe the document.", + "bullet1": "Title: Document name or heading", + "bullet2": "Author: Person who created the document", + "bullet3": "Subject: Brief description of content", + "bullet4": "Keywords: Search terms for the document", + "bullet5": "Creator/Producer: Software used to create the PDF" + }, + "dates": { + "title": "Date Fields", + "text": "When the document was created and modified.", + "bullet1": "Creation Date: When original document was made", + "bullet2": "Modification Date: When last changed", + "bullet3": "Format: yyyy/MM/dd HH:mm:ss (e.g., 2025/01/17 14:30:00)" + }, + "options": { + "title": "Additional Options", + "text": "Custom fields and privacy controls.", + "bullet1": "Custom Metadata: Add your own key-value pairs", + "bullet2": "Trapped Status: High-quality printing setting", + "bullet3": "Delete All: Remove all metadata for privacy" + } + } }, "fileToPDF": { "tags": "transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint", diff --git a/frontend/src/components/tools/changeMetadata/ChangeMetadataSettings.tsx b/frontend/src/components/tools/changeMetadata/ChangeMetadataSettings.tsx new file mode 100644 index 000000000..901802a6f --- /dev/null +++ b/frontend/src/components/tools/changeMetadata/ChangeMetadataSettings.tsx @@ -0,0 +1,196 @@ +import { Stack, TextInput, Select, Checkbox, Button, Group, Divider, Text } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import { ChangeMetadataParameters, TrappedStatus } from "../../../hooks/tools/changeMetadata/useChangeMetadataParameters"; + +interface ChangeMetadataSettingsProps { + parameters: ChangeMetadataParameters; + onParameterChange: (key: K, value: ChangeMetadataParameters[K]) => void; + disabled?: boolean; + addCustomMetadata: () => void; + removeCustomMetadata: (id: string) => void; + updateCustomMetadata: (id: string, key: string, value: string) => void; +} + +// Global date/time fixed at module load time +const currentDateTime = new Date(); +const formattedDateTime = `${currentDateTime.getFullYear()}/${String(currentDateTime.getMonth() + 1).padStart(2, '0')}/${String(currentDateTime.getDate()).padStart(2, '0')} ${String(currentDateTime.getHours()).padStart(2, '0')}:${String(currentDateTime.getMinutes()).padStart(2, '0')}:${String(currentDateTime.getSeconds()).padStart(2, '0')}`; + +const ChangeMetadataSettings = ({ + parameters, + onParameterChange, + disabled = false, + addCustomMetadata, + removeCustomMetadata, + updateCustomMetadata +}: ChangeMetadataSettingsProps) => { + const { t } = useTranslation(); + const isDeleteAllEnabled = parameters.deleteAll; + const fieldsDisabled = disabled || isDeleteAllEnabled; + + return ( + + {/* Delete All Option */} + onParameterChange('deleteAll', e.target.checked)} + disabled={disabled} + /> + + + + {/* Standard Metadata Fields */} + + + {t('changeMetadata.standardFields.title', 'Standard Metadata')} + + + onParameterChange('title', e.target.value)} + disabled={fieldsDisabled} + /> + + onParameterChange('author', e.target.value)} + disabled={fieldsDisabled} + /> + + onParameterChange('subject', e.target.value)} + disabled={fieldsDisabled} + /> + + onParameterChange('keywords', e.target.value)} + disabled={fieldsDisabled} + /> + + onParameterChange('creator', e.target.value)} + disabled={fieldsDisabled} + /> + + onParameterChange('producer', e.target.value)} + disabled={fieldsDisabled} + /> + + + + {/* Date Fields */} + + {t('changeMetadata.dates.title', 'Document Dates')} + + + {t('changeMetadata.dates.format', 'Format: yyyy/MM/dd HH:mm:ss')} + + + onParameterChange('creationDate', e.target.value)} + disabled={fieldsDisabled} + /> + + onParameterChange('modificationDate', e.target.value)} + disabled={fieldsDisabled} + /> + + {/* Trapped Status */} +