Merge pull request #5100 from naturalcrit/new/edit/home-more-cleanup

New/edit/home Move remaining state to common hook
This commit is contained in:
Trevor Buckner
2026-10-07 15:28:32 -04:00
committed by GitHub
4 changed files with 45 additions and 103 deletions
+12 -32
View File
@@ -1,34 +1,22 @@
import './editPage.less'; import './editPage.less';
// Common imports // Common imports
import React, { useState } from 'react'; import React from 'react';
import request from '../../utils/request-middleware.js'; import request from '../../utils/request-middleware.js';
import _ from 'lodash';
import _ from 'lodash';
import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js';
import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx'; import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx';
import { DEFAULT_BREW_LOAD } from '../../../../server/brewDefaults.js';
// Page specific imports // Page specific imports
import { gzipSync, strToU8 } from 'fflate'; import { gzipSync, strToU8 } from 'fflate';
import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js'; import { updateHistory, versionHistoryGarbageCollection } from '../../utils/versionHistory.js';
const useLocalStorage = false;
const sandbox = false;
const showFloatingButtons = false;
const showEditorButtons = true;
const pageName = 'editPage';
const EditPage = (props)=>{ const EditPage = (props)=>{
props = { props = {
brew : DEFAULT_BREW_LOAD, brew : DEFAULT_BREW_LOAD,
...props ...props
}; };
const [currentBrew, setCurrentBrew] = useState(props.brew);
const [error, setError] = useState(null);
const save = async (brew, saveToGoogle)=>{ const save = async (brew, saveToGoogle)=>{
await updateHistory(brew).catch(console.error); await updateHistory(brew).catch(console.error);
await versionHistoryGarbageCollection().catch(console.error); await versionHistoryGarbageCollection().catch(console.error);
@@ -41,12 +29,7 @@ const EditPage = (props)=>{
.put(`/api/update/${brew.editId}${params}`) .put(`/api/update/${brew.editId}${params}`)
.set('Content-Encoding', 'gzip') .set('Content-Encoding', 'gzip')
.set('Content-Type', 'application/json') .set('Content-Type', 'application/json')
.send(compressedBrew) .send(compressedBrew);
.catch((err)=>{
console.error('Error Updating Local Brew');
setError(err);
});
if(!res) return;
const updatedFields = { const updatedFields = {
googleId : res.body.googleId ?? null, //TODO: investigate if we can set googleId:null in server/update instead of undefined googleId : res.body.googleId ?? null, //TODO: investigate if we can set googleId:null in server/update instead of undefined
@@ -65,18 +48,15 @@ const EditPage = (props)=>{
const { const {
renderPanels, renderPanels,
} = useCommonEditPageFunctions({ } = useCommonEditPageFunctions({
error, useLocalStorage : false,
setError, sandbox : false,
currentBrew, showFloatingButtons : false,
setCurrentBrew, showEditorButtons : true,
useLocalStorage, pageName : 'newPage',
sandbox, brew : props.brew,
showFloatingButtons, userThemes : props.userThemes,
save, save,
onSaveSuccess, onSaveSuccess,
pageName,
showEditorButtons,
userThemes : props.userThemes
}); });
return renderPanels(); return renderPanels();
+12 -32
View File
@@ -1,20 +1,11 @@
import './homePage.less'; import './homePage.less';
// Common imports // Common imports
import React, { useState } from 'react'; import React from 'react';
import request from '../../utils/request-middleware.js'; import request from '../../utils/request-middleware.js';
import _ from 'lodash'; import _ from 'lodash';
import { DEFAULT_BREW } from '../../../../server/brewDefaults.js';
import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx'; import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx';
import { DEFAULT_BREW } from '../../../../server/brewDefaults.js';
// Page specific imports
const useLocalStorage = false;
const sandbox = true;
const showFloatingButtons = true;
const showEditorButtons = false;
const pageName = 'homePage';
const HomePage =(props)=>{ const HomePage =(props)=>{
props = { props = {
@@ -22,18 +13,10 @@ const HomePage =(props)=>{
...props ...props
}; };
const [currentBrew, setCurrentBrew] = useState(props.brew);
const [error, setError] = useState(undefined);
const save = async (brew, saveToGoogle)=>{ const save = async (brew, saveToGoogle)=>{
const res = await request const res = await request
.post(`/api${saveToGoogle ? '?saveToGoogle=true' : ''}`) .post(`/api${saveToGoogle ? '?saveToGoogle=true' : ''}`)
.send(brew) .send(brew);
.catch((err)=>{
console.error('Error Updating Local Brew');
setError(err);
});
if(!res) return;
return res.body; return res.body;
}; };
@@ -46,18 +29,15 @@ const HomePage =(props)=>{
const { const {
renderPanels renderPanels
} = useCommonEditPageFunctions({ } = useCommonEditPageFunctions({
error, useLocalStorage : false,
setError, sandbox : true,
currentBrew, showFloatingButtons : true,
setCurrentBrew, showEditorButtons : false,
useLocalStorage, pageName : 'homePage',
sandbox, brew : props.brew,
showFloatingButtons, userThemes : {},
save, save,
onSaveSuccess, onSaveSuccess,
pageName,
showEditorButtons,
userThemes : {}
}); });
return renderPanels(); return renderPanels();
+12 -32
View File
@@ -1,20 +1,11 @@
import './newPage.less'; import './newPage.less';
// Common imports // Common imports
import React, { useState } from 'react'; import React from 'react';
import request from '../../utils/request-middleware.js'; import request from '../../utils/request-middleware.js';
import _ from 'lodash'; import _ from 'lodash';
import { DEFAULT_BREW } from '../../../../server/brewDefaults.js';
import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx'; import useCommonEditPageFunctions from '../../utils/commonEditPageFunctions.jsx';
import { DEFAULT_BREW } from '../../../../server/brewDefaults.js';
// Page specific imports
const useLocalStorage = true;
const sandbox = true;
const showFloatingButtons = false;
const showEditorButtons = true;
const pageName = 'newPage';
const NewPage = (props)=>{ const NewPage = (props)=>{
props = { props = {
@@ -22,18 +13,10 @@ const NewPage = (props)=>{
...props ...props
}; };
const [currentBrew, setCurrentBrew] = useState(props.brew);
const [error, setError] = useState(null);
const save = async (brew, saveToGoogle)=>{ const save = async (brew, saveToGoogle)=>{
const res = await request const res = await request
.post(`/api${saveToGoogle ? '?saveToGoogle=true' : ''}`) .post(`/api${saveToGoogle ? '?saveToGoogle=true' : ''}`)
.send(brew) .send(brew);
.catch((err)=>{
console.error('Error Updating Local Brew');
setError(err);
});
if(!res) return;
return res.body; return res.body;
}; };
@@ -46,18 +29,15 @@ const NewPage = (props)=>{
const { const {
renderPanels renderPanels
} = useCommonEditPageFunctions({ } = useCommonEditPageFunctions({
error, useLocalStorage : true,
setError, sandbox : true,
currentBrew, showFloatingButtons : false,
setCurrentBrew, showEditorButtons : true,
useLocalStorage, pageName : 'newPage',
sandbox, brew : props.brew,
showFloatingButtons, userThemes : props.userThemes,
save, save,
onSaveSuccess, onSaveSuccess,
pageName,
showEditorButtons,
userThemes : props.userThemes
}); });
return renderPanels(); return renderPanels();
@@ -39,10 +39,7 @@ const UNSAVED_WARNING_POPUP_TIMEOUT = 4000; //Show the warning for 4 seconds
export default function useCommonEditPageFunctions(dependencies) { export default function useCommonEditPageFunctions(dependencies) {
const { const {
error, brew,
setError,
currentBrew,
setCurrentBrew,
useLocalStorage, useLocalStorage,
sandbox, sandbox,
showFloatingButtons, showFloatingButtons,
@@ -53,6 +50,7 @@ export default function useCommonEditPageFunctions(dependencies) {
userThemes = {} userThemes = {}
} = dependencies; } = dependencies;
const [currentBrew, setCurrentBrew] = useState(brew);
const [isSaving, setIsSaving] = useState(false); const [isSaving, setIsSaving] = useState(false);
const [lastSavedTime, setLastSavedTime] = useState(new Date()); const [lastSavedTime, setLastSavedTime] = useState(new Date());
const [autoSaveEnabled, setAutoSaveEnabled] = useState(!sandbox); const [autoSaveEnabled, setAutoSaveEnabled] = useState(!sandbox);
@@ -61,6 +59,7 @@ export default function useCommonEditPageFunctions(dependencies) {
const [themeBundle, setThemeBundle] = useState({}); const [themeBundle, setThemeBundle] = useState({});
const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(currentBrew.text)); const [HTMLErrors, setHTMLErrors] = useState(hbfm.validate(currentBrew.text));
const [saveGoogle, setSaveGoogle] = useState(currentBrew.googleId); const [saveGoogle, setSaveGoogle] = useState(currentBrew.googleId);
const [error, setError] = useState(null);
const [alertTrashedGoogleBrew, setAlertTrashedGoogleBrew] = useState(currentBrew.trashed); const [alertTrashedGoogleBrew, setAlertTrashedGoogleBrew] = useState(currentBrew.trashed);
const [alertNoGoogleToTransfer, setAlertNoGoogleToTransfer] = useState(false); const [alertNoGoogleToTransfer, setAlertNoGoogleToTransfer] = useState(false);
@@ -222,7 +221,10 @@ export default function useCommonEditPageFunctions(dependencies) {
}; };
const savedBrew = await save(brewToSave, saveToGoogle) const savedBrew = await save(brewToSave, saveToGoogle)
.catch((err)=>{setError(err);}); .catch((err)=>{
console.error('Error Updating Local Brew');
setError(err);
});
if(savedBrew) { if(savedBrew) {
lastSavedBrew.current = { lastSavedBrew.current = {
...snapshotBrewBeforeSave, ...snapshotBrewBeforeSave,
@@ -235,11 +237,11 @@ export default function useCommonEditPageFunctions(dependencies) {
})); }));
if(useLocalStorage) clearLocalStorage(); if(useLocalStorage) clearLocalStorage();
setLastSavedTime(new Date());
if(!autoSaveEnabled) resetWarnUnsavedTimer();
onSaveSuccess(savedBrew); onSaveSuccess(savedBrew);
} }
setIsSaving(false); setIsSaving(false);
setLastSavedTime(new Date());
if(!autoSaveEnabled) resetWarnUnsavedTimer();
}, newTimeout); }, newTimeout);
}); });