mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-09-26 17:52:59 +02:00
Feature/remove images (#4503)
This commit is contained in:
parent
0c08764669
commit
f2a6e95fcf
@ -1810,10 +1810,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"removeImage": {
|
"removeImage": {
|
||||||
"title": "Remove image",
|
"title": "Remove Images",
|
||||||
"header": "Remove image",
|
"header": "Remove Images",
|
||||||
"removeImage": "Remove image",
|
"removeImage": "Remove Images",
|
||||||
"submit": "Remove image"
|
"submit": "Remove Images",
|
||||||
|
"results": {
|
||||||
|
"title": "Remove Images Results"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"failed": "Failed to remove images from the PDF."
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"splitByChapters": {
|
"splitByChapters": {
|
||||||
"title": "Split PDF by Chapters",
|
"title": "Split PDF by Chapters",
|
||||||
|
@ -22,6 +22,7 @@ import AutoRename from "../tools/AutoRename";
|
|||||||
import SingleLargePage from "../tools/SingleLargePage";
|
import SingleLargePage from "../tools/SingleLargePage";
|
||||||
import UnlockPdfForms from "../tools/UnlockPdfForms";
|
import UnlockPdfForms from "../tools/UnlockPdfForms";
|
||||||
import RemoveCertificateSign from "../tools/RemoveCertificateSign";
|
import RemoveCertificateSign from "../tools/RemoveCertificateSign";
|
||||||
|
import RemoveImage from "../tools/RemoveImage";
|
||||||
import CertSign from "../tools/CertSign";
|
import CertSign from "../tools/CertSign";
|
||||||
import BookletImposition from "../tools/BookletImposition";
|
import BookletImposition from "../tools/BookletImposition";
|
||||||
import Flatten from "../tools/Flatten";
|
import Flatten from "../tools/Flatten";
|
||||||
@ -533,11 +534,14 @@ export function useFlatToolRegistry(): ToolRegistry {
|
|||||||
},
|
},
|
||||||
removeImage: {
|
removeImage: {
|
||||||
icon: <LocalIcon icon="remove-selection-rounded" width="1.5rem" height="1.5rem" />,
|
icon: <LocalIcon icon="remove-selection-rounded" width="1.5rem" height="1.5rem" />,
|
||||||
name: t("home.removeImage.title", "Remove Image"),
|
name: t("home.removeImage.title", "Remove Images"),
|
||||||
component: null,
|
component: RemoveImage,
|
||||||
description: t("home.removeImage.desc", "Remove images from PDF documents"),
|
description: t("home.removeImage.desc", "Remove all images from a PDF document"),
|
||||||
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
categoryId: ToolCategoryId.STANDARD_TOOLS,
|
||||||
subcategoryId: SubcategoryId.REMOVAL,
|
subcategoryId: SubcategoryId.REMOVAL,
|
||||||
|
maxFiles: -1,
|
||||||
|
endpoints: ["remove-image-pdf"],
|
||||||
|
operationConfig: undefined,
|
||||||
synonyms: getSynonyms(t, "removeImage"),
|
synonyms: getSynonyms(t, "removeImage"),
|
||||||
},
|
},
|
||||||
removePassword: {
|
removePassword: {
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import { useToolOperation, ToolOperationConfig, ToolType } from '../shared/useToolOperation';
|
||||||
|
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
|
||||||
|
import type { RemoveImageParameters } from './useRemoveImageParameters';
|
||||||
|
|
||||||
|
export const buildRemoveImageFormData = (_params: RemoveImageParameters, file: File): FormData => {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append('fileInput', file);
|
||||||
|
return formData;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const removeImageOperationConfig: ToolOperationConfig<RemoveImageParameters> = {
|
||||||
|
toolType: ToolType.singleFile,
|
||||||
|
buildFormData: buildRemoveImageFormData,
|
||||||
|
operationType: 'removeImage',
|
||||||
|
endpoint: '/api/v1/general/remove-image-pdf',
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useRemoveImageOperation = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
return useToolOperation<RemoveImageParameters>({
|
||||||
|
...removeImageOperationConfig,
|
||||||
|
getErrorMessage: createStandardErrorHandler(
|
||||||
|
t('removeImage.error.failed', 'Failed to remove images from the PDF.')
|
||||||
|
),
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
import { useBaseParameters } from '../shared/useBaseParameters';
|
||||||
|
import type { BaseParametersHook } from '../shared/useBaseParameters';
|
||||||
|
|
||||||
|
export type RemoveImageParameters = Record<string, never>;
|
||||||
|
|
||||||
|
export const defaultParameters: RemoveImageParameters = {};
|
||||||
|
|
||||||
|
export type RemoveImageParametersHook = BaseParametersHook<RemoveImageParameters>;
|
||||||
|
|
||||||
|
export const useRemoveImageParameters = (): RemoveImageParametersHook => {
|
||||||
|
return useBaseParameters({
|
||||||
|
defaultParameters,
|
||||||
|
endpointName: 'remove-image-pdf',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
45
frontend/src/tools/RemoveImage.tsx
Normal file
45
frontend/src/tools/RemoveImage.tsx
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { createToolFlow } from "../components/tools/shared/createToolFlow";
|
||||||
|
import { useRemoveImageParameters } from "../hooks/tools/removeImage/useRemoveImageParameters";
|
||||||
|
import { useRemoveImageOperation } from "../hooks/tools/removeImage/useRemoveImageOperation";
|
||||||
|
import { useBaseTool } from "../hooks/tools/shared/useBaseTool";
|
||||||
|
import { BaseToolProps, ToolComponent } from "../types/tool";
|
||||||
|
|
||||||
|
const RemoveImage = (props: BaseToolProps) => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const base = useBaseTool(
|
||||||
|
'removeImage',
|
||||||
|
useRemoveImageParameters,
|
||||||
|
useRemoveImageOperation,
|
||||||
|
props
|
||||||
|
);
|
||||||
|
|
||||||
|
return createToolFlow({
|
||||||
|
files: {
|
||||||
|
selectedFiles: base.selectedFiles,
|
||||||
|
isCollapsed: base.hasResults,
|
||||||
|
},
|
||||||
|
steps: [],
|
||||||
|
executeButton: {
|
||||||
|
text: t("removeImage.submit", "Remove Images"),
|
||||||
|
isVisible: !base.hasResults,
|
||||||
|
loadingText: t("loading"),
|
||||||
|
onClick: base.handleExecute,
|
||||||
|
disabled: !base.params.validateParameters() || !base.hasFiles || !base.endpointEnabled,
|
||||||
|
},
|
||||||
|
review: {
|
||||||
|
isVisible: base.hasResults,
|
||||||
|
operation: base.operation,
|
||||||
|
title: t("removeImage.results.title", "Remove Images Results"),
|
||||||
|
onFileClick: base.handleThumbnailClick,
|
||||||
|
onUndo: base.handleUndo,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
RemoveImage.tool = () => useRemoveImageOperation;
|
||||||
|
|
||||||
|
export default RemoveImage as ToolComponent;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user