diff --git a/frontend/app/editor.tsx b/frontend/app/editor.tsx
index fc02422..af29bfa 100644
--- a/frontend/app/editor.tsx
+++ b/frontend/app/editor.tsx
@@ -29,9 +29,9 @@ import dynamic from "next/dynamic";
const MonacoDiffEditor = dynamic(() => import("./monaco"), {
ssr: false,
loading: () => (
-
-
Loading...
- )
+
+
Loading...
+ )
});
const { Sider, Content } = Layout;
@@ -230,6 +230,9 @@ export default function DiffEditor({
+
+ } onClick={() => { updateNew(null, ''); updateOld(null, ''); setSelectedKey('') }}>Reset
+
>)
const DiffWindow = () => (<>
diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx
index 9c888b8..f348587 100644
--- a/frontend/app/page.tsx
+++ b/frontend/app/page.tsx
@@ -24,15 +24,24 @@ import Col from 'antd/es/col';
import Form from 'antd/es/form';
import Divider from 'antd/es/divider';
import { Color, ColorFactory } from 'antd/es/color-picker/color';
+import { zipSync, Unzipped } from 'fflate/browser';
import Giscus from './giscus';
import message from 'antd/es/message';
import DiffEditor from './editor';
+import type { ValidateStatus } from 'antd/es/form/FormItem';
import { useState, useEffect, useRef } from 'react';
const { Option } = Select;
export default function Home() {
+ const [oldValidateStatus, setOldValidateStatus] = useState('')
+ const [newValidateStatus, setNewValidateStatus] = useState('')
+ const [oldTreeData, setOldTreeData] = useState(null)
+ const [newTreeData, setNewTreeData] = useState(null)
+
+ const hasTreeData = oldTreeData !== null || newTreeData !== null
+
const submitButton = useRef(null);
const [dockerCmd, setDockerCmd] = useState("docker run --rm -v :/work am009/latexdiff-web-worker");
const [configJson, setConfigJson] = useState("");
@@ -144,12 +153,50 @@ export default function Home() {
message.error("Failed to generate diff pdf.", 6);
}
}
+
+ const treeToFile = (tree: Unzipped) => {
+ const data = zipSync(tree, { level: 0 });
+ return new Blob([data], { type: 'application/zip' })
+ }
+
// Submitting the form
const onFinish = (values: any) => {
- console.log("Success:", values);
+ console.log("Submit values:", values);
+ console.log("Tree values:", hasTreeData, oldTreeData, newTreeData);
+ if (hasTreeData) {
+ if (oldTreeData === null || newTreeData === null) {
+ message.error('Please select both old and new project zip file!')
+ setCurrentTab("editor");
+ return
+ }
+ } else {
+ setOldValidateStatus(values.old_zip === undefined || values.old_zip.length === 0 ? 'error' : '')
+ setNewValidateStatus(values.new_zip === undefined || values.new_zip.length === 0 ? 'error' : '')
+ if (values.old_zip === undefined) {
+ message.error('Please select old project zip file!')
+ return
+ }
+ if (values.new_zip === undefined) {
+ message.error('Please select new project zip file!')
+ return
+ }
+ }
+
+
let form = new FormData();
- form.append("old_zip", values.old_zip[0].originFileObj);
- form.append("new_zip", values.new_zip[0].originFileObj);
+ if (hasTreeData) {
+ if (oldTreeData === null || newTreeData === null) {
+ message.error('Please select both old and new project zip file!')
+ setCurrentTab("editor");
+ return
+ }
+ form.append("old_zip", treeToFile(oldTreeData), "old.zip");
+ form.append("new_zip", treeToFile(newTreeData), "new.zip");
+ } else {
+ form.append("old_zip", values.old_zip[0].originFileObj);
+ form.append("new_zip", values.new_zip[0].originFileObj);
+ }
+
let config = genConfig();
setConfigJson(JSON.stringify(config));
console.log("Current config:", config);
@@ -301,22 +348,26 @@ export default function Home() {
setFields({ ...fields, api_endpoint: e.target.value })} />
-
- false} maxCount={1} accept='zip,application/zip,application/x-zip,application/x-zip-compressed'>
- }>Select Old Latex zip project
+ help={oldValidateStatus === 'error' ? "*Please select old project zip file!" : undefined}>
+ false} maxCount={1} accept='zip,application/zip,application/x-zip,application/x-zip-compressed'>
+ }>Select Old Latex zip project
-
- false} maxCount={1} accept='zip,application/zip,application/x-zip,application/x-zip-compressed'>
- }>Select New Latex zip project
+ help={newValidateStatus === 'error' ? "*Please select new project zip file!" : undefined}>
+ false} maxCount={1} accept='zip,application/zip,application/x-zip,application/x-zip-compressed'>
+ }>Select New Latex zip project
@@ -440,7 +491,7 @@ export default function Home() {
git-latexdiff web
);
- let editor = ()
+ let editor = ()
let right = currentTab === 'editor' ? next : submit2
return (
@@ -464,7 +515,7 @@ export default function Home() {
}}>
git-latexdiff web is an online tool based on latexdiff and git-latexdiff
- Source code on Github / Use it offline
+ Source code on Github / Use it offline