Make "brewToSave" prep (patch/hash/pageCount) common, and move into common hook.

This commit is contained in:
Trevor Buckner
2026-10-07 16:07:15 +00:00
parent 829c82cb72
commit 2dc088cd80
4 changed files with 16 additions and 33 deletions
+2 -16
View File
@@ -40,8 +40,6 @@ const EditPage = (props)=>{
const [alertOwnershipToTransfer, setAlertOwnershipToTransfer] = useState(false);
const [confirmGoogleTransfer, setConfirmGoogleTransfer] = useState(false);
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
const handleGoogleClick = ()=>{
if(currentBrew.authors.length > 0 && global.account?.username !== currentBrew.authors[0]) {
setAlertOwnershipToTransfer(true);
@@ -76,23 +74,12 @@ const EditPage = (props)=>{
await updateHistory(brew).catch(console.error);
await versionHistoryGarbageCollection().catch(console.error);
//Prepare content to send to server
const brewToSave = {
...brew,
text : brew.text.normalize('NFC'),
pageCount : ((brew.renderer === 'legacy' ? brew.text.match(/\\page/g) : brew.text.match(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/gm)) || []).length + 1,
patches : stringifyPatches(makePatches(encodeURI(lastSavedBrew.current.text.normalize('NFC')), encodeURI(brew.text.normalize('NFC')))),
hash : await md5(lastSavedBrew.current.text.normalize('NFC')),
textBin : undefined,
version : lastSavedBrew.current.version
};
const compressedBrew = gzipSync(strToU8(JSON.stringify(brewToSave)));
const compressedBrew = gzipSync(strToU8(JSON.stringify(brew)));
const transfer = saveToGoogle === _.isNil(brew.googleId);
const params = transfer ? `?${saveToGoogle ? 'saveToGoogle' : 'removeFromGoogle'}=true` : '';
const res = await request
.put(`/api/update/${brewToSave.editId}${params}`)
.put(`/api/update/${brew.editId}${params}`)
.set('Content-Encoding', 'gzip')
.set('Content-Type', 'application/json')
.send(compressedBrew)
@@ -173,7 +160,6 @@ const EditPage = (props)=>{
useLocalStorage,
sandbox,
showFloatingButtons,
lastSavedBrew,
save,
onSaveSuccess,
pageName,
@@ -26,8 +26,6 @@ const HomePage =(props)=>{
const [saveGoogle, setSaveGoogle] = useState(global.account?.googleId ? true : false);
const [error, setError] = useState(undefined);
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
const save = async (brew, saveToGoogle)=>{
const res = await request
.post(`/api${saveGoogle ? '?saveToGoogle=true' : ''}`)
@@ -58,7 +56,6 @@ const HomePage =(props)=>{
useLocalStorage,
sandbox,
showFloatingButtons,
lastSavedBrew,
save,
onSaveSuccess,
pageName,
+1 -12
View File
@@ -26,20 +26,10 @@ const NewPage = (props)=>{
const [saveGoogle, setSaveGoogle] = useState(global.account?.googleId ? true : false);
const [error, setError] = useState(null);
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
const save = async (brew, saveToGoogle)=>{
//Prepare content to send to server
const brewToSave = {
...brew,
text : brew.text.normalize('NFC'),
pageCount : ((brew.renderer === 'legacy' ? brew.text.match(/\\page/g) : brew.text.match(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/gm)) || []).length + 1,
textBin : undefined
};
const res = await request
.post(`/api${saveGoogle ? '?saveToGoogle=true' : ''}`)
.send(brewToSave)
.send(brew)
.catch((err)=>{
console.error('Error Updating Local Brew');
setError(err);
@@ -66,7 +56,6 @@ const NewPage = (props)=>{
useLocalStorage,
sandbox,
showFloatingButtons,
lastSavedBrew,
save,
onSaveSuccess,
pageName,
@@ -45,7 +45,6 @@ export default function useCommonEditPageFunctions(dependencies) {
useLocalStorage,
sandbox,
showFloatingButtons,
lastSavedBrew,
save,
onSaveSuccess,
pageName,
@@ -68,6 +67,7 @@ export default function useCommonEditPageFunctions(dependencies) {
const unsavedChangesRef = useRef(unsavedChanges); // onBeforeUnload lives outside React and needs ref to unsavedChanges
const warnUnsavedTimeout = useRef(null); // timers live outside React and need ref to consistently track time
const lastSavedBrew = useRef(_.cloneDeep(currentBrew));
const saveTimeout = useRef(null);
const editorRef = useRef(null);
@@ -202,7 +202,18 @@ export default function useCommonEditPageFunctions(dependencies) {
setIsSaving(true);
setError(null);
setHTMLErrors(hbfm.validate(currentBrew.text));
const brewToSave = currentBrew;
//Prepare content to send to server
const brewToSave = {
...currentBrew,
text : currentBrew.text.normalize('NFC'),
pageCount : ((currentBrew.renderer === 'legacy' ? currentBrew.text.match(/\\page/g) : currentBrew.text.match(/^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/gm)) || []).length + 1,
patches : stringifyPatches(makePatches(encodeURI(lastSavedBrew.current.text.normalize('NFC')), encodeURI(currentBrew.text.normalize('NFC')))),
hash : await md5(lastSavedBrew.current.text.normalize('NFC')),
textBin : undefined,
version : lastSavedBrew.current.version
};
let savedBrew = await save(brewToSave, saveToGoogle)
.catch((err)=>{setError(err);});
if(savedBrew) {