From 86831928c7c45cce083719c29f0837c3dc18023c Mon Sep 17 00:00:00 2001 From: James Brunton Date: Tue, 19 Aug 2025 12:15:21 +0100 Subject: [PATCH] Initial commit of Merge UI --- .../components/tools/merge/MergeSettings.tsx | 59 ++++++++++++ .../hooks/tools/merge/useMergeOperation.ts | 35 +++++++ .../hooks/tools/merge/useMergeParameters.ts | 39 ++++++++ frontend/src/hooks/useToolManagement.tsx | 1 + frontend/src/tools/Merge.tsx | 95 +++++++++++++++++++ testing/test_pdf_1.pdf | 74 +++++++++++++++ testing/test_pdf_2.pdf | 74 +++++++++++++++ testing/test_pdf_3.pdf | 74 +++++++++++++++ testing/test_pdf_4.pdf | 74 +++++++++++++++ 9 files changed, 525 insertions(+) create mode 100644 frontend/src/components/tools/merge/MergeSettings.tsx create mode 100644 frontend/src/hooks/tools/merge/useMergeOperation.ts create mode 100644 frontend/src/hooks/tools/merge/useMergeParameters.ts create mode 100644 frontend/src/tools/Merge.tsx create mode 100644 testing/test_pdf_1.pdf create mode 100644 testing/test_pdf_2.pdf create mode 100644 testing/test_pdf_3.pdf create mode 100644 testing/test_pdf_4.pdf diff --git a/frontend/src/components/tools/merge/MergeSettings.tsx b/frontend/src/components/tools/merge/MergeSettings.tsx new file mode 100644 index 000000000..f7611d4ec --- /dev/null +++ b/frontend/src/components/tools/merge/MergeSettings.tsx @@ -0,0 +1,59 @@ +import React from 'react'; +import { Stack, Select, Checkbox, Text } from '@mantine/core'; +import { useTranslation } from 'react-i18next'; +import { MergeParameters } from '../../../hooks/tools/merge/useMergeParameters'; + +interface MergeSettingsProps { + parameters: MergeParameters; + onParameterChange: (key: K, value: MergeParameters[K]) => void; + disabled?: boolean; +} + +const MergeSettings: React.FC = ({ + parameters, + onParameterChange, + disabled = false, +}) => { + const { t } = useTranslation(); + + const mergeOrderOptions = [ + { value: 'orderProvided', label: t('merge.orderBy.orderProvided', 'Dragging Files') }, + { value: 'byFileName', label: t('merge.orderBy.byFileName', 'By File Name') }, + { value: 'byDateModified', label: t('merge.orderBy.byDateModified', 'By Date Modified') }, + { value: 'byDateCreated', label: t('merge.orderBy.byDateCreated', 'By Date Created') }, + { value: 'byPDFTitle', label: t('merge.orderBy.byPDFTitle', 'By PDF Title') }, + ]; + + return ( + +
+ + {t('merge.orderBy.title', 'Merge Order')} + +